summaryrefslogtreecommitdiffstats
path: root/documentation
diff options
context:
space:
mode:
Diffstat (limited to 'documentation')
-rw-r--r--documentation/Makefile395
-rw-r--r--documentation/README91
-rw-r--r--documentation/adt-manual/adt-command.xml224
-rw-r--r--documentation/adt-manual/adt-intro.xml179
-rw-r--r--documentation/adt-manual/adt-manual-customization.xsl11
-rw-r--r--documentation/adt-manual/adt-manual-eclipse-customization.xsl27
-rw-r--r--documentation/adt-manual/adt-manual-intro.xml33
-rw-r--r--documentation/adt-manual/adt-manual.xml120
-rw-r--r--documentation/adt-manual/adt-package.xml101
-rw-r--r--documentation/adt-manual/adt-prepare.xml671
-rw-r--r--documentation/adt-manual/adt-style.css979
-rw-r--r--documentation/adt-manual/figures/adt-title.pngbin0 -> 13498 bytes
-rw-r--r--documentation/bsp-guide/bsp-guide-customization.xsl10
-rw-r--r--documentation/bsp-guide/bsp-guide-eclipse-customization.xsl27
-rw-r--r--documentation/bsp-guide/bsp-guide.xml123
-rw-r--r--documentation/bsp-guide/bsp-style.css980
-rw-r--r--documentation/bsp-guide/bsp.xml1493
-rw-r--r--documentation/bsp-guide/figures/bsp-title.pngbin0 -> 17388 bytes
-rw-r--r--documentation/dev-manual/dev-manual-common-tasks.xml7381
-rw-r--r--documentation/dev-manual/dev-manual-customization.xsl10
-rw-r--r--documentation/dev-manual/dev-manual-eclipse-customization.xsl27
-rw-r--r--documentation/dev-manual/dev-manual-intro.xml207
-rw-r--r--documentation/dev-manual/dev-manual-model.xml2069
-rw-r--r--documentation/dev-manual/dev-manual-newbie.xml1687
-rw-r--r--documentation/dev-manual/dev-manual-start.xml415
-rw-r--r--documentation/dev-manual/dev-manual.xml107
-rw-r--r--documentation/dev-manual/dev-style.css979
-rw-r--r--documentation/dev-manual/figures/app-dev-flow.pngbin0 -> 53301 bytes
-rw-r--r--documentation/dev-manual/figures/bsp-dev-flow.pngbin0 -> 42751 bytes
-rw-r--r--documentation/dev-manual/figures/dev-title.pngbin0 -> 11813 bytes
-rw-r--r--documentation/dev-manual/figures/git-workflow.pngbin0 -> 26586 bytes
-rw-r--r--documentation/dev-manual/figures/index-downloads.pngbin0 -> 100374 bytes
-rw-r--r--documentation/dev-manual/figures/kernel-dev-flow.pngbin0 -> 35561 bytes
-rw-r--r--documentation/dev-manual/figures/kernel-overview-1.pngbin0 -> 35839 bytes
-rw-r--r--documentation/dev-manual/figures/kernel-overview-2-generic.pngbin0 -> 39931 bytes
-rw-r--r--documentation/dev-manual/figures/recipe-workflow.pngbin0 -> 48276 bytes
-rw-r--r--documentation/dev-manual/figures/source-repos.pngbin0 -> 188986 bytes
-rw-r--r--documentation/dev-manual/figures/yp-download.pngbin0 -> 193275 bytes
-rwxr-xr-xdocumentation/kernel-dev/figures/kernel-architecture-overview.pngbin0 -> 40748 bytes
-rw-r--r--documentation/kernel-dev/figures/kernel-dev-title.pngbin0 -> 13453 bytes
-rw-r--r--documentation/kernel-dev/kernel-dev-advanced.xml1073
-rw-r--r--documentation/kernel-dev/kernel-dev-common.xml858
-rw-r--r--documentation/kernel-dev/kernel-dev-concepts-appx.xml253
-rw-r--r--documentation/kernel-dev/kernel-dev-customization.xsl11
-rw-r--r--documentation/kernel-dev/kernel-dev-eclipse-customization.xsl27
-rw-r--r--documentation/kernel-dev/kernel-dev-examples.xml918
-rw-r--r--documentation/kernel-dev/kernel-dev-faq.xml131
-rw-r--r--documentation/kernel-dev/kernel-dev-intro.xml147
-rw-r--r--documentation/kernel-dev/kernel-dev-maint-appx.xml220
-rw-r--r--documentation/kernel-dev/kernel-dev-style.css978
-rw-r--r--documentation/kernel-dev/kernel-dev.xml100
-rw-r--r--documentation/mega-manual/figures/adt-title.pngbin0 -> 13498 bytes
-rw-r--r--documentation/mega-manual/figures/analysis-for-package-splitting.pngbin0 -> 63291 bytes
-rw-r--r--documentation/mega-manual/figures/app-dev-flow.pngbin0 -> 52670 bytes
-rw-r--r--documentation/mega-manual/figures/bsp-dev-flow.pngbin0 -> 42751 bytes
-rw-r--r--documentation/mega-manual/figures/bsp-title.pngbin0 -> 17388 bytes
-rw-r--r--documentation/mega-manual/figures/buildhistory-web.pngbin0 -> 49966 bytes
-rw-r--r--documentation/mega-manual/figures/buildhistory.pngbin0 -> 42532 bytes
-rwxr-xr-xdocumentation/mega-manual/figures/building-an-image.pngbin0 -> 14891 bytes
-rw-r--r--documentation/mega-manual/figures/configuration-compile-autoreconf.pngbin0 -> 46080 bytes
-rw-r--r--documentation/mega-manual/figures/cross-development-toolchains.pngbin0 -> 59275 bytes
-rw-r--r--documentation/mega-manual/figures/dev-title.pngbin0 -> 11813 bytes
-rw-r--r--documentation/mega-manual/figures/git-workflow.pngbin0 -> 26586 bytes
-rw-r--r--documentation/mega-manual/figures/image-generation.pngbin0 -> 50418 bytes
-rw-r--r--documentation/mega-manual/figures/images.pngbin0 -> 22926 bytes
-rw-r--r--documentation/mega-manual/figures/index-downloads.pngbin0 -> 58263 bytes
-rwxr-xr-xdocumentation/mega-manual/figures/kernel-architecture-overview.pngbin0 -> 40748 bytes
-rw-r--r--documentation/mega-manual/figures/kernel-dev-flow.pngbin0 -> 35561 bytes
-rw-r--r--documentation/mega-manual/figures/kernel-dev-title.pngbin0 -> 13453 bytes
-rw-r--r--documentation/mega-manual/figures/kernel-overview-1.pngbin0 -> 35839 bytes
-rw-r--r--documentation/mega-manual/figures/kernel-overview-2-generic.pngbin0 -> 39931 bytes
-rw-r--r--documentation/mega-manual/figures/kernel-title.pngbin0 -> 13970 bytes
-rw-r--r--documentation/mega-manual/figures/kernelshark-all.pngbin0 -> 89316 bytes
-rw-r--r--documentation/mega-manual/figures/kernelshark-choose-events.pngbin0 -> 57372 bytes
-rw-r--r--documentation/mega-manual/figures/kernelshark-i915-display.pngbin0 -> 98765 bytes
-rw-r--r--documentation/mega-manual/figures/kernelshark-output-display.pngbin0 -> 204454 bytes
-rw-r--r--documentation/mega-manual/figures/layer-input.pngbin0 -> 45856 bytes
-rw-r--r--documentation/mega-manual/figures/lttngmain0.pngbin0 -> 120581 bytes
-rw-r--r--documentation/mega-manual/figures/oprofileui-busybox.pngbin0 -> 98334 bytes
-rw-r--r--documentation/mega-manual/figures/oprofileui-copy-to-user.pngbin0 -> 105661 bytes
-rw-r--r--documentation/mega-manual/figures/oprofileui-downloading.pngbin0 -> 37301 bytes
-rw-r--r--documentation/mega-manual/figures/oprofileui-processes.pngbin0 -> 95741 bytes
-rw-r--r--documentation/mega-manual/figures/package-feeds.pngbin0 -> 27711 bytes
-rw-r--r--documentation/mega-manual/figures/patching.pngbin0 -> 42523 bytes
-rw-r--r--documentation/mega-manual/figures/perf-probe-do_fork-profile.pngbin0 -> 59078 bytes
-rw-r--r--documentation/mega-manual/figures/perf-report-cycles-u.pngbin0 -> 171368 bytes
-rw-r--r--documentation/mega-manual/figures/perf-systemwide-libc.pngbin0 -> 136826 bytes
-rw-r--r--documentation/mega-manual/figures/perf-systemwide.pngbin0 -> 140616 bytes
-rw-r--r--documentation/mega-manual/figures/perf-wget-busybox-annotate-menu.pngbin0 -> 22364 bytes
-rw-r--r--documentation/mega-manual/figures/perf-wget-busybox-annotate-udhcpc.pngbin0 -> 171529 bytes
-rw-r--r--documentation/mega-manual/figures/perf-wget-busybox-debuginfo.pngbin0 -> 174971 bytes
-rw-r--r--documentation/mega-manual/figures/perf-wget-busybox-dso-zoom-menu.pngbin0 -> 23735 bytes
-rw-r--r--documentation/mega-manual/figures/perf-wget-busybox-dso-zoom.pngbin0 -> 101685 bytes
-rw-r--r--documentation/mega-manual/figures/perf-wget-busybox-expanded-stripped.pngbin0 -> 95140 bytes
-rw-r--r--documentation/mega-manual/figures/perf-wget-flat-stripped.pngbin0 -> 178919 bytes
-rw-r--r--documentation/mega-manual/figures/perf-wget-g-copy-from-user-expanded-stripped.pngbin0 -> 138550 bytes
-rw-r--r--documentation/mega-manual/figures/perf-wget-g-copy-to-user-expanded-debuginfo.pngbin0 -> 102790 bytes
-rw-r--r--documentation/mega-manual/figures/perf-wget-g-copy-to-user-expanded-stripped-unresolved-hidden.pngbin0 -> 110101 bytes
-rw-r--r--documentation/mega-manual/figures/perf-wget-g-copy-to-user-expanded-stripped.pngbin0 -> 102812 bytes
-rw-r--r--documentation/mega-manual/figures/poky-title.pngbin0 -> 11592 bytes
-rw-r--r--documentation/mega-manual/figures/profile-title.pngbin0 -> 12799 bytes
-rw-r--r--documentation/mega-manual/figures/pybootchartgui-linux-yocto.pngbin0 -> 36366 bytes
-rw-r--r--documentation/mega-manual/figures/pychart-linux-yocto-rpm-nostrip.pngbin0 -> 98053 bytes
-rw-r--r--documentation/mega-manual/figures/pychart-linux-yocto-rpm.pngbin0 -> 81053 bytes
-rw-r--r--documentation/mega-manual/figures/recipe-workflow.pngbin0 -> 48276 bytes
-rw-r--r--documentation/mega-manual/figures/sched-wakeup-profile.pngbin0 -> 123810 bytes
-rw-r--r--documentation/mega-manual/figures/sdk-generation.pngbin0 -> 45456 bytes
-rw-r--r--documentation/mega-manual/figures/sdk.pngbin0 -> 20074 bytes
-rw-r--r--documentation/mega-manual/figures/source-fetching.pngbin0 -> 38860 bytes
-rw-r--r--documentation/mega-manual/figures/source-input.pngbin0 -> 39872 bytes
-rw-r--r--documentation/mega-manual/figures/source-repos.pngbin0 -> 188986 bytes
-rw-r--r--documentation/mega-manual/figures/sysprof-callers.pngbin0 -> 145043 bytes
-rw-r--r--documentation/mega-manual/figures/sysprof-copy-from-user.pngbin0 -> 132976 bytes
-rw-r--r--documentation/mega-manual/figures/sysprof-copy-to-user.pngbin0 -> 132074 bytes
-rw-r--r--documentation/mega-manual/figures/user-configuration.pngbin0 -> 23687 bytes
-rw-r--r--documentation/mega-manual/figures/using-a-pre-built-image.pngbin0 -> 12733 bytes
-rw-r--r--documentation/mega-manual/figures/yocto-environment-ref.pngbin0 -> 83206 bytes
-rw-r--r--documentation/mega-manual/figures/yocto-environment.pngbin0 -> 73095 bytes
-rwxr-xr-xdocumentation/mega-manual/figures/yocto-project-transp.pngbin0 -> 8626 bytes
-rw-r--r--documentation/mega-manual/figures/yp-download.pngbin0 -> 193275 bytes
-rw-r--r--documentation/mega-manual/mega-manual-customization.xsl8
-rw-r--r--documentation/mega-manual/mega-manual.xml53
-rw-r--r--documentation/mega-manual/mega-style.css979
-rw-r--r--documentation/poky.ent66
-rw-r--r--documentation/profile-manual/figures/kernelshark-all.pngbin0 -> 89316 bytes
-rw-r--r--documentation/profile-manual/figures/kernelshark-choose-events.pngbin0 -> 57372 bytes
-rw-r--r--documentation/profile-manual/figures/kernelshark-i915-display.pngbin0 -> 98765 bytes
-rw-r--r--documentation/profile-manual/figures/kernelshark-output-display.pngbin0 -> 204454 bytes
-rw-r--r--documentation/profile-manual/figures/lttngmain0.pngbin0 -> 120581 bytes
-rw-r--r--documentation/profile-manual/figures/oprofileui-busybox.pngbin0 -> 98334 bytes
-rw-r--r--documentation/profile-manual/figures/oprofileui-copy-to-user.pngbin0 -> 105661 bytes
-rw-r--r--documentation/profile-manual/figures/oprofileui-downloading.pngbin0 -> 37301 bytes
-rw-r--r--documentation/profile-manual/figures/oprofileui-processes.pngbin0 -> 95741 bytes
-rw-r--r--documentation/profile-manual/figures/perf-probe-do_fork-profile.pngbin0 -> 59078 bytes
-rw-r--r--documentation/profile-manual/figures/perf-report-cycles-u.pngbin0 -> 171368 bytes
-rw-r--r--documentation/profile-manual/figures/perf-systemwide-libc.pngbin0 -> 136826 bytes
-rw-r--r--documentation/profile-manual/figures/perf-systemwide.pngbin0 -> 140616 bytes
-rw-r--r--documentation/profile-manual/figures/perf-wget-busybox-annotate-menu.pngbin0 -> 22364 bytes
-rw-r--r--documentation/profile-manual/figures/perf-wget-busybox-annotate-udhcpc.pngbin0 -> 171529 bytes
-rw-r--r--documentation/profile-manual/figures/perf-wget-busybox-debuginfo.pngbin0 -> 174971 bytes
-rw-r--r--documentation/profile-manual/figures/perf-wget-busybox-dso-zoom-menu.pngbin0 -> 23735 bytes
-rw-r--r--documentation/profile-manual/figures/perf-wget-busybox-dso-zoom.pngbin0 -> 101685 bytes
-rw-r--r--documentation/profile-manual/figures/perf-wget-busybox-expanded-stripped.pngbin0 -> 95140 bytes
-rw-r--r--documentation/profile-manual/figures/perf-wget-flat-stripped.pngbin0 -> 178919 bytes
-rw-r--r--documentation/profile-manual/figures/perf-wget-g-copy-from-user-expanded-stripped.pngbin0 -> 138550 bytes
-rw-r--r--documentation/profile-manual/figures/perf-wget-g-copy-to-user-expanded-debuginfo.pngbin0 -> 102790 bytes
-rw-r--r--documentation/profile-manual/figures/perf-wget-g-copy-to-user-expanded-stripped-unresolved-hidden.pngbin0 -> 110101 bytes
-rw-r--r--documentation/profile-manual/figures/perf-wget-g-copy-to-user-expanded-stripped.pngbin0 -> 102812 bytes
-rw-r--r--documentation/profile-manual/figures/profile-title.pngbin0 -> 12799 bytes
-rw-r--r--documentation/profile-manual/figures/pybootchartgui-linux-yocto.pngbin0 -> 36366 bytes
-rw-r--r--documentation/profile-manual/figures/pychart-linux-yocto-rpm-nostrip.pngbin0 -> 98053 bytes
-rw-r--r--documentation/profile-manual/figures/pychart-linux-yocto-rpm.pngbin0 -> 81053 bytes
-rw-r--r--documentation/profile-manual/figures/sched-wakeup-profile.pngbin0 -> 123810 bytes
-rw-r--r--documentation/profile-manual/figures/sysprof-callers.pngbin0 -> 145043 bytes
-rw-r--r--documentation/profile-manual/figures/sysprof-copy-from-user.pngbin0 -> 132976 bytes
-rw-r--r--documentation/profile-manual/figures/sysprof-copy-to-user.pngbin0 -> 132074 bytes
-rw-r--r--documentation/profile-manual/profile-manual-arch.xml45
-rw-r--r--documentation/profile-manual/profile-manual-customization.xsl11
-rw-r--r--documentation/profile-manual/profile-manual-eclipse-customization.xsl27
-rw-r--r--documentation/profile-manual/profile-manual-examples.xml39
-rw-r--r--documentation/profile-manual/profile-manual-intro.xml102
-rw-r--r--documentation/profile-manual/profile-manual-style.css978
-rw-r--r--documentation/profile-manual/profile-manual-usage.xml3685
-rw-r--r--documentation/profile-manual/profile-manual.xml90
-rw-r--r--documentation/ref-manual/TODO11
-rw-r--r--documentation/ref-manual/closer-look.xml1270
-rw-r--r--documentation/ref-manual/examples/hello-autotools/hello_2.3.bb8
-rw-r--r--documentation/ref-manual/examples/hello-single/files/helloworld.c8
-rw-r--r--documentation/ref-manual/examples/hello-single/hello.bb17
-rw-r--r--documentation/ref-manual/examples/libxpm/libxpm_3.5.6.bb14
-rw-r--r--documentation/ref-manual/examples/mtd-makefile/mtd-utils_1.0.0.bb15
-rw-r--r--documentation/ref-manual/faq.xml685
-rw-r--r--documentation/ref-manual/figures/analysis-for-package-splitting.pngbin0 -> 63291 bytes
-rw-r--r--documentation/ref-manual/figures/buildhistory-web.pngbin0 -> 49966 bytes
-rw-r--r--documentation/ref-manual/figures/buildhistory.pngbin0 -> 42532 bytes
-rw-r--r--documentation/ref-manual/figures/configuration-compile-autoreconf.pngbin0 -> 46080 bytes
-rw-r--r--documentation/ref-manual/figures/cross-development-toolchains.pngbin0 -> 59275 bytes
-rw-r--r--documentation/ref-manual/figures/image-generation.pngbin0 -> 50418 bytes
-rw-r--r--documentation/ref-manual/figures/images.pngbin0 -> 22926 bytes
-rw-r--r--documentation/ref-manual/figures/layer-input.pngbin0 -> 45856 bytes
-rw-r--r--documentation/ref-manual/figures/package-feeds.pngbin0 -> 27711 bytes
-rw-r--r--documentation/ref-manual/figures/patching.pngbin0 -> 42523 bytes
-rw-r--r--documentation/ref-manual/figures/poky-title.pngbin0 -> 11592 bytes
-rw-r--r--documentation/ref-manual/figures/sdk-generation.pngbin0 -> 45456 bytes
-rw-r--r--documentation/ref-manual/figures/sdk.pngbin0 -> 20074 bytes
-rw-r--r--documentation/ref-manual/figures/source-fetching.pngbin0 -> 38860 bytes
-rw-r--r--documentation/ref-manual/figures/source-input.pngbin0 -> 39872 bytes
-rw-r--r--documentation/ref-manual/figures/user-configuration.pngbin0 -> 23687 bytes
-rw-r--r--documentation/ref-manual/figures/yocto-environment-ref.pngbin0 -> 83206 bytes
-rw-r--r--documentation/ref-manual/introduction.xml556
-rw-r--r--documentation/ref-manual/migration.xml1616
-rw-r--r--documentation/ref-manual/ref-bitbake.xml472
-rw-r--r--documentation/ref-manual/ref-classes.xml3255
-rw-r--r--documentation/ref-manual/ref-features.xml344
-rw-r--r--documentation/ref-manual/ref-images.xml167
-rw-r--r--documentation/ref-manual/ref-manual-customization.xsl11
-rw-r--r--documentation/ref-manual/ref-manual-eclipse-customization.xsl27
-rw-r--r--documentation/ref-manual/ref-manual.xml141
-rw-r--r--documentation/ref-manual/ref-structure.xml1039
-rw-r--r--documentation/ref-manual/ref-style.css979
-rw-r--r--documentation/ref-manual/ref-variables.xml8419
-rw-r--r--documentation/ref-manual/ref-varlocality.xml196
-rw-r--r--documentation/ref-manual/resources.xml128
-rw-r--r--documentation/ref-manual/technical-details.xml1409
-rw-r--r--documentation/ref-manual/usingpoky.xml882
-rw-r--r--documentation/template/Vera.ttfbin0 -> 65932 bytes
-rw-r--r--documentation/template/Vera.xml1
-rw-r--r--documentation/template/VeraMoBd.ttfbin0 -> 49052 bytes
-rw-r--r--documentation/template/VeraMoBd.xml1
-rw-r--r--documentation/template/VeraMono.ttfbin0 -> 49224 bytes
-rw-r--r--documentation/template/VeraMono.xml1
-rw-r--r--documentation/template/draft.pngbin0 -> 24847 bytes
-rw-r--r--documentation/template/fop-config.xml58
-rw-r--r--documentation/template/ohand-color.svg150
-rw-r--r--documentation/template/poky-db-pdf.xsl64
-rw-r--r--documentation/template/poky-ref-manual.pngbin0 -> 32145 bytes
-rw-r--r--documentation/template/poky.svg163
-rw-r--r--documentation/template/titlepage.templates.xml1227
-rw-r--r--documentation/template/yocto-project-qs.pngbin0 -> 17829 bytes
-rw-r--r--documentation/tools/eclipse-help.sed18
-rw-r--r--documentation/tools/mega-manual.sed13
-rwxr-xr-xdocumentation/tools/poky-docbook-to-pdf51
-rwxr-xr-xdocumentation/yocto-project-qs/figures/building-an-image.pngbin0 -> 14891 bytes
-rw-r--r--documentation/yocto-project-qs/figures/using-a-pre-built-image.pngbin0 -> 12733 bytes
-rw-r--r--documentation/yocto-project-qs/figures/yocto-environment.pngbin0 -> 73095 bytes
-rwxr-xr-xdocumentation/yocto-project-qs/figures/yocto-project-transp.pngbin0 -> 8626 bytes
-rw-r--r--documentation/yocto-project-qs/qs-style.css979
-rw-r--r--documentation/yocto-project-qs/yocto-project-qs-customization.xsl9
-rw-r--r--documentation/yocto-project-qs/yocto-project-qs-eclipse-customization.xsl25
-rw-r--r--documentation/yocto-project-qs/yocto-project-qs-titlepage.xsl3820
-rw-r--r--documentation/yocto-project-qs/yocto-project-qs.xml998
231 files changed, 58392 insertions, 0 deletions
diff --git a/documentation/Makefile b/documentation/Makefile
new file mode 100644
index 0000000000..3bc9a213ee
--- /dev/null
+++ b/documentation/Makefile
@@ -0,0 +1,395 @@
1# This is a single Makefile to handle all generated Yocto Project documents.
2# The Makefile needs to live in the documents directory and all figures used
3# in any manuals must be .PNG files and live in the individual book's figures
4# directory as well as in the figures directory for the mega-manual.
5# Note that the figures for the Yocto Project Development Manual
6# differ depending on the BRANCH being built.
7#
8# The Makefile has these targets:
9#
10# pdf: generates a PDF version of a manual. Not valid for the Quick Start
11# or the mega-manual (single, large HTML file comprised of all
12# Yocto Project manuals).
13# html: generates an HTML version of a manual.
14# eclipse: generates an HTML version of a manual that can be used as
15# eclipse help (including necessary metadata files).
16# tarball: creates a tarball for the doc files.
17# validate: validates
18# publish: pushes generated files to the Yocto Project website
19# clean: removes files
20#
21# The Makefile generates an HTML and PDF version of every document except the
22# Yocto Project Quick Start and the single, HTML mega-manual, which is comprised
23# of all the individual Yocto Project manuals. These two manuals are in HTML
24# form only. The variable DOC indicates the folder name for a given manual. The
25# variable VER represents the distro version of the Yocto Release for which the
26# manuals are being generated. The variable BRANCH is used to indicate the
27# branch (edison or denzil) and is used only when DOC=dev-manual or
28# DOC=mega-manual. If you do not specify a BRANCH, the default branch used
29# will be for the latest Yocto Project release. If you build for either
30# edison or denzil, you must use BRANCH. You do not need to use BRANCH for
31# any release beyond denzil.
32#
33# To build a manual, you must invoke Makefile with the DOC argument. If you
34# are going to publish the manual, then you must invoke Makefile with both the
35# DOC and the VER argument. Furthermore, if you are building or publishing
36# the edison or denzil versions of the Yocto Poject Development Manual or
37# the mega-manual, you must also use the BRANCH argument.
38#
39# Examples:
40#
41# make DOC=bsp-guide
42# make DOC=yocto-project-qs
43# make pdf DOC=ref-manual
44# make DOC=dev-manual BRANCH=edison
45# make DOC=mega-manual BRANCH=denzil
46#
47# The first example generates the HTML and PDF versions of the BSP Guide.
48# The second example generates the HTML version only of the Quick Start. Note that
49# the Quick Start only has an HTML version available. The third example generates
50# both the PDF and HTML versions of the Yocto Project Reference Manual. The
51# fourth example generates both the PDF and HTML 'edison' versions of the YP
52# Development Manual. The last exmample generates the HTML version of the
53# mega-manual and uses the 'denzil' branch when choosing figures for the
54# tarball of figures. Any example that does not use the BRANCH argument
55# builds the current version of the manual set.
56#
57# Use the publish target to push the generated manuals to the Yocto Project
58# website. All files needed for the manual's HTML form are pushed as well as the
59# PDF version (if applicable).
60# Examples:
61#
62# make publish DOC=bsp-guide VER=1.3
63# make publish DOC=adt-manual VER=1.3
64# make publish DOC=dev-manual VER=1.1.1 BRANCH=edison
65# make publish DOC=dev-manual VER=1.2 BRANCH=denzil
66#
67# The first example publishes the 1.3 version of both the PDF and HTML versions of
68# the BSP Guide. The second example publishes the 1.3 version of both the PDF and
69# HTML versions of the ADT Manual. The third example publishes the PDF and HTML
70# 'edison' versions of the YP Development Manual. The fourth example publishes
71# the PDF and HTML 'denzil' versions of the YP Development Manual.
72#
73
74ifeq ($(DOC),bsp-guide)
75XSLTOPTS = --xinclude
76ALLPREQ = html pdf eclipse tarball
77TARFILES = bsp-style.css bsp-guide.html bsp-guide.pdf figures/bsp-title.png \
78 eclipse
79MANUALS = $(DOC)/$(DOC).html $(DOC)/$(DOC).pdf $(DOC)/eclipse
80FIGURES = figures
81STYLESHEET = $(DOC)/*.css
82
83endif
84
85ifeq ($(DOC),dev-manual)
86XSLTOPTS = --xinclude
87ALLPREQ = html pdf eclipse tarball
88#
89# Note that the tarfile might produce the "Cannot stat: No such file or directory" error
90# message for .PNG files that are not present when building a particular branch. The
91# list of files is all-inclusive for all branches. Note, if you don't provide a BRANCH
92# option, it defaults to the latest stuff. This would be appropriate for "master" branch.
93#
94
95 ifeq ($(BRANCH),edison)
96TARFILES = dev-style.css dev-manual.html dev-manual.pdf \
97 figures/app-dev-flow.png figures/bsp-dev-flow.png figures/dev-title.png \
98 figures/git-workflow.png figures/index-downloads.png figures/kernel-dev-flow.png \
99 figures/kernel-example-repos-edison.png \
100 figures/kernel-overview-1.png figures/kernel-overview-2.png \
101 figures/kernel-overview-3-edison.png \
102 figures/source-repos.png figures/yp-download.png \
103 figures/wip.png
104 else ifeq ($(BRANCH),denzil)
105TARFILES = dev-style.css dev-manual.html dev-manual.pdf \
106 figures/app-dev-flow.png figures/bsp-dev-flow.png figures/dev-title.png \
107 figures/git-workflow.png figures/index-downloads.png figures/kernel-dev-flow.png \
108 figures/kernel-example-repos-denzil.png \
109 figures/kernel-overview-1.png figures/kernel-overview-2.png \
110 figures/kernel-overview-3-denzil.png \
111 figures/source-repos.png figures/yp-download.png \
112 figures/wip.png
113 else
114TARFILES = dev-style.css dev-manual.html dev-manual.pdf \
115 figures/app-dev-flow.png figures/bsp-dev-flow.png figures/dev-title.png \
116 figures/git-workflow.png figures/index-downloads.png figures/kernel-dev-flow.png \
117 figures/kernel-overview-1.png figures/kernel-overview-2-generic.png \
118 figures/source-repos.png figures/yp-download.png figures/recipe-workflow.png \
119 eclipse
120 endif
121
122MANUALS = $(DOC)/$(DOC).html $(DOC)/$(DOC).pdf $(DOC)/eclipse
123FIGURES = figures
124STYLESHEET = $(DOC)/*.css
125
126endif
127
128ifeq ($(DOC),yocto-project-qs)
129XSLTOPTS = --xinclude
130ALLPREQ = html eclipse tarball
131TARFILES = yocto-project-qs.html qs-style.css figures/yocto-environment.png \
132 figures/building-an-image.png figures/using-a-pre-built-image.png \
133 figures/yocto-project-transp.png \
134 eclipse
135MANUALS = $(DOC)/$(DOC).html $(DOC)/eclipse
136FIGURES = figures
137STYLESHEET = $(DOC)/*.css
138endif
139
140ifeq ($(DOC),mega-manual)
141XSLTOPTS = --stringparam html.stylesheet mega-style.css \
142 --stringparam chapter.autolabel 1 \
143 --stringparam section.autolabel 1 \
144 --stringparam section.label.includes.component.label 1 \
145 --xinclude
146ALLPREQ = html tarball
147
148 ifeq ($(BRANCH),edison)
149TARFILES = mega-manual.html mega-style.css figures/yocto-environment.png figures/building-an-image.png \
150 figures/using-a-pre-built-image.png \
151 figures/poky-title.png \
152 figures/adt-title.png figures/bsp-title.png \
153 figures/kernel-title.png figures/kernel-architecture-overview.png \
154 figures/app-dev-flow.png figures/bsp-dev-flow.png figures/dev-title.png \
155 figures/git-workflow.png figures/index-downloads.png figures/kernel-dev-flow.png \
156 figures/kernel-example-repos-edison.png \
157 figures/kernel-overview-1.png figures/kernel-overview-2.png \
158 figures/kernel-overview-3-edison.png \
159 figures/source-repos.png figures/yp-download.png \
160 figures/wip.png
161 else ifeq ($(BRANCH),denzil)
162TARFILES = mega-manual.html mega-style.css figures/yocto-environment.png figures/building-an-image.png \
163 figures/using-a-pre-built-image.png \
164 figures/poky-title.png \
165 figures/adt-title.png figures/bsp-title.png \
166 figures/kernel-title.png figures/kernel-architecture-overview.png \
167 figures/app-dev-flow.png figures/bsp-dev-flow.png figures/dev-title.png \
168 figures/git-workflow.png figures/index-downloads.png figures/kernel-dev-flow.png \
169 figures/kernel-example-repos-denzil.png \
170 figures/kernel-overview-1.png figures/kernel-overview-2.png \
171 figures/kernel-overview-3-denzil.png \
172 figures/source-repos.png figures/yp-download.png \
173 figures/wip.png
174 else
175TARFILES = mega-manual.html mega-style.css figures/yocto-environment.png figures/building-an-image.png \
176 figures/using-a-pre-built-image.png \
177 figures/poky-title.png figures/buildhistory.png figures/buildhistory-web.png \
178 figures/adt-title.png figures/bsp-title.png \
179 figures/kernel-dev-title.png figures/kernel-architecture-overview.png \
180 figures/app-dev-flow.png figures/bsp-dev-flow.png figures/dev-title.png \
181 figures/git-workflow.png figures/index-downloads.png figures/kernel-dev-flow.png \
182 figures/kernel-overview-1.png figures/kernel-overview-2-generic.png \
183 figures/source-repos.png figures/yp-download.png \
184 figures/profile-title.png figures/kernelshark-all.png \
185 figures/kernelshark-choose-events.png figures/kernelshark-i915-display.png \
186 figures/kernelshark-output-display.png figures/lttngmain0.png \
187 figures/oprofileui-busybox.png figures/oprofileui-copy-to-user.png \
188 figures/oprofileui-downloading.png figures/oprofileui-processes.png \
189 figures/perf-probe-do_fork-profile.png figures/perf-report-cycles-u.png \
190 figures/perf-systemwide.png figures/perf-systemwide-libc.png \
191 figures/perf-wget-busybox-annotate-menu.png figures/perf-wget-busybox-annotate-udhcpc.png \
192 figures/perf-wget-busybox-debuginfo.png figures/perf-wget-busybox-dso-zoom.png \
193 figures/perf-wget-busybox-dso-zoom-menu.png figures/perf-wget-busybox-expanded-stripped.png \
194 figures/perf-wget-flat-stripped.png figures/perf-wget-g-copy-from-user-expanded-stripped.png \
195 figures/perf-wget-g-copy-to-user-expanded-debuginfo.png figures/perf-wget-g-copy-to-user-expanded-stripped.png \
196 figures/perf-wget-g-copy-to-user-expanded-stripped-unresolved-hidden.png figures/pybootchartgui-linux-yocto.png \
197 figures/pychart-linux-yocto-rpm.png figures/pychart-linux-yocto-rpm-nostrip.png \
198 figures/sched-wakeup-profile.png figures/sysprof-callers.png \
199 figures/sysprof-copy-from-user.png figures/sysprof-copy-to-user.png figures/cross-development-toolchains.png \
200 figures/yocto-environment-ref.png figures/user-configuration.png figures/source-input.png \
201 figures/package-feeds.png figures/layer-input.png figures/images.png figures/sdk.png \
202 figures/source-fetching.png figures/patching.png figures/configuration-compile-autoreconf.png \
203 figures/analysis-for-package-splitting.png figures/image-generation.png \
204 figures/sdk-generation.png figures/recipe-workflow.png
205 endif
206
207MANUALS = $(DOC)/$(DOC).html
208FIGURES = figures
209STYLESHEET = $(DOC)/*.css
210
211endif
212
213ifeq ($(DOC),ref-manual)
214XSLTOPTS = --xinclude
215ALLPREQ = html pdf eclipse tarball
216TARFILES = ref-manual.html ref-style.css figures/poky-title.png \
217 figures/buildhistory.png figures/buildhistory-web.png eclipse \
218 figures/cross-development-toolchains.png figures/layer-input.png \
219 figures/package-feeds.png figures/source-input.png \
220 figures/user-configuration.png figures/yocto-environment-ref.png \
221 figures/images.png figures/sdk.png figures/source-fetching.png \
222 figures/patching.png figures/configuration-compile-autoreconf.png \
223 figures/analysis-for-package-splitting.png figures/image-generation.png \
224 figures/sdk-generation.png
225MANUALS = $(DOC)/$(DOC).html $(DOC)/$(DOC).pdf $(DOC)/eclipse
226FIGURES = figures
227STYLESHEET = $(DOC)/*.css
228endif
229
230
231ifeq ($(DOC),adt-manual)
232XSLTOPTS = --xinclude
233ALLPREQ = html pdf eclipse tarball
234TARFILES = adt-manual.html adt-manual.pdf adt-style.css figures/adt-title.png \
235 eclipse
236MANUALS = $(DOC)/$(DOC).html $(DOC)/$(DOC).pdf $(DOC)/eclipse
237FIGURES = figures
238STYLESHEET = $(DOC)/*.css
239endif
240
241ifeq ($(DOC),profile-manual)
242XSLTOPTS = --xinclude
243ALLPREQ = html pdf eclipse tarball
244TARFILES = profile-manual.html profile-manual.pdf profile-manual-style.css \
245 figures/profile-title.png figures/kernelshark-all.png \
246 figures/kernelshark-choose-events.png figures/kernelshark-i915-display.png \
247 figures/kernelshark-output-display.png figures/lttngmain0.png \
248 figures/oprofileui-busybox.png figures/oprofileui-copy-to-user.png \
249 figures/oprofileui-downloading.png figures/oprofileui-processes.png \
250 figures/perf-probe-do_fork-profile.png figures/perf-report-cycles-u.png \
251 figures/perf-systemwide.png figures/perf-systemwide-libc.png \
252 figures/perf-wget-busybox-annotate-menu.png figures/perf-wget-busybox-annotate-udhcpc.png \
253 figures/perf-wget-busybox-debuginfo.png figures/perf-wget-busybox-dso-zoom.png \
254 figures/perf-wget-busybox-dso-zoom-menu.png figures/perf-wget-busybox-expanded-stripped.png \
255 figures/perf-wget-flat-stripped.png figures/perf-wget-g-copy-from-user-expanded-stripped.png \
256 figures/perf-wget-g-copy-to-user-expanded-debuginfo.png figures/perf-wget-g-copy-to-user-expanded-stripped.png \
257 figures/perf-wget-g-copy-to-user-expanded-stripped-unresolved-hidden.png figures/pybootchartgui-linux-yocto.png \
258 figures/pychart-linux-yocto-rpm.png figures/pychart-linux-yocto-rpm-nostrip.png \
259 figures/sched-wakeup-profile.png figures/sysprof-callers.png \
260 figures/sysprof-copy-from-user.png figures/sysprof-copy-to-user.png \
261 eclipse
262MANUALS = $(DOC)/$(DOC).html $(DOC)/$(DOC).pdf $(DOC)/eclipse
263FIGURES = figures
264STYLESHEET = $(DOC)/*.css
265endif
266
267ifeq ($(DOC),kernel-dev)
268XSLTOPTS = --xinclude
269ALLPREQ = html pdf eclipse tarball
270TARFILES = kernel-dev.html kernel-dev.pdf kernel-dev-style.css figures/kernel-dev-title.png \
271 figures/kernel-architecture-overview.png \
272 eclipse
273MANUALS = $(DOC)/$(DOC).html $(DOC)/$(DOC).pdf $(DOC)/eclipse
274FIGURES = figures
275STYLESHEET = $(DOC)/*.css
276endif
277
278
279##
280# These URI should be rewritten by your distribution's xml catalog to
281# match your localy installed XSL stylesheets.
282XSL_BASE_URI = http://docbook.sourceforge.net/release/xsl/current
283XSL_XHTML_URI = $(XSL_BASE_URI)/xhtml/docbook.xsl
284
285all: $(ALLPREQ)
286
287pdf:
288ifeq ($(DOC),yocto-project-qs)
289 @echo " "
290 @echo "ERROR: You cannot generate a yocto-project-qs PDF file."
291 @echo " "
292
293else ifeq ($(DOC),mega-manual)
294 @echo " "
295 @echo "ERROR: You cannot generate a mega-manual PDF file."
296 @echo " "
297
298else
299
300 cd $(DOC); ../tools/poky-docbook-to-pdf $(DOC).xml ../template; cd ..
301endif
302
303html:
304ifeq ($(DOC),mega-manual)
305# See http://www.sagehill.net/docbookxsl/HtmlOutput.html
306 @echo " "
307 @echo "******** Building "$(DOC)
308 @echo " "
309 cd $(DOC); xsltproc $(XSLTOPTS) -o $(DOC).html $(DOC)-customization.xsl $(DOC).xml; cd ..
310 @echo " "
311 @echo "******** Using mega-manual.sed to process external links"
312 @echo " "
313 cd $(DOC); sed -f ../tools/mega-manual.sed < mega-manual.html > mega-output.html; cd ..
314 @echo " "
315 @echo "******** Cleaning up transient file mega-output.html"
316 @echo " "
317 cd $(DOC); rm mega-manual.html; mv mega-output.html mega-manual.html; cd ..
318else
319# See http://www.sagehill.net/docbookxsl/HtmlOutput.html
320 @echo " "
321 @echo "******** Building "$(DOC)
322 @echo " "
323 cd $(DOC); xsltproc $(XSLTOPTS) -o $(DOC).html $(DOC)-customization.xsl $(DOC).xml; cd ..
324endif
325
326
327eclipse: BASE_DIR = html/$(DOC)/
328
329eclipse: eclipse-generate eclipse-resolve-links
330
331.PHONY : eclipse-generate eclipse-resolve-links
332
333eclipse-generate:
334ifeq ($(filter $(DOC), adt-manual bsp-guide dev-manual kernel-dev profile-manual ref-manual yocto-project-qs),)
335 @echo " "
336 @echo "ERROR: You can only create eclipse documentation"
337 @echo " of the following documentation parts:"
338 @echo " - adt-manual"
339 @echo " - bsp-guide"
340 @echo " - dev-manual"
341 @echo " - kernel-dev"
342 @echo " - profile-manual"
343 @echo " - ref-manual"
344 @echo " - yocto-project-qs"
345 @echo " "
346else
347 @echo " "
348 @echo "******** Building eclipse help of "$(DOC)
349 @echo " "
350 cd $(DOC) && \
351 xsltproc $(XSLTOPTS) \
352 --stringparam base.dir '$(BASE_DIR)' \
353 -o eclipse/$(DOC).html \
354 $(DOC)-eclipse-customization.xsl $(DOC).xml && \
355 mv eclipse/toc.xml eclipse/$(DOC)-toc.xml && \
356 cp -rf $(FIGURES) eclipse/$(BASE_DIR) && \
357 cd ..;
358
359 $(call modify-eclipse)
360endif
361
362eclipse-resolve-links:
363 @echo " "
364 @echo "******** Using eclipse-help.sed to process external links"
365 @echo " "
366 $(foreach FILE, \
367 $(wildcard $(DOC)/eclipse/html/$(DOC)/*.html), \
368 $(shell sed -i -f tools/eclipse-help.sed $(FILE)))
369
370tarball: html
371 @echo " "
372 @echo "******** Creating Tarball of document files"
373 @echo " "
374 cd $(DOC); tar -cvzf $(DOC).tgz $(TARFILES); cd ..
375
376validate:
377 cd $(DOC); xmllint --postvalid --xinclude --noout $(DOC).xml; cd ..
378
379
380publish:
381 @if test -f $(DOC)/$(DOC).html; \
382 then \
383 echo " "; \
384 echo "******** Publishing "$(DOC)".html"; \
385 echo " "; \
386 scp -r $(MANUALS) $(STYLESHEET) docs.yp:/var/www/www.yoctoproject.org-docs/$(VER)/$(DOC); \
387 cd $(DOC); scp -r $(FIGURES) docs.yp:/var/www/www.yoctoproject.org-docs/$(VER)/$(DOC); \
388 else \
389 echo " "; \
390 echo $(DOC)".html missing. Generate the file first then try again."; \
391 echo " "; \
392 fi
393
394clean:
395 rm -rf $(MANUALS); rm $(DOC)/$(DOC).tgz;
diff --git a/documentation/README b/documentation/README
new file mode 100644
index 0000000000..d01678d4f4
--- /dev/null
+++ b/documentation/README
@@ -0,0 +1,91 @@
1documentation
2=============
3
4This is the directory that contains the Yocto Project documentation. The Yocto
5Project source repositories at http://git.yoctoproject.org/cgit.cgi have two
6instances of the "documentation" directory. You should understand each of
7these instances.
8
9 poky/documentation - The directory within the poky Git repository containing
10 the set of Yocto Project manuals. When you clone the
11 poky Git repository, the documentation directory
12 contains the manuals. The state of the manuals in this
13 directory is guaranteed to reflect the latest Yocto
14 Project release. The manuals at the tip of this
15 directory will also likely contain most manual
16 development changes.
17
18 yocto-docs/documentation - The Git repository for the Yocto Project manuals.
19 This repository is where manual development
20 occurs. If you plan on contributing back to the
21 Yocto Project documentation, you should set up
22 a local Git repository based on this upstream
23 repository as follows:
24
25 git clone git://git.yoctoproject.org/yocto-docs
26
27 Changes and patches are first pushed to the
28 yocto-docs Git repository. Later, they make it
29 into the poky Git repository found at
30 git://git.yoctoproject.org/poky.
31
32Manual Organization
33===================
34
35Folders exist for individual manuals as follows:
36
37* adt-manual - The Yocto Project Application Developer's Guide.
38* bsp-guide - The Yocto Project Board Support Package (BSP) Developer's Guide
39* dev-manual - The Yocto Project Development Manual
40* kernel-dev - The Yocto Project Linux Kernel Development Manual
41* ref-manual - The Yocto Project Reference Manual
42* yocto-project-qs - The Yocto Project Quick Start
43* mega-manual - An aggregated manual comprised of all YP manuals and guides
44* profile-manual - The Yocto Project Profile and Tracing Manual
45
46Each folder is self-contained regarding content and figures. Note that there
47is a sed file needed to process the links of the mega-manual. The sed file
48is located in the tools directory. Also note that the figures folder in the
49mega-manual directory contains duplicates of all the figures in the YP folders
50directories for all YP manuals and guides.
51
52If you want to find HTML versions of the Yocto Project manuals on the web,
53go to http://www.yoctoproject.org and click on the "Documentation" tab. From
54there you have access to archived documentation from previous releases, current
55documentation for the latest release, and "Docs in Progress" for the release
56currently being developed.
57
58In general, the Yocto Project site (http://www.yoctoproject.org) is a great
59reference for both information and downloads.
60
61Makefile
62========
63
64The Makefile processes manual directories to create HTML, PDF,
65tarballs, etc. Details on how the Makefile work are documented
66inside the Makefile. See that file for more information.
67
68To build a manual, you run the make command and pass it the name
69of the folder containing the manual's contents.
70For example, the following command run from the documentation directory
71creates an HTML and a PDF version of the ADT manual.
72The DOC variable specifies the manual you are making:
73
74 $ make DOC=adt-manual
75
76poky.ent
77========
78
79This file defines variables used for documentation production. The variables
80are used to define release pathnames, URLs for the published manuals, etc.
81
82template
83========
84Contains various templates, fonts, and some old PNG files.
85
86tools
87=====
88Contains a tool to convert the DocBook files to PDF format. This folder also
89contains the mega-manual.sed file, which is used by Makefile to process
90cross-references from within the manual that normally go to an external
91manual.
diff --git a/documentation/adt-manual/adt-command.xml b/documentation/adt-manual/adt-command.xml
new file mode 100644
index 0000000000..9aa25fad40
--- /dev/null
+++ b/documentation/adt-manual/adt-command.xml
@@ -0,0 +1,224 @@
1<!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='using-the-command-line'>
6<title>Using the Command Line</title>
7
8 <para>
9 Recall that earlier the manual discussed how to use an existing toolchain
10 tarball that had been installed into the default installation
11 directory, <filename>/opt/poky/&DISTRO;</filename>, which is outside of the
12 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
13 (see the section "<link linkend='using-an-existing-toolchain-tarball'>Using a Cross-Toolchain Tarball)</link>".
14 And, that sourcing your architecture-specific environment setup script
15 initializes a suitable cross-toolchain development environment.
16 </para>
17
18 <para>
19 During this setup, locations for the compiler, QEMU scripts, QEMU binary,
20 a special version of <filename>pkgconfig</filename> and other useful
21 utilities are added to the <filename>PATH</filename> variable.
22 Also, variables to assist
23 <filename>pkgconfig</filename> and <filename>autotools</filename>
24 are also defined so that, for example, <filename>configure.sh</filename>
25 can find pre-generated test results for tests that need target hardware
26 on which to run.
27 </para>
28
29 <para>
30 Collectively, these conditions allow you to easily use the toolchain
31 outside of the OpenEmbedded build environment on both Autotools-based
32 projects and Makefile-based projects.
33 This chapter provides information for both these types of projects.
34 </para>
35
36
37<section id='autotools-based-projects'>
38<title>Autotools-Based Projects</title>
39
40 <para>
41 Once you have a suitable cross-toolchain installed, it is very easy to
42 develop a project outside of the OpenEmbedded build system.
43 This section presents a simple "Helloworld" example that shows how
44 to set up, compile, and run the project.
45 </para>
46
47 <section id='creating-and-running-a-project-based-on-gnu-autotools'>
48 <title>Creating and Running a Project Based on GNU Autotools</title>
49
50 <para>
51 Follow these steps to create a simple Autotools-based project:
52 <orderedlist>
53 <listitem><para><emphasis>Create your directory:</emphasis>
54 Create a clean directory for your project and then make
55 that directory your working location:
56 <literallayout class='monospaced'>
57 $ mkdir $HOME/helloworld
58 $ cd $HOME/helloworld
59 </literallayout></para></listitem>
60 <listitem><para><emphasis>Populate the directory:</emphasis>
61 Create <filename>hello.c</filename>, <filename>Makefile.am</filename>,
62 and <filename>configure.in</filename> files as follows:
63 <itemizedlist>
64 <listitem><para>For <filename>hello.c</filename>, include
65 these lines:
66 <literallayout class='monospaced'>
67 #include &lt;stdio.h&gt;
68
69 main()
70 {
71 printf("Hello World!\n");
72 }
73 </literallayout></para></listitem>
74 <listitem><para>For <filename>Makefile.am</filename>,
75 include these lines:
76 <literallayout class='monospaced'>
77 bin_PROGRAMS = hello
78 hello_SOURCES = hello.c
79 </literallayout></para></listitem>
80 <listitem><para>For <filename>configure.in</filename>,
81 include these lines:
82 <literallayout class='monospaced'>
83 AC_INIT(hello.c)
84 AM_INIT_AUTOMAKE(hello,0.1)
85 AC_PROG_CC
86 AC_PROG_INSTALL
87 AC_OUTPUT(Makefile)
88 </literallayout></para></listitem>
89 </itemizedlist></para></listitem>
90 <listitem><para><emphasis>Source the cross-toolchain
91 environment setup file:</emphasis>
92 Installation of the cross-toolchain creates a cross-toolchain
93 environment setup script in the directory that the ADT
94 was installed.
95 Before you can use the tools to develop your project, you must
96 source this setup script.
97 The script begins with the string "environment-setup" and contains
98 the machine architecture, which is followed by the string
99 "poky-linux".
100 Here is an example that sources a script from the
101 default ADT installation directory that uses the
102 32-bit Intel x86 Architecture and using the
103 &DISTRO_NAME; Yocto Project release:
104 <literallayout class='monospaced'>
105 $ source /opt/poky/&DISTRO;/environment-setup-i586-poky-linux
106 </literallayout></para></listitem>
107 <listitem><para><emphasis>Generate the local aclocal.m4
108 files and create the configure script:</emphasis>
109 The following GNU Autotools generate the local
110 <filename>aclocal.m4</filename> files and create the
111 configure script:
112 <literallayout class='monospaced'>
113 $ aclocal
114 $ autoconf
115 </literallayout></para></listitem>
116 <listitem><para><emphasis>Generate files needed by GNU
117 coding standards:</emphasis>
118 GNU coding standards require certain files in order for the
119 project to be compliant.
120 This command creates those files:
121 <literallayout class='monospaced'>
122 $ touch NEWS README AUTHORS ChangeLog
123 </literallayout></para></listitem>
124 <listitem><para><emphasis>Generate the configure
125 file:</emphasis>
126 This command generates the <filename>configure</filename>:
127 <literallayout class='monospaced'>
128 $ automake -a
129 </literallayout></para></listitem>
130 <listitem><para><emphasis>Cross-compile the project:</emphasis>
131 This command compiles the project using the cross-compiler:
132 <literallayout class='monospaced'>
133 $ ./configure ${CONFIGURE_FLAGS}
134 </literallayout></para></listitem>
135 <listitem><para><emphasis>Make and install the project:</emphasis>
136 These two commands generate and install the project into the
137 destination directory:
138 <literallayout class='monospaced'>
139 $ make
140 $ make install DESTDIR=./tmp
141 </literallayout></para></listitem>
142 <listitem><para><emphasis>Verify the installation:</emphasis>
143 This command is a simple way to verify the installation
144 of your project.
145 Running the command prints the architecture on which
146 the binary file can run.
147 This architecture should be the same architecture that
148 the installed cross-toolchain supports.
149 <literallayout class='monospaced'>
150 $ file ./tmp/usr/local/bin/hello
151 </literallayout></para></listitem>
152 <listitem><para><emphasis>Execute your project:</emphasis>
153 To execute the project in the shell, simply enter the name.
154 You could also copy the binary to the actual target hardware
155 and run the project there as well:
156 <literallayout class='monospaced'>
157 $ ./hello
158 </literallayout>
159 As expected, the project displays the "Hello World!" message.
160 </para></listitem>
161 </orderedlist>
162 </para>
163 </section>
164
165 <section id='passing-host-options'>
166 <title>Passing Host Options</title>
167
168 <para>
169 For an Autotools-based project, you can use the cross-toolchain by just
170 passing the appropriate host option to <filename>configure.sh</filename>.
171 The host option you use is derived from the name of the environment setup
172 script found in the directory in which you installed the cross-toolchain.
173 For example, the host option for an ARM-based target that uses the GNU EABI
174 is <filename>armv5te-poky-linux-gnueabi</filename>.
175 You will notice that the name of the script is
176 <filename>environment-setup-armv5te-poky-linux-gnueabi</filename>.
177 Thus, the following command works:
178 <literallayout class='monospaced'>
179 $ ./configure --host=armv5te-poky-linux-gnueabi \
180 --with-libtool-sysroot=&lt;sysroot-dir&gt;
181 </literallayout>
182 </para>
183
184 <para>
185 This single command updates your project and rebuilds it using the appropriate
186 cross-toolchain tools.
187 <note>
188 If the <filename>configure</filename> script results in problems recognizing the
189 <filename>--with-libtool-sysroot=&lt;sysroot-dir&gt;</filename> option,
190 regenerate the script to enable the support by doing the following and then
191 run the script again:
192 <literallayout class='monospaced'>
193 $ libtoolize --automake
194 $ aclocal -I ${OECORE_NATIVE_SYSROOT}/usr/share/aclocal \
195 [-I &lt;dir_containing_your_project-specific_m4_macros&gt;]
196 $ autoconf
197 $ autoheader
198 $ automake -a
199 </literallayout>
200 </note>
201 </para>
202 </section>
203</section>
204
205<section id='makefile-based-projects'>
206<title>Makefile-Based Projects</title>
207
208 <para>
209 For a Makefile-based project, you use the cross-toolchain by making sure
210 the tools are used.
211 You can do this as follows:
212 <literallayout class='monospaced'>
213 CC=arm-poky-linux-gnueabi-gcc
214 LD=arm-poky-linux-gnueabi-ld
215 CFLAGS=”${CFLAGS} --sysroot=&lt;sysroot-dir&gt;”
216 CXXFLAGS=”${CXXFLAGS} --sysroot=&lt;sysroot-dir&gt;”
217 </literallayout>
218 </para>
219</section>
220
221</chapter>
222<!--
223vim: expandtab tw=80 ts=4
224-->
diff --git a/documentation/adt-manual/adt-intro.xml b/documentation/adt-manual/adt-intro.xml
new file mode 100644
index 0000000000..ed13a23a5f
--- /dev/null
+++ b/documentation/adt-manual/adt-intro.xml
@@ -0,0 +1,179 @@
1<!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='adt-intro'>
6 <title>The Application Development Toolkit (ADT)</title>
7
8 <para>
9 Part of the Yocto Project development solution is an Application Development
10 Toolkit (ADT).
11 The ADT provides you with a custom-built, cross-development
12 platform suited for developing a user-targeted product application.
13 </para>
14
15 <para>
16 Fundamentally, the ADT consists of the following:
17 <itemizedlist>
18 <listitem><para>An architecture-specific cross-toolchain and matching
19 sysroot both built by the OpenEmbedded build system.
20 The toolchain and sysroot are based on a
21 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
22 configuration and extensions,
23 which allows you to cross-develop on the host machine for the target hardware.
24 </para></listitem>
25 <listitem><para>The Eclipse IDE Yocto Plug-in.</para></listitem>
26 <listitem><para>The Quick EMUlator (QEMU), which lets you simulate target hardware.
27 </para></listitem>
28 <listitem><para>Various user-space tools that greatly enhance your application
29 development experience.</para></listitem>
30 </itemizedlist>
31 </para>
32
33 <section id='the-cross-development-toolchain'>
34 <title>The Cross-Development Toolchain</title>
35
36 <para>
37 The
38 <ulink url='&YOCTO_DOCS_DEV_URL;#cross-development-toolchain'>Cross-Development Toolchain</ulink>
39 consists of a cross-compiler, cross-linker, and cross-debugger
40 that are used to develop user-space applications for targeted
41 hardware.
42 This toolchain is created either by running the ADT Installer
43 script, a toolchain installer script, or through a
44 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
45 that is based on your Metadata configuration or extension for
46 your targeted device.
47 The cross-toolchain works with a matching target sysroot.
48 </para>
49 </section>
50
51 <section id='sysroot'>
52 <title>Sysroot</title>
53
54 <para>
55 The matching target sysroot contains needed headers and libraries for generating
56 binaries that run on the target architecture.
57 The sysroot is based on the target root filesystem image that is built by
58 the OpenEmbedded build system and uses the same Metadata configuration
59 used to build the cross-toolchain.
60 </para>
61 </section>
62
63 <section id='eclipse-overview'>
64 <title>Eclipse Yocto Plug-in</title>
65
66 <para>
67 The Eclipse IDE is a popular development environment and it fully supports
68 development using the Yocto Project.
69 When you install and configure the Eclipse Yocto Project Plug-in into
70 the Eclipse IDE, you maximize your Yocto Project experience.
71 Installing and configuring the Plug-in results in an environment that
72 has extensions specifically designed to let you more easily develop software.
73 These extensions allow for cross-compilation, deployment, and execution of
74 your output into a QEMU emulation session.
75 You can also perform cross-debugging and profiling.
76 The environment also supports a suite of tools that allows you to perform
77 remote profiling, tracing, collection of power data, collection of
78 latency data, and collection of performance data.
79 </para>
80
81 <para>
82 For information about the application development workflow that uses the Eclipse
83 IDE and for a detailed example of how to install and configure the Eclipse
84 Yocto Project Plug-in, see the
85 "<ulink url='&YOCTO_DOCS_DEV_URL;#adt-eclipse'>Working Within Eclipse</ulink>" section
86 of the Yocto Project Development Manual.
87 </para>
88 </section>
89
90 <section id='the-qemu-emulator'>
91 <title>The QEMU Emulator</title>
92
93 <para>
94 The QEMU emulator allows you to simulate your hardware while running your
95 application or image.
96 QEMU is made available a number of ways:
97 <itemizedlist>
98 <listitem><para>
99 If you use the ADT Installer script to install ADT, you can
100 specify whether or not to install QEMU.
101 </para></listitem>
102 <listitem><para>
103 If you have cloned the <filename>poky</filename> Git
104 repository to create a
105 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
106 and you have sourced the environment setup script, QEMU is
107 installed and automatically available.
108 </para></listitem>
109 <listitem><para>
110 If you have downloaded a Yocto Project release and unpacked
111 it to create a
112 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
113 and you have sourced the environment setup script, QEMU is
114 installed and automatically available.
115 </para></listitem>
116 <listitem><para>
117 If you have installed the cross-toolchain tarball and you
118 have sourced the toolchain's setup environment script, QEMU
119 is also installed and automatically available.
120 </para></listitem>
121 </itemizedlist>
122 </para>
123 </section>
124
125 <section id='user-space-tools'>
126 <title>User-Space Tools</title>
127
128 <para>
129 User-space tools are included as part of the distribution.
130 You will find these tools helpful during development.
131 The tools include LatencyTOP, PowerTOP, OProfile, Perf, SystemTap, and Lttng-ust.
132 These tools are common development tools for the Linux platform.
133 <itemizedlist>
134 <listitem><para><emphasis>LatencyTOP:</emphasis> LatencyTOP focuses on latency
135 that causes skips in audio,
136 stutters in your desktop experience, or situations that overload your server
137 even when you have plenty of CPU power left.
138 </para></listitem>
139 <listitem><para><emphasis>PowerTOP:</emphasis> Helps you determine what
140 software is using the most power.
141 You can find out more about PowerTOP at
142 <ulink url='https://01.org/powertop/'></ulink>.</para></listitem>
143 <listitem><para><emphasis>OProfile:</emphasis> A system-wide profiler for Linux
144 systems that is capable of profiling all running code at low overhead.
145 You can find out more about OProfile at
146 <ulink url='http://oprofile.sourceforge.net/about/'></ulink>.
147 For examples on how to setup and use this tool, see the
148 "<ulink url='&YOCTO_DOCS_PROF_URL;#profile-manual-oprofile'>OProfile</ulink>"
149 section in the Yocto Project Profiling and Tracing Manual.
150 </para></listitem>
151 <listitem><para><emphasis>Perf:</emphasis> Performance counters for Linux used
152 to keep track of certain types of hardware and software events.
153 For more information on these types of counters see
154 <ulink url='https://perf.wiki.kernel.org/'></ulink>.
155 For examples on how to setup and use this tool, see the
156 "<ulink url='&YOCTO_DOCS_PROF_URL;#profile-manual-perf'>perf</ulink>"
157 section in the Yocto Project Profiling and Tracing Manual.
158 </para></listitem>
159 <listitem><para><emphasis>SystemTap:</emphasis> A free software infrastructure
160 that simplifies information gathering about a running Linux system.
161 This information helps you diagnose performance or functional problems.
162 SystemTap is not available as a user-space tool through the Eclipse IDE Yocto Plug-in.
163 See <ulink url='http://sourceware.org/systemtap'></ulink> for more information
164 on SystemTap.
165 For examples on how to setup and use this tool, see the
166 "<ulink url='&YOCTO_DOCS_PROF_URL;#profile-manual-systemtap'>SystemTap</ulink>"
167 section in the Yocto Project Profiling and Tracing Manual.</para></listitem>
168 <listitem><para><emphasis>Lttng-ust:</emphasis> A User-space Tracer designed to
169 provide detailed information on user-space activity.
170 See <ulink url='http://lttng.org/ust'></ulink> for more information on Lttng-ust.
171 </para></listitem>
172 </itemizedlist>
173 </para>
174 </section>
175
176</chapter>
177<!--
178vim: expandtab tw=80 ts=4
179-->
diff --git a/documentation/adt-manual/adt-manual-customization.xsl b/documentation/adt-manual/adt-manual-customization.xsl
new file mode 100644
index 0000000000..373bdb7140
--- /dev/null
+++ b/documentation/adt-manual/adt-manual-customization.xsl
@@ -0,0 +1,11 @@
1<?xml version='1.0'?>
2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
3
4 <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl" />
5
6 <xsl:param name="html.stylesheet" select="'adt-style.css'" />
7 <xsl:param name="chapter.autolabel" select="1" />
8 <xsl:param name="appendix.autolabel" select="1" />
9 <xsl:param name="section.autolabel" select="1" />
10 <xsl:param name="section.label.includes.component.label" select="1" />
11</xsl:stylesheet>
diff --git a/documentation/adt-manual/adt-manual-eclipse-customization.xsl b/documentation/adt-manual/adt-manual-eclipse-customization.xsl
new file mode 100644
index 0000000000..d16ffbb68e
--- /dev/null
+++ b/documentation/adt-manual/adt-manual-eclipse-customization.xsl
@@ -0,0 +1,27 @@
1<?xml version='1.0'?>
2<xsl:stylesheet
3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4 xmlns="http://www.w3.org/1999/xhtml"
5 xmlns:fo="http://www.w3.org/1999/XSL/Format"
6 version="1.0">
7
8 <xsl:import
9 href="http://docbook.sourceforge.net/release/xsl/current/eclipse/eclipse3.xsl" />
10
11 <xsl:param name="chunker.output.indent" select="'yes'"/>
12 <xsl:param name="chunk.quietly" select="1"/>
13 <xsl:param name="chunk.first.sections" select="1"/>
14 <xsl:param name="chunk.section.depth" select="10"/>
15 <xsl:param name="use.id.as.filename" select="1"/>
16 <xsl:param name="ulink.target" select="'_self'" />
17 <xsl:param name="base.dir" select="'html/adt-manual/'"/>
18 <xsl:param name="html.stylesheet" select="'../book.css'"/>
19 <xsl:param name="eclipse.manifest" select="0"/>
20 <xsl:param name="create.plugin.xml" select="0"/>
21 <xsl:param name="suppress.navigation" select="1"/>
22 <xsl:param name="generate.index" select="0"/>
23 <xsl:param name="chapter.autolabel" select="1" />
24 <xsl:param name="appendix.autolabel" select="1" />
25 <xsl:param name="section.autolabel" select="1" />
26 <xsl:param name="section.label.includes.component.label" select="1" />
27</xsl:stylesheet>
diff --git a/documentation/adt-manual/adt-manual-intro.xml b/documentation/adt-manual/adt-manual-intro.xml
new file mode 100644
index 0000000000..fccacc4ba4
--- /dev/null
+++ b/documentation/adt-manual/adt-manual-intro.xml
@@ -0,0 +1,33 @@
1<!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='adt-manual-intro'>
6<title>Introduction</title>
7
8 <para>
9 Welcome to the Yocto Project Application Developer's Guide.
10 This manual provides information that lets you begin developing applications
11 using the Yocto Project.
12 </para>
13
14 <para>
15 The Yocto Project provides an application development environment based on
16 an Application Development Toolkit (ADT) and the availability of stand-alone
17 cross-development toolchains and other tools.
18 This manual describes the ADT and how you can configure and install it,
19 how to access and use the cross-development toolchains, how to
20 customize the development packages installation,
21 how to use command line development for both Autotools-based and Makefile-based projects,
22 and an introduction to the <trademark class='trade'>Eclipse</trademark> IDE
23 Yocto Plug-in.
24 <note>
25 The ADT is distribution-neutral and does not require the Yocto
26 Project reference distribution, which is called Poky.
27 This manual, however, uses examples that use the Poky distribution.
28 </note>
29 </para>
30</chapter>
31<!--
32vim: expandtab tw=80 ts=4
33-->
diff --git a/documentation/adt-manual/adt-manual.xml b/documentation/adt-manual/adt-manual.xml
new file mode 100644
index 0000000000..03959f5944
--- /dev/null
+++ b/documentation/adt-manual/adt-manual.xml
@@ -0,0 +1,120 @@
1<!DOCTYPE book 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<book id='adt-manual' lang='en'
6 xmlns:xi="http://www.w3.org/2003/XInclude"
7 xmlns="http://docbook.org/ns/docbook"
8 >
9 <bookinfo>
10
11 <mediaobject>
12 <imageobject>
13 <imagedata fileref='figures/adt-title.png'
14 format='SVG'
15 align='left' scalefit='1' width='100%'/>
16 </imageobject>
17 </mediaobject>
18
19 <title>
20 Yocto Project Application Developer's Guide
21 </title>
22
23 <authorgroup>
24 <author>
25 <firstname>Jessica</firstname> <surname>Zhang</surname>
26 <affiliation>
27 <orgname>Intel Corporation</orgname>
28 </affiliation>
29 <email>jessica.zhang@intel.com</email>
30 </author>
31 </authorgroup>
32
33 <revhistory>
34 <revision>
35 <revnumber>1.0</revnumber>
36 <date>6 April 2011</date>
37 <revremark>Released with the Yocto Project 1.0 Release.</revremark>
38 </revision>
39 <revision>
40 <revnumber>1.0.1</revnumber>
41 <date>23 May 2011</date>
42 <revremark>Released with the Yocto Project 1.0.1 Release.</revremark>
43 </revision>
44 <revision>
45 <revnumber>1.1</revnumber>
46 <date>6 October 2011</date>
47 <revremark>Released with the Yocto Project 1.1 Release.</revremark>
48 </revision>
49 <revision>
50 <revnumber>1.2</revnumber>
51 <date>April 2012</date>
52 <revremark>Released with the Yocto Project 1.2 Release.</revremark>
53 </revision>
54 <revision>
55 <revnumber>1.3</revnumber>
56 <date>October 2012</date>
57 <revremark>Released with the Yocto Project 1.3 Release.</revremark>
58 </revision>
59 <revision>
60 <revnumber>1.4</revnumber>
61 <date>April 2013</date>
62 <revremark>Released with the Yocto Project 1.4 Release.</revremark>
63 </revision>
64 <revision>
65 <revnumber>1.5</revnumber>
66 <date>October 2013</date>
67 <revremark>Released with the Yocto Project 1.5 Release.</revremark>
68 </revision>
69 <revision>
70 <revnumber>1.5.1</revnumber>
71 <date>January 2014</date>
72 <revremark>Released with the Yocto Project 1.5.1 Release.</revremark>
73 </revision>
74 <revision>
75 <revnumber>1.6</revnumber>
76 <date>April 2014</date>
77 <revremark>Released with the Yocto Project 1.6 Release.</revremark>
78 </revision>
79 </revhistory>
80
81 <copyright>
82 <year>&COPYRIGHT_YEAR;</year>
83 <holder>Linux Foundation</holder>
84 </copyright>
85
86 <legalnotice>
87 <para>
88 Permission is granted to copy, distribute and/or modify this document under
89 the terms of the <ulink type="http" url="http://creativecommons.org/licenses/by-sa/2.0/uk/">Creative Commons Attribution-Share Alike 2.0 UK: England &amp; Wales</ulink> as published by Creative Commons.
90 </para>
91 <note>
92 For the latest version of this manual associated with this
93 Yocto Project release, see the
94 <ulink url='&YOCTO_DOCS_ADT_URL;'>Yocto Project Application Developer's Guide</ulink>
95 from the Yocto Project website.
96 </note>
97
98 </legalnotice>
99
100 </bookinfo>
101
102 <xi:include href="adt-manual-intro.xml"/>
103
104 <xi:include href="adt-intro.xml"/>
105
106 <xi:include href="adt-prepare.xml"/>
107
108 <xi:include href="adt-package.xml"/>
109
110 <xi:include href="adt-command.xml"/>
111
112<!-- <index id='index'>
113 <title>Index</title>
114 </index>
115-->
116
117</book>
118<!--
119vim: expandtab tw=80 ts=4
120-->
diff --git a/documentation/adt-manual/adt-package.xml b/documentation/adt-manual/adt-package.xml
new file mode 100644
index 0000000000..da032eee5b
--- /dev/null
+++ b/documentation/adt-manual/adt-package.xml
@@ -0,0 +1,101 @@
1<!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='adt-package'>
6<title>Optionally Customizing the Development Packages Installation</title>
7
8 <para>
9 Because the Yocto Project is suited for embedded Linux development, it is
10 likely that you will need to customize your development packages installation.
11 For example, if you are developing a minimal image, then you might not need
12 certain packages (e.g. graphics support packages).
13 Thus, you would like to be able to remove those packages from your target sysroot.
14 </para>
15
16<section id='package-management-systems'>
17 <title>Package Management Systems</title>
18
19 <para>
20 The OpenEmbedded build system supports the generation of sysroot files using
21 three different Package Management Systems (PMS):
22 <itemizedlist>
23 <listitem><para><emphasis>OPKG:</emphasis> A less well known PMS whose use
24 originated in the OpenEmbedded and OpenWrt embedded Linux projects.
25 This PMS works with files packaged in an <filename>.ipk</filename> format.
26 See <ulink url='http://en.wikipedia.org/wiki/Opkg'></ulink> for more
27 information about OPKG.</para></listitem>
28 <listitem><para><emphasis>RPM:</emphasis> A more widely known PMS intended for GNU/Linux
29 distributions.
30 This PMS works with files packaged in an <filename>.rms</filename> format.
31 The build system currently installs through this PMS by default.
32 See <ulink url='http://en.wikipedia.org/wiki/RPM_Package_Manager'></ulink>
33 for more information about RPM.</para></listitem>
34 <listitem><para><emphasis>Debian:</emphasis> The PMS for Debian-based systems
35 is built on many PMS tools.
36 The lower-level PMS tool <filename>dpkg</filename> forms the base of the Debian PMS.
37 For information on dpkg see
38 <ulink url='http://en.wikipedia.org/wiki/Dpkg'></ulink>.</para></listitem>
39 </itemizedlist>
40 </para>
41</section>
42
43<section id='configuring-the-pms'>
44 <title>Configuring the PMS</title>
45
46 <para>
47 Whichever PMS you are using, you need to be sure that the
48 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></ulink>
49 variable in the <filename>conf/local.conf</filename>
50 file is set to reflect that system.
51 The first value you choose for the variable specifies the package file format for the root
52 filesystem at sysroot.
53 Additional values specify additional formats for convenience or testing.
54 See the configuration file for details.
55 </para>
56
57 <note>
58 For build performance information related to the PMS, see the
59 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-package'><filename>package.bbclass</filename></ulink>"
60 section in the Yocto Project Reference Manual.
61 </note>
62
63 <para>
64 As an example, consider a scenario where you are using OPKG and you want to add
65 the <filename>libglade</filename> package to the target sysroot.
66 </para>
67
68 <para>
69 First, you should generate the IPK file for the
70 <filename>libglade</filename> package and add it
71 into a working <filename>opkg</filename> repository.
72 Use these commands:
73 <literallayout class='monospaced'>
74 $ bitbake libglade
75 $ bitbake package-index
76 </literallayout>
77 </para>
78
79 <para>
80 Next, source the environment setup script found in the
81 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
82 Follow that by setting up the installation destination to point to your
83 sysroot as <filename>&lt;sysroot_dir&gt;</filename>.
84 Finally, have an OPKG configuration file <filename>&lt;conf_file&gt;</filename>
85 that corresponds to the <filename>opkg</filename> repository you have just created.
86 The following command forms should now work:
87 <literallayout class='monospaced'>
88 $ opkg-cl –f &lt;conf_file&gt; -o &lt;sysroot_dir&gt; update
89 $ opkg-cl –f &lt;cconf_file&gt; -o &lt;sysroot_dir&gt; \
90 --force-overwrite install libglade
91 $ opkg-cl –f &lt;cconf_file&gt; -o &lt;sysroot_dir&gt; \
92 --force-overwrite install libglade-dbg
93 $ opkg-cl –f &lt;conf_file&gt; -o &lt;sysroot_dir&gt; \
94 --force-overwrite install libglade-dev
95 </literallayout>
96 </para>
97</section>
98</chapter>
99<!--
100vim: expandtab tw=80 ts=4
101-->
diff --git a/documentation/adt-manual/adt-prepare.xml b/documentation/adt-manual/adt-prepare.xml
new file mode 100644
index 0000000000..89ef09fb24
--- /dev/null
+++ b/documentation/adt-manual/adt-prepare.xml
@@ -0,0 +1,671 @@
1<!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='adt-prepare'>
6
7<title>Preparing for Application Development</title>
8
9<para>
10 In order to develop applications, you need set up your host development system.
11 Several ways exist that allow you to install cross-development tools, QEMU, the
12 Eclipse Yocto Plug-in, and other tools.
13 This chapter describes how to prepare for application development.
14</para>
15
16<section id='installing-the-adt'>
17 <title>Installing the ADT and Toolchains</title>
18
19 <para>
20 The following list describes installation methods that set up varying degrees of tool
21 availability on your system.
22 Regardless of the installation method you choose,
23 you must <filename>source</filename> the cross-toolchain
24 environment setup script before you use a toolchain.
25 See the "<link linkend='setting-up-the-cross-development-environment'>Setting Up the
26 Cross-Development Environment</link>" section for more information.
27 </para>
28
29 <note>
30 <para>Avoid mixing installation methods when installing toolchains for different architectures.
31 For example, avoid using the ADT Installer to install some toolchains and then hand-installing
32 cross-development toolchains by running the toolchain installer for different architectures.
33 Mixing installation methods can result in situations where the ADT Installer becomes
34 unreliable and might not install the toolchain.</para>
35 <para>If you must mix installation methods, you might avoid problems by deleting
36 <filename>/var/lib/opkg</filename>, thus purging the <filename>opkg</filename> package
37 metadata</para>
38 </note>
39
40 <para>
41 <itemizedlist>
42 <listitem><para><emphasis>Use the ADT installer script:</emphasis>
43 This method is the recommended way to install the ADT because it
44 automates much of the process for you.
45 For example, you can configure the installation to install the QEMU emulator
46 and the user-space NFS, specify which root filesystem profiles to download,
47 and define the target sysroot location.</para></listitem>
48 <listitem><para><emphasis>Use an existing toolchain:</emphasis>
49 Using this method, you select and download an architecture-specific
50 toolchain installer and then run the script to hand-install the toolchain.
51 If you use this method, you just get the cross-toolchain and QEMU - you do not
52 get any of the other mentioned benefits had you run the ADT Installer script.</para></listitem>
53 <listitem><para><emphasis>Use the toolchain from within the Build Directory:</emphasis>
54 If you already have a
55 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>,
56 you can build the cross-toolchain within the directory.
57 However, like the previous method mentioned, you only get the cross-toolchain and QEMU - you
58 do not get any of the other benefits without taking separate steps.</para></listitem>
59 </itemizedlist>
60 </para>
61
62 <section id='using-the-adt-installer'>
63 <title>Using the ADT Installer</title>
64
65 <para>
66 To run the ADT Installer, you need to get the ADT Installer tarball, be sure
67 you have the necessary host development packages that support the ADT Installer,
68 and then run the ADT Installer Script.
69 </para>
70
71 <para>
72 For a list of the host packages needed to support ADT installation and use, see the
73 "ADT Installer Extras" lists in the
74 "<ulink url='&YOCTO_DOCS_REF_URL;#required-packages-for-the-host-development-system'>Required Packages for the Host Development System</ulink>" section
75 of the Yocto Project Reference Manual.
76 </para>
77
78 <section id='getting-the-adt-installer-tarball'>
79 <title>Getting the ADT Installer Tarball</title>
80
81 <para>
82 The ADT Installer is contained in the ADT Installer tarball.
83 You can get the tarball using either of these methods:
84 <itemizedlist>
85 <listitem><para><emphasis>Download the Tarball:</emphasis>
86 You can download the tarball from
87 <ulink url='&YOCTO_ADTINSTALLER_DL_URL;'></ulink> into
88 any directory.</para></listitem>
89 <listitem><para><emphasis>Build the Tarball:</emphasis>
90 You can use
91 <ulink url='&YOCTO_DOCS_DEV_URL;#bitbake-term'>BitBake</ulink>
92 to generate the tarball inside an existing
93 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
94 </para>
95 <para>If you use BitBake to generate the ADT Installer
96 tarball, you must <filename>source</filename> the
97 environment setup script
98 (<ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
99 or
100 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>)
101 located in the Source Directory before running the
102 <filename>bitbake</filename> command that creates the
103 tarball.</para>
104 <para>The following example commands establish
105 the
106 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>,
107 check out the current release branch, set up the
108 build environment while also creating the default
109 Build Directory, and run the
110 <filename>bitbake</filename> command that results in the
111 tarball
112 <filename>poky/build/tmp/deploy/sdk/adt_installer.tar.bz2</filename>:
113 <note>
114 Before using BitBake to build the ADT tarball, be
115 sure to make sure your
116 <filename>local.conf</filename> file is properly
117 configured.
118 </note>
119 <literallayout class='monospaced'>
120 $ cd ~
121 $ git clone git://git.yoctoproject.org/poky
122 $ cd poky
123 $ git checkout -b &DISTRO_NAME; origin/&DISTRO_NAME;
124 $ source &OE_INIT_FILE;
125 $ bitbake adt-installer
126 </literallayout></para></listitem>
127 </itemizedlist>
128 </para>
129 </section>
130
131 <section id='configuring-and-running-the-adt-installer-script'>
132 <title>Configuring and Running the ADT Installer Script</title>
133
134 <para>
135 Before running the ADT Installer script, you need to unpack the tarball.
136 You can unpack the tarball in any directory you wish.
137 For example, this command copies the ADT Installer tarball from where
138 it was built into the home directory and then unpacks the tarball into
139 a top-level directory named <filename>adt-installer</filename>:
140 <literallayout class='monospaced'>
141 $ cd ~
142 $ cp poky/build/tmp/deploy/sdk/adt_installer.tar.bz2 $HOME
143 $ tar -xjf adt_installer.tar.bz2
144 </literallayout>
145 Unpacking it creates the directory <filename>adt-installer</filename>,
146 which contains the ADT Installer script (<filename>adt_installer</filename>)
147 and its configuration file (<filename>adt_installer.conf</filename>).
148 </para>
149
150 <para>
151 Before you run the script, however, you should examine the ADT Installer configuration
152 file and be sure you are going to get what you want.
153 Your configurations determine which kernel and filesystem image are downloaded.
154 </para>
155
156 <para>
157 The following list describes the configurations you can define for the ADT Installer.
158 For configuration values and restrictions, see the comments in
159 the <filename>adt-installer.conf</filename> file:
160
161 <itemizedlist>
162 <listitem><para><filename>YOCTOADT_REPO</filename>: This area
163 includes the IPKG-based packages and the root filesystem upon which
164 the installation is based.
165 If you want to set up your own IPKG repository pointed to by
166 <filename>YOCTOADT_REPO</filename>, you need to be sure that the
167 directory structure follows the same layout as the reference directory
168 set up at <ulink url='http://adtrepo.yoctoproject.org'></ulink>.
169 Also, your repository needs to be accessible through HTTP.</para></listitem>
170 <listitem><para><filename>YOCTOADT_TARGETS</filename>: The machine
171 target architectures for which you want to set up cross-development
172 environments.</para></listitem>
173 <listitem><para><filename>YOCTOADT_QEMU</filename>: Indicates whether
174 or not to install the emulator QEMU.</para></listitem>
175 <listitem><para><filename>YOCTOADT_NFS_UTIL</filename>: Indicates whether
176 or not to install user-mode NFS.
177 If you plan to use the Eclipse IDE Yocto plug-in against QEMU,
178 you should install NFS.
179 <note>To boot QEMU images using our userspace NFS server, you need
180 to be running <filename>portmap</filename> or <filename>rpcbind</filename>.
181 If you are running <filename>rpcbind</filename>, you will also need to add the
182 <filename>-i</filename> option when <filename>rpcbind</filename> starts up.
183 Please make sure you understand the security implications of doing this.
184 You might also have to modify your firewall settings to allow
185 NFS booting to work.</note></para></listitem>
186 <listitem><para><filename>YOCTOADT_ROOTFS_&lt;arch&gt;</filename>: The root
187 filesystem images you want to download from the
188 <filename>YOCTOADT_IPKG_REPO</filename> repository.</para></listitem>
189 <listitem><para><filename>YOCTOADT_TARGET_SYSROOT_IMAGE_&lt;arch&gt;</filename>: The
190 particular root filesystem used to extract and create the target sysroot.
191 The value of this variable must have been specified with
192 <filename>YOCTOADT_ROOTFS_&lt;arch&gt;</filename>.
193 For example, if you downloaded both <filename>minimal</filename> and
194 <filename>sato-sdk</filename> images by setting
195 <filename>YOCTOADT_ROOTFS_&lt;arch&gt;</filename>
196 to "minimal sato-sdk", then <filename>YOCTOADT_ROOTFS_&lt;arch&gt;</filename>
197 must be set to either "minimal" or "sato-sdk".
198 </para></listitem>
199 <listitem><para><filename>YOCTOADT_TARGET_SYSROOT_LOC_&lt;arch&gt;</filename>: The
200 location on the development host where the target sysroot is created.
201 </para></listitem>
202 </itemizedlist>
203 </para>
204
205 <para>
206 After you have configured the <filename>adt_installer.conf</filename> file,
207 run the installer using the following command:
208 <literallayout class='monospaced'>
209 $ cd adt-installer
210 $ ./adt_installer
211 </literallayout>
212 Once the installer begins to run, you are asked to enter the
213 location for cross-toolchain installation.
214 The default location is
215 <filename>/opt/poky/&lt;release&gt;</filename>.
216 After either accepting the default location or selecting your
217 own location, you are prompted to run the installation script
218 interactively or in silent mode.
219 If you want to closely monitor the installation,
220 choose “I” for interactive mode rather than “S” for silent mode.
221 Follow the prompts from the script to complete the installation.
222 </para>
223
224 <para>
225 Once the installation completes, the ADT, which includes the
226 cross-toolchain, is installed in the selected installation
227 directory.
228 You will notice environment setup files for the cross-toolchain
229 in the installation directory, and image tarballs in the
230 <filename>adt-installer</filename> directory according to your
231 installer configurations, and the target sysroot located
232 according to the
233 <filename>YOCTOADT_TARGET_SYSROOT_LOC_&lt;arch&gt;</filename>
234 variable also in your configuration file.
235 </para>
236 </section>
237 </section>
238
239 <section id='using-an-existing-toolchain-tarball'>
240 <title>Using a Cross-Toolchain Tarball</title>
241
242 <para>
243 If you want to simply install a cross-toolchain by hand, you can
244 do so by running the toolchain installer.
245 The installer includes the pre-built cross-toolchain, the
246 <filename>runqemu</filename> script, and support files.
247 If you use this method to install the cross-toolchain, you
248 might still need to install the target sysroot by installing and
249 extracting it separately.
250 For information on how to install the sysroot, see the
251 "<link linkend='extracting-the-root-filesystem'>Extracting the Root Filesystem</link>" section.
252 </para>
253
254 <para>
255 Follow these steps:
256 <orderedlist>
257 <listitem><para><emphasis>Get your toolchain installer using one of the following methods:</emphasis>
258 <itemizedlist>
259 <listitem><para>Go to
260 <ulink url='&YOCTO_TOOLCHAIN_DL_URL;'></ulink>
261 and find the folder that matches your host
262 development system (i.e. <filename>i686</filename>
263 for 32-bit machines or <filename>x86_64</filename>
264 for 64-bit machines).</para>
265 <para>Go into that folder and download the toolchain
266 installer whose name includes the appropriate target
267 architecture.
268 The toolchains provided by the Yocto Project
269 are based off of the
270 <filename>core-image-sato</filename> image and
271 contain libraries appropriate for developing
272 against that image.
273 For example, if your host development system is a
274 64-bit x86 system and you are going to use
275 your cross-toolchain for a 32-bit x86
276 target, go into the <filename>x86_64</filename>
277 folder and download the following installer:
278 <literallayout class='monospaced'>
279 poky-eglibc-x86_64-core-image-sato-i586-toolchain-&DISTRO;.sh
280 </literallayout></para></listitem>
281 <listitem><para>Build your own toolchain installer.
282 For cases where you cannot use an installer
283 from the download area, you can build your own as
284 described in the
285 "<link linkend='optionally-building-a-toolchain-installer'>Optionally Building a Toolchain Installer</link>"
286 section.</para></listitem>
287 </itemizedlist></para></listitem>
288 <listitem><para><emphasis>Once you have the installer, run it to install the toolchain:</emphasis>
289 <note>
290 You must change the permissions on the toolchain
291 installer script so that it is executable.
292 </note></para>
293 <para>The following command shows how to run the installer
294 given a toolchain tarball for a 64-bit x86 development host
295 system and a 32-bit x86 target architecture.
296 The example assumes the toolchain installer is located
297 in <filename>~/Downloads/</filename>.
298 <literallayout class='monospaced'>
299 $ ~/Downloads/poky-eglibc-x86_64-core-image-sato-i586-toolchain-&DISTRO;.sh
300 </literallayout>
301 The first thing the installer prompts you for is the
302 directory into which you want to install the toolchain.
303 The default directory used is
304 <filename>/opt/poky/&DISTRO;</filename>.
305 If you do not have write permissions for the directory
306 into which you are installing the toolchain, the
307 toolchain installer notifies you and exits.
308 Be sure you have write permissions in the directory and
309 run the installer again.</para>
310 <para>When the script finishes, the cross-toolchain is
311 installed.
312 You will notice environment setup files for the
313 cross-toolchain in the installation directory.
314 </para></listitem>
315 </orderedlist>
316 </para>
317 </section>
318
319 <section id='using-the-toolchain-from-within-the-build-tree'>
320 <title>Using BitBake and the Build Directory</title>
321
322 <para>
323 A final way of making the cross-toolchain available is to use BitBake
324 to generate the toolchain within an existing
325 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
326 This method does not install the toolchain into the default
327 <filename>/opt</filename> directory.
328 As with the previous method, if you need to install the target sysroot, you must
329 do that separately as well.
330 </para>
331
332 <para>
333 Follow these steps to generate the toolchain into the Build Directory:
334 <orderedlist>
335 <listitem><para><emphasis>Set up the Build Environment:</emphasis>
336 Source the OpenEmbedded build environment setup
337 script (i.e.
338 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
339 or
340 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>)
341 located in the
342 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
343 </para></listitem>
344 <listitem><para><emphasis>Check your Local Configuration File:</emphasis>
345 At this point, you should be sure that the
346 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink> variable
347 in the <filename>local.conf</filename> file found in the
348 <filename>conf</filename> directory of the Build Directory
349 is set for the target architecture.
350 Comments within the <filename>local.conf</filename> file
351 list the values you can use for the
352 <filename>MACHINE</filename> variable.
353 <note>
354 You can populate the Build Directory with the
355 cross-toolchains for more than a single architecture.
356 You just need to edit the <filename>MACHINE</filename>
357 variable in the <filename>local.conf</filename> file and
358 re-run the <filename>bitbake</filename> command.
359 </note></para></listitem>
360 <listitem><para><emphasis>Generate the Cross-Toolchain:</emphasis>
361 Run <filename>bitbake meta-ide-support</filename> to
362 complete the cross-toolchain generation.
363 Once the <filename>bitbake</filename> command finishes,
364 the cross-toolchain is
365 generated and populated within the Build Directory.
366 You will notice environment setup files for the
367 cross-toolchain that contain the string
368 "<filename>environment-setup</filename>" in the
369 Build Directory's <filename>tmp</filename> folder.</para>
370 <para>Be aware that when you use this method to install the
371 toolchain, you still need to separately extract and install
372 the sysroot filesystem.
373 For information on how to do this, see the
374 "<link linkend='extracting-the-root-filesystem'>Extracting the Root Filesystem</link>" section.
375 </para></listitem>
376 </orderedlist>
377 </para>
378 </section>
379</section>
380
381<section id='setting-up-the-cross-development-environment'>
382 <title>Setting Up the Cross-Development Environment</title>
383
384 <para>
385 Before you can develop using the cross-toolchain, you need to set up the
386 cross-development environment by sourcing the toolchain's environment setup script.
387 If you used the ADT Installer or hand-installed cross-toolchain,
388 then you can find this script in the directory you chose for installation.
389 For this release, the default installation directory is
390 <filename>&YOCTO_ADTPATH_DIR;</filename>.
391 If you installed the toolchain in the
392 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>,
393 you can find the environment setup
394 script for the toolchain in the Build Directory's <filename>tmp</filename> directory.
395 </para>
396
397 <para>
398 Be sure to run the environment setup script that matches the
399 architecture for which you are developing.
400 Environment setup scripts begin with the string
401 "<filename>environment-setup</filename>" and include as part of their
402 name the architecture.
403 For example, the toolchain environment setup script for a 64-bit
404 IA-based architecture installed in the default installation directory
405 would be the following:
406 <literallayout class='monospaced'>
407 &YOCTO_ADTPATH_DIR;/environment-setup-x86_64-poky-linux
408 </literallayout>
409 </para>
410</section>
411
412<section id='securing-kernel-and-filesystem-images'>
413 <title>Securing Kernel and Filesystem Images</title>
414
415 <para>
416 You will need to have a kernel and filesystem image to boot using your
417 hardware or the QEMU emulator.
418 Furthermore, if you plan on booting your image using NFS or you want to use the root filesystem
419 as the target sysroot, you need to extract the root filesystem.
420 </para>
421
422 <section id='getting-the-images'>
423 <title>Getting the Images</title>
424
425 <para>
426 To get the kernel and filesystem images, you either have to build them or download
427 pre-built versions.
428 You can find examples for both these situations in the
429 "<ulink url='&YOCTO_DOCS_QS_URL;#test-run'>A Quick Test Run</ulink>" section of
430 the Yocto Project Quick Start.
431 </para>
432
433 <para>
434 The Yocto Project ships basic kernel and filesystem images for several
435 architectures (<filename>x86</filename>, <filename>x86-64</filename>,
436 <filename>mips</filename>, <filename>powerpc</filename>, and <filename>arm</filename>)
437 that you can use unaltered in the QEMU emulator.
438 These kernel images reside in the release
439 area - <ulink url='&YOCTO_MACHINES_DL_URL;'></ulink>
440 and are ideal for experimentation using Yocto Project.
441 For information on the image types you can build using the OpenEmbedded build system,
442 see the
443 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>" chapter in
444 the Yocto Project Reference Manual.
445 </para>
446
447 <para>
448 If you are planning on developing against your image and you are not
449 building or using one of the Yocto Project development images
450 (e.g. <filename>core-image-*-dev</filename>), you must be sure to
451 include the development packages as part of your image recipe.
452 </para>
453
454 <para>
455 Furthermore, if you plan on remotely deploying and debugging your
456 application from within the
457 Eclipse IDE, you must have an image that contains the Yocto Target Communication
458 Framework (TCF) agent (<filename>tcf-agent</filename>).
459 By default, the Yocto Project provides only one type of pre-built
460 image that contains the <filename>tcf-agent</filename>.
461 And, those images are SDK (e.g.<filename>core-image-sato-sdk</filename>).
462 </para>
463
464 <para>
465 If you want to use a different image type that contains the <filename>tcf-agent</filename>,
466 you can do so one of two ways:
467 <itemizedlist>
468 <listitem><para>Modify the <filename>conf/local.conf</filename> configuration in
469 the <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
470 and then rebuild the image.
471 With this method, you need to modify the
472 <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_IMAGE_FEATURES'><filename>EXTRA_IMAGE_FEATURES</filename></ulink>
473 variable to have the value of "tools-debug" before rebuilding the image.
474 Once the image is rebuilt, the <filename>tcf-agent</filename> will be included
475 in the image and is launched automatically after the boot.</para></listitem>
476 <listitem><para>Manually build the <filename>tcf-agent</filename>.
477 To build the agent, follow these steps:
478 <orderedlist>
479 <listitem><para>Be sure the ADT is installed as described in the
480 "<link linkend='installing-the-adt'>Installing the ADT and Toolchains</link>" section.
481 </para></listitem>
482 <listitem><para>Set up the cross-development environment as described in the
483 "<link linkend='setting-up-the-cross-development-environment'>Setting
484 Up the Cross-Development Environment</link>" section.</para></listitem>
485 <listitem><para>Get the <filename>tcf-agent</filename> source code using
486 the following commands:
487 <literallayout class='monospaced'>
488 $ git clone http://git.eclipse.org/gitroot/tcf/org.eclipse.tcf.agent.git
489 $ cd org.eclipse.tcf.agent/agent
490 </literallayout></para></listitem>
491 <listitem><para>Locate the
492 <filename>Makefile.inc</filename> file inside the
493 <filename>agent</filename> folder and modify it
494 for the cross-compilation environment by setting the
495 <filename>OPSYS</filename> and
496 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
497 variables according to your target.
498 </para></listitem>
499 <listitem><para>Use the cross-development tools to build the
500 <filename>tcf-agent</filename>.
501 Before you "Make" the file, be sure your cross-tools are set up first.
502 See the "<link linkend='makefile-based-projects'>Makefile-Based Projects</link>"
503 section for information on how to make sure the cross-tools are set up
504 correctly.</para>
505 <para>If the build is successful, the <filename>tcf-agent</filename> output will
506 be <filename>obj/$(OPSYS)/$(MACHINE)/Debug/agent</filename>.</para></listitem>
507 <listitem><para>Deploy the agent into the image's root filesystem.</para></listitem>
508 </orderedlist>
509 </para></listitem>
510 </itemizedlist>
511 </para>
512 </section>
513
514 <section id='extracting-the-root-filesystem'>
515 <title>Extracting the Root Filesystem</title>
516
517 <para>
518 If you install your toolchain by hand or build it using BitBake and
519 you need a root filesystem, you need to extract it separately.
520 If you use the ADT Installer to install the ADT, the root
521 filesystem is automatically extracted and installed.
522 </para>
523
524 <para>
525 Here are some cases where you need to extract the root filesystem:
526 <itemizedlist>
527 <listitem><para>You want to boot the image using NFS.
528 </para></listitem>
529 <listitem><para>You want to use the root filesystem as the
530 target sysroot.
531 For example, the Eclipse IDE environment with the Eclipse
532 Yocto Plug-in installed allows you to use QEMU to boot
533 under NFS.</para></listitem>
534 <listitem><para>You want to develop your target application
535 using the root filesystem as the target sysroot.
536 </para></listitem>
537 </itemizedlist>
538 </para>
539
540 <para>
541 To extract the root filesystem, first <filename>source</filename>
542 the cross-development environment setup script.
543 If you built the toolchain in the Build Directory, you will find
544 the toolchain environment script in the
545 <filename>tmp</filename> directory.
546 If you installed the toolchain by hand, the environment setup
547 script is located in <filename>/opt/poky/&DISTRO;</filename>.
548 </para>
549
550 <para>
551 After sourcing the environment script, use the
552 <filename>runqemu-extract-sdk</filename> command and provide the
553 filesystem image.
554 </para>
555
556 <para>
557 Following is an example.
558 The second command sets up the environment.
559 In this case, the setup script is located in the
560 <filename>/opt/poky/&DISTRO;</filename> directory.
561 The third command extracts the root filesystem from a previously
562 built filesystem that is located in the
563 <filename>~/Downloads</filename> directory.
564 Furthermore, this command extracts the root filesystem into the
565 <filename>qemux86-sato</filename> directory:
566 <literallayout class='monospaced'>
567 $ cd ~
568 $ source /opt/poky/&DISTRO;/environment-setup-i586-poky-linux
569 $ runqemu-extract-sdk \
570 ~/Downloads/core-image-sato-sdk-qemux86-2011091411831.rootfs.tar.bz2 \
571 $HOME/qemux86-sato
572 </literallayout>
573 You could now point to the target sysroot at
574 <filename>qemux86-sato</filename>.
575 </para>
576 </section>
577</section>
578
579<section id='optionally-building-a-toolchain-installer'>
580 <title>Optionally Building a Toolchain Installer</title>
581
582 <para>
583 As an alternative to locating and downloading a toolchain installer,
584 you can build the toolchain installer one of two ways if you have a
585 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>:
586 <itemizedlist>
587 <listitem><para>
588 Use <filename>bitbake meta-toolchain</filename>.
589 This method requires you to still install the target
590 sysroot by installing and extracting it separately.
591 For information on how to install the sysroot, see the
592 "<link linkend='extracting-the-root-filesystem'>Extracting the Root Filesystem</link>"
593 section.
594 </para></listitem>
595 <listitem><para>
596 Use <filename>bitbake &lt;image&gt; -c populate_sdk</filename>.
597 This method has significant advantages over the previous method
598 because it results in a toolchain installer that contains the
599 sysroot that matches your target root filesystem.
600 </para>
601
602 <para>Another powerful feature is that the toolchain is
603 completely self-contained.
604 The binaries are linked against their own copy of
605 <filename>libc</filename>, which results in no dependencies
606 on the target system.
607 To achieve this, the pointer to the dynamic loader is
608 configured at install time since that path cannot be dynamically
609 altered.
610 This is the reason for a wrapper around the
611 <filename>populate_sdk</filename> archive.</para>
612
613 <para>Another feature is that only one set of cross-canadian
614 toolchain binaries are produced per architecture.
615 This feature takes advantage of the fact that the target
616 hardware can be passed to <filename>gcc</filename> as a set of
617 compiler options.
618 Those options are set up by the environment script and
619 contained in variables like CC and LD.
620 This reduces the space needed for the tools.
621 Understand, however, that a sysroot is still needed for every
622 target since those binaries are target-specific.
623 </para></listitem>
624 </itemizedlist>
625 </para>
626
627 <para>
628 Remember, before using any BitBake command, you
629 must source the build environment setup script
630 (i.e.
631 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
632 or
633 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>)
634 located in the Source Directory and you must make sure your
635 <filename>conf/local.conf</filename> variables are correct.
636 In particular, you need to be sure the
637 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
638 variable matches the architecture for which you are building and that
639 the
640 <ulink url='&YOCTO_DOCS_REF_URL;#var-SDKMACHINE'><filename>SDKMACHINE</filename></ulink>
641 variable is correctly set if you are building a toolchain designed to
642 run on an architecture that differs from your current development host
643 machine (i.e. the build machine).
644 </para>
645
646 <para>
647 When the <filename>bitbake</filename> command completes, the toolchain
648 installer will be in
649 <filename>tmp/deploy/sdk</filename> in the Build Directory.
650 <note>
651 By default, this toolchain does not build static binaries.
652 If you want to use the toolchain to build these types of libraries,
653 you need to be sure your image has the appropriate static
654 development libraries.
655 Use the
656 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></ulink>
657 variable inside your <filename>local.conf</filename> file to
658 install the appropriate library packages.
659 Following is an example using <filename>eglibc</filename> static
660 development libraries:
661 <literallayout class='monospaced'>
662 IMAGE_INSTALL_append = " eglibc-staticdev"
663 </literallayout>
664 </note>
665 </para>
666</section>
667
668</chapter>
669<!--
670vim: expandtab tw=80 ts=4
671-->
diff --git a/documentation/adt-manual/adt-style.css b/documentation/adt-manual/adt-style.css
new file mode 100644
index 0000000000..3b098aa493
--- /dev/null
+++ b/documentation/adt-manual/adt-style.css
@@ -0,0 +1,979 @@
1/*
2 Generic XHTML / DocBook XHTML CSS Stylesheet.
3
4 Browser wrangling and typographic design by
5 Oyvind Kolas / pippin@gimp.org
6
7 Customised for Poky by
8 Matthew Allum / mallum@o-hand.com
9
10 Thanks to:
11 Liam R. E. Quin
12 William Skaggs
13 Jakub Steiner
14
15 Structure
16 ---------
17
18 The stylesheet is divided into the following sections:
19
20 Positioning
21 Margins, paddings, width, font-size, clearing.
22 Decorations
23 Borders, style
24 Colors
25 Colors
26 Graphics
27 Graphical backgrounds
28 Nasty IE tweaks
29 Workarounds needed to make it work in internet explorer,
30 currently makes the stylesheet non validating, but up until
31 this point it is validating.
32 Mozilla extensions
33 Transparency for footer
34 Rounded corners on boxes
35
36*/
37
38
39 /*************** /
40 / Positioning /
41/ ***************/
42
43body {
44 font-family: Verdana, Sans, sans-serif;
45
46 min-width: 640px;
47 width: 80%;
48 margin: 0em auto;
49 padding: 2em 5em 5em 5em;
50 color: #333;
51}
52
53h1,h2,h3,h4,h5,h6,h7 {
54 font-family: Arial, Sans;
55 color: #00557D;
56 clear: both;
57}
58
59h1 {
60 font-size: 2em;
61 text-align: left;
62 padding: 0em 0em 0em 0em;
63 margin: 2em 0em 0em 0em;
64}
65
66h2.subtitle {
67 margin: 0.10em 0em 3.0em 0em;
68 padding: 0em 0em 0em 0em;
69 font-size: 1.8em;
70 padding-left: 20%;
71 font-weight: normal;
72 font-style: italic;
73}
74
75h2 {
76 margin: 2em 0em 0.66em 0em;
77 padding: 0.5em 0em 0em 0em;
78 font-size: 1.5em;
79 font-weight: bold;
80}
81
82h3.subtitle {
83 margin: 0em 0em 1em 0em;
84 padding: 0em 0em 0em 0em;
85 font-size: 142.14%;
86 text-align: right;
87}
88
89h3 {
90 margin: 1em 0em 0.5em 0em;
91 padding: 1em 0em 0em 0em;
92 font-size: 140%;
93 font-weight: bold;
94}
95
96h4 {
97 margin: 1em 0em 0.5em 0em;
98 padding: 1em 0em 0em 0em;
99 font-size: 120%;
100 font-weight: bold;
101}
102
103h5 {
104 margin: 1em 0em 0.5em 0em;
105 padding: 1em 0em 0em 0em;
106 font-size: 110%;
107 font-weight: bold;
108}
109
110h6 {
111 margin: 1em 0em 0em 0em;
112 padding: 1em 0em 0em 0em;
113 font-size: 110%;
114 font-weight: bold;
115}
116
117.authorgroup {
118 background-color: transparent;
119 background-repeat: no-repeat;
120 padding-top: 256px;
121 background-image: url("figures/adt-title.png");
122 background-position: left top;
123 margin-top: -256px;
124 padding-right: 50px;
125 margin-left: 0px;
126 text-align: right;
127 width: 740px;
128}
129
130h3.author {
131 margin: 0em 0me 0em 0em;
132 padding: 0em 0em 0em 0em;
133 font-weight: normal;
134 font-size: 100%;
135 color: #333;
136 clear: both;
137}
138
139.author tt.email {
140 font-size: 66%;
141}
142
143.titlepage hr {
144 width: 0em;
145 clear: both;
146}
147
148.revhistory {
149 padding-top: 2em;
150 clear: both;
151}
152
153.toc,
154.list-of-tables,
155.list-of-examples,
156.list-of-figures {
157 padding: 1.33em 0em 2.5em 0em;
158 color: #00557D;
159}
160
161.toc p,
162.list-of-tables p,
163.list-of-figures p,
164.list-of-examples p {
165 padding: 0em 0em 0em 0em;
166 padding: 0em 0em 0.3em;
167 margin: 1.5em 0em 0em 0em;
168}
169
170.toc p b,
171.list-of-tables p b,
172.list-of-figures p b,
173.list-of-examples p b{
174 font-size: 100.0%;
175 font-weight: bold;
176}
177
178.toc dl,
179.list-of-tables dl,
180.list-of-figures dl,
181.list-of-examples dl {
182 margin: 0em 0em 0.5em 0em;
183 padding: 0em 0em 0em 0em;
184}
185
186.toc dt {
187 margin: 0em 0em 0em 0em;
188 padding: 0em 0em 0em 0em;
189}
190
191.toc dd {
192 margin: 0em 0em 0em 2.6em;
193 padding: 0em 0em 0em 0em;
194}
195
196div.glossary dl,
197div.variablelist dl {
198}
199
200.glossary dl dt,
201.variablelist dl dt,
202.variablelist dl dt span.term {
203 font-weight: normal;
204 width: 20em;
205 text-align: right;
206}
207
208.variablelist dl dt {
209 margin-top: 0.5em;
210}
211
212.glossary dl dd,
213.variablelist dl dd {
214 margin-top: -1em;
215 margin-left: 25.5em;
216}
217
218.glossary dd p,
219.variablelist dd p {
220 margin-top: 0em;
221 margin-bottom: 1em;
222}
223
224
225div.calloutlist table td {
226 padding: 0em 0em 0em 0em;
227 margin: 0em 0em 0em 0em;
228}
229
230div.calloutlist table td p {
231 margin-top: 0em;
232 margin-bottom: 1em;
233}
234
235div p.copyright {
236 text-align: left;
237}
238
239div.legalnotice p.legalnotice-title {
240 margin-bottom: 0em;
241}
242
243p {
244 line-height: 1.5em;
245 margin-top: 0em;
246
247}
248
249dl {
250 padding-top: 0em;
251}
252
253hr {
254 border: solid 1px;
255}
256
257
258.mediaobject,
259.mediaobjectco {
260 text-align: center;
261}
262
263img {
264 border: none;
265}
266
267ul {
268 padding: 0em 0em 0em 1.5em;
269}
270
271ul li {
272 padding: 0em 0em 0em 0em;
273}
274
275ul li p {
276 text-align: left;
277}
278
279table {
280 width :100%;
281}
282
283th {
284 padding: 0.25em;
285 text-align: left;
286 font-weight: normal;
287 vertical-align: top;
288}
289
290td {
291 padding: 0.25em;
292 vertical-align: top;
293}
294
295p a[id] {
296 margin: 0px;
297 padding: 0px;
298 display: inline;
299 background-image: none;
300}
301
302a {
303 text-decoration: underline;
304 color: #444;
305}
306
307pre {
308 overflow: auto;
309}
310
311a:hover {
312 text-decoration: underline;
313 /*font-weight: bold;*/
314}
315
316
317div.informalfigure,
318div.informalexample,
319div.informaltable,
320div.figure,
321div.table,
322div.example {
323 margin: 1em 0em;
324 padding: 1em;
325 page-break-inside: avoid;
326}
327
328
329div.informalfigure p.title b,
330div.informalexample p.title b,
331div.informaltable p.title b,
332div.figure p.title b,
333div.example p.title b,
334div.table p.title b{
335 padding-top: 0em;
336 margin-top: 0em;
337 font-size: 100%;
338 font-weight: normal;
339}
340
341.mediaobject .caption,
342.mediaobject .caption p {
343 text-align: center;
344 font-size: 80%;
345 padding-top: 0.5em;
346 padding-bottom: 0.5em;
347}
348
349.epigraph {
350 padding-left: 55%;
351 margin-bottom: 1em;
352}
353
354.epigraph p {
355 text-align: left;
356}
357
358.epigraph .quote {
359 font-style: italic;
360}
361.epigraph .attribution {
362 font-style: normal;
363 text-align: right;
364}
365
366span.application {
367 font-style: italic;
368}
369
370.programlisting {
371 font-family: monospace;
372 font-size: 80%;
373 white-space: pre;
374 margin: 1.33em 0em;
375 padding: 1.33em;
376}
377
378.tip,
379.warning,
380.caution,
381.note {
382 margin-top: 1em;
383 margin-bottom: 1em;
384
385}
386
387/* force full width of table within div */
388.tip table,
389.warning table,
390.caution table,
391.note table {
392 border: none;
393 width: 100%;
394}
395
396
397.tip table th,
398.warning table th,
399.caution table th,
400.note table th {
401 padding: 0.8em 0.0em 0.0em 0.0em;
402 margin : 0em 0em 0em 0em;
403}
404
405.tip p,
406.warning p,
407.caution p,
408.note p {
409 margin-top: 0.5em;
410 margin-bottom: 0.5em;
411 padding-right: 1em;
412 text-align: left;
413}
414
415.acronym {
416 text-transform: uppercase;
417}
418
419b.keycap,
420.keycap {
421 padding: 0.09em 0.3em;
422 margin: 0em;
423}
424
425.itemizedlist li {
426 clear: none;
427}
428
429.filename {
430 font-size: medium;
431 font-family: Courier, monospace;
432}
433
434
435div.navheader, div.heading{
436 position: absolute;
437 left: 0em;
438 top: 0em;
439 width: 100%;
440 background-color: #cdf;
441 width: 100%;
442}
443
444div.navfooter, div.footing{
445 position: fixed;
446 left: 0em;
447 bottom: 0em;
448 background-color: #eee;
449 width: 100%;
450}
451
452
453div.navheader td,
454div.navfooter td {
455 font-size: 66%;
456}
457
458div.navheader table th {
459 /*font-family: Georgia, Times, serif;*/
460 /*font-size: x-large;*/
461 font-size: 80%;
462}
463
464div.navheader table {
465 border-left: 0em;
466 border-right: 0em;
467 border-top: 0em;
468 width: 100%;
469}
470
471div.navfooter table {
472 border-left: 0em;
473 border-right: 0em;
474 border-bottom: 0em;
475 width: 100%;
476}
477
478div.navheader table td a,
479div.navfooter table td a {
480 color: #777;
481 text-decoration: none;
482}
483
484/* normal text in the footer */
485div.navfooter table td {
486 color: black;
487}
488
489div.navheader table td a:visited,
490div.navfooter table td a:visited {
491 color: #444;
492}
493
494
495/* links in header and footer */
496div.navheader table td a:hover,
497div.navfooter table td a:hover {
498 text-decoration: underline;
499 background-color: transparent;
500 color: #33a;
501}
502
503div.navheader hr,
504div.navfooter hr {
505 display: none;
506}
507
508
509.qandaset tr.question td p {
510 margin: 0em 0em 1em 0em;
511 padding: 0em 0em 0em 0em;
512}
513
514.qandaset tr.answer td p {
515 margin: 0em 0em 1em 0em;
516 padding: 0em 0em 0em 0em;
517}
518.answer td {
519 padding-bottom: 1.5em;
520}
521
522.emphasis {
523 font-weight: bold;
524}
525
526
527 /************* /
528 / decorations /
529/ *************/
530
531.titlepage {
532}
533
534.part .title {
535}
536
537.subtitle {
538 border: none;
539}
540
541/*
542h1 {
543 border: none;
544}
545
546h2 {
547 border-top: solid 0.2em;
548 border-bottom: solid 0.06em;
549}
550
551h3 {
552 border-top: 0em;
553 border-bottom: solid 0.06em;
554}
555
556h4 {
557 border: 0em;
558 border-bottom: solid 0.06em;
559}
560
561h5 {
562 border: 0em;
563}
564*/
565
566.programlisting {
567 border: solid 1px;
568}
569
570div.figure,
571div.table,
572div.informalfigure,
573div.informaltable,
574div.informalexample,
575div.example {
576 border: 1px solid;
577}
578
579
580
581.tip,
582.warning,
583.caution,
584.note {
585 border: 1px solid;
586}
587
588.tip table th,
589.warning table th,
590.caution table th,
591.note table th {
592 border-bottom: 1px solid;
593}
594
595.question td {
596 border-top: 1px solid black;
597}
598
599.answer {
600}
601
602
603b.keycap,
604.keycap {
605 border: 1px solid;
606}
607
608
609div.navheader, div.heading{
610 border-bottom: 1px solid;
611}
612
613
614div.navfooter, div.footing{
615 border-top: 1px solid;
616}
617
618 /********* /
619 / colors /
620/ *********/
621
622body {
623 color: #333;
624 background: white;
625}
626
627a {
628 background: transparent;
629}
630
631a:hover {
632 background-color: #dedede;
633}
634
635
636h1,
637h2,
638h3,
639h4,
640h5,
641h6,
642h7,
643h8 {
644 background-color: transparent;
645}
646
647hr {
648 border-color: #aaa;
649}
650
651
652.tip, .warning, .caution, .note {
653 border-color: #fff;
654}
655
656
657.tip table th,
658.warning table th,
659.caution table th,
660.note table th {
661 border-bottom-color: #fff;
662}
663
664
665.warning {
666 background-color: #f0f0f2;
667}
668
669.caution {
670 background-color: #f0f0f2;
671}
672
673.tip {
674 background-color: #f0f0f2;
675}
676
677.note {
678 background-color: #f0f0f2;
679}
680
681.glossary dl dt,
682.variablelist dl dt,
683.variablelist dl dt span.term {
684 color: #044;
685}
686
687div.figure,
688div.table,
689div.example,
690div.informalfigure,
691div.informaltable,
692div.informalexample {
693 border-color: #aaa;
694}
695
696pre.programlisting {
697 color: black;
698 background-color: #fff;
699 border-color: #aaa;
700 border-width: 2px;
701}
702
703.guimenu,
704.guilabel,
705.guimenuitem {
706 background-color: #eee;
707}
708
709
710b.keycap,
711.keycap {
712 background-color: #eee;
713 border-color: #999;
714}
715
716
717div.navheader {
718 border-color: black;
719}
720
721
722div.navfooter {
723 border-color: black;
724}
725
726
727 /*********** /
728 / graphics /
729/ ***********/
730
731/*
732body {
733 background-image: url("images/body_bg.jpg");
734 background-attachment: fixed;
735}
736
737.navheader,
738.note,
739.tip {
740 background-image: url("images/note_bg.jpg");
741 background-attachment: fixed;
742}
743
744.warning,
745.caution {
746 background-image: url("images/warning_bg.jpg");
747 background-attachment: fixed;
748}
749
750.figure,
751.informalfigure,
752.example,
753.informalexample,
754.table,
755.informaltable {
756 background-image: url("images/figure_bg.jpg");
757 background-attachment: fixed;
758}
759
760*/
761h1,
762h2,
763h3,
764h4,
765h5,
766h6,
767h7{
768}
769
770/*
771Example of how to stick an image as part of the title.
772
773div.article .titlepage .title
774{
775 background-image: url("figures/white-on-black.png");
776 background-position: center;
777 background-repeat: repeat-x;
778}
779*/
780
781div.preface .titlepage .title,
782div.colophon .title,
783div.chapter .titlepage .title,
784div.article .titlepage .title
785{
786}
787
788div.section div.section .titlepage .title,
789div.sect2 .titlepage .title {
790 background: none;
791}
792
793
794h1.title {
795 background-color: transparent;
796 background-image: url("figures/yocto-project-bw.png");
797 background-repeat: no-repeat;
798 height: 256px;
799 text-indent: -9000px;
800 overflow:hidden;
801}
802
803h2.subtitle {
804 background-color: transparent;
805 text-indent: -9000px;
806 overflow:hidden;
807 width: 0px;
808 display: none;
809}
810
811 /*************************************** /
812 / pippin.gimp.org specific alterations /
813/ ***************************************/
814
815/*
816div.heading, div.navheader {
817 color: #777;
818 font-size: 80%;
819 padding: 0;
820 margin: 0;
821 text-align: left;
822 position: absolute;
823 top: 0px;
824 left: 0px;
825 width: 100%;
826 height: 50px;
827 background: url('/gfx/heading_bg.png') transparent;
828 background-repeat: repeat-x;
829 background-attachment: fixed;
830 border: none;
831}
832
833div.heading a {
834 color: #444;
835}
836
837div.footing, div.navfooter {
838 border: none;
839 color: #ddd;
840 font-size: 80%;
841 text-align:right;
842
843 width: 100%;
844 padding-top: 10px;
845 position: absolute;
846 bottom: 0px;
847 left: 0px;
848
849 background: url('/gfx/footing_bg.png') transparent;
850}
851*/
852
853
854
855 /****************** /
856 / nasty ie tweaks /
857/ ******************/
858
859/*
860div.heading, div.navheader {
861 width:expression(document.body.clientWidth + "px");
862}
863
864div.footing, div.navfooter {
865 width:expression(document.body.clientWidth + "px");
866 margin-left:expression("-5em");
867}
868body {
869 padding:expression("4em 5em 0em 5em");
870}
871*/
872
873 /**************************************** /
874 / mozilla vendor specific css extensions /
875/ ****************************************/
876/*
877div.navfooter, div.footing{
878 -moz-opacity: 0.8em;
879}
880
881div.figure,
882div.table,
883div.informalfigure,
884div.informaltable,
885div.informalexample,
886div.example,
887.tip,
888.warning,
889.caution,
890.note {
891 -moz-border-radius: 0.5em;
892}
893
894b.keycap,
895.keycap {
896 -moz-border-radius: 0.3em;
897}
898*/
899
900table tr td table tr td {
901 display: none;
902}
903
904
905hr {
906 display: none;
907}
908
909table {
910 border: 0em;
911}
912
913 .photo {
914 float: right;
915 margin-left: 1.5em;
916 margin-bottom: 1.5em;
917 margin-top: 0em;
918 max-width: 17em;
919 border: 1px solid gray;
920 padding: 3px;
921 background: white;
922}
923 .seperator {
924 padding-top: 2em;
925 clear: both;
926 }
927
928 #validators {
929 margin-top: 5em;
930 text-align: right;
931 color: #777;
932 }
933 @media print {
934 body {
935 font-size: 8pt;
936 }
937 .noprint {
938 display: none;
939 }
940 }
941
942
943.tip,
944.note {
945 background: #f0f0f2;
946 color: #333;
947 padding: 20px;
948 margin: 20px;
949}
950
951.tip h3,
952.note h3 {
953 padding: 0em;
954 margin: 0em;
955 font-size: 2em;
956 font-weight: bold;
957 color: #333;
958}
959
960.tip a,
961.note a {
962 color: #333;
963 text-decoration: underline;
964}
965
966.footnote {
967 font-size: small;
968 color: #333;
969}
970
971/* Changes the announcement text */
972.tip h3,
973.warning h3,
974.caution h3,
975.note h3 {
976 font-size:large;
977 color: #00557D;
978}
979
diff --git a/documentation/adt-manual/figures/adt-title.png b/documentation/adt-manual/figures/adt-title.png
new file mode 100644
index 0000000000..6e71e41f1a
--- /dev/null
+++ b/documentation/adt-manual/figures/adt-title.png
Binary files differ
diff --git a/documentation/bsp-guide/bsp-guide-customization.xsl b/documentation/bsp-guide/bsp-guide-customization.xsl
new file mode 100644
index 0000000000..5560289ee8
--- /dev/null
+++ b/documentation/bsp-guide/bsp-guide-customization.xsl
@@ -0,0 +1,10 @@
1<?xml version='1.0'?>
2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
3
4 <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl" />
5
6 <xsl:param name="html.stylesheet" select="'bsp-style.css'" />
7 <xsl:param name="chapter.autolabel" select="1" />
8 <xsl:param name="section.autolabel" select="1" />
9 <xsl:param name="section.label.includes.component.label" select="1" />
10</xsl:stylesheet>
diff --git a/documentation/bsp-guide/bsp-guide-eclipse-customization.xsl b/documentation/bsp-guide/bsp-guide-eclipse-customization.xsl
new file mode 100644
index 0000000000..1c80bee1cf
--- /dev/null
+++ b/documentation/bsp-guide/bsp-guide-eclipse-customization.xsl
@@ -0,0 +1,27 @@
1<?xml version='1.0'?>
2<xsl:stylesheet
3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4 xmlns="http://www.w3.org/1999/xhtml"
5 xmlns:fo="http://www.w3.org/1999/XSL/Format"
6 version="1.0">
7
8 <xsl:import
9 href="http://docbook.sourceforge.net/release/xsl/current/eclipse/eclipse3.xsl" />
10
11 <xsl:param name="chunker.output.indent" select="'yes'"/>
12 <xsl:param name="chunk.quietly" select="1"/>
13 <xsl:param name="chunk.first.sections" select="1"/>
14 <xsl:param name="chunk.section.depth" select="10"/>
15 <xsl:param name="use.id.as.filename" select="1"/>
16 <xsl:param name="ulink.target" select="'_self'" />
17 <xsl:param name="base.dir" select="'html/bsp-guide/'"/>
18 <xsl:param name="html.stylesheet" select="'../book.css'"/>
19 <xsl:param name="eclipse.manifest" select="0"/>
20 <xsl:param name="create.plugin.xml" select="0"/>
21 <xsl:param name="suppress.navigation" select="1"/>
22 <xsl:param name="generate.index" select="0"/>
23 <xsl:param name="chapter.autolabel" select="1" />
24 <xsl:param name="appendix.autolabel" select="1" />
25 <xsl:param name="section.autolabel" select="1" />
26 <xsl:param name="section.label.includes.component.label" select="1" />
27</xsl:stylesheet>
diff --git a/documentation/bsp-guide/bsp-guide.xml b/documentation/bsp-guide/bsp-guide.xml
new file mode 100644
index 0000000000..3b246d9e6c
--- /dev/null
+++ b/documentation/bsp-guide/bsp-guide.xml
@@ -0,0 +1,123 @@
1<!DOCTYPE book 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<book id='bsp-guide' lang='en'
6 xmlns:xi="http://www.w3.org/2003/XInclude"
7 xmlns="http://docbook.org/ns/docbook"
8 >
9 <bookinfo>
10
11 <mediaobject>
12 <imageobject>
13 <imagedata fileref='figures/bsp-title.png'
14 format='SVG'
15 align='center' scalefit='1' width='100%'/>
16 </imageobject>
17 </mediaobject>
18
19 <title>
20 Yocto Project Board Support Package Developer's Guide
21 </title>
22
23 <authorgroup>
24 <author>
25 <firstname>Tom</firstname> <surname>Zanussi</surname>
26 <affiliation>
27 <orgname>Intel Corporation</orgname>
28 </affiliation>
29 <email>tom.zanussi@intel.com</email>
30 </author>
31 <author>
32 <firstname>Richard</firstname> <surname>Purdie</surname>
33 <affiliation>
34 <orgname>Linux Foundation</orgname>
35 </affiliation>
36 <email>richard.purdie@linuxfoundation.org</email>
37 </author>
38 </authorgroup>
39
40 <revhistory>
41 <revision>
42 <revnumber>0.9</revnumber>
43 <date>24 November 2010</date>
44 <revremark>The initial document draft released with the Yocto Project 0.9 Release.</revremark>
45 </revision>
46 <revision>
47 <revnumber>1.0</revnumber>
48 <date>6 April 2011</date>
49 <revremark>Released with the Yocto Project 1.0 Release.</revremark>
50 </revision>
51 <revision>
52 <revnumber>1.0.1</revnumber>
53 <date>23 May 2011</date>
54 <revremark>Released with the Yocto Project 1.0.1 Release.</revremark>
55 </revision>
56 <revision>
57 <revnumber>1.1</revnumber>
58 <date>6 October 2011</date>
59 <revremark>Released with the Yocto Project 1.1 Release.</revremark>
60 </revision>
61 <revision>
62 <revnumber>1.2</revnumber>
63 <date>April 2012</date>
64 <revremark>Released with the Yocto Project 1.2 Release.</revremark>
65 </revision>
66 <revision>
67 <revnumber>1.3</revnumber>
68 <date>October 2012</date>
69 <revremark>Released with the Yocto Project 1.3 Release.</revremark>
70 </revision>
71 <revision>
72 <revnumber>1.4</revnumber>
73 <date>April 2013</date>
74 <revremark>Released with the Yocto Project 1.4 Release.</revremark>
75 </revision>
76 <revision>
77 <revnumber>1.5</revnumber>
78 <date>October 2013</date>
79 <revremark>Released with the Yocto Project 1.5 Release.</revremark>
80 </revision>
81 <revision>
82 <revnumber>1.5.1</revnumber>
83 <date>January 2014</date>
84 <revremark>Released with the Yocto Project 1.5.1 Release.</revremark>
85 </revision>
86 <revision>
87 <revnumber>1.6</revnumber>
88 <date>April 2014</date>
89 <revremark>Released with the Yocto Project 1.6 Release.</revremark>
90 </revision>
91 </revhistory>
92
93 <copyright>
94 <year>&COPYRIGHT_YEAR;</year>
95 <holder>Linux Foundation</holder>
96 </copyright>
97
98 <legalnotice>
99 <para>
100 Permission is granted to copy, distribute and/or modify this document under
101 the terms of the <ulink type="http" url="http://creativecommons.org/licenses/by-nc-sa/2.0/uk/">Creative Commons Attribution-Non-Commercial-Share Alike 2.0 UK: England &amp; Wales</ulink> as published by Creative Commons.
102 </para>
103 <note>
104 For the latest version of this manual associated with this
105 Yocto Project release, see the
106 <ulink url='&YOCTO_DOCS_BSP_URL;'>Yocto Project Board Support Package (BSP) Developer's Guide</ulink>
107 from the Yocto Project website.
108 </note>
109 </legalnotice>
110
111 </bookinfo>
112
113 <xi:include href="bsp.xml"/>
114
115<!-- <index id='index'>
116 <title>Index</title>
117 </index>
118-->
119
120</book>
121<!--
122vim: expandtab tw=80 ts=4
123-->
diff --git a/documentation/bsp-guide/bsp-style.css b/documentation/bsp-guide/bsp-style.css
new file mode 100644
index 0000000000..4a1a45e727
--- /dev/null
+++ b/documentation/bsp-guide/bsp-style.css
@@ -0,0 +1,980 @@
1/*
2 Generic XHTML / DocBook XHTML CSS Stylesheet.
3
4 Browser wrangling and typographic design by
5 Oyvind Kolas / pippin@gimp.org
6
7 Customised for Poky by
8 Matthew Allum / mallum@o-hand.com
9
10 Thanks to:
11 Liam R. E. Quin
12 William Skaggs
13 Jakub Steiner
14
15 Structure
16 ---------
17
18 The stylesheet is divided into the following sections:
19
20 Positioning
21 Margins, paddings, width, font-size, clearing.
22 Decorations
23 Borders, style
24 Colors
25 Colors
26 Graphics
27 Graphical backgrounds
28 Nasty IE tweaks
29 Workarounds needed to make it work in internet explorer,
30 currently makes the stylesheet non validating, but up until
31 this point it is validating.
32 Mozilla extensions
33 Transparency for footer
34 Rounded corners on boxes
35
36*/
37
38
39 /*************** /
40 / Positioning /
41/ ***************/
42
43body {
44 font-family: Verdana, Sans, sans-serif;
45
46 min-width: 640px;
47 width: 80%;
48 margin: 0em auto;
49 padding: 2em 5em 5em 5em;
50 color: #333;
51}
52
53h1,h2,h3,h4,h5,h6,h7 {
54 font-family: Arial, Sans;
55 color: #00557D;
56 clear: both;
57}
58
59h1 {
60 font-size: 2em;
61 text-align: left;
62 padding: 0em 0em 0em 0em;
63 margin: 2em 0em 0em 0em;
64}
65
66h2.subtitle {
67 margin: 0.10em 0em 3.0em 0em;
68 padding: 0em 0em 0em 0em;
69 font-size: 1.8em;
70 padding-left: 20%;
71 font-weight: normal;
72 font-style: italic;
73}
74
75h2 {
76 margin: 2em 0em 0.66em 0em;
77 padding: 0.5em 0em 0em 0em;
78 font-size: 1.5em;
79 font-weight: bold;
80}
81
82h3.subtitle {
83 margin: 0em 0em 1em 0em;
84 padding: 0em 0em 0em 0em;
85 font-size: 142.14%;
86 text-align: right;
87}
88
89h3 {
90 margin: 1em 0em 0.5em 0em;
91 padding: 1em 0em 0em 0em;
92 font-size: 140%;
93 font-weight: bold;
94}
95
96h4 {
97 margin: 1em 0em 0.5em 0em;
98 padding: 1em 0em 0em 0em;
99 font-size: 120%;
100 font-weight: bold;
101}
102
103h5 {
104 margin: 1em 0em 0.5em 0em;
105 padding: 1em 0em 0em 0em;
106 font-size: 110%;
107 font-weight: bold;
108}
109
110h6 {
111 margin: 1em 0em 0em 0em;
112 padding: 1em 0em 0em 0em;
113 font-size: 110%;
114 font-weight: bold;
115}
116
117.authorgroup {
118 background-color: transparent;
119 background-repeat: no-repeat;
120 padding-top: 256px;
121 background-image: url("figures/bsp-title.png");
122 background-position: left top;
123 margin-top: -256px;
124 padding-right: 50px;
125 margin-left: 0px;
126 text-align: right;
127 width: 740px;
128}
129
130h3.author {
131 margin: 0em 0me 0em 0em;
132 padding: 0em 0em 0em 0em;
133 font-weight: normal;
134 font-size: 100%;
135 color: #333;
136 clear: both;
137}
138
139.author tt.email {
140 font-size: 66%;
141}
142
143.titlepage hr {
144 width: 0em;
145 clear: both;
146}
147
148.revhistory {
149 padding-top: 2em;
150 clear: both;
151}
152
153.toc,
154.list-of-tables,
155.list-of-examples,
156.list-of-figures {
157 padding: 1.33em 0em 2.5em 0em;
158 color: #00557D;
159}
160
161.toc p,
162.list-of-tables p,
163.list-of-figures p,
164.list-of-examples p {
165 padding: 0em 0em 0em 0em;
166 padding: 0em 0em 0.3em;
167 margin: 1.5em 0em 0em 0em;
168}
169
170.toc p b,
171.list-of-tables p b,
172.list-of-figures p b,
173.list-of-examples p b{
174 font-size: 100.0%;
175 font-weight: bold;
176}
177
178.toc dl,
179.list-of-tables dl,
180.list-of-figures dl,
181.list-of-examples dl {
182 margin: 0em 0em 0.5em 0em;
183 padding: 0em 0em 0em 0em;
184}
185
186.toc dt {
187 margin: 0em 0em 0em 0em;
188 padding: 0em 0em 0em 0em;
189}
190
191.toc dd {
192 margin: 0em 0em 0em 2.6em;
193 padding: 0em 0em 0em 0em;
194}
195
196div.glossary dl,
197div.variablelist dl {
198}
199
200.glossary dl dt,
201.variablelist dl dt,
202.variablelist dl dt span.term {
203 font-weight: normal;
204 width: 20em;
205 text-align: right;
206}
207
208.variablelist dl dt {
209 margin-top: 0.5em;
210}
211
212.glossary dl dd,
213.variablelist dl dd {
214 margin-top: -1em;
215 margin-left: 25.5em;
216}
217
218.glossary dd p,
219.variablelist dd p {
220 margin-top: 0em;
221 margin-bottom: 1em;
222}
223
224
225div.calloutlist table td {
226 padding: 0em 0em 0em 0em;
227 margin: 0em 0em 0em 0em;
228}
229
230div.calloutlist table td p {
231 margin-top: 0em;
232 margin-bottom: 1em;
233}
234
235div p.copyright {
236 text-align: left;
237}
238
239div.legalnotice p.legalnotice-title {
240 margin-bottom: 0em;
241}
242
243p {
244 line-height: 1.5em;
245 margin-top: 0em;
246
247}
248
249dl {
250 padding-top: 0em;
251}
252
253hr {
254 border: solid 1px;
255}
256
257
258.mediaobject,
259.mediaobjectco {
260 text-align: center;
261}
262
263img {
264 border: none;
265}
266
267ul {
268 padding: 0em 0em 0em 1.5em;
269}
270
271ul li {
272 padding: 0em 0em 0em 0em;
273}
274
275ul li p {
276 text-align: left;
277}
278
279table {
280 width :100%;
281}
282
283th {
284 padding: 0.25em;
285 text-align: left;
286 font-weight: normal;
287 vertical-align: top;
288}
289
290td {
291 padding: 0.25em;
292 vertical-align: top;
293}
294
295p a[id] {
296 margin: 0px;
297 padding: 0px;
298 display: inline;
299 background-image: none;
300}
301
302a {
303 text-decoration: underline;
304 color: #444;
305}
306
307pre {
308 overflow: auto;
309}
310
311a:hover {
312 text-decoration: underline;
313 /*font-weight: bold;*/
314}
315
316
317div.informalfigure,
318div.informalexample,
319div.informaltable,
320div.figure,
321div.table,
322div.example {
323 margin: 1em 0em;
324 padding: 1em;
325 page-break-inside: avoid;
326}
327
328
329div.informalfigure p.title b,
330div.informalexample p.title b,
331div.informaltable p.title b,
332div.figure p.title b,
333div.example p.title b,
334div.table p.title b{
335 padding-top: 0em;
336 margin-top: 0em;
337 font-size: 100%;
338 font-weight: normal;
339}
340
341.mediaobject .caption,
342.mediaobject .caption p {
343 text-align: center;
344 font-size: 80%;
345 padding-top: 0.5em;
346 padding-bottom: 0.5em;
347}
348
349.epigraph {
350 padding-left: 55%;
351 margin-bottom: 1em;
352}
353
354.epigraph p {
355 text-align: left;
356}
357
358.epigraph .quote {
359 font-style: italic;
360}
361.epigraph .attribution {
362 font-style: normal;
363 text-align: right;
364}
365
366span.application {
367 font-style: italic;
368}
369
370.programlisting {
371 font-family: monospace;
372 font-size: 80%;
373 white-space: pre;
374 margin: 1.33em 0em;
375 padding: 1.33em;
376}
377
378.tip,
379.warning,
380.caution,
381.note {
382 margin-top: 1em;
383 margin-bottom: 1em;
384
385}
386
387/* force full width of table within div */
388.tip table,
389.warning table,
390.caution table,
391.note table {
392 border: none;
393 width: 100%;
394}
395
396
397.tip table th,
398.warning table th,
399.caution table th,
400.note table th {
401 padding: 0.8em 0.0em 0.0em 0.0em;
402 margin : 0em 0em 0em 0em;
403}
404
405.tip p,
406.warning p,
407.caution p,
408.note p {
409 margin-top: 0.5em;
410 margin-bottom: 0.5em;
411 padding-right: 1em;
412 text-align: left;
413}
414
415.acronym {
416 text-transform: uppercase;
417}
418
419b.keycap,
420.keycap {
421 padding: 0.09em 0.3em;
422 margin: 0em;
423}
424
425.itemizedlist li {
426 clear: none;
427}
428
429.filename {
430 font-size: medium;
431 font-family: Courier, monospace;
432}
433
434
435div.navheader, div.heading{
436 position: absolute;
437 left: 0em;
438 top: 0em;
439 width: 100%;
440 background-color: #cdf;
441 width: 100%;
442}
443
444div.navfooter, div.footing{
445 position: fixed;
446 left: 0em;
447 bottom: 0em;
448 background-color: #eee;
449 width: 100%;
450}
451
452
453div.navheader td,
454div.navfooter td {
455 font-size: 66%;
456}
457
458div.navheader table th {
459 /*font-family: Georgia, Times, serif;*/
460 /*font-size: x-large;*/
461 font-size: 80%;
462}
463
464div.navheader table {
465 border-left: 0em;
466 border-right: 0em;
467 border-top: 0em;
468 width: 100%;
469}
470
471div.navfooter table {
472 border-left: 0em;
473 border-right: 0em;
474 border-bottom: 0em;
475 width: 100%;
476}
477
478div.navheader table td a,
479div.navfooter table td a {
480 color: #777;
481 text-decoration: none;
482}
483
484/* normal text in the footer */
485div.navfooter table td {
486 color: black;
487}
488
489div.navheader table td a:visited,
490div.navfooter table td a:visited {
491 color: #444;
492}
493
494
495/* links in header and footer */
496div.navheader table td a:hover,
497div.navfooter table td a:hover {
498 text-decoration: underline;
499 background-color: transparent;
500 color: #33a;
501}
502
503div.navheader hr,
504div.navfooter hr {
505 display: none;
506}
507
508
509.qandaset tr.question td p {
510 margin: 0em 0em 1em 0em;
511 padding: 0em 0em 0em 0em;
512}
513
514.qandaset tr.answer td p {
515 margin: 0em 0em 1em 0em;
516 padding: 0em 0em 0em 0em;
517}
518.answer td {
519 padding-bottom: 1.5em;
520}
521
522.emphasis {
523 font-weight: bold;
524}
525
526
527 /************* /
528 / decorations /
529/ *************/
530
531.titlepage {
532}
533
534.part .title {
535}
536
537.subtitle {
538 border: none;
539}
540
541/*
542h1 {
543 border: none;
544}
545
546h2 {
547 border-top: solid 0.2em;
548 border-bottom: solid 0.06em;
549}
550
551h3 {
552 border-top: 0em;
553 border-bottom: solid 0.06em;
554}
555
556h4 {
557 border: 0em;
558 border-bottom: solid 0.06em;
559}
560
561h5 {
562 border: 0em;
563}
564*/
565
566.programlisting {
567 border: solid 1px;
568}
569
570div.figure,
571div.table,
572div.informalfigure,
573div.informaltable,
574div.informalexample,
575div.example {
576 border: 1px solid;
577}
578
579
580
581.tip,
582.warning,
583.caution,
584.note {
585 border: 1px solid;
586}
587
588.tip table th,
589.warning table th,
590.caution table th,
591.note table th {
592 border-bottom: 1px solid;
593}
594
595.question td {
596 border-top: 1px solid black;
597}
598
599.answer {
600}
601
602
603b.keycap,
604.keycap {
605 border: 1px solid;
606}
607
608
609div.navheader, div.heading{
610 border-bottom: 1px solid;
611}
612
613
614div.navfooter, div.footing{
615 border-top: 1px solid;
616}
617
618 /********* /
619 / colors /
620/ *********/
621
622body {
623 color: #333;
624 background: white;
625}
626
627a {
628 background: transparent;
629}
630
631a:hover {
632 background-color: #dedede;
633}
634
635
636h1,
637h2,
638h3,
639h4,
640h5,
641h6,
642h7,
643h8 {
644 background-color: transparent;
645}
646
647hr {
648 border-color: #aaa;
649}
650
651
652.tip, .warning, .caution, .note {
653 border-color: #fff;
654}
655
656
657.tip table th,
658.warning table th,
659.caution table th,
660.note table th {
661 border-bottom-color: #fff;
662}
663
664
665.warning {
666 background-color: #f0f0f2;
667}
668
669.caution {
670 background-color: #f0f0f2;
671}
672
673.tip {
674 background-color: #f0f0f2;
675}
676
677.note {
678 background-color: #f0f0f2;
679}
680
681.glossary dl dt,
682.variablelist dl dt,
683.variablelist dl dt span.term {
684 color: #044;
685}
686
687div.figure,
688div.table,
689div.example,
690div.informalfigure,
691div.informaltable,
692div.informalexample {
693 border-color: #aaa;
694}
695
696pre.programlisting {
697 color: black;
698 background-color: #fff;
699 border-color: #aaa;
700 border-width: 2px;
701}
702
703.guimenu,
704.guilabel,
705.guimenuitem {
706 background-color: #eee;
707}
708
709
710b.keycap,
711.keycap {
712 background-color: #eee;
713 border-color: #999;
714}
715
716
717div.navheader {
718 border-color: black;
719}
720
721
722div.navfooter {
723 border-color: black;
724}
725
726
727 /*********** /
728 / graphics /
729/ ***********/
730
731/*
732body {
733 background-image: url("images/body_bg.jpg");
734 background-attachment: fixed;
735}
736
737.navheader,
738.note,
739.tip {
740 background-image: url("images/note_bg.jpg");
741 background-attachment: fixed;
742}
743
744.warning,
745.caution {
746 background-image: url("images/warning_bg.jpg");
747 background-attachment: fixed;
748}
749
750.figure,
751.informalfigure,
752.example,
753.informalexample,
754.table,
755.informaltable {
756 background-image: url("images/figure_bg.jpg");
757 background-attachment: fixed;
758}
759
760*/
761h1,
762h2,
763h3,
764h4,
765h5,
766h6,
767h7{
768}
769
770/*
771Example of how to stick an image as part of the title.
772
773div.article .titlepage .title
774{
775 background-image: url("figures/white-on-black.png");
776 background-position: center;
777 background-repeat: repeat-x;
778}
779*/
780
781div.preface .titlepage .title,
782div.colophon .title,
783div.chapter .titlepage .title {
784 background-image: url("images/title-bg.png");
785 background-position: bottom;
786 background-repeat: repeat-x;
787}
788
789div.section div.section .titlepage .title,
790div.sect2 .titlepage .title {
791 background: none;
792}
793
794
795h1.title {
796 background-color: transparent;
797 background-image: url("poky-ref-manual.png");
798 background-repeat: no-repeat;
799 height: 256px;
800 text-indent: -9000px;
801 overflow:hidden;
802}
803
804h2.subtitle {
805 background-color: transparent;
806 text-indent: -9000px;
807 overflow:hidden;
808 width: 0px;
809 display: none;
810}
811
812 /*************************************** /
813 / pippin.gimp.org specific alterations /
814/ ***************************************/
815
816/*
817div.heading, div.navheader {
818 color: #777;
819 font-size: 80%;
820 padding: 0;
821 margin: 0;
822 text-align: left;
823 position: absolute;
824 top: 0px;
825 left: 0px;
826 width: 100%;
827 height: 50px;
828 background: url('/gfx/heading_bg.png') transparent;
829 background-repeat: repeat-x;
830 background-attachment: fixed;
831 border: none;
832}
833
834div.heading a {
835 color: #444;
836}
837
838div.footing, div.navfooter {
839 border: none;
840 color: #ddd;
841 font-size: 80%;
842 text-align:right;
843
844 width: 100%;
845 padding-top: 10px;
846 position: absolute;
847 bottom: 0px;
848 left: 0px;
849
850 background: url('/gfx/footing_bg.png') transparent;
851}
852*/
853
854
855
856 /****************** /
857 / nasty ie tweaks /
858/ ******************/
859
860/*
861div.heading, div.navheader {
862 width:expression(document.body.clientWidth + "px");
863}
864
865div.footing, div.navfooter {
866 width:expression(document.body.clientWidth + "px");
867 margin-left:expression("-5em");
868}
869body {
870 padding:expression("4em 5em 0em 5em");
871}
872*/
873
874 /**************************************** /
875 / mozilla vendor specific css extensions /
876/ ****************************************/
877/*
878div.navfooter, div.footing{
879 -moz-opacity: 0.8em;
880}
881
882div.figure,
883div.table,
884div.informalfigure,
885div.informaltable,
886div.informalexample,
887div.example,
888.tip,
889.warning,
890.caution,
891.note {
892 -moz-border-radius: 0.5em;
893}
894
895b.keycap,
896.keycap {
897 -moz-border-radius: 0.3em;
898}
899*/
900
901table tr td table tr td {
902 display: none;
903}
904
905
906hr {
907 display: none;
908}
909
910table {
911 border: 0em;
912}
913
914 .photo {
915 float: right;
916 margin-left: 1.5em;
917 margin-bottom: 1.5em;
918 margin-top: 0em;
919 max-width: 17em;
920 border: 1px solid gray;
921 padding: 3px;
922 background: white;
923}
924 .seperator {
925 padding-top: 2em;
926 clear: both;
927 }
928
929 #validators {
930 margin-top: 5em;
931 text-align: right;
932 color: #777;
933 }
934 @media print {
935 body {
936 font-size: 8pt;
937 }
938 .noprint {
939 display: none;
940 }
941 }
942
943
944.tip,
945.note {
946 background: #f0f0f2;
947 color: #333;
948 padding: 20px;
949 margin: 20px;
950}
951
952.tip h3,
953.note h3 {
954 padding: 0em;
955 margin: 0em;
956 font-size: 2em;
957 font-weight: bold;
958 color: #333;
959}
960
961.tip a,
962.note a {
963 color: #333;
964 text-decoration: underline;
965}
966
967.footnote {
968 font-size: small;
969 color: #333;
970}
971
972/* Changes the announcement text */
973.tip h3,
974.warning h3,
975.caution h3,
976.note h3 {
977 font-size:large;
978 color: #00557D;
979}
980
diff --git a/documentation/bsp-guide/bsp.xml b/documentation/bsp-guide/bsp.xml
new file mode 100644
index 0000000000..eef36cbc3f
--- /dev/null
+++ b/documentation/bsp-guide/bsp.xml
@@ -0,0 +1,1493 @@
1<!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='bsp'>
6
7 <title>Board Support Packages (BSP) - Developer's Guide</title>
8
9 <para>
10 A Board Support Package (BSP) is a collection of information that
11 defines how to support a particular hardware device, set of devices, or
12 hardware platform.
13 The BSP includes information about the hardware features
14 present on the device and kernel configuration information along with any
15 additional hardware drivers required.
16 The BSP also lists any additional software
17 components required in addition to a generic Linux software stack for both
18 essential and optional platform features.
19 </para>
20
21 <para>
22 This guide presents information about BSP Layers, defines a structure for components
23 so that BSPs follow a commonly understood layout, discusses how to customize
24 a recipe for a BSP, addresses BSP licensing, and provides information that
25 shows you how to create and manage a
26 <link linkend='bsp-layers'>BSP Layer</link> using two Yocto Project
27 <link linkend='using-the-yocto-projects-bsp-tools'>BSP Tools</link>.
28 </para>
29
30 <section id='bsp-layers'>
31 <title>BSP Layers</title>
32
33 <para>
34 The BSP consists of a file structure inside a base directory.
35 Collectively, you can think of the base directory and the file structure
36 as a BSP Layer.
37 Although not a strict requirement, layers in the Yocto Project use the
38 following well established naming convention:
39 <literallayout class='monospaced'>
40 meta-&lt;bsp_name&gt;
41 </literallayout>
42 The string "meta-" is prepended to the machine or platform name, which is
43 "bsp_name" in the above form.
44 </para>
45
46 <para>
47 The layer's base directory (<filename>meta-&lt;bsp_name&gt;</filename>) is the root
48 of the BSP Layer.
49 This root is what you add to the
50 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBLAYERS'><filename>BBLAYERS</filename></ulink>
51 variable in the <filename>conf/bblayers.conf</filename> file found in the
52 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
53 Adding the root allows the OpenEmbedded build system to recognize the BSP
54 definition and from it build an image.
55 Here is an example:
56 <literallayout class='monospaced'>
57 BBLAYERS ?= " \
58 /usr/local/src/yocto/meta \
59 /usr/local/src/yocto/meta-yocto \
60 /usr/local/src/yocto/meta-yocto-bsp \
61 /usr/local/src/yocto/meta-mylayer \
62 "
63
64 BBLAYERS_NON_REMOVABLE ?= " \
65 /usr/local/src/yocto/meta \
66 /usr/local/src/yocto/meta-yocto \
67 "
68 </literallayout>
69 </para>
70
71 <para>
72 Some BSPs require additional layers on
73 top of the BSP's root layer in order to be functional.
74 For these cases, you also need to add those layers to the
75 <filename>BBLAYERS</filename> variable in order to build the BSP.
76 You must also specify in the "Dependencies" section of the BSP's
77 <filename>README</filename> file any requirements for additional
78 layers and, preferably, any
79 build instructions that might be contained elsewhere
80 in the <filename>README</filename> file.
81 </para>
82
83 <para>
84 Some layers function as a layer to hold other BSP layers.
85 An example of this type of layer is the <filename>meta-intel</filename> layer.
86 The <filename>meta-intel</filename> layer contains many individual BSP layers.
87 </para>
88
89 <para>
90 For more detailed information on layers, see the
91 "<ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>Understanding and Creating Layers</ulink>"
92 section of the Yocto Project Development Manual.
93 </para>
94 </section>
95
96
97 <section id="bsp-filelayout">
98 <title>Example Filesystem Layout</title>
99
100 <para>
101 Providing a common form allows end-users to understand and become familiar
102 with the layout.
103 A common format also encourages standardization of software support of hardware.
104 </para>
105
106 <para>
107 The proposed form does have elements that are specific to the
108 OpenEmbedded build system.
109 It is intended that this information can be
110 used by other build systems besides the OpenEmbedded build system
111 and that it will be simple
112 to extract information and convert it to other formats if required.
113 The OpenEmbedded build system, through its standard layers mechanism, can directly
114 accept the format described as a layer.
115 The BSP captures all
116 the hardware-specific details in one place in a standard format, which is
117 useful for any person wishing to use the hardware platform regardless of
118 the build system they are using.
119 </para>
120
121 <para>
122 The BSP specification does not include a build system or other tools -
123 it is concerned with the hardware-specific components only.
124 At the end-distribution point, you can ship the BSP combined with a build system
125 and other tools.
126 However, it is important to maintain the distinction that these
127 are separate components that happen to be combined in certain end products.
128 </para>
129
130 <para>
131 Before looking at the common form for the file structure inside a BSP Layer,
132 you should be aware that some requirements do exist in order for a BSP to
133 be considered compliant with the Yocto Project.
134 For that list of requirements, see the
135 "<link linkend='released-bsp-requirements'>Released BSP Requirements</link>"
136 section.
137 </para>
138
139 <para>
140 Below is the common form for the file structure inside a BSP Layer.
141 While you can use this basic form for the standard, realize that the actual structures
142 for specific BSPs could differ.
143
144 <literallayout class='monospaced'>
145 meta-&lt;bsp_name&gt;/
146 meta-&lt;bsp_name&gt;/&lt;bsp_license_file&gt;
147 meta-&lt;bsp_name&gt;/README
148 meta-&lt;bsp_name&gt;/README.sources
149 meta-&lt;bsp_name&gt;/binary/&lt;bootable_images&gt;
150 meta-&lt;bsp_name&gt;/conf/layer.conf
151 meta-&lt;bsp_name&gt;/conf/machine/*.conf
152 meta-&lt;bsp_name&gt;/recipes-bsp/*
153 meta-&lt;bsp_name&gt;/recipes-core/*
154 meta-&lt;bsp_name&gt;/recipes-graphics/*
155 meta-&lt;bsp_name&gt;/recipes-kernel/linux/linux-yocto_&lt;kernel_rev&gt;.bbappend
156 </literallayout>
157 </para>
158
159 <para>
160 Below is an example of the Crown Bay BSP:
161
162 <literallayout class='monospaced'>
163 meta-crownbay/COPYING.MIT
164 meta-crownbay/README
165 meta-crownbay/README.sources
166 meta-crownbay/binary/
167 meta-crownbay/conf/
168 meta-crownbay/conf/layer.conf
169 meta-crownbay/conf/machine/
170 meta-crownbay/conf/machine/crownbay.conf
171 meta-crownbay/conf/machine/crownbay-noemgd.conf
172 meta-crownbay/recipes-bsp/
173 meta-crownbay/recipes-bsp/formfactor/
174 meta-crownbay/recipes-bsp/formfactor/formfactor_0.0.bbappend
175 meta-crownbay/recipes-bsp/formfactor/formfactor/
176 meta-crownbay/recipes-bsp/formfactor/formfactor/crownbay/
177 meta-crownbay/recipes-bsp/formfactor/formfactor/crownbay/machconfig
178 meta-crownbay/recipes-bsp/formfactor/formfactor/crownbay-noemgd/
179 meta-crownbay/recipes-bsp/formfactor/formfactor/crownbay-noemgd/machconfig
180 meta-crownbay/recipes-graphics/
181 meta-crownbay/recipes-graphics/xorg-xserver/
182 meta-crownbay/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bbappend
183 meta-crownbay/recipes-graphics/xorg-xserver/xserver-xf86-config/
184 meta-crownbay/recipes-graphics/xorg-xserver/xserver-xf86-config/crownbay/
185 meta-crownbay/recipes-graphics/xorg-xserver/xserver-xf86-config/crownbay/xorg.conf
186 meta-crownbay/recipes-kernel/
187 meta-crownbay/recipes-kernel/linux/
188 meta-crownbay/recipes-kernel/linux/linux-yocto-dev.bbappend
189 meta-crownbay/recipes-kernel/linux/linux-yocto-rt_3.10.bbappend
190 meta-crownbay/recipes-kernel/linux/linux-yocto_3.10.bbappend
191 meta-crownbay/recipes-kernel/linux/linux-yocto_3.14.bbappend
192 </literallayout>
193 </para>
194
195 <para>
196 The following sections describe each part of the proposed BSP format.
197 </para>
198
199 <section id="bsp-filelayout-license">
200 <title>License Files</title>
201
202 <para>
203 You can find these files in the BSP Layer at:
204 <literallayout class='monospaced'>
205 meta-&lt;bsp_name&gt;/&lt;bsp_license_file&gt;
206 </literallayout>
207 </para>
208
209 <para>
210 These optional files satisfy licensing requirements for the BSP.
211 The type or types of files here can vary depending on the licensing requirements.
212 For example, in the Crown Bay BSP all licensing requirements are handled with the
213 <filename>COPYING.MIT</filename> file.
214 </para>
215
216 <para>
217 Licensing files can be MIT, BSD, GPLv*, and so forth.
218 These files are recommended for the BSP but are optional and totally up to the BSP developer.
219 </para>
220 </section>
221
222 <section id="bsp-filelayout-readme">
223 <title>README File</title>
224 <para>
225 You can find this file in the BSP Layer at:
226 <literallayout class='monospaced'>
227 meta-&lt;bsp_name&gt;/README
228 </literallayout>
229 </para>
230
231 <para>
232 This file provides information on how to boot the live images that are optionally
233 included in the <filename>binary/</filename> directory.
234 The <filename>README</filename> file also provides special information needed for
235 building the image.
236 </para>
237
238 <para>
239 At a minimum, the <filename>README</filename> file must
240 contain a list of dependencies, such as the names of
241 any other layers on which the BSP depends and the name of
242 the BSP maintainer with his or her contact information.
243 </para>
244 </section>
245
246 <section id="bsp-filelayout-readme-sources">
247 <title>README.sources File</title>
248 <para>
249 You can find this file in the BSP Layer at:
250 <literallayout class='monospaced'>
251 meta-&lt;bsp_name&gt;/README.sources
252 </literallayout>
253 </para>
254
255 <para>
256 This file provides information on where to locate the BSP source files.
257 For example, information provides where to find the sources that comprise
258 the images shipped with the BSP.
259 Information is also included to help you find the
260 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
261 used to generate the images that ship with the BSP.
262 </para>
263 </section>
264
265 <section id="bsp-filelayout-binary">
266 <title>Pre-built User Binaries</title>
267 <para>
268 You can find these files in the BSP Layer at:
269 <literallayout class='monospaced'>
270 meta-&lt;bsp_name&gt;/binary/&lt;bootable_images&gt;
271 </literallayout>
272 </para>
273
274 <para>
275 This optional area contains useful pre-built kernels and user-space filesystem
276 images appropriate to the target system.
277 This directory typically contains graphical (e.g. Sato) and minimal live images
278 when the BSP tarball has been created and made available in the
279 <ulink url='&YOCTO_HOME_URL;'>Yocto Project</ulink> website.
280 You can use these kernels and images to get a system running and quickly get started
281 on development tasks.
282 </para>
283
284 <para>
285 The exact types of binaries present are highly hardware-dependent.
286 However, a README file should be present in the BSP Layer that explains how to use
287 the kernels and images with the target hardware.
288 If pre-built binaries are present, source code to meet licensing requirements must also
289 exist in some form.
290 </para>
291 </section>
292
293 <section id='bsp-filelayout-layer'>
294 <title>Layer Configuration File</title>
295 <para>
296 You can find this file in the BSP Layer at:
297 <literallayout class='monospaced'>
298 meta-&lt;bsp_name&gt;/conf/layer.conf
299 </literallayout>
300 </para>
301
302 <para>
303 The <filename>conf/layer.conf</filename> file identifies the file structure as a
304 layer, identifies the
305 contents of the layer, and contains information about how the build
306 system should use it.
307 Generally, a standard boilerplate file such as the following works.
308 In the following example, you would replace "<filename>bsp</filename>" and
309 "<filename>_bsp</filename>" with the actual name
310 of the BSP (i.e. <filename>&lt;bsp_name&gt;</filename> from the example template).
311 </para>
312
313 <para>
314 <literallayout class='monospaced'>
315 # We have a conf and classes directory, add to BBPATH
316 BBPATH .= ":${LAYERDIR}"
317
318 # We have a recipes directory, add to BBFILES
319 BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
320 ${LAYERDIR}/recipes-*/*/*.bbappend"
321
322 BBFILE_COLLECTIONS += "bsp"
323 BBFILE_PATTERN_bsp = "^${LAYERDIR}/"
324 BBFILE_PRIORITY_bsp = "6"
325 </literallayout>
326 </para>
327
328 <para>
329 To illustrate the string substitutions, here are the corresponding statements
330 from the Crown Bay <filename>conf/layer.conf</filename> file:
331 <literallayout class='monospaced'>
332 BBFILE_COLLECTIONS += "crownbay"
333 BBFILE_PATTERN_crownbay = "^${LAYERDIR}/"
334 BBFILE_PRIORITY_crownbay = "6"
335 </literallayout>
336 </para>
337
338 <para>
339 This file simply makes
340 <ulink url='&YOCTO_DOCS_DEV_URL;#bitbake-term'>BitBake</ulink>
341 aware of the recipes and configuration directories.
342 The file must exist so that the OpenEmbedded build system can recognize the BSP.
343 </para>
344 </section>
345
346 <section id="bsp-filelayout-machine">
347 <title>Hardware Configuration Options</title>
348 <para>
349 You can find these files in the BSP Layer at:
350 <literallayout class='monospaced'>
351 meta-&lt;bsp_name&gt;/conf/machine/*.conf
352 </literallayout>
353 </para>
354
355 <para>
356 The machine files bind together all the information contained elsewhere
357 in the BSP into a format that the build system can understand.
358 If the BSP supports multiple machines, multiple machine configuration files
359 can be present.
360 These filenames correspond to the values to which users have set the
361 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink> variable.
362 </para>
363
364 <para>
365 These files define things such as the kernel package to use
366 (<ulink url='&YOCTO_DOCS_REF_URL;#var-PREFERRED_PROVIDER'><filename>PREFERRED_PROVIDER</filename></ulink>
367 of virtual/kernel), the hardware drivers to
368 include in different types of images, any special software components
369 that are needed, any bootloader information, and also any special image
370 format requirements.
371 </para>
372
373 <para>
374 Each BSP Layer requires at least one machine file.
375 However, you can supply more than one file.
376 </para>
377
378 <para>
379 This <filename>crownbay.conf</filename> file could also include
380 a hardware "tuning" file that is commonly used to
381 define the package architecture and specify
382 optimization flags, which are carefully chosen to give best
383 performance on a given processor.
384 </para>
385
386 <para>
387 Tuning files are found in the <filename>meta/conf/machine/include</filename>
388 directory within the
389 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
390 For example, the <filename>ia32-base.inc</filename> file resides in the
391 <filename>meta/conf/machine/include</filename> directory.
392 </para>
393
394 <para>
395 To use an include file, you simply include them in the machine configuration file.
396 For example, the Crown Bay BSP <filename>crownbay.conf</filename> contains the
397 following statements:
398 <literallayout class='monospaced'>
399 require conf/machine/include/intel-core2-32-common.inc
400 require conf/machine/include/meta-intel.inc
401 require conf/machine/include/meta-intel-emgd.inc
402 </literallayout>
403 </para>
404 </section>
405
406 <section id='bsp-filelayout-misc-recipes'>
407 <title>Miscellaneous BSP-Specific Recipe Files</title>
408 <para>
409 You can find these files in the BSP Layer at:
410 <literallayout class='monospaced'>
411 meta-&lt;bsp_name&gt;/recipes-bsp/*
412 </literallayout>
413 </para>
414
415 <para>
416 This optional directory contains miscellaneous recipe files for the BSP.
417 Most notably would be the formfactor files.
418 For example, in the Crown Bay BSP there is the
419 <filename>formfactor_0.0.bbappend</filename> file, which is an
420 append file used to augment the recipe that starts the build.
421 Furthermore, there are machine-specific settings used during the
422 build that are defined by the <filename>machconfig</filename> file.
423 In the Crown Bay example, two <filename>machconfig</filename> files
424 exist: one that supports the Intel® Embedded Media and Graphics
425 Driver (Intel® EMGD) and one that does not:
426 <literallayout class='monospaced'>
427 meta-crownbay/recipes-bsp/formfactor/formfactor/crownbay/machconfig
428 meta-crownbay/recipes-bsp/formfactor/formfactor/crownbay-noemgd/machconfig
429 meta-crownbay/recipes-bsp/formfactor/formfactor_0.0.bbappend
430 </literallayout>
431 </para>
432
433 <note><para>
434 If a BSP does not have a formfactor entry, defaults are established according to
435 the formfactor configuration file that is installed by the main
436 formfactor recipe
437 <filename>meta/recipes-bsp/formfactor/formfactor_0.0.bb</filename>,
438 which is found in the
439 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
440 </para></note>
441 </section>
442
443 <section id='bsp-filelayout-recipes-graphics'>
444 <title>Display Support Files</title>
445 <para>
446 You can find these files in the BSP Layer at:
447 <literallayout class='monospaced'>
448 meta-&lt;bsp_name&gt;/recipes-graphics/*
449 </literallayout>
450 </para>
451
452 <para>
453 This optional directory contains recipes for the BSP if it has
454 special requirements for graphics support.
455 All files that are needed for the BSP to support a display are kept here.
456 For example, the Crown Bay BSP's <filename>xorg.conf</filename> file
457 detects the graphics support needed (i.e. the Intel® Embedded Media
458 Graphics Driver (EMGD) or the Video Electronics Standards Association
459 (VESA) graphics):
460 <literallayout class='monospaced'>
461 meta-crownbay/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bbappend
462 meta-crownbay/recipes-graphics/xorg-xserver/xserver-xf86-config/crownbay/xorg.conf
463 </literallayout>
464 </para>
465 </section>
466
467 <section id='bsp-filelayout-kernel'>
468 <title>Linux Kernel Configuration</title>
469 <para>
470 You can find these files in the BSP Layer at:
471 <literallayout class='monospaced'>
472 meta-&lt;bsp_name&gt;/recipes-kernel/linux/linux-yocto_*.bbappend
473 </literallayout>
474 </para>
475
476 <para>
477 These files append your specific changes to the main kernel recipe you are using.
478 </para>
479 <para>
480 For your BSP, you typically want to use an existing Yocto Project kernel recipe found in the
481 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
482 at <filename>meta/recipes-kernel/linux</filename>.
483 You can append your specific changes to the kernel recipe by using a
484 similarly named append file, which is located in the BSP Layer (e.g.
485 the <filename>meta-&lt;bsp_name&gt;/recipes-kernel/linux</filename> directory).
486 </para>
487 <para>
488 Suppose you are using the <filename>linux-yocto_3.10.bb</filename> recipe to build
489 the kernel.
490 In other words, you have selected the kernel in your
491 <filename>&lt;bsp_name&gt;.conf</filename> file by adding these types
492 of statements:
493 <literallayout class='monospaced'>
494 PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
495 PREFERRED_VERSION_linux-yocto ?= "3.10%"
496 </literallayout>
497 <note>
498 When the preferred provider is assumed by default, the
499 <filename>PREFERRED_PROVIDER</filename> statement does not appear in the
500 <filename>&lt;bsp_name&gt;.conf</filename> file.
501 </note>
502 You would use the <filename>linux-yocto_3.10.bbappend</filename> file to append
503 specific BSP settings to the kernel, thus configuring the kernel for your particular BSP.
504 </para>
505 <para>
506 As an example, look at the existing Crown Bay BSP.
507 The append file used is:
508 <literallayout class='monospaced'>
509 meta-crownbay/recipes-kernel/linux/linux-yocto_3.10.bbappend
510 </literallayout>
511 The following listing shows the file.
512 Be aware that the actual commit ID strings in this example listing might be different
513 than the actual strings in the file from the <filename>meta-intel</filename>
514 Git source repository.
515 <literallayout class='monospaced'>
516 FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
517
518
519 COMPATIBLE_MACHINE_crownbay = "crownbay"
520 KMACHINE_crownbay = "crownbay"
521 KBRANCH_crownbay = "standard/crownbay"
522 KERNEL_FEATURES_append_crownbay = " features/drm-emgd/drm-emgd-1.18 cfg/vesafb"
523
524 COMPATIBLE_MACHINE_crownbay-noemgd = "crownbay-noemgd"
525 KMACHINE_crownbay-noemgd = "crownbay"
526 KBRANCH_crownbay-noemgd = "standard/crownbay"
527 KERNEL_FEATURES_append_crownbay-noemgd = " cfg/vesafb"
528
529 LINUX_VERSION_crownbay = "3.10.35"
530 SRCREV_meta_crownbay = "b6e58b33dd427fe471f8827c83e311acdf4558a4"
531 SRCREV_machine_crownbay = "cee957655fe67826b2e827e2db41f156fa8f0cc4"
532 SRCREV_emgd_crownbay = "42d5e4548e8e79e094fa8697949eed4cf6af00a3"
533
534 LINUX_VERSION_crownbay-noemgd = "3.10.35"
535 SRCREV_meta_crownbay-noemgd = "b6e58b33dd427fe471f8827c83e311acdf4558a4"
536 SRCREV_machine_crownbay-noemgd = "cee957655fe67826b2e827e2db41f156fa8f0cc4"
537
538 SRC_URI_crownbay = "git://git.yoctoproject.org/linux-yocto-3.10.git;protocol=git;nocheckout=1;branch=${KBRANCH},${KMETA},emgd-1.18;name=machine,meta,emgd"
539 </literallayout>
540 This append file contains statements used to support the Crown Bay BSP.
541 The file defines machines using the
542 <ulink url='&YOCTO_DOCS_REF_URL;#var-COMPATIBLE_MACHINE'><filename>COMPATIBLE_MACHINE</filename></ulink>
543 variable and uses the
544 <ulink url='&YOCTO_DOCS_REF_URL;#var-KMACHINE'><filename>KMACHINE</filename></ulink> variable to
545 ensure the machine name used by the OpenEmbedded build system maps to the
546 machine name used by the Linux Yocto kernel.
547 The file also uses the optional
548 <ulink url='&YOCTO_DOCS_REF_URL;#var-KBRANCH'><filename>KBRANCH</filename></ulink> variable
549 to ensure the build process uses the <filename>standard/crownbay</filename>
550 kernel branch.
551 The
552 <ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_FEATURES'><filename>KERNEL_FEATURES</filename></ulink>
553 variable enables features specific to the kernel
554 (e.g. graphics support in this case).
555 The append file points to specific commits in the
556 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink> Git
557 repository and the <filename>meta</filename> Git repository branches to identify the
558 exact kernel needed to build the Crown Bay BSP.
559 Finally, the file includes the
560 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
561 statement to locate the source files.
562 </para>
563
564 <para>
565 One thing missing in this particular BSP, which you will typically need when
566 developing a BSP, is the kernel configuration file (<filename>.config</filename>) for your BSP.
567 When developing a BSP, you probably have a kernel configuration file or a set of kernel
568 configuration files that, when taken together, define the kernel configuration for your BSP.
569 You can accomplish this definition by putting the configurations in a file or a set of files
570 inside a directory located at the same level as your kernel's append file and having the same
571 name as the kernel's main recipe file.
572 With all these conditions met, simply reference those files in the
573 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
574 statement in the append file.
575 </para>
576
577 <para>
578 For example, suppose you had some configuration options in a file called
579 <filename>network_configs.cfg</filename>.
580 You can place that file inside a directory named <filename>linux-yocto</filename> and then add
581 a <filename>SRC_URI</filename> statement such as the following to the append file.
582 When the OpenEmbedded build system builds the kernel, the configuration options are
583 picked up and applied.
584 <literallayout class='monospaced'>
585 SRC_URI += "file://network_configs.cfg"
586 </literallayout>
587 </para>
588
589 <para>
590 To group related configurations into multiple files, you perform a similar procedure.
591 Here is an example that groups separate configurations specifically for Ethernet and graphics
592 into their own files and adds the configurations
593 by using a <filename>SRC_URI</filename> statement like the following in your append file:
594 <literallayout class='monospaced'>
595 SRC_URI += "file://myconfig.cfg \
596 file://eth.cfg \
597 file://gfx.cfg"
598 </literallayout>
599 </para>
600
601 <para>
602 The <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
603 variable is in boilerplate form in the
604 previous example in order to make it easy to do that.
605 This variable must be in your layer or BitBake will not find the patches or
606 configurations even if you have them in your <filename>SRC_URI</filename>.
607 The <filename>FILESEXTRAPATHS</filename> variable enables the build process to
608 find those configuration files.
609 </para>
610
611 <note>
612 <para>
613 Other methods exist to accomplish grouping and defining configuration options.
614 For example, if you are working with a local clone of the kernel repository,
615 you could checkout the kernel's <filename>meta</filename> branch, make your changes,
616 and then push the changes to the local bare clone of the kernel.
617 The result is that you directly add configuration options to the
618 <filename>meta</filename> branch for your BSP.
619 The configuration options will likely end up in that location anyway if the BSP gets
620 added to the Yocto Project.
621 </para>
622
623 <para>
624 In general, however, the Yocto Project maintainers take care of moving the
625 <filename>SRC_URI</filename>-specified
626 configuration options to the kernel's <filename>meta</filename> branch.
627 Not only is it easier for BSP developers to not have to worry about putting those
628 configurations in the branch, but having the maintainers do it allows them to apply
629 'global' knowledge about the kinds of common configuration options multiple BSPs in
630 the tree are typically using.
631 This allows for promotion of common configurations into common features.
632 </para>
633 </note>
634 </section>
635 </section>
636
637 <section id='requirements-and-recommendations-for-released-bsps'>
638 <title>Requirements and Recommendations for Released BSPs</title>
639
640 <para>
641 Certain requirements exist for a released BSP to be considered
642 compliant with the Yocto Project.
643 Additionally, recommendations also exist.
644 This section describes the requirements and recommendations for
645 released BSPs.
646 </para>
647
648 <section id='released-bsp-requirements'>
649 <title>Released BSP Requirements</title>
650
651 <para>
652 Before looking at BSP requirements, you should consider the following:
653 <itemizedlist>
654 <listitem><para>The requirements here assume the BSP layer is a well-formed, "legal"
655 layer that can be added to the Yocto Project.
656 For guidelines on creating a layer that meets these base requirements, see the
657 "<link linkend='bsp-layers'>BSP Layers</link>" and the
658 "<ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>Understanding
659 and Creating Layers"</ulink> in the Yocto Project Development Manual.</para></listitem>
660 <listitem><para>The requirements in this section apply regardless of how you
661 ultimately package a BSP.
662 You should consult the packaging and distribution guidelines for your
663 specific release process.
664 For an example of packaging and distribution requirements, see the
665 "<ulink url='https://wiki.yoctoproject.org/wiki/Third_Party_BSP_Release_Process'>Third Party BSP Release Process</ulink>"
666 wiki page.</para></listitem>
667 <listitem><para>The requirements for the BSP as it is made available to a developer
668 are completely independent of the released form of the BSP.
669 For example, the BSP Metadata can be contained within a Git repository
670 and could have a directory structure completely different from what appears
671 in the officially released BSP layer.</para></listitem>
672 <listitem><para>It is not required that specific packages or package
673 modifications exist in the BSP layer, beyond the requirements for general
674 compliance with the Yocto Project.
675 For example, no requirement exists dictating that a specific kernel or
676 kernel version be used in a given BSP.</para></listitem>
677 </itemizedlist>
678 </para>
679
680 <para>
681 Following are the requirements for a released BSP that conforms to the
682 Yocto Project:
683 <itemizedlist>
684 <listitem><para><emphasis>Layer Name:</emphasis>
685 The BSP must have a layer name that follows the Yocto
686 Project standards.
687 For information on BSP layer names, see the
688 "<link linkend='bsp-layers'>BSP Layers</link>" section.
689 </para></listitem>
690 <listitem><para><emphasis>File System Layout:</emphasis>
691 When possible, use the same directory names in your
692 BSP layer as listed in the <filename>recipes.txt</filename> file.
693 In particular, you should place recipes
694 (<filename>.bb</filename> files) and recipe
695 modifications (<filename>.bbappend</filename> files) into
696 <filename>recipes-*</filename> subdirectories by functional area
697 as outlined in <filename>recipes.txt</filename>.
698 If you cannot find a category in <filename>recipes.txt</filename>
699 to fit a particular recipe, you can make up your own
700 <filename>recipes-*</filename> subdirectory.
701 You can find <filename>recipes.txt</filename> in the
702 <filename>meta</filename> directory of the
703 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>,
704 or in the OpenEmbedded Core Layer
705 (<filename>openembedded-core</filename>) found at
706 <ulink url='http://git.openembedded.org/openembedded-core/tree/meta'></ulink>.
707 </para>
708 <para>Within any particular <filename>recipes-*</filename> category, the layout
709 should match what is found in the OpenEmbedded Core
710 Git repository (<filename>openembedded-core</filename>)
711 or the Source Directory (<filename>poky</filename>).
712 In other words, make sure you place related files in appropriately
713 related <filename>recipes-*</filename> subdirectories specific to the
714 recipe's function, or within a subdirectory containing a set of closely-related
715 recipes.
716 The recipes themselves should follow the general guidelines
717 for recipes used in the Yocto Project found in the
718 "<ulink url='https://wiki.yoctoproject.org/wiki/Recipe_%26_Patch_Style_Guide'>Yocto Recipe and Patch Style Guide</ulink>".
719 </para></listitem>
720 <listitem><para><emphasis>License File:</emphasis>
721 You must include a license file in the
722 <filename>meta-&lt;bsp_name&gt;</filename> directory.
723 This license covers the BSP Metadata as a whole.
724 You must specify which license to use since there is no
725 default license if one is not specified.
726 See the
727 <ulink url='&YOCTO_GIT_URL;/cgit.cgi/meta-intel/tree/meta-fri2/COPYING.MIT'><filename>COPYING.MIT</filename></ulink>
728 file for the Fish River Island 2 BSP in the <filename>meta-fri2</filename> BSP layer
729 as an example.</para></listitem>
730 <listitem><para><emphasis>README File:</emphasis>
731 You must include a <filename>README</filename> file in the
732 <filename>meta-&lt;bsp_name&gt;</filename> directory.
733 See the
734 <ulink url='&YOCTO_GIT_URL;/cgit.cgi/meta-intel/tree/meta-fri2/README'><filename>README</filename></ulink>
735 file for the Fish River Island 2 BSP in the <filename>meta-fri2</filename> BSP layer
736 as an example.</para>
737 <para>At a minimum, the <filename>README</filename> file should
738 contain the following:
739 <itemizedlist>
740 <listitem><para>A brief description about the hardware the BSP
741 targets.</para></listitem>
742 <listitem><para>A list of all the dependencies
743 on which a BSP layer depends.
744 These dependencies are typically a list of required layers needed
745 to build the BSP.
746 However, the dependencies should also contain information regarding
747 any other dependencies the BSP might have.</para></listitem>
748 <listitem><para>Any required special licensing information.
749 For example, this information includes information on
750 special variables needed to satisfy a EULA,
751 or instructions on information needed to build or distribute
752 binaries built from the BSP Metadata.</para></listitem>
753 <listitem><para>The name and contact information for the
754 BSP layer maintainer.
755 This is the person to whom patches and questions should
756 be sent.
757 For information on how to find the right person, see the
758 "<ulink url='&YOCTO_DOCS_DEV_URL;#how-to-submit-a-change'>How to Submit a Change</ulink>"
759 section in the Yocto Project Development Manual.
760 </para></listitem>
761 <listitem><para>Instructions on how to build the BSP using the BSP
762 layer.</para></listitem>
763 <listitem><para>Instructions on how to boot the BSP build from
764 the BSP layer.</para></listitem>
765 <listitem><para>Instructions on how to boot the binary images
766 contained in the <filename>binary</filename> directory,
767 if present.</para></listitem>
768 <listitem><para>Information on any known bugs or issues that users
769 should know about when either building or booting the BSP
770 binaries.</para></listitem>
771 </itemizedlist></para></listitem>
772 <listitem><para><emphasis>README.sources File:</emphasis>
773 You must include a <filename>README.sources</filename> in the
774 <filename>meta-&lt;bsp_name&gt;</filename> directory.
775 This file specifies exactly where you can find the sources used to
776 generate the binary images contained in the
777 <filename>binary</filename> directory, if present.
778 See the
779 <ulink url='&YOCTO_GIT_URL;/cgit.cgi/meta-intel/tree/meta-fri2/README.sources'><filename>README.sources</filename></ulink>
780 file for the Fish River Island 2 BSP in the <filename>meta-fri2</filename> BSP layer
781 as an example.</para></listitem>
782 <listitem><para><emphasis>Layer Configuration File:</emphasis>
783 You must include a <filename>conf/layer.conf</filename> in the
784 <filename>meta-&lt;bsp_name&gt;</filename> directory.
785 This file identifies the <filename>meta-&lt;bsp_name&gt;</filename>
786 BSP layer as a layer to the build system.</para></listitem>
787 <listitem><para><emphasis>Machine Configuration File:</emphasis>
788 You must include one or more <filename>conf/machine/&lt;bsp_name&gt;.conf</filename>
789 files in the <filename>meta-&lt;bsp_name&gt;</filename> directory.
790 These configuration files define machine targets that can be built
791 using the BSP layer.
792 Multiple machine configuration files define variations of machine
793 configurations that are supported by the BSP.
794 If a BSP supports multiple machine variations, you need to
795 adequately describe each variation in the BSP
796 <filename>README</filename> file.
797 Do not use multiple machine configuration files to describe disparate
798 hardware.
799 If you do have very different targets, you should create separate
800 BSP layers for each target.
801 <note>It is completely possible for a developer to structure the
802 working repository as a conglomeration of unrelated BSP
803 files, and to possibly generate BSPs targeted for release
804 from that directory using scripts or some other mechanism
805 (e.g. <filename>meta-yocto-bsp</filename> layer).
806 Such considerations are outside the scope of this document.</note>
807 </para></listitem>
808 </itemizedlist>
809 </para>
810 </section>
811
812 <section id='released-bsp-recommendations'>
813 <title>Released BSP Recommendations</title>
814
815 <para>
816 Following are recommendations for a released BSP that conforms to the
817 Yocto Project:
818 <itemizedlist>
819 <listitem><para><emphasis>Bootable Images:</emphasis>
820 BSP releases
821 can contain one or more bootable images.
822 Including bootable images allows users to easily try out the BSP
823 on their own hardware.</para>
824 <para>In some cases, it might not be convenient to include a
825 bootable image.
826 In this case, you might want to make two versions of the
827 BSP available: one that contains binary images, and one
828 that does not.
829 The version that does not contain bootable images avoids
830 unnecessary download times for users not interested in the images.
831 </para>
832 <para>If you need to distribute a BSP and include bootable images or build kernel and
833 filesystems meant to allow users to boot the BSP for evaluation
834 purposes, you should put the images and artifacts within a
835 <filename>binary/</filename> subdirectory located in the
836 <filename>meta-&lt;bsp_name&gt;</filename> directory.
837 <note>If you do include a bootable image as part of the BSP and the image
838 was built by software covered by the GPL or other open source licenses,
839 it is your responsibility to understand
840 and meet all licensing requirements, which could include distribution
841 of source files.</note></para></listitem>
842 <listitem><para><emphasis>Use a Yocto Linux Kernel:</emphasis>
843 Kernel recipes in the BSP should be based on a Yocto Linux kernel.
844 Basing your recipes on these kernels reduces the costs for maintaining
845 the BSP and increases its scalability.
846 See the <filename>Yocto Linux Kernel</filename> category in the
847 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'>Source Repositories</ulink>
848 for these kernels.</para></listitem>
849 </itemizedlist>
850 </para>
851 </section>
852 </section>
853
854 <section id='customizing-a-recipe-for-a-bsp'>
855 <title>Customizing a Recipe for a BSP</title>
856
857 <para>
858 If you plan on customizing a recipe for a particular BSP, you need to do the
859 following:
860 <itemizedlist>
861 <listitem><para>Create a <filename>.bbappend</filename>
862 file for the modified recipe.
863 For information on using append files, see the
864 "<ulink url='&YOCTO_DOCS_DEV_URL;#using-bbappend-files'>Using .bbappend Files</ulink>"
865 section in the Yocto Project Development Manual.
866 </para></listitem>
867 <listitem><para>
868 Ensure your directory structure in the BSP layer
869 that supports your machine is such that it can be found
870 by the build system.
871 See the example later in this section for more information.
872 </para></listitem>
873 <listitem><para>
874 Put the append file in a directory whose name matches
875 the machine's name and is located in an appropriate
876 sub-directory inside the BSP layer (i.e.
877 <filename>recipes-bsp</filename>, <filename>recipes-graphics</filename>,
878 <filename>recipes-core</filename>, and so forth).
879 </para></listitem>
880 <listitem><para>Place the BSP-specific files in the directory named for
881 your machine inside the BSP layer.
882 </para></listitem>
883 </itemizedlist>
884 </para>
885
886 <para>
887 Following is a specific example to help you better understand the process.
888 Consider an example that customizes a recipe by adding
889 a BSP-specific configuration file named <filename>interfaces</filename> to the
890 <filename>init-ifupdown_1.0.bb</filename> recipe for machine "xyz".
891 Do the following:
892 <orderedlist>
893 <listitem><para>Edit the <filename>init-ifupdown_1.0.bbappend</filename> file so that it
894 contains the following:
895 <literallayout class='monospaced'>
896 FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
897 </literallayout>
898 The append file needs to be in the
899 <filename>meta-xyz/recipes-core/init-ifupdown</filename> directory.
900 </para></listitem>
901 <listitem><para>Create and place the new <filename>interfaces</filename>
902 configuration file in the BSP's layer here:
903 <literallayout class='monospaced'>
904 meta-xyz/recipes-core/init-ifupdown/files/xyz/interfaces
905 </literallayout>
906 The
907 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
908 variable in the append files extends the search path
909 the build system uses to find files during the build.
910 Consequently, for this example you need to have the
911 <filename>files</filename> directory in the same location
912 as your append file.</para></listitem>
913 </orderedlist>
914 </para>
915 </section>
916
917 <section id='bsp-licensing-considerations'>
918 <title>BSP Licensing Considerations</title>
919
920 <para>
921 In some cases, a BSP contains separately licensed Intellectual Property (IP)
922 for a component or components.
923 For these cases, you are required to accept the terms of a commercial or other
924 type of license that requires some kind of explicit End User License Agreement (EULA).
925 Once the license is accepted, the OpenEmbedded build system can then build and
926 include the corresponding component in the final BSP image.
927 If the BSP is available as a pre-built image, you can download the image after
928 agreeing to the license or EULA.
929 </para>
930
931 <para>
932 You could find that some separately licensed components that are essential
933 for normal operation of the system might not have an unencumbered (or free)
934 substitute.
935 Without these essential components, the system would be non-functional.
936 Then again, you might find that other licensed components that are simply
937 'good-to-have' or purely elective do have an unencumbered, free replacement
938 component that you can use rather than agreeing to the separately licensed component.
939 Even for components essential to the system, you might find an unencumbered component
940 that is not identical but will work as a less-capable version of the
941 licensed version in the BSP recipe.
942 </para>
943
944 <para>
945 For cases where you can substitute a free component and still
946 maintain the system's functionality, the "Downloads" page from the
947 <ulink url='&YOCTO_HOME_URL;'>Yocto Project website's</ulink>
948 makes available de-featured BSPs
949 that are completely free of any IP encumbrances.
950 For these cases, you can use the substitution directly and
951 without any further licensing requirements.
952 If present, these fully de-featured BSPs are named appropriately
953 different as compared to the names of the respective
954 encumbered BSPs.
955 If available, these substitutions are your
956 simplest and most preferred options.
957 Use of these substitutions of course assumes the resulting functionality meets
958 system requirements.
959 </para>
960
961 <para>
962 If however, a non-encumbered version is unavailable or
963 it provides unsuitable functionality or quality, you can use an encumbered
964 version.
965 </para>
966
967 <para>
968 A couple different methods exist within the OpenEmbedded build system to
969 satisfy the licensing requirements for an encumbered BSP.
970 The following list describes them in order of preference:
971 <orderedlist>
972 <listitem><para><emphasis>Use the <filename>LICENSE_FLAGS</filename> variable
973 to define the recipes that have commercial or other types of
974 specially-licensed packages:</emphasis>
975 For each of those recipes, you can
976 specify a matching license string in a
977 <filename>local.conf</filename> variable named
978 <filename>LICENSE_FLAGS_WHITELIST</filename>.
979 Specifying the matching license string signifies that you agree to the license.
980 Thus, the build system can build the corresponding recipe and include
981 the component in the image.
982 See the
983 "<ulink url='&YOCTO_DOCS_REF_URL;#enabling-commercially-licensed-recipes'>Enabling
984 Commercially Licensed Recipes</ulink>" section in the Yocto Project Reference
985 Manual for details on how to use these variables.</para>
986 <para>If you build as you normally would, without
987 specifying any recipes in the
988 <filename>LICENSE_FLAGS_WHITELIST</filename>, the build stops and
989 provides you with the list of recipes that you have
990 tried to include in the image that need entries in
991 the <filename>LICENSE_FLAGS_WHITELIST</filename>.
992 Once you enter the appropriate license flags into the whitelist,
993 restart the build to continue where it left off.
994 During the build, the prompt will not appear again
995 since you have satisfied the requirement.</para>
996 <para>Once the appropriate license flags are on the white list
997 in the <filename>LICENSE_FLAGS_WHITELIST</filename> variable, you
998 can build the encumbered image with no change at all
999 to the normal build process.</para></listitem>
1000 <listitem><para><emphasis>Get a pre-built version of the BSP:</emphasis>
1001 You can get this type of BSP by visiting the
1002 "Downloads" page of the
1003 <ulink url='&YOCTO_HOME_URL;'>Yocto Project website</ulink>.
1004 You can download BSP tarballs that contain proprietary components
1005 after agreeing to the licensing
1006 requirements of each of the individually encumbered
1007 packages as part of the download process.
1008 Obtaining the BSP this way allows you to access an encumbered
1009 image immediately after agreeing to the
1010 click-through license agreements presented by the
1011 website.
1012 Note that if you want to build the image
1013 yourself using the recipes contained within the BSP
1014 tarball, you will still need to create an
1015 appropriate <filename>LICENSE_FLAGS_WHITELIST</filename> to match the
1016 encumbered recipes in the BSP.</para></listitem>
1017 </orderedlist>
1018 </para>
1019
1020 <note>
1021 Pre-compiled images are bundled with
1022 a time-limited kernel that runs for a
1023 predetermined amount of time (10 days) before it forces
1024 the system to reboot.
1025 This limitation is meant to discourage direct redistribution
1026 of the image.
1027 You must eventually rebuild the image if you want to remove this restriction.
1028 </note>
1029 </section>
1030
1031 <section id='using-the-yocto-projects-bsp-tools'>
1032 <title>Using the Yocto Project's BSP Tools</title>
1033
1034 <para>
1035 The Yocto Project includes a couple of tools that enable
1036 you to create a <link linkend='bsp-layers'>BSP layer</link>
1037 from scratch and do basic configuration and maintenance
1038 of the kernel without ever looking at a Metadata file.
1039 These tools are <filename>yocto-bsp</filename> and <filename>yocto-kernel</filename>,
1040 respectively.
1041 </para>
1042
1043 <para>
1044 The following sections describe the common location and help features as well
1045 as provide details for the
1046 <filename>yocto-bsp</filename> and <filename>yocto-kernel</filename> tools.
1047 </para>
1048
1049 <section id='common-features'>
1050 <title>Common Features</title>
1051
1052 <para>
1053 Designed to have a command interface somewhat like
1054 <ulink url='&YOCTO_DOCS_DEV_URL;#git'>Git</ulink>, each
1055 tool is structured as a set of sub-commands under a
1056 top-level command.
1057 The top-level command (<filename>yocto-bsp</filename>
1058 or <filename>yocto-kernel</filename>) itself does
1059 nothing but invoke or provide help on the sub-commands
1060 it supports.
1061 </para>
1062
1063 <para>
1064 Both tools reside in the <filename>scripts/</filename> subdirectory
1065 of the <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
1066 Consequently, to use the scripts, you must <filename>source</filename> the
1067 environment just as you would when invoking a build:
1068 <literallayout class='monospaced'>
1069 $ source oe-init-build-env [build_dir]
1070 </literallayout>
1071 </para>
1072
1073 <para>
1074 The most immediately useful function is to get help on both tools.
1075 The built-in help system makes it easy to drill down at
1076 any time and view the syntax required for any specific command.
1077 Simply enter the name of the command with the <filename>help</filename>
1078 switch:
1079 <literallayout class='monospaced'>
1080 $ yocto-bsp help
1081 Usage:
1082
1083 Create a customized Yocto BSP layer.
1084
1085 usage: yocto-bsp [--version] [--help] COMMAND [ARGS]
1086
1087 Current 'yocto-bsp' commands are:
1088 create Create a new Yocto BSP
1089 list List available values for options and BSP properties
1090
1091 See 'yocto-bsp help COMMAND' for more information on a specific command.
1092
1093
1094 Options:
1095 --version show program's version number and exit
1096 -h, --help show this help message and exit
1097 -D, --debug output debug information
1098 </literallayout>
1099 </para>
1100
1101 <para>
1102 Similarly, entering just the name of a sub-command shows the detailed usage
1103 for that sub-command:
1104 <literallayout class='monospaced'>
1105 $ yocto-bsp create
1106
1107 Usage:
1108
1109 Create a new Yocto BSP
1110
1111 usage: yocto-bsp create &lt;bsp-name&gt; &lt;karch&gt; [-o &lt;DIRNAME&gt; | --outdir &lt;DIRNAME&gt;]
1112 [-i &lt;JSON PROPERTY FILE&gt; | --infile &lt;JSON PROPERTY_FILE&gt;]
1113
1114 This command creates a Yocto BSP based on the specified parameters.
1115 The new BSP will be a new Yocto BSP layer contained by default within
1116 the top-level directory specified as 'meta-bsp-name'. The -o option
1117 can be used to place the BSP layer in a directory with a different
1118 name and location.
1119
1120 ...
1121 </literallayout>
1122 </para>
1123
1124 <para>
1125 For any sub-command, you can use the word "help" option just before the
1126 sub-command to get more extensive documentation:
1127 <literallayout class='monospaced'>
1128 $ yocto-bsp help create
1129
1130 NAME
1131 yocto-bsp create - Create a new Yocto BSP
1132
1133 SYNOPSIS
1134 yocto-bsp create &lt;bsp-name&gt; &lt;karch&gt; [-o &lt;DIRNAME&gt; | --outdir &lt;DIRNAME&gt;]
1135 [-i &lt;JSON PROPERTY FILE&gt; | --infile &lt;JSON PROPERTY_FILE&gt;]
1136
1137 DESCRIPTION
1138 This command creates a Yocto BSP based on the specified
1139 parameters. The new BSP will be a new Yocto BSP layer contained
1140 by default within the top-level directory specified as
1141 'meta-bsp-name'. The -o option can be used to place the BSP layer
1142 in a directory with a different name and location.
1143
1144 The value of the 'karch' parameter determines the set of files
1145 that will be generated for the BSP, along with the specific set of
1146 'properties' that will be used to fill out the BSP-specific
1147 portions of the BSP. The possible values for the 'karch' parameter
1148 can be listed via 'yocto-bsp list karch'.
1149
1150 ...
1151 </literallayout>
1152 </para>
1153
1154 <para>
1155 Now that you know where these two commands reside and how to access information
1156 on them, you should find it relatively straightforward to discover the commands
1157 necessary to create a BSP and perform basic kernel maintenance on that BSP using
1158 the tools.
1159 <note>
1160 You can also use the <filename>yocto-layer</filename> tool to create
1161 a "generic" layer.
1162 For information on this tool, see the
1163 "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-general-layer-using-the-yocto-layer-script'>Creating a General Layer Using the yocto-layer Script</ulink>"
1164 section in the Yocto Project Development Guide.
1165 </note>
1166 </para>
1167
1168 <para>
1169 The next sections provide a concrete starting point to expand on a few points that
1170 might not be immediately obvious or that could use further explanation.
1171 </para>
1172 </section>
1173
1174
1175 <section id='creating-a-new-bsp-layer-using-the-yocto-bsp-script'>
1176 <title>Creating a new BSP Layer Using the yocto-bsp Script</title>
1177
1178 <para>
1179 The <filename>yocto-bsp</filename> script creates a new
1180 <link linkend='bsp-layers'>BSP layer</link> for any architecture supported
1181 by the Yocto Project, as well as QEMU versions of the same.
1182 The default mode of the script's operation is to prompt you for information needed
1183 to generate the BSP layer.
1184 </para>
1185
1186 <para>
1187 For the current set of BSPs, the script prompts you for various important
1188 parameters such as:
1189 <itemizedlist>
1190 <listitem><para>The kernel to use</para></listitem>
1191 <listitem><para>The branch of that kernel to use (or re-use)</para></listitem>
1192 <listitem><para>Whether or not to use X, and if so, which drivers to use</para></listitem>
1193 <listitem><para>Whether to turn on SMP</para></listitem>
1194 <listitem><para>Whether the BSP has a keyboard</para></listitem>
1195 <listitem><para>Whether the BSP has a touchscreen</para></listitem>
1196 <listitem><para>Remaining configurable items associated with the BSP</para></listitem>
1197 </itemizedlist>
1198 </para>
1199
1200 <para>
1201 You use the <filename>yocto-bsp create</filename> sub-command to create
1202 a new BSP layer.
1203 This command requires you to specify a particular kernel architecture
1204 (<filename>karch</filename>) on which to base the BSP.
1205 Assuming you have sourced the environment, you can use the
1206 <filename>yocto-bsp list karch</filename> sub-command to list the
1207 architectures available for BSP creation as follows:
1208 <literallayout class='monospaced'>
1209 $ yocto-bsp list karch
1210 Architectures available:
1211 powerpc
1212 i386
1213 x86_64
1214 arm
1215 qemu
1216 mips
1217 </literallayout>
1218 </para>
1219
1220 <para>
1221 The remainder of this section presents an example that uses
1222 <filename>myarm</filename> as the machine name and <filename>qemu</filename>
1223 as the machine architecture.
1224 Of the available architectures, <filename>qemu</filename> is the only architecture
1225 that causes the script to prompt you further for an actual architecture.
1226 In every other way, this architecture is representative of how creating a BSP for
1227 an actual machine would work.
1228 The reason the example uses this architecture is because it is an emulated architecture
1229 and can easily be followed without requiring actual hardware.
1230 </para>
1231
1232 <para>
1233 As the <filename>yocto-bsp create</filename> command runs, default values for
1234 the prompts appear in brackets.
1235 Pressing enter without supplying anything on the command line or pressing enter
1236 with an invalid response causes the script to accept the default value.
1237 Once the script completes, the new <filename>meta-myarm</filename> BSP layer
1238 is created in the current working directory.
1239 This example assumes you have sourced the
1240 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
1241 setup script.
1242 </para>
1243
1244 <para>
1245 Following is the complete example:
1246 <literallayout class='monospaced'>
1247 $ yocto-bsp create myarm qemu
1248 Checking basic git connectivity...
1249 Done.
1250
1251 Which qemu architecture would you like to use? [default: i386]
1252 1) i386 (32-bit)
1253 2) x86_64 (64-bit)
1254 3) ARM (32-bit)
1255 4) PowerPC (32-bit)
1256 5) MIPS (32-bit)
1257 3
1258 Would you like to use the default (3.10) kernel? (y/n) [default: y] y
1259 Do you need a new machine branch for this BSP (the alternative is to re-use an existing branch)? [y/n] [default: y]
1260 Getting branches from remote repo git://git.yoctoproject.org/linux-yocto-3.10.git...
1261 Please choose a machine branch to base your new BSP branch on: [default: standard/base]
1262 1) standard/arm-versatile-926ejs
1263 2) standard/base
1264 3) standard/beagleboard
1265 4) standard/beaglebone
1266 5) standard/ck
1267 6) standard/crownbay
1268 7) standard/edgerouter
1269 8) standard/emenlow
1270 9) standard/fri2
1271 10) standard/fsl-mpc8315e-rdb
1272 11) standard/mti-malta32
1273 12) standard/mti-malta64
1274 13) standard/qemuppc
1275 14) standard/routerstationpro
1276 15) standard/sys940x
1277 1
1278 Would you like SMP support? (y/n) [default: y]
1279 Does your BSP have a touchscreen? (y/n) [default: n]
1280 Does your BSP have a keyboard? (y/n) [default: y]
1281
1282 New qemu BSP created in meta-myarm
1283 </literallayout>
1284 Take a closer look at the example now:
1285 <orderedlist>
1286 <listitem><para>For the QEMU architecture,
1287 the script first prompts you for which emulated architecture to use.
1288 In the example, we use the ARM architecture.
1289 </para></listitem>
1290 <listitem><para>The script then prompts you for the kernel.
1291 The default 3.14 kernel is acceptable.
1292 So, the example accepts the default.
1293 If you enter 'n', the script prompts you to further enter the kernel
1294 you do want to use.</para></listitem>
1295 <listitem><para>Next, the script asks whether you would like to have a new
1296 branch created especially for your BSP in the local
1297 <ulink url='&YOCTO_DOCS_DEV_URL;#local-kernel-files'>Linux Yocto Kernel</ulink>
1298 Git repository .
1299 If not, then the script re-uses an existing branch.</para>
1300 <para>In this example, the default (or "yes") is accepted.
1301 Thus, a new branch is created for the BSP rather than using a common, shared
1302 branch.
1303 The new branch is the branch committed to for any patches you might later add.
1304 The reason a new branch is the default is that typically
1305 new BSPs do require BSP-specific patches.
1306 The tool thus assumes that most of time a new branch is required.
1307 </para></listitem>
1308 <listitem><para>Regardless of which choice you make in the previous step,
1309 you are now given the opportunity to select a particular machine branch on
1310 which to base your new BSP-specific machine branch
1311 (or to re-use if you had elected to not create a new branch).
1312 Because this example is generating an ARM-based BSP, the example
1313 uses <filename>#1</filename> at the prompt, which selects the ARM-versatile branch.
1314 </para></listitem>
1315 <listitem><para>The remainder of the prompts are routine.
1316 Defaults are accepted for each.</para></listitem>
1317 <listitem><para>By default, the script creates the new BSP Layer in the
1318 current working directory of the
1319 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>,
1320 which is <filename>poky</filename> in this case.
1321 </para></listitem>
1322 </orderedlist>
1323 </para>
1324
1325 <para>
1326 Once the BSP Layer is created, you must add it to your
1327 <filename>bblayers.conf</filename> file.
1328 Here is an example:
1329 <literallayout class='monospaced'>
1330 BBLAYERS = ? " \
1331 /usr/local/src/yocto/meta \
1332 /usr/local/src/yocto/meta-yocto \
1333 /usr/local/src/yocto/meta-yocto-bsp \
1334 /usr/local/src/yocto/meta-myarm \
1335 "
1336
1337 BBLAYERS_NON_REMOVABLE ?= " \
1338 /usr/local/src/yocto/meta \
1339 /usr/local/src/yocto/meta-yocto \
1340 "
1341 </literallayout>
1342 Adding the layer to this file allows the build system to build the BSP and
1343 the <filename>yocto-kernel</filename> tool to be able to find the layer and
1344 other Metadata it needs on which to operate.
1345 </para>
1346 </section>
1347
1348 <section id='managing-kernel-patches-and-config-items-with-yocto-kernel'>
1349 <title>Managing Kernel Patches and Config Items with yocto-kernel</title>
1350
1351 <para>
1352 Assuming you have created a <link linkend='bsp-layers'>BSP Layer</link> using
1353 <link linkend='creating-a-new-bsp-layer-using-the-yocto-bsp-script'>
1354 <filename>yocto-bsp</filename></link> and you added it to your
1355 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBLAYERS'><filename>BBLAYERS</filename></ulink>
1356 variable in the <filename>bblayers.conf</filename> file, you can now use
1357 the <filename>yocto-kernel</filename> script to add patches and configuration
1358 items to the BSP's kernel.
1359 </para>
1360
1361 <para>
1362 The <filename>yocto-kernel</filename> script allows you to add, remove, and list patches
1363 and kernel config settings to a BSP's kernel
1364 <filename>.bbappend</filename> file.
1365 All you need to do is use the appropriate sub-command.
1366 Recall that the easiest way to see exactly what sub-commands are available
1367 is to use the <filename>yocto-kernel</filename> built-in help as follows:
1368 <literallayout class='monospaced'>
1369 $ yocto-kernel
1370 Usage:
1371
1372 Modify and list Yocto BSP kernel config items and patches.
1373
1374 usage: yocto-kernel [--version] [--help] COMMAND [ARGS]
1375
1376 Current 'yocto-kernel' commands are:
1377 config list List the modifiable set of bare kernel config options for a BSP
1378 config add Add or modify bare kernel config options for a BSP
1379 config rm Remove bare kernel config options from a BSP
1380 patch list List the patches associated with a BSP
1381 patch add Patch the Yocto kernel for a BSP
1382 patch rm Remove patches from a BSP
1383 feature list List the features used by a BSP
1384 feature add Have a BSP use a feature
1385 feature rm Have a BSP stop using a feature
1386 features list List the features available to BSPs
1387 feature describe Describe a particular feature
1388 feature create Create a new BSP-local feature
1389 feature destroy Remove a BSP-local feature
1390
1391 See 'yocto-kernel help COMMAND' for more information on a specific command.
1392
1393
1394
1395 Options:
1396 --version show program's version number and exit
1397 -h, --help show this help message and exit
1398 -D, --debug output debug information
1399 </literallayout>
1400 </para>
1401
1402 <para>
1403 The <filename>yocto-kernel patch add</filename> sub-command allows you to add a
1404 patch to a BSP.
1405 The following example adds two patches to the <filename>myarm</filename> BSP:
1406 <literallayout class='monospaced'>
1407 $ yocto-kernel patch add myarm ~/test.patch
1408 Added patches:
1409 test.patch
1410
1411 $ yocto-kernel patch add myarm ~/yocto-testmod.patch
1412 Added patches:
1413 yocto-testmod.patch
1414 </literallayout>
1415 <note>Although the previous example adds patches one at a time, it is possible
1416 to add multiple patches at the same time.</note>
1417 </para>
1418
1419 <para>
1420 You can verify patches have been added by using the
1421 <filename>yocto-kernel patch list</filename> sub-command.
1422 Here is an example:
1423 <literallayout class='monospaced'>
1424 $ yocto-kernel patch list myarm
1425 The current set of machine-specific patches for myarm is:
1426 1) test.patch
1427 2) yocto-testmod.patch
1428 </literallayout>
1429 </para>
1430
1431 <para>
1432 You can also use the <filename>yocto-kernel</filename> script to
1433 remove a patch using the <filename>yocto-kernel patch rm</filename> sub-command.
1434 Here is an example:
1435 <literallayout class='monospaced'>
1436 $ yocto-kernel patch rm myarm
1437 Specify the patches to remove:
1438 1) test.patch
1439 2) yocto-testmod.patch
1440 1
1441 Removed patches:
1442 test.patch
1443 </literallayout>
1444 </para>
1445
1446 <para>
1447 Again, using the <filename>yocto-kernel patch list</filename> sub-command,
1448 you can verify that the patch was in fact removed:
1449 <literallayout class='monospaced'>
1450 $ yocto-kernel patch list myarm
1451 The current set of machine-specific patches for myarm is:
1452 1) yocto-testmod.patch
1453 </literallayout>
1454 </para>
1455
1456 <para>
1457 In a completely similar way, you can use the <filename>yocto-kernel config add</filename>
1458 sub-command to add one or more kernel config item settings to a BSP.
1459 The following commands add a couple of config items to the
1460 <filename>myarm</filename> BSP:
1461 <literallayout class='monospaced'>
1462 $ yocto-kernel config add myarm CONFIG_MISC_DEVICES=y
1463 Added items:
1464 CONFIG_MISC_DEVICES=y
1465
1466 $ yocto-kernel config add myarm CONFIG_YOCTO_TESTMOD=y
1467 Added items:
1468 CONFIG_YOCTO_TESTMOD=y
1469 </literallayout>
1470 <note>Although the previous example adds config items one at a time, it is possible
1471 to add multiple config items at the same time.</note>
1472 </para>
1473
1474 <para>
1475 You can list the config items now associated with the BSP.
1476 Doing so shows you the config items you added as well as others associated
1477 with the BSP:
1478 <literallayout class='monospaced'>
1479 $ yocto-kernel config list myarm
1480 The current set of machine-specific kernel config items for myarm is:
1481 1) CONFIG_MISC_DEVICES=y
1482 2) CONFIG_YOCTO_TESTMOD=y
1483 </literallayout>
1484 </para>
1485
1486 <para>
1487 Finally, you can remove one or more config items using the
1488 <filename>yocto-kernel config rm</filename> sub-command in a manner
1489 completely analogous to <filename>yocto-kernel patch rm</filename>.
1490 </para>
1491 </section>
1492 </section>
1493</chapter>
diff --git a/documentation/bsp-guide/figures/bsp-title.png b/documentation/bsp-guide/figures/bsp-title.png
new file mode 100644
index 0000000000..f624dd4f94
--- /dev/null
+++ b/documentation/bsp-guide/figures/bsp-title.png
Binary files differ
diff --git a/documentation/dev-manual/dev-manual-common-tasks.xml b/documentation/dev-manual/dev-manual-common-tasks.xml
new file mode 100644
index 0000000000..445ca1750b
--- /dev/null
+++ b/documentation/dev-manual/dev-manual-common-tasks.xml
@@ -0,0 +1,7381 @@
1<!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-yocto</filename>, and
75 <filename>meta-yocto-bsp</filename>.
76 Each of these folders represents a distinct layer.
77 </para>
78
79 <para>
80 As another example, if you set up a local copy of the
81 <filename>meta-intel</filename> Git repository
82 and then explore the folder of that general layer,
83 you will discover many Intel-specific BSP layers inside.
84 For more information on BSP layers, see the
85 "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>"
86 section in the Yocto Project Board Support Package (BSP)
87 Developer's Guide.
88 </para>
89 </section>
90
91 <section id='creating-your-own-layer'>
92 <title>Creating Your Own Layer</title>
93
94 <para>
95 It is very easy to create your own layers to use with the
96 OpenEmbedded build system.
97 The Yocto Project ships with scripts that speed up creating
98 general layers and BSP layers.
99 This section describes the steps you perform by hand to create
100 a layer so that you can better understand them.
101 For information about the layer-creation scripts, see the
102 "<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>"
103 section in the Yocto Project Board Support Package (BSP)
104 Developer's Guide and the
105 "<link linkend='creating-a-general-layer-using-the-yocto-layer-script'>Creating a General Layer Using the yocto-layer Script</link>"
106 section further down in this manual.
107 </para>
108
109 <para>
110 Follow these general steps to create your layer:
111 <orderedlist>
112 <listitem><para><emphasis>Check Existing Layers:</emphasis>
113 Before creating a new layer, you should be sure someone
114 has not already created a layer containing the Metadata
115 you need.
116 You can see the
117 <ulink url='http://layers.openembedded.org/layerindex/layers/'><filename>OpenEmbedded Metadata Index</filename></ulink>
118 for a list of layers from the OpenEmbedded community
119 that can be used in the Yocto Project.
120 </para></listitem>
121 <listitem><para><emphasis>Create a Directory:</emphasis>
122 Create the directory for your layer.
123 While not strictly required, prepend the name of the
124 folder with the string <filename>meta-</filename>.
125 For example:
126 <literallayout class='monospaced'>
127 meta-mylayer
128 meta-GUI_xyz
129 meta-mymachine
130 </literallayout>
131 </para></listitem>
132 <listitem><para><emphasis>Create a Layer Configuration
133 File:</emphasis>
134 Inside your new layer folder, you need to create a
135 <filename>conf/layer.conf</filename> file.
136 It is easiest to take an existing layer configuration
137 file and copy that to your layer's
138 <filename>conf</filename> directory and then modify the
139 file as needed.</para>
140 <para>The
141 <filename>meta-yocto-bsp/conf/layer.conf</filename> file
142 demonstrates the required syntax:
143 <literallayout class='monospaced'>
144 # We have a conf and classes directory, add to BBPATH
145 BBPATH .= ":${LAYERDIR}"
146
147 # We have recipes-* directories, add to BBFILES
148 BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
149 ${LAYERDIR}/recipes-*/*/*.bbappend"
150
151 BBFILE_COLLECTIONS += "yoctobsp"
152 BBFILE_PATTERN_yoctobsp = "^${LAYERDIR}/"
153 BBFILE_PRIORITY_yoctobsp = "5"
154 LAYERVERSION_yoctobsp = "2"
155 </literallayout></para>
156 <para>Here is an explanation of the example:
157 <itemizedlist>
158 <listitem><para>The configuration and
159 classes directory is appended to
160 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBPATH'><filename>BBPATH</filename></ulink>.
161 <note>
162 All non-distro layers, which include all BSP
163 layers, are expected to append the layer
164 directory to the
165 <filename>BBPATH</filename>.
166 On the other hand, distro layers, such as
167 <filename>meta-yocto</filename>, can choose
168 to enforce their own precedence over
169 <filename>BBPATH</filename>.
170 For an example of that syntax, see the
171 <filename>layer.conf</filename> file for
172 the <filename>meta-yocto</filename> layer.
173 </note></para></listitem>
174 <listitem><para>The recipes for the layers are
175 appended to
176 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BBFILES'>BBFILES</ulink></filename>.
177 </para></listitem>
178 <listitem><para>The
179 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BBFILE_COLLECTIONS'>BBFILE_COLLECTIONS</ulink></filename>
180 variable is then appended with the layer name.
181 </para></listitem>
182 <listitem><para>The
183 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BBFILE_PATTERN'>BBFILE_PATTERN</ulink></filename>
184 variable is set to a regular expression and is
185 used to match files from
186 <filename>BBFILES</filename> into a particular
187 layer.
188 In this case,
189 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LAYERDIR'>LAYERDIR</ulink></filename>
190 is used to make <filename>BBFILE_PATTERN</filename> match within the
191 layer's path.</para></listitem>
192 <listitem><para>The
193 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BBFILE_PRIORITY'>BBFILE_PRIORITY</ulink></filename>
194 variable then assigns a priority to the layer.
195 Applying priorities is useful in situations
196 where the same package might appear in multiple
197 layers and allows you to choose the layer
198 that takes precedence.</para></listitem>
199 <listitem><para>The
200 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LAYERVERSION'>LAYERVERSION</ulink></filename>
201 variable optionally specifies the version of a
202 layer as a single number.</para></listitem>
203 </itemizedlist></para>
204 <para>Note the use of the
205 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LAYERDIR'>LAYERDIR</ulink></filename>
206 variable, which expands to the directory of the current
207 layer.</para>
208 <para>Through the use of the <filename>BBPATH</filename>
209 variable, BitBake locates class files
210 (<filename>.bbclass</filename>),
211 configuration files, and files that are included
212 with <filename>include</filename> and
213 <filename>require</filename> statements.
214 For these cases, BitBake uses the first file that
215 matches the name found in <filename>BBPATH</filename>.
216 This is similar to the way the <filename>PATH</filename>
217 variable is used for binaries.
218 It is recommended, therefore, that you use unique
219 class and configuration
220 filenames in your custom layer.</para></listitem>
221 <listitem><para><emphasis>Add Content:</emphasis> Depending
222 on the type of layer, add the content.
223 If the layer adds support for a machine, add the machine
224 configuration in a <filename>conf/machine/</filename>
225 file within the layer.
226 If the layer adds distro policy, add the distro
227 configuration in a <filename>conf/distro/</filename>
228 file within the layer.
229 If the layer introduces new recipes, put the recipes
230 you need in <filename>recipes-*</filename>
231 subdirectories within the layer.
232 <note>In order to be compliant with the Yocto Project,
233 a layer must contain a
234 <ulink url='&YOCTO_DOCS_BSP_URL;#bsp-filelayout-readme'>README file.</ulink>
235 </note></para></listitem>
236 </orderedlist>
237 </para>
238 </section>
239
240 <section id='best-practices-to-follow-when-creating-layers'>
241 <title>Best Practices to Follow When Creating Layers</title>
242
243 <para>
244 To create layers that are easier to maintain and that will
245 not impact builds for other machines, you should consider the
246 information in the following sections.
247 </para>
248
249 <section id='avoid-overlaying-entire-recipes'>
250 <title>Avoid "Overlaying" Entire Recipes</title>
251
252 <para>
253 Avoid "overlaying" entire recipes from other layers in your
254 configuration.
255 In other words, do not copy an entire recipe into your
256 layer and then modify it.
257 Rather, use an append file (<filename>.bbappend</filename>)
258 to override
259 only those parts of the original recipe you need to modify.
260 </para>
261 </section>
262
263 <section id='avoid-duplicating-include-files'>
264 <title>Avoid Duplicating Include Files</title>
265
266 <para>
267 Avoid duplicating include files.
268 Use append files (<filename>.bbappend</filename>)
269 for each recipe
270 that uses an include file.
271 Or, if you are introducing a new recipe that requires
272 the included file, use the path relative to the original
273 layer directory to refer to the file.
274 For example, use
275 <filename>require recipes-core/somepackage/somefile.inc</filename>
276 instead of <filename>require somefile.inc</filename>.
277 If you're finding you have to overlay the include file,
278 it could indicate a deficiency in the include file in
279 the layer to which it originally belongs.
280 If this is the case, you need to address that deficiency
281 instead of overlaying the include file.
282 </para>
283
284 <para>
285 For example, consider how support plug-ins for the Qt 4
286 database are configured.
287 The Source Directory does not have MySQL or PostgreSQL.
288 However, OpenEmbedded's layer <filename>meta-oe</filename>
289 does.
290 Consequently, <filename>meta-oe</filename> uses
291 append files to modify the
292 <filename>QT_SQL_DRIVER_FLAGS</filename> variable to
293 enable the appropriate plug-ins.
294 This variable was added to the <filename>qt4.inc</filename>
295 include file in the Source Directory specifically to allow
296 the <filename>meta-oe</filename> layer to be able to control
297 which plug-ins are built.
298 </para>
299 </section>
300
301 <section id='structure-your-layers'>
302 <title>Structure Your Layers</title>
303
304 <para>
305 Proper use of overrides within append files and placement
306 of machine-specific files within your layer can ensure that
307 a build is not using the wrong Metadata and negatively
308 impacting a build for a different machine.
309 Following are some examples:
310 <itemizedlist>
311 <listitem><para><emphasis>Modifying Variables to Support
312 a Different Machine:</emphasis>
313 Suppose you have a layer named
314 <filename>meta-one</filename> that adds support
315 for building machine "one".
316 To do so, you use an append file named
317 <filename>base-files.bbappend</filename> and
318 create a dependency on "foo" by altering the
319 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>
320 variable:
321 <literallayout class='monospaced'>
322 DEPENDS = "foo"
323 </literallayout>
324 The dependency is created during any build that
325 includes the layer
326 <filename>meta-one</filename>.
327 However, you might not want this dependency
328 for all machines.
329 For example, suppose you are building for
330 machine "two" but your
331 <filename>bblayers.conf</filename> file has the
332 <filename>meta-one</filename> layer included.
333 During the build, the
334 <filename>base-files</filename> for machine
335 "two" will also have the dependency on
336 <filename>foo</filename>.</para>
337 <para>To make sure your changes apply only when
338 building machine "one", use a machine override
339 with the <filename>DEPENDS</filename> statement:
340 <literallayout class='monospaced'>
341 DEPENDS_one = "foo"
342 </literallayout>
343 You should follow the same strategy when using
344 <filename>_append</filename> and
345 <filename>_prepend</filename> operations:
346 <literallayout class='monospaced'>
347 DEPENDS_append_one = " foo"
348 DEPENDS_prepend_one = "foo "
349 </literallayout>
350 <note>
351 Avoiding "+=" and "=+" and using
352 machine-specific
353 <filename>_append</filename>
354 and <filename>_prepend</filename> operations
355 is recommended as well.
356 </note></para></listitem>
357 <listitem><para><emphasis>Place Machine-Specific Files
358 in Machine-Specific Locations:</emphasis>
359 When you have a base recipe, such as
360 <filename>base-files.bb</filename>, that
361 contains a
362 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
363 statement to a file, you can use an append file
364 to cause the build to use your own version of
365 the file.
366 For example, an append file in your layer at
367 <filename>meta-one/recipes-core/base-files/base-files.bbappend</filename>
368 could extend
369 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESPATH'><filename>FILESPATH</filename></ulink>
370 using
371 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
372 as follows:
373 <literallayout class='monospaced'>
374 FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
375 </literallayout>
376 The build for machine "one" will pick up your
377 machine-specific file as long as you have the
378 file in
379 <filename>meta-one/recipes-core/base-files/base-files/</filename>.
380 However, if you are building for a different
381 machine and the
382 <filename>bblayers.conf</filename> file includes
383 the <filename>meta-one</filename> layer and
384 the location of your machine-specific file is
385 the first location where that file is found
386 according to <filename>FILESPATH</filename>,
387 builds for all machines will also use that
388 machine-specific file.</para>
389 <para>You can make sure that a machine-specific
390 file is used for a particular machine by putting
391 the file in a subdirectory specific to the
392 machine.
393 For example, rather than placing the file in
394 <filename>meta-one/recipes-core/base-files/base-files/</filename>
395 as shown above, put it in
396 <filename>meta-one/recipes-core/base-files/base-files/one/</filename>.
397 Not only does this make sure the file is used
398 only when building for machine "one", but the
399 build process locates the file more quickly.</para>
400 <para>In summary, you need to place all files
401 referenced from <filename>SRC_URI</filename>
402 in a machine-specific subdirectory within the
403 layer in order to restrict those files to
404 machine-specific builds.</para></listitem>
405 </itemizedlist>
406 </para>
407 </section>
408
409 <section id='other-recommendations'>
410 <title>Other Recommendations</title>
411
412 <para>
413 We also recommend the following:
414 <itemizedlist>
415 <listitem><para>Store custom layers in a Git repository
416 that uses the
417 <filename>meta-&lt;layer_name&gt;</filename> format.
418 </para></listitem>
419 <listitem><para>Clone the repository alongside other
420 <filename>meta</filename> directories in the
421 <link linkend='source-directory'>Source Directory</link>.
422 </para></listitem>
423 </itemizedlist>
424 Following these recommendations keeps your Source Directory and
425 its configuration entirely inside the Yocto Project's core
426 base.
427 </para>
428 </section>
429 </section>
430
431 <section id='enabling-your-layer'>
432 <title>Enabling Your Layer</title>
433
434 <para>
435 Before the OpenEmbedded build system can use your new layer,
436 you need to enable it.
437 To enable your layer, simply add your layer's path to the
438 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BBLAYERS'>BBLAYERS</ulink></filename>
439 variable in your <filename>conf/bblayers.conf</filename> file,
440 which is found in the
441 <link linkend='build-directory'>Build Directory</link>.
442 The following example shows how to enable a layer named
443 <filename>meta-mylayer</filename>:
444 <literallayout class='monospaced'>
445 LCONF_VERSION = "6"
446
447 BBPATH = "${TOPDIR}"
448 BBFILES ?= ""
449
450 BBLAYERS ?= " \
451 $HOME/poky/meta \
452 $HOME/poky/meta-yocto \
453 $HOME/poky/meta-yocto-bsp \
454 $HOME/poky/meta-mylayer \
455 "
456
457 BBLAYERS_NON_REMOVABLE ?= " \
458 $HOME/poky/meta \
459 $HOME/poky/meta-yocto \
460 "
461 </literallayout>
462 </para>
463
464 <para>
465 BitBake parses each <filename>conf/layer.conf</filename> file
466 as specified in the <filename>BBLAYERS</filename> variable
467 within the <filename>conf/bblayers.conf</filename> file.
468 During the processing of each
469 <filename>conf/layer.conf</filename> file, BitBake adds the
470 recipes, classes and configurations contained within the
471 particular layer to the source directory.
472 </para>
473 </section>
474
475 <section id='using-bbappend-files'>
476 <title>Using .bbappend Files</title>
477
478 <para>
479 Recipes used to append Metadata to other recipes are called
480 BitBake append files.
481 BitBake append files use the <filename>.bbappend</filename> file
482 type suffix, while the corresponding recipes to which Metadata
483 is being appended use the <filename>.bb</filename> file type
484 suffix.
485 </para>
486
487 <para>
488 A <filename>.bbappend</filename> file allows your layer to make
489 additions or changes to the content of another layer's recipe
490 without having to copy the other recipe into your layer.
491 Your <filename>.bbappend</filename> file resides in your layer,
492 while the main <filename>.bb</filename> recipe file to
493 which you are appending Metadata resides in a different layer.
494 </para>
495
496 <para>
497 Append files must have the same root names as their corresponding
498 recipes.
499 For example, the append file
500 <filename>someapp_&DISTRO;.bbappend</filename> must apply to
501 <filename>someapp_&DISTRO;.bb</filename>.
502 This means the original recipe and append file names are version
503 number-specific.
504 If the corresponding recipe is renamed to update to a newer
505 version, the corresponding <filename>.bbappend</filename> file must
506 be renamed (and possibly updated) as well.
507 During the build process, BitBake displays an error on starting
508 if it detects a <filename>.bbappend</filename> file that does
509 not have a corresponding recipe with a matching name.
510 See the
511 <ulink url='&YOCTO_DOCS_REF_URL;#var-BB_DANGLINGAPPENDS_WARNONLY'><filename>BB_DANGLINGAPPENDS_WARNONLY</filename></ulink>
512 variable for information on how to handle this error.
513 </para>
514
515 <para>
516 Being able to append information to an existing recipe not only
517 avoids duplication, but also automatically applies recipe
518 changes in a different layer to your layer.
519 If you were copying recipes, you would have to manually merge
520 changes as they occur.
521 </para>
522
523 <para>
524 As an example, consider the main formfactor recipe and a
525 corresponding formfactor append file both from the
526 <link linkend='source-directory'>Source Directory</link>.
527 Here is the main formfactor recipe, which is named
528 <filename>formfactor_0.0.bb</filename> and located in the
529 "meta" layer at
530 <filename>meta/recipes-bsp/formfactor</filename>:
531 <literallayout class='monospaced'>
532 SUMMARY = "Device formfactor information"
533 SECTION = "base"
534 LICENSE = "MIT"
535 LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=4d92cd373abda3937c2bc47fbc49d690 \
536 file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
537 PR = "r44"
538
539 SRC_URI = "file://config file://machconfig"
540 S = "${WORKDIR}"
541
542 PACKAGE_ARCH = "${MACHINE_ARCH}"
543 INHIBIT_DEFAULT_DEPS = "1"
544
545 do_install() {
546 # Only install file if it has a contents
547 install -d ${D}${sysconfdir}/formfactor/
548 install -m 0644 ${S}/config ${D}${sysconfdir}/formfactor/
549 if [ -s "${S}/machconfig" ]; then
550 install -m 0644 ${S}/machconfig ${D}${sysconfdir}/formfactor/
551 fi
552 }
553 </literallayout>
554 In the main recipe, note the
555 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
556 variable, which tells the OpenEmbedded build system where to
557 find files during the build.
558 </para>
559
560 <para>
561 Following is the append file, which is named
562 <filename>formfactor_0.0.bbappend</filename> and is from the
563 Crown Bay BSP Layer named
564 <filename>meta-intel/meta-crownbay</filename>.
565 The file is in <filename>recipes-bsp/formfactor</filename>:
566 <literallayout class='monospaced'>
567 FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
568 </literallayout>
569 </para>
570
571 <para>
572 By default, the build system uses the
573 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESPATH'><filename>FILESPATH</filename></ulink>
574 variable to locate files.
575 This append file extends the locations by setting the
576 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
577 variable.
578 Setting this variable in the <filename>.bbappend</filename>
579 file is the most reliable and recommended method for adding
580 directories to the search path used by the build system
581 to find files.
582 </para>
583
584 <para>
585 The statement in this example extends the directories to include
586 <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>,
587 which resolves to a directory named
588 <filename>formfactor</filename> in the same directory
589 in which the append file resides (i.e.
590 <filename>meta-intel/meta-crownbay/recipes-bsp/formfactor/formfactor</filename>.
591 This implies that you must have the supporting directory
592 structure set up that will contain any files or patches you
593 will be including from the layer.
594 </para>
595
596 <para>
597 Using the immediate expansion assignment operator
598 <filename>:=</filename> is important because of the reference to
599 <filename>THISDIR</filename>.
600 The trailing colon character is important as it ensures that
601 items in the list remain colon-separated.
602 <note>
603 <para>
604 BitBake automatically defines the
605 <filename>THISDIR</filename> variable.
606 You should never set this variable yourself.
607 Using "_prepend" ensures your path will
608 be searched prior to other paths in the final list.
609 </para>
610
611 <para>
612 Also, not all append files add extra files.
613 Many append files simply exist to add build options
614 (e.g. <filename>systemd</filename>).
615 For these cases, it is not necessary to use the
616 "_prepend" part of the statement.
617 </para>
618 </note>
619 </para>
620 </section>
621
622 <section id='prioritizing-your-layer'>
623 <title>Prioritizing Your Layer</title>
624
625 <para>
626 Each layer is assigned a priority value.
627 Priority values control which layer takes precedence if there
628 are recipe files with the same name in multiple layers.
629 For these cases, the recipe file from the layer with a higher
630 priority number takes precedence.
631 Priority values also affect the order in which multiple
632 <filename>.bbappend</filename> files for the same recipe are
633 applied.
634 You can either specify the priority manually, or allow the
635 build system to calculate it based on the layer's dependencies.
636 </para>
637
638 <para>
639 To specify the layer's priority manually, use the
640 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBFILE_PRIORITY'><filename>BBFILE_PRIORITY</filename></ulink>
641 variable.
642 For example:
643 <literallayout class='monospaced'>
644 BBFILE_PRIORITY_mylayer = "1"
645 </literallayout>
646 </para>
647
648 <note>
649 <para>It is possible for a recipe with a lower version number
650 <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>
651 in a layer that has a higher priority to take precedence.</para>
652 <para>Also, the layer priority does not currently affect the
653 precedence order of <filename>.conf</filename>
654 or <filename>.bbclass</filename> files.
655 Future versions of BitBake might address this.</para>
656 </note>
657 </section>
658
659 <section id='managing-layers'>
660 <title>Managing Layers</title>
661
662 <para>
663 You can use the BitBake layer management tool to provide a view
664 into the structure of recipes across a multi-layer project.
665 Being able to generate output that reports on configured layers
666 with their paths and priorities and on
667 <filename>.bbappend</filename> files and their applicable
668 recipes can help to reveal potential problems.
669 </para>
670
671 <para>
672 Use the following form when running the layer management tool.
673 <literallayout class='monospaced'>
674 $ bitbake-layers &lt;command&gt; [arguments]
675 </literallayout>
676 The following list describes the available commands:
677 <itemizedlist>
678 <listitem><para><filename><emphasis>help:</emphasis></filename>
679 Displays general help or help on a specified command.
680 </para></listitem>
681 <listitem><para><filename><emphasis>show-layers:</emphasis></filename>
682 Shows the current configured layers.
683 </para></listitem>
684 <listitem><para><filename><emphasis>show-recipes:</emphasis></filename>
685 Lists available recipes and the layers that provide them.
686 </para></listitem>
687 <listitem><para><filename><emphasis>show-overlayed:</emphasis></filename>
688 Lists overlayed recipes.
689 A recipe is overlayed when a recipe with the same name
690 exists in another layer that has a higher layer
691 priority.
692 </para></listitem>
693 <listitem><para><filename><emphasis>show-appends:</emphasis></filename>
694 Lists <filename>.bbappend</filename> files and the
695 recipe files to which they apply.
696 </para></listitem>
697 <listitem><para><filename><emphasis>show-cross-depends:</emphasis></filename>
698 Lists dependency relationships between recipes that
699 cross layer boundaries.
700 </para></listitem>
701 <listitem><para><filename><emphasis>flatten:</emphasis></filename>
702 Flattens the layer configuration into a separate output
703 directory.
704 Flattening your layer configuration builds a "flattened"
705 directory that contains the contents of all layers,
706 with any overlayed recipes removed and any
707 <filename>.bbappend</filename> files appended to the
708 corresponding recipes.
709 You might have to perform some manual cleanup of the
710 flattened layer as follows:
711 <itemizedlist>
712 <listitem><para>Non-recipe files (such as patches)
713 are overwritten.
714 The flatten command shows a warning for these
715 files.
716 </para></listitem>
717 <listitem><para>Anything beyond the normal layer
718 setup has been added to the
719 <filename>layer.conf</filename> file.
720 Only the lowest priority layer's
721 <filename>layer.conf</filename> is used.
722 </para></listitem>
723 <listitem><para>Overridden and appended items from
724 <filename>.bbappend</filename> files need to be
725 cleaned up.
726 The contents of each
727 <filename>.bbappend</filename> end up in the
728 flattened recipe.
729 However, if there are appended or changed
730 variable values, you need to tidy these up
731 yourself.
732 Consider the following example.
733 Here, the <filename>bitbake-layers</filename>
734 command adds the line
735 <filename>#### bbappended ...</filename> so that
736 you know where the following lines originate:
737 <literallayout class='monospaced'>
738 ...
739 DESCRIPTION = "A useful utility"
740 ...
741 EXTRA_OECONF = "--enable-something"
742 ...
743
744 #### bbappended from meta-anotherlayer ####
745
746 DESCRIPTION = "Customized utility"
747 EXTRA_OECONF += "--enable-somethingelse"
748 </literallayout>
749 Ideally, you would tidy up these utilities as
750 follows:
751 <literallayout class='monospaced'>
752 ...
753 DESCRIPTION = "Customized utility"
754 ...
755 EXTRA_OECONF = "--enable-something --enable-somethingelse"
756 ...
757 </literallayout></para></listitem>
758 </itemizedlist></para></listitem>
759 </itemizedlist>
760 </para>
761 </section>
762
763 <section id='creating-a-general-layer-using-the-yocto-layer-script'>
764 <title>Creating a General Layer Using the yocto-layer Script</title>
765
766 <para>
767 The <filename>yocto-layer</filename> script simplifies
768 creating a new general layer.
769 <note>
770 For information on BSP layers, see the
771 "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>"
772 section in the Yocto Project Board Specific (BSP)
773 Developer's Guide.
774 </note>
775 The default mode of the script's operation is to prompt you for
776 information needed to generate the layer:
777 <itemizedlist>
778 <listitem><para>The layer priority
779 </para></listitem>
780 <listitem><para>Whether or not to create a sample recipe.
781 </para></listitem>
782 <listitem><para>Whether or not to create a sample
783 append file.
784 </para></listitem>
785 </itemizedlist>
786 </para>
787
788 <para>
789 Use the <filename>yocto-layer create</filename> sub-command
790 to create a new general layer.
791 In its simplest form, you can create a layer as follows:
792 <literallayout class='monospaced'>
793 $ yocto-layer create mylayer
794 </literallayout>
795 The previous example creates a layer named
796 <filename>meta-mylayer</filename> in the current directory.
797 </para>
798
799 <para>
800 As the <filename>yocto-layer create</filename> command runs,
801 default values for the prompts appear in brackets.
802 Pressing enter without supplying anything for the prompts
803 or pressing enter and providing an invalid response causes the
804 script to accept the default value.
805 Once the script completes, the new layer
806 is created in the current working directory.
807 The script names the layer by prepending
808 <filename>meta-</filename> to the name you provide.
809 </para>
810
811 <para>
812 Minimally, the script creates the following within the layer:
813 <itemizedlist>
814 <listitem><para><emphasis>The <filename>conf</filename>
815 directory:</emphasis>
816 This directory contains the layer's configuration file.
817 The root name for the file is the same as the root name
818 your provided for the layer (e.g.
819 <filename>&lt;layer&gt;.conf</filename>).
820 </para></listitem>
821 <listitem><para><emphasis>The
822 <filename>COPYING.MIT</filename> file:</emphasis>
823 The copyright and use notice for the software.
824 </para></listitem>
825 <listitem><para><emphasis>The <filename>README</filename>
826 file:</emphasis>
827 A file describing the contents of your new layer.
828 </para></listitem>
829 </itemizedlist>
830 </para>
831
832 <para>
833 If you choose to generate a sample recipe file, the script
834 prompts you for the name for the recipe and then creates it
835 in <filename>&lt;layer&gt;/recipes-example/example/</filename>.
836 The script creates a <filename>.bb</filename> file and a
837 directory, which contains a sample
838 <filename>helloworld.c</filename> source file, along with
839 a sample patch file.
840 If you do not provide a recipe name, the script uses
841 "example".
842 </para>
843
844 <para>
845 If you choose to generate a sample append file, the script
846 prompts you for the name for the file and then creates it
847 in <filename>&lt;layer&gt;/recipes-example-bbappend/example-bbappend/</filename>.
848 The script creates a <filename>.bbappend</filename> file and a
849 directory, which contains a sample patch file.
850 If you do not provide a recipe name, the script uses
851 "example".
852 The script also prompts you for the version of the append file.
853 The version should match the recipe to which the append file
854 is associated.
855 </para>
856
857 <para>
858 The easiest way to see how the <filename>yocto-layer</filename>
859 script works is to experiment with the script.
860 You can also read the usage information by entering the
861 following:
862 <literallayout class='monospaced'>
863 $ yocto-layer help
864 </literallayout>
865 </para>
866
867 <para>
868 Once you create your general layer, you must add it to your
869 <filename>bblayers.conf</filename> file.
870 Here is an example where a layer named
871 <filename>meta-mylayer</filename> is added:
872 <literallayout class='monospaced'>
873 BBLAYERS = ?" \
874 /usr/local/src/yocto/meta \
875 /usr/local/src/yocto/meta-yocto \
876 /usr/local/src/yocto/meta-yocto-bsp \
877 /usr/local/src/yocto/meta-mylayer \
878 "
879
880 BBLAYERS_NON_REMOVABLE ?= " \
881 /usr/local/src/yocto/meta \
882 /usr/local/src/yocto/meta-yocto \
883 "
884 </literallayout>
885 Adding the layer to this file enables the build system to
886 locate the layer during the build.
887 </para>
888 </section>
889 </section>
890
891 <section id='usingpoky-extend-customimage'>
892 <title>Customizing Images</title>
893
894 <para>
895 You can customize images to satisfy particular requirements.
896 This section describes several methods and provides guidelines for each.
897 </para>
898
899 <section id='usingpoky-extend-customimage-localconf'>
900 <title>Customizing Images Using <filename>local.conf</filename></title>
901
902 <para>
903 Probably the easiest way to customize an image is to add a
904 package by way of the <filename>local.conf</filename>
905 configuration file.
906 Because it is limited to local use, this method generally only
907 allows you to add packages and is not as flexible as creating
908 your own customized image.
909 When you add packages using local variables this way, you need
910 to realize that these variable changes are in effect for every
911 build and consequently affect all images, which might not
912 be what you require.
913 </para>
914
915 <para>
916 To add a package to your image using the local configuration
917 file, use the
918 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'>IMAGE_INSTALL</ulink></filename>
919 variable with the <filename>_append</filename> operator:
920 <literallayout class='monospaced'>
921 IMAGE_INSTALL_append = " strace"
922 </literallayout>
923 Use of the syntax is important - specifically, the space between
924 the quote and the package name, which is
925 <filename>strace</filename> in this example.
926 This space is required since the <filename>_append</filename>
927 operator does not add the space.
928 </para>
929
930 <para>
931 Furthermore, you must use <filename>_append</filename> instead
932 of the <filename>+=</filename> operator if you want to avoid
933 ordering issues.
934 The reason for this is because doing so unconditionally appends
935 to the variable and avoids ordering problems due to the
936 variable being set in image recipes and
937 <filename>.bbclass</filename> files with operators like
938 <filename>?=</filename>.
939 Using <filename>_append</filename> ensures the operation takes
940 affect.
941 </para>
942
943 <para>
944 As shown in its simplest use,
945 <filename>IMAGE_INSTALL_append</filename> affects all images.
946 It is possible to extend the syntax so that the variable
947 applies to a specific image only.
948 Here is an example:
949 <literallayout class='monospaced'>
950 IMAGE_INSTALL_append_pn-core-image-minimal = " strace"
951 </literallayout>
952 This example adds <filename>strace</filename> to the
953 <filename>core-image-minimal</filename> image only.
954 </para>
955
956 <para>
957 You can add packages using a similar approach through the
958 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-CORE_IMAGE_EXTRA_INSTALL'>CORE_IMAGE_EXTRA_INSTALL</ulink></filename>
959 variable.
960 If you use this variable, only
961 <filename>core-image-*</filename> images are affected.
962 </para>
963 </section>
964
965 <section id='usingpoky-extend-customimage-imagefeatures'>
966 <title>Customizing Images Using Custom <filename>IMAGE_FEATURES</filename> and
967 <filename>EXTRA_IMAGE_FEATURES</filename></title>
968
969 <para>
970 Another method for customizing your image is to enable or
971 disable high-level image features by using the
972 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink>
973 and <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_IMAGE_FEATURES'><filename>EXTRA_IMAGE_FEATURES</filename></ulink>
974 variables.
975 Although the functions for both variables are nearly equivalent,
976 best practices dictate using <filename>IMAGE_FEATURES</filename>
977 from within a recipe and using
978 <filename>EXTRA_IMAGE_FEATURES</filename> from within
979 your <filename>local.conf</filename> file, which is found in the
980 <link linkend='build-directory'>Build Directory</link>.
981 </para>
982
983 <para>
984 To understand how these features work, the best reference is
985 <filename>meta/classes/core-image.bbclass</filename>.
986 In summary, the file looks at the contents of the
987 <filename>IMAGE_FEATURES</filename> variable and then maps
988 those contents into a set of package groups.
989 Based on this information, the build system automatically
990 adds the appropriate packages to the
991 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></ulink>
992 variable.
993 Effectively, you are enabling extra features by extending the
994 class or creating a custom class for use with specialized image
995 <filename>.bb</filename> files.
996 </para>
997
998 <para>
999 Use the <filename>EXTRA_IMAGE_FEATURES</filename> variable
1000 from within your local configuration file.
1001 Using a separate area from which to enable features with
1002 this variable helps you avoid overwriting the features in the
1003 image recipe that are enabled with
1004 <filename>IMAGE_FEATURES</filename>.
1005 The value of <filename>EXTRA_IMAGE_FEATURES</filename> is added
1006 to <filename>IMAGE_FEATURES</filename> within
1007 <filename>meta/conf/bitbake.conf</filename>.
1008 </para>
1009
1010 <para>
1011 To illustrate how you can use these variables to modify your
1012 image, consider an example that selects the SSH server.
1013 The Yocto Project ships with two SSH servers you can use
1014 with your images: Dropbear and OpenSSH.
1015 Dropbear is a minimal SSH server appropriate for
1016 resource-constrained environments, while OpenSSH is a
1017 well-known standard SSH server implementation.
1018 By default, the <filename>core-image-sato</filename> image
1019 is configured to use Dropbear.
1020 The <filename>core-image-full-cmdline</filename> and
1021 <filename>core-image-lsb</filename> images both
1022 include OpenSSH.
1023 The <filename>core-image-minimal</filename> image does not
1024 contain an SSH server.
1025 </para>
1026
1027 <para>
1028 You can customize your image and change these defaults.
1029 Edit the <filename>IMAGE_FEATURES</filename> variable
1030 in your recipe or use the
1031 <filename>EXTRA_IMAGE_FEATURES</filename> in your
1032 <filename>local.conf</filename> file so that it configures the
1033 image you are working with to include
1034 <filename>ssh-server-dropbear</filename> or
1035 <filename>ssh-server-openssh</filename>.
1036 </para>
1037
1038 <note>
1039 See the
1040 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>"
1041 section in the Yocto Project Reference Manual for a complete
1042 list of image features that ship with the Yocto Project.
1043 </note>
1044 </section>
1045
1046 <section id='usingpoky-extend-customimage-custombb'>
1047 <title>Customizing Images Using Custom .bb Files</title>
1048
1049 <para>
1050 You can also customize an image by creating a custom recipe
1051 that defines additional software as part of the image.
1052 The following example shows the form for the two lines you need:
1053 <literallayout class='monospaced'>
1054 IMAGE_INSTALL = "packagegroup-core-x11-base package1 package2"
1055
1056 inherit core-image
1057 </literallayout>
1058 </para>
1059
1060 <para>
1061 Defining the software using a custom recipe gives you total
1062 control over the contents of the image.
1063 It is important to use the correct names of packages in the
1064 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'>IMAGE_INSTALL</ulink></filename>
1065 variable.
1066 You must use the OpenEmbedded notation and not the Debian notation for the names
1067 (e.g. <filename>eglibc-dev</filename> instead of <filename>libc6-dev</filename>).
1068 </para>
1069
1070 <para>
1071 The other method for creating a custom image is to base it on an existing image.
1072 For example, if you want to create an image based on <filename>core-image-sato</filename>
1073 but add the additional package <filename>strace</filename> to the image,
1074 copy the <filename>meta/recipes-sato/images/core-image-sato.bb</filename> to a
1075 new <filename>.bb</filename> and add the following line to the end of the copy:
1076 <literallayout class='monospaced'>
1077 IMAGE_INSTALL += "strace"
1078 </literallayout>
1079 </para>
1080 </section>
1081
1082 <section id='usingpoky-extend-customimage-customtasks'>
1083 <title>Customizing Images Using Custom Package Groups</title>
1084
1085 <para>
1086 For complex custom images, the best approach for customizing
1087 an image is to create a custom package group recipe that is
1088 used to build the image or images.
1089 A good example of a package group recipe is
1090 <filename>meta/recipes-core/packagegroups/packagegroup-core-boot.bb</filename>.
1091 The
1092 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'>PACKAGES</ulink></filename>
1093 variable lists the package group packages you wish to produce.
1094 <filename>inherit packagegroup</filename> sets appropriate
1095 default values and automatically adds <filename>-dev</filename>,
1096 <filename>-dbg</filename>, and <filename>-ptest</filename>
1097 complementary packages for every package specified in
1098 <filename>PACKAGES</filename>.
1099 Note that the inherit line should be towards
1100 the top of the recipe, certainly before you set
1101 <filename>PACKAGES</filename>.
1102 For each package you specify in <filename>PACKAGES</filename>,
1103 you can use
1104 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-RDEPENDS'>RDEPENDS</ulink></filename>
1105 and
1106 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-RRECOMMENDS'>RRECOMMENDS</ulink></filename>
1107 entries to provide a list of packages the parent task package
1108 should contain.
1109 Following is an example:
1110 <literallayout class='monospaced'>
1111 DESCRIPTION = "My Custom Package Groups"
1112
1113 inherit packagegroup
1114
1115 PACKAGES = "\
1116 packagegroup-custom-apps \
1117 packagegroup-custom-tools \
1118 "
1119
1120 RDEPENDS_packagegroup-custom-apps = "\
1121 dropbear \
1122 portmap \
1123 psplash"
1124
1125 RDEPENDS_packagegroup-custom-tools = "\
1126 oprofile \
1127 oprofileui-server \
1128 lttng-control \
1129 lttng-viewer"
1130
1131 RRECOMMENDS_packagegroup-custom-tools = "\
1132 kernel-module-oprofile"
1133 </literallayout>
1134 </para>
1135
1136 <para>
1137 In the previous example, two package group packages are created with their dependencies and their
1138 recommended package dependencies listed: <filename>packagegroup-custom-apps</filename>, and
1139 <filename>packagegroup-custom-tools</filename>.
1140 To build an image using these package group packages, you need to add
1141 <filename>packagegroup-custom-apps</filename> and/or
1142 <filename>packagegroup-custom-tools</filename> to
1143 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'>IMAGE_INSTALL</ulink></filename>.
1144 For other forms of image dependencies see the other areas of this section.
1145 </para>
1146 </section>
1147 </section>
1148
1149 <section id='new-recipe-writing-a-new-recipe'>
1150 <title>Writing a New Recipe</title>
1151
1152 <para>
1153 Recipes (<filename>.bb</filename> files) are fundamental components
1154 in the Yocto Project environment.
1155 Each software component built by the OpenEmbedded build system
1156 requires a recipe to define the component.
1157 This section describes how to create, write, and test a new
1158 recipe.
1159 <note>
1160 For information on variables that are useful for recipes and
1161 for information about recipe naming issues, see the
1162 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-varlocality-recipe-required'>Required</ulink>"
1163 section of the Yocto Project Reference Manual.
1164 </note>
1165 </para>
1166
1167 <section id='new-recipe-overview'>
1168 <title>Overview</title>
1169
1170 <para>
1171 The following figure shows the basic process for creating a
1172 new recipe.
1173 The remainder of the section provides details for the steps.
1174 <imagedata fileref="figures/recipe-workflow.png" width="6in" depth="7in" align="center" scalefit="1" />
1175 </para>
1176 </section>
1177
1178 <section id='new-recipe-locate-a-base-recipe'>
1179 <title>Locate a Base Recipe</title>
1180
1181 <para>
1182 Before writing a recipe from scratch, it is often useful to
1183 discover whether someone else has already written one that
1184 meets (or comes close to meeting) your needs.
1185 The Yocto Project and OpenEmbedded communities maintain many
1186 recipes that might be candidates for what you are doing.
1187 You can find a good central index of these recipes in the
1188 <ulink url='http://layers.openembedded.org'>OpenEmbedded metadata index</ulink>.
1189 </para>
1190
1191 <para>
1192 Working from an existing recipe or a skeleton recipe is the
1193 best way to get started.
1194 Here are some points on both methods:
1195 <itemizedlist>
1196 <listitem><para><emphasis>Locate and modify a recipe that
1197 is close to what you want to do:</emphasis>
1198 This method works when you are familiar with the
1199 current recipe space.
1200 The method does not work so well for those new to
1201 the Yocto Project or writing recipes.</para>
1202 <para>Some risks associated with this method are
1203 using a recipe that has areas totally unrelated to
1204 what you are trying to accomplish with your recipe,
1205 not recognizing areas of the recipe that you might
1206 have to add from scratch, and so forth.
1207 All these risks stem from unfamiliarity with the
1208 existing recipe space.</para></listitem>
1209 <listitem><para><emphasis>Use and modify the following
1210 skeleton recipe:</emphasis>
1211 <literallayout class='monospaced'>
1212 SUMMARY = ""
1213 HOMEPAGE = ""
1214 LICENSE = ""
1215
1216 LIC_FILES_CHKSUM = ""
1217
1218 SRC_URI = ""
1219 SRC_URI[md5sum] = ""
1220 SRC_URI[sha256sum] = ""
1221
1222 S = "${WORKDIR}/${PN}-${PV}"
1223
1224 inherit &lt;stuff&gt;
1225 </literallayout>
1226 Modifying this recipe is the recommended method for
1227 creating a new recipe.
1228 The recipe provides the fundamental areas that you need
1229 to include, exclude, or alter to fit your needs.
1230 </para></listitem>
1231 </itemizedlist>
1232 </para>
1233 </section>
1234
1235 <section id='new-recipe-storing-and-naming-the-recipe'>
1236 <title>Storing and Naming the Recipe</title>
1237
1238 <para>
1239 Once you have your base recipe, you should put it in your
1240 own layer and name it appropriately.
1241 Locating it correctly ensures that the OpenEmbedded build
1242 system can find it when you use BitBake to process the
1243 recipe.
1244 </para>
1245
1246 <itemizedlist>
1247 <listitem><para><emphasis>Storing Your Recipe:</emphasis>
1248 The OpenEmbedded build system locates your recipe
1249 through the layer's <filename>conf/layer.conf</filename>
1250 file and the
1251 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBFILES'><filename>BBFILES</filename></ulink>
1252 variable.
1253 This variable sets up a path from which the build system can
1254 locate recipes.
1255 Here is the typical use:
1256 <literallayout class='monospaced'>
1257 BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
1258 ${LAYERDIR}/recipes-*/*/*.bbappend"
1259 </literallayout>
1260 Consequently, you need to be sure you locate your new recipe
1261 inside your layer such that it can be found.</para>
1262 <para>You can find more information on how layers are
1263 structured in the
1264 "<link linkend='understanding-and-creating-layers'>Understanding and Creating Layers</link>"
1265 section.</para></listitem>
1266 <listitem><para><emphasis>Naming Your Recipe:</emphasis>
1267 When you name your recipe, you need to follow this naming
1268 convention:
1269 <literallayout class='monospaced'>
1270 &lt;basename&gt;_&lt;version&gt;.bb
1271 </literallayout>
1272 Use lower-cased characters and do not include the reserved
1273 suffixes <filename>-native</filename>,
1274 <filename>-cross</filename>, <filename>-initial</filename>,
1275 or <filename>-dev</filename> casually (i.e. do not use them
1276 as part of your recipe name unless the string applies).
1277 Here are some examples:
1278 <literallayout class='monospaced'>
1279 cups_1.7.0.bb
1280 gawk_4.0.2.bb
1281 xdg-utils_1.1.0-rc1.bb
1282 </literallayout></para></listitem>
1283 </itemizedlist>
1284 </section>
1285
1286 <section id='new-recipe-running-a-build-on-the-recipe'>
1287 <title>Running a Build on the Recipe</title>
1288
1289 <para>
1290 Creating a new recipe is usually an iterative process that
1291 requires using BitBake to process the recipe multiple times in
1292 order to progressively discover and add information to the
1293 recipe.
1294 </para>
1295
1296 <para>
1297 Assuming you have sourced a build environment setup script (i.e.
1298 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
1299 or
1300 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>)
1301 and you are in the
1302 <link linkend='build-directory'>Build Directory</link>,
1303 use BitBake to process your recipe.
1304 All you need to provide is the
1305 <filename>&lt;basename&gt;</filename> of the recipe as described
1306 in the previous section:
1307 <literallayout class='monospaced'>
1308 $ bitbake &lt;basename&gt;
1309 </literallayout>
1310
1311 </para>
1312
1313 <para>
1314 During the build, the OpenEmbedded build system creates a
1315 temporary work directory for the recipe
1316 (<filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink><filename>}</filename>)
1317 where it keeps extracted source files, log files, intermediate
1318 compilation and packaging files, and so forth.
1319 </para>
1320
1321 <para>
1322 The temporary work directory is constructed as follows and
1323 depends on several factors:
1324 <literallayout class='monospaced'>
1325 ${TMPDIR}/work/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}
1326 </literallayout>
1327 As an example, assume a Source Directory top-level folder named
1328 <filename>poky</filename>, a default Build Directory at
1329 <filename>poky/build</filename>, and a
1330 <filename>qemux86-poky-linux</filename> machine target system.
1331 Furthermore, suppose your recipe is named
1332 <filename>foo_1.3.0-r0.bb</filename>.
1333 In this case, the work directory the build system uses to
1334 build the package would be as follows:
1335 <literallayout class='monospaced'>
1336 poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
1337 </literallayout>
1338 Inside this directory you can find sub-directories such as
1339 <filename>image</filename>, <filename>packages-split</filename>,
1340 and <filename>temp</filename>.
1341 After the build, you can examine these to determine how well
1342 the build went.
1343 <note>
1344 You can find log files for each task in the recipe's
1345 <filename>temp</filename> directory (e.g.
1346 <filename>poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0/temp</filename>).
1347 Log files are named <filename>log.&lt;taskname&gt;</filename>
1348 (e.g. <filename>log.do_configure</filename>,
1349 <filename>log.do_fetch</filename>, and
1350 <filename>log.do_compile</filename>).
1351 </note>
1352 </para>
1353
1354 <para>
1355 You can find more information about the build process in the
1356 "<ulink url='&YOCTO_DOCS_REF_URL;#closer-look'>A Closer Look at the Yocto Project Development Environment</ulink>"
1357 chapter of the Yocto Project Reference Manual.
1358 </para>
1359
1360 <para>
1361 You can also reference the following variables in the
1362 Yocto Project Reference Manual's glossary for more information:
1363 <itemizedlist>
1364 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-TMPDIR'><filename>TMPDIR</filename></ulink>:
1365 The top-level build output directory</listitem>
1366 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-MULTIMACH_TARGET_SYS'><filename>MULTIMACH_TARGET_SYS</filename></ulink>:
1367 The target system identifier</listitem>
1368 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink>:
1369 The recipe name</listitem>
1370 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-EXTENDPE'><filename>EXTENDPE</filename></ulink>:
1371 The epoch - (if
1372 <ulink url='&YOCTO_DOCS_REF_URL;#var-PE'><filename>PE</filename></ulink>
1373 is not specified, which is usually the case for most
1374 recipes, then <filename>EXTENDPE</filename> is blank)</listitem>
1375 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>:
1376 The recipe version</listitem>
1377 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink>:
1378 The recipe revision</listitem>
1379 </itemizedlist>
1380 </para>
1381 </section>
1382
1383 <section id='new-recipe-fetching-code'>
1384 <title>Fetching Code</title>
1385
1386 <para>
1387 The first thing your recipe must do is specify how to fetch
1388 the source files.
1389 Fetching is controlled mainly through the
1390 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
1391 variable.
1392 Your recipe must have a <filename>SRC_URI</filename> variable
1393 that points to where the source is located.
1394 For a graphical representation of source locations, see the
1395 "<ulink url='&YOCTO_DOCS_REF_URL;#sources-dev-environment'>Sources</ulink>"
1396 section in the Yocto Project Reference Manual.
1397 </para>
1398
1399 <para>
1400 The <filename>do_fetch</filename> task uses the prefix of
1401 each entry in the <filename>SRC_URI</filename> variable value
1402 to determine what fetcher to use to get your source files.
1403 It is the <filename>SRC_URI</filename> variable that triggers
1404 the fetcher.
1405 The <filename>do_patch</filename> task uses the variable after
1406 source is fetched to apply patches.
1407 The OpenEmbedded build system uses
1408 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESOVERRIDES'><filename>FILESOVERRIDES</filename></ulink>
1409 for scanning directory locations for local files in
1410 <filename>SRC_URI</filename>.
1411 </para>
1412
1413 <para>
1414 The <filename>SRC_URI</filename> variable in your recipe must
1415 define each unique location for your source files.
1416 It is good practice to not hard-code pathnames in an URL used
1417 in <filename>SRC_URI</filename>.
1418 Rather than hard-code these paths, use
1419 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink><filename>}</filename>,
1420 which causes the fetch process to use the version specified in
1421 the recipe filename.
1422 Specifying the version in this manner means that upgrading the
1423 recipe to a future version is as simple as renaming the recipe
1424 to match the new version.
1425 </para>
1426
1427 <para>
1428 Here is a simple example from the
1429 <filename>meta/recipes-devtools/cdrtools/cdrtools-native_3.01a17.bb</filename>
1430 recipe where the source comes from a single tarball.
1431 Notice the use of the
1432 <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>
1433 variable:
1434 <literallayout class='monospaced'>
1435 SRC_URI = "ftp://ftp.berlios.de/pub/cdrecord/alpha/cdrtools-${PV}.tar.bz2"
1436 </literallayout>
1437 </para>
1438
1439 <para>
1440 Files mentioned in <filename>SRC_URI</filename> whose names end
1441 in a typical archive extension (e.g. <filename>.tar</filename>,
1442 <filename>.tar.gz</filename>, <filename>.tar.bz2</filename>,
1443 <filename>.zip</filename>, and so forth), are automatically
1444 extracted during the <filename>do_unpack</filename> task.
1445 For another example that specifies these types of files, see
1446 the
1447 "<link linkend='new-recipe-autotooled-package'>Autotooled Package</link>"
1448 section.
1449 </para>
1450
1451 <para>
1452 Another way of specifying source is from an SCM.
1453 For Git repositories, you must specify
1454 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRCREV'><filename>SRCREV</filename></ulink>
1455 and you should specify
1456 <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>
1457 to include the revision with
1458 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRCPV'><filename>SRCPV</filename></ulink>.
1459 Here is an example from the recipe
1460 <filename>meta/recipes-kernel/blktrace/blktrace_git.bb</filename>:
1461 <literallayout class='monospaced'>
1462 SRCREV = "d6918c8832793b4205ed3bfede78c2f915c23385"
1463
1464 PR = "r6"
1465 PV = "1.0.5+git${SRCPV}"
1466
1467 SRC_URI = "git://git.kernel.dk/blktrace.git \
1468 file://ldflags.patch"
1469 </literallayout>
1470 </para>
1471
1472 <para>
1473 If your <filename>SRC_URI</filename> statement includes
1474 URLs pointing to individual files fetched from a remote server
1475 other than a version control system, BitBake attempts to
1476 verify the files against checksums defined in your recipe to
1477 ensure they have not been tampered with or otherwise modified
1478 since the recipe was written.
1479 Two checksums are used:
1480 <filename>SRC_URI[md5sum]</filename> and
1481 <filename>SRC_URI[sha256sum]</filename>.
1482 </para>
1483
1484 <para>
1485 If your <filename>SRC_URI</filename> variable points to
1486 more than a single URL (excluding SCM URLs), you need to
1487 provide the <filename>md5</filename> and
1488 <filename>sha256</filename> checksums for each URL.
1489 For these cases, you provide a name for each URL as part of
1490 the <filename>SRC_URI</filename> and then reference that name
1491 in the subsequent checksum statements.
1492 Here is an example:
1493 <literallayout class='monospaced'>
1494 SRC_URI = "${DEBIAN_MIRROR}/main/a/apmd/apmd_3.2.2.orig.tar.gz;name=tarball \
1495 ${DEBIAN_MIRROR}/main/a/apmd/apmd_${PV}.diff.gz;name=patch
1496
1497 SRC_URI[tarball.md5sum] = "b1e6309e8331e0f4e6efd311c2d97fa8"
1498 SRC_URI[tarball.sha256sum] = "7f7d9f60b7766b852881d40b8ff91d8e39fccb0d1d913102a5c75a2dbb52332d"
1499
1500 SRC_URI[patch.md5sum] = "57e1b689264ea80f78353519eece0c92"
1501 SRC_URI[patch.sha256sum] = "7905ff96be93d725544d0040e425c42f9c05580db3c272f11cff75b9aa89d430"
1502 </literallayout>
1503 </para>
1504
1505 <para>
1506 To find these checksums, you can comment the statements out
1507 and then attempt to build the software.
1508 The build will produce an error for each missing checksum
1509 and as part of the error message provide the correct checksum
1510 string.
1511 Once you have the correct checksums, simply copy them into your
1512 recipe for a subsequent build.
1513 </para>
1514
1515 <para>
1516 This final example is a bit more complicated and is from the
1517 <filename>meta/recipes-sato/rxvt-unicode/rxvt-unicode_9.19.bb</filename>
1518 recipe.
1519 The example's <filename>SRC_URI</filename> statement identifies
1520 multiple files as the source files for the recipe: a tarball, a
1521 patch file, a desktop file, and an icon.
1522 <literallayout class='monospaced'>
1523 SRC_URI = "http://dist.schmorp.de/rxvt-unicode/Attic/rxvt-unicode-${PV}.tar.bz2 \
1524 file://xwc.patch \
1525 file://rxvt.desktop \
1526 file://rxvt.png"
1527 </literallayout>
1528 </para>
1529
1530 <para>
1531 When you specify local files using the
1532 <filename>file://</filename> URI protocol, the build system
1533 fetches files from the local machine.
1534 The path is relative to the
1535 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESPATH'><filename>FILESPATH</filename></ulink>
1536 variable and searches specific directories in a certain order:
1537 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BPN'><filename>BPN</filename></ulink><filename>}</filename>,
1538 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BP'><filename>BP</filename></ulink><filename>}</filename>,
1539 and <filename>files</filename>.
1540 The directories are assumed to be subdirectories of the
1541 directory in which the recipe or append file resides.
1542 For another example that specifies these types of files, see the
1543 "<link linkend='new-recipe-single-c-file-package-hello-world'>Single .c File Package (Hello World!)</link>"
1544 section.
1545 </para>
1546
1547 <para>
1548 The previous example also specifies a patch file.
1549 Patch files are files whose names end in
1550 <filename>.patch</filename> or <filename>.diff</filename>.
1551 The build system automatically applies patches as described
1552 in the
1553 "<link linkend='new-recipe-patching-code'>Patching Code</link>" section.
1554 </para>
1555 </section>
1556
1557 <section id='new-recipe-unpacking-code'>
1558 <title>Unpacking Code</title>
1559
1560 <para>
1561 During the build, the <filename>do_unpack</filename> task
1562 unpacks the source with
1563 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-S'><filename>S</filename></ulink><filename>}</filename>
1564 pointing to where it is unpacked.
1565 </para>
1566
1567 <para>
1568 If you are fetching your source files from an upstream source
1569 archived tarball and the tarball's internal structure matches
1570 the common convention of a top-level subdirectory named
1571 <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>,
1572 then you do not need to set <filename>S</filename>.
1573 However, if <filename>SRC_URI</filename> specifies to fetch
1574 source from an archive that does not use this convention,
1575 or from an SCM like Git or Subversion, your recipe needs to
1576 define <filename>S</filename>.
1577 </para>
1578
1579 <para>
1580 If processing your recipe using BitBake successfully unpacks
1581 the source files, you need to be sure that the directory
1582 pointed to by <filename>${S}</filename> matches the structure
1583 of the source.
1584 </para>
1585 </section>
1586
1587 <section id='new-recipe-patching-code'>
1588 <title>Patching Code</title>
1589
1590 <para>
1591 Sometimes it is necessary to patch code after it has been
1592 fetched.
1593 Any files mentioned in <filename>SRC_URI</filename> whose
1594 names end in <filename>.patch</filename> or
1595 <filename>.diff</filename> are treated as patches.
1596 The <filename>do_patch</filename> task automatically applies
1597 these patches.
1598 </para>
1599
1600 <para>
1601 The build system should be able to apply patches with the "-p1"
1602 option (i.e. one directory level in the path will be stripped
1603 off).
1604 If your patch needs to have more directory levels stripped off,
1605 specify the number of levels using the "striplevel" option in
1606 the <filename>SRC_URI</filename> entry for the patch.
1607 Alternatively, if your patch needs to be applied in a specific
1608 subdirectory that is not specified in the patch file, use the
1609 "patchdir" option in the entry.
1610 </para>
1611 </section>
1612
1613 <section id='new-recipe-licensing'>
1614 <title>Licensing</title>
1615
1616 <para>
1617 Your recipe needs to have both the
1618 <ulink url='&YOCTO_DOCS_REF_URL;#var-LICENSE'><filename>LICENSE</filename></ulink>
1619 and
1620 <ulink url='&YOCTO_DOCS_REF_URL;#var-LIC_FILES_CHKSUM'><filename>LIC_FILES_CHKSUM</filename></ulink>
1621 variables:
1622 <itemizedlist>
1623 <listitem><para><emphasis><filename>LICENSE</filename>:</emphasis>
1624 This variable specifies the license for the software.
1625 If you do not know the license under which the software
1626 you are building is distributed, you should go to the
1627 source code and look for that information.
1628 Typical files containing this information include
1629 <filename>COPYING</filename>,
1630 <filename>LICENSE</filename>, and
1631 <filename>README</filename> files.
1632 You could also find the information near the top of
1633 a source file.
1634 For example, given a piece of software licensed under
1635 the GNU General Public License version 2, you would
1636 set <filename>LICENSE</filename> as follows:
1637 <literallayout class='monospaced'>
1638 LICENSE = "GPLv2"
1639 </literallayout></para>
1640 <para>The licenses you specify within
1641 <filename>LICENSE</filename> can have any name as long
1642 as you do not use spaces, since spaces are used as
1643 separators between license names.
1644 For standard licenses, use the names of the files in
1645 <filename>meta/files/common-licenses/</filename>
1646 or the <filename>SPDXLICENSEMAP</filename> flag names
1647 defined in <filename>meta/conf/licenses.conf</filename>.
1648 </para></listitem>
1649 <listitem><para><emphasis><filename>LIC_FILES_CHKSUM</filename>:</emphasis>
1650 The OpenEmbedded build system uses this variable to
1651 make sure the license text has not changed.
1652 If it has, the build produces an error and it affords
1653 you the chance to figure it out and correct the problem.
1654 </para>
1655 <para>You need to specify all applicable licensing
1656 files for the software.
1657 At the end of the configuration step, the build process
1658 will compare the checksums of the files to be sure
1659 the text has not changed.
1660 Any differences result in an error with the message
1661 containing the current checksum.
1662 For more explanation and examples of how to set the
1663 <filename>LIC_FILES_CHKSUM</filename> variable, see the
1664 "<ulink url='&YOCTO_DOCS_REF_URL;#usingpoky-configuring-LIC_FILES_CHKSUM'>Tracking License Changes</ulink>"
1665 section in the Yocto Project Reference Manual.</para>
1666 <para>To determine the correct checksum string, you
1667 can list the appropriate files in the
1668 <filename>LIC_FILES_CHKSUM</filename> variable with
1669 incorrect md5 strings, attempt to build the software,
1670 and then note the resulting error messages that will
1671 report the correct md5 strings.
1672 Here is an example that assumes the software has a
1673 <filename>COPYING</filename> file:
1674 <literallayout class='monospaced'>
1675 LIC_FILES_CHKSUM = "file://COPYING;md5=xxx"
1676 </literallayout>
1677 When you try to build the software, the build system
1678 will produce an error and give you the correct string
1679 that you can substitute into the recipe file for a
1680 subsequent build.
1681 </para></listitem>
1682 </itemizedlist>
1683 </para>
1684
1685<!--
1686
1687 <para>
1688 For trying this out I created a new recipe named
1689 <filename>htop_1.0.2.bb</filename> and put it in
1690 <filename>poky/meta/recipes-extended/htop</filename>.
1691 There are two license type statements in my very simple
1692 recipe:
1693 <literallayout class='monospaced'>
1694 LICENSE = ""
1695
1696 LIC_FILES_CHKSUM = ""
1697
1698 SRC_URI[md5sum] = ""
1699 SRC_URI[sha256sum] = ""
1700 </literallayout>
1701 Evidently, you need to run a <filename>bitbake -c cleanall htop</filename>.
1702 Next, you delete or comment out the two <filename>SRC_URI</filename>
1703 lines at the end and then attempt to build the software with
1704 <filename>bitbake htop</filename>.
1705 Doing so causes BitBake to report some errors and and give
1706 you the actual strings you need for the last two
1707 <filename>SRC_URI</filename> lines.
1708 Prior to this, you have to dig around in the home page of the
1709 source for <filename>htop</filename> and determine that the
1710 software is released under GPLv2.
1711 You can provide that in the <filename>LICENSE</filename>
1712 statement.
1713 Now you edit your recipe to have those two strings for
1714 the <filename>SRC_URI</filename> statements:
1715 <literallayout class='monospaced'>
1716 LICENSE = "GPLv2"
1717
1718 LIC_FILES_CHKSUM = ""
1719
1720 SRC_URI = "${SOURCEFORGE_MIRROR}/htop/htop-${PV}.tar.gz"
1721 SRC_URI[md5sum] = "0d01cca8df3349c74569cefebbd9919e"
1722 SRC_URI[sha256sum] = "ee60657b044ece0df096c053060df7abf3cce3a568ab34d260049e6a37ccd8a1"
1723 </literallayout>
1724 At this point, you can build the software again using the
1725 <filename>bitbake htop</filename> command.
1726 There is just a set of errors now associated with the
1727 empty <filename>LIC_FILES_CHKSUM</filename> variable now.
1728 </para>
1729-->
1730
1731 </section>
1732
1733 <section id='new-recipe-configuring-the-recipe'>
1734 <title>Configuring the Recipe</title>
1735
1736 <para>
1737 Most software provides some means of setting build-time
1738 configuration options before compilation.
1739 Typically, setting these options is accomplished by running a
1740 configure script with some options, or by modifying a build
1741 configuration file.
1742 </para>
1743
1744 <para>
1745 A major part of build-time configuration is about checking for
1746 build-time dependencies and possibly enabling optional
1747 functionality as a result.
1748 You need to specify any build-time dependencies for the
1749 software you are building in your recipe's
1750 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>
1751 value, in terms of other recipes that satisfy those
1752 dependencies.
1753 You can often find build-time or runtime
1754 dependencies described in the software's documentation.
1755 </para>
1756
1757 <para>
1758 The following list provides configuration items of note based
1759 on how your software is built:
1760 <itemizedlist>
1761 <listitem><para><emphasis>Autotools:</emphasis>
1762 If your source files have a
1763 <filename>configure.ac</filename> file, then your
1764 software is built using Autotools.
1765 If this is the case, you just need to worry about
1766 tweaking the configuration.</para>
1767 <para>When using Autotools, your recipe needs to inherit
1768 the
1769 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-autotools'><filename>autotools</filename></ulink>
1770 class and your recipe does not have to contain a
1771 <filename>do_configure</filename> task.
1772 However, you might still want to make some adjustments.
1773 For example, you can set
1774 <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_OECONF'><filename>EXTRA_OECONF</filename></ulink>
1775 to pass any needed configure options that are specific
1776 to the recipe.</para></listitem>
1777 <listitem><para><emphasis>CMake:</emphasis>
1778 If your source files have a
1779 <filename>CMakeLists.txt</filename> file, then your
1780 software is built using CMake.
1781 If this is the case, you just need to worry about
1782 tweaking the configuration.</para>
1783 <para>When you use CMake, your recipe needs to inherit
1784 the
1785 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-cmake'><filename>cmake</filename></ulink>
1786 class and your recipe does not have to contain a
1787 <filename>do_configure</filename> task.
1788 You can make some adjustments by setting
1789 <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_OECMAKE'><filename>EXTRA_OECMAKE</filename></ulink>
1790 to pass any needed configure options that are specific
1791 to the recipe.</para></listitem>
1792 <listitem><para><emphasis>Other:</emphasis>
1793 If your source files do not have a
1794 <filename>configure.ac</filename> or
1795 <filename>CMakeLists.txt</filename> file, then your
1796 software is built using some method other than Autotools
1797 or CMake.
1798 If this is the case, you normally need to provide a
1799 <filename>do_configure</filename> task in your recipe
1800 unless, of course, there is nothing to configure.
1801 </para>
1802 <para>Even if your software is not being built by
1803 Autotools or CMake, you still might not need to deal
1804 with any configuration issues.
1805 You need to determine if configuration is even a required step.
1806 You might need to modify a Makefile or some configuration file
1807 used for the build to specify necessary build options.
1808 Or, perhaps you might need to run a provided, custom
1809 configure script with the appropriate options.</para>
1810 <para>For the case involving a custom configure
1811 script, you would run
1812 <filename>./configure --help</filename> and look for
1813 the options you need to set.</para></listitem>
1814 </itemizedlist>
1815 </para>
1816
1817 <para>
1818 Once configuration succeeds, it is always good practice to
1819 look at the <filename>log.do_configure</filename> file to
1820 ensure that the appropriate options have been enabled and no
1821 additional build-time dependencies need to be added to
1822 <filename>DEPENDS</filename>.
1823 For example, if the configure script reports that it found
1824 something not mentioned in <filename>DEPENDS</filename>, or
1825 that it did not find something that it needed for some
1826 desired optional functionality, then you would need to add
1827 those to <filename>DEPENDS</filename>.
1828 Looking at the log might also reveal items being checked for
1829 and/or enabled that you do not want, or items not being found
1830 that are in <filename>DEPENDS</filename>, in which case
1831 you would need to look at passing extra options to the
1832 configure script as needed.
1833 For reference information on configure options specific to the
1834 software you are building, you can consult the output of the
1835 <filename>./configure --help</filename> command within
1836 <filename>${S}</filename> or consult the software's upstream
1837 documentation.
1838 </para>
1839 </section>
1840
1841 <section id='new-recipe-compilation'>
1842 <title>Compilation</title>
1843
1844 <para>
1845 During a build, the <filename>do_compile</filename> task
1846 happens after source is fetched, unpacked, and configured.
1847 If the recipe passes through <filename>do_compile</filename>
1848 successfully, nothing needs to be done.
1849 </para>
1850
1851 <para>
1852 However, if the compile step fails, you need to diagnose the
1853 failure.
1854 Here are some common issues that cause failures:
1855 <itemizedlist>
1856 <listitem><para><emphasis>Parallel build failures:</emphasis>
1857 These failures manifest themselves as intermittent
1858 errors, or errors reporting that a file or directory
1859 that should be created by some other part of the build
1860 process could not be found.
1861 This type of failure can occur even if, upon inspection,
1862 the file or directory does exist after the build has
1863 failed, because that part of the build process happened
1864 in the wrong order.</para>
1865 <para>To fix the problem, you need to either satisfy
1866 the missing dependency in the Makefile or whatever
1867 script produced the Makefile, or (as a workaround)
1868 set
1869 <ulink url='&YOCTO_DOCS_REF_URL;#var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></ulink>
1870 to an empty string:
1871 <literallayout class='monospaced'>
1872 PARALLEL_MAKE = ""
1873 </literallayout></para></listitem>
1874 <listitem><para><emphasis>Improper host path usage:</emphasis>
1875 This failure applies to recipes building for the target
1876 or <filename>nativesdk</filename> only.
1877 The failure occurs when the compilation process uses
1878 improper headers, libraries, or other files from the
1879 host system when cross-compiling for the target.
1880 </para>
1881 <para>To fix the problem, examine the
1882 <filename>log.do_compile</filename> file to identify
1883 the host paths being used (e.g.
1884 <filename>/usr/include</filename>,
1885 <filename>/usr/lib</filename>, and so forth) and then
1886 either add configure options, apply a patch, or do both.
1887 </para></listitem>
1888 <listitem><para><emphasis>Failure to find required
1889 libraries/headers:</emphasis>
1890 If a build-time dependency is missing because it has
1891 not been declared in
1892 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>,
1893 or because the dependency exists but the path used by
1894 the build process to find the file is incorrect and the
1895 configure step did not detect it, the compilation
1896 process could fail.
1897 For either of these failures, the compilation process
1898 notes that files could not be found.
1899 In these cases, you need to go back and add additional
1900 options to the configure script as well as possibly
1901 add additional build-time dependencies to
1902 <filename>DEPENDS</filename>.
1903 Occasionally, it is necessary to apply a patch to the
1904 source to ensure the correct paths are used.
1905 </para></listitem>
1906 </itemizedlist>
1907 </para>
1908 </section>
1909
1910 <section id='new-recipe-installing'>
1911 <title>Installing</title>
1912
1913 <para>
1914 During <filename>do_install</filename>, the task copies the
1915 built files along with their hierarchy to locations that
1916 would mirror their locations on the target device.
1917 The installation process copies files from the
1918 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-S'><filename>S</filename></ulink><filename>}</filename>,
1919 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-B'><filename>B</filename></ulink><filename>}</filename>,
1920 and
1921 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink><filename>}</filename>
1922 directories to the
1923 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-D'><filename>D</filename></ulink><filename>}</filename>
1924 directory to create the structure as it should appear on the
1925 target system.
1926 </para>
1927
1928 <para>
1929 How your software is built affects what you must do to be
1930 sure your software is installed correctly.
1931 The following list describes what you must do for installation
1932 depending on the type of build system used by the software
1933 being built:
1934 <itemizedlist>
1935 <listitem><para><emphasis>Autotools and CMake:</emphasis>
1936 If the software your recipe is building uses Autotools
1937 or CMake, the OpenEmbedded build
1938 system understands how to install the software.
1939 Consequently, you do not have to have a
1940 <filename>do_install</filename> task as part of your
1941 recipe.
1942 You just need to make sure the install portion of the
1943 build completes with no issues.
1944 However, if you wish to install additional files not
1945 already being installed by
1946 <filename>make install</filename>, you should do this
1947 using a <filename>do_install_append</filename> function
1948 using the install command as described in
1949 <emphasis>Manual</emphasis> later in this list.
1950 </para></listitem>
1951 <listitem><para><emphasis>Other (using
1952 <filename>make install</filename>):</emphasis>
1953 You need to define a
1954 <filename>do_install</filename> function in your
1955 recipe.
1956 The function should call
1957 <filename>oe_runmake install</filename> and will likely
1958 need to pass in the destination directory as well.
1959 How you pass that path is dependent on how the
1960 <filename>Makefile</filename> being run is written
1961 (e.g. <filename>DESTDIR=${D}</filename>,
1962 <filename>PREFIX=${D}</filename>,
1963 <filename>INSTALLROOT=${D}</filename>, and so forth).
1964 </para>
1965 <para>For an example recipe using
1966 <filename>make install</filename>, see the
1967 "<link linkend='new-recipe-makefile-based-package'>Makefile-Based Package</link>"
1968 section.</para></listitem>
1969 <listitem><para><emphasis>Manual:</emphasis>
1970 You need to define a
1971 <filename>do_install</filename> function in your
1972 recipe.
1973 The function must first use
1974 <filename>install -d</filename> to create the
1975 directories.
1976 Once the directories exist, your function can use
1977 <filename>install</filename> to manually install the
1978 built software into the directories.</para>
1979 <para>You can find more information on
1980 <filename>install</filename> at
1981 <ulink url='http://www.gnu.org/software/coreutils/manual/html_node/install-invocation.html'></ulink>.
1982 </para></listitem>
1983 </itemizedlist>
1984 </para>
1985
1986 <para>
1987 For the scenarios that do not use Autotools or
1988 CMake, you need to track the installation
1989 and diagnose and fix any issues until everything installs
1990 correctly.
1991 You need to look in the default location of
1992 <filename>${D}</filename>, which is
1993 <filename>${WORKDIR}/image</filename>, to be sure your
1994 files have been installed correctly.
1995 </para>
1996
1997 <note>
1998 During the installation process, you might need to modify
1999 some of the installed files to suit the target layout.
2000 For example, you might need to replace hard-coded paths in an
2001 initscript with values of variables provided by the build
2002 system, such as replacing <filename>/usr/bin/</filename> with
2003 <filename>${bindir}</filename>.
2004 If you do perform such modifications during
2005 <filename>do_install</filename>, be sure to modify the
2006 destination file after copying rather than before copying.
2007 Modifying after copying ensures that the build system can
2008 re-execute <filename>do_install</filename> if needed.
2009 </note>
2010
2011 <note>
2012 <filename>oe_runmake install</filename>, which can be run
2013 directly or can be run indirectly by the
2014 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-autotools'><filename>autotools</filename></ulink>
2015 and
2016 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-cmake'><filename>cmake</filename></ulink>
2017 classes, runs <filename>make install</filename> in parallel.
2018 Sometimes, a Makefile can have missing dependencies between
2019 targets that can result in race conditions.
2020 If you experience intermittent failures during
2021 <filename>do_install</filename>, you might be able to work
2022 around them by disabling parallel Makefile installs
2023 by adding the following to the recipe:
2024 <literallayout class='monospaced'>
2025 PARALLEL_MAKEINST = ""
2026 </literallayout>
2027 See
2028 <ulink url='&YOCTO_DOCS_REF_URL;#var-PARALLEL_MAKEINST'><filename>PARALLEL_MAKEINST</filename></ulink>
2029 for additional information.
2030 </note>
2031 </section>
2032
2033 <section id='new-recipe-enabling-system-services'>
2034 <title>Enabling System Services</title>
2035
2036 <para>
2037 If you want to install a service, which is a process that
2038 usually starts on boot and runs in the background, then
2039 you must include some additional definitions in your recipe.
2040 </para>
2041
2042 <para>
2043 If you are adding services and the service initialization
2044 script or the service file itself is not installed, you must
2045 provide for that installation in your recipe using a
2046 <filename>do_install_append</filename> function.
2047 If your recipe already has a <filename>do_install</filename>
2048 function, update the function near its end rather than
2049 adding an additional <filename>do_install_append</filename>
2050 function.
2051 </para>
2052
2053 <para>
2054 When you create the installation for your services, you need
2055 to accomplish what is normally done by
2056 <filename>make install</filename>.
2057 In other words, make sure your installation arranges the output
2058 similar to how it is arranged on the target system.
2059 </para>
2060
2061 <para>
2062 The OpenEmbedded build system provides support for starting
2063 services two different ways:
2064 <itemizedlist>
2065 <listitem><para><emphasis>SysVinit:</emphasis>
2066 SysVinit is a system and service manager that
2067 manages the init system used to control the very basic
2068 functions of your system.
2069 The init program is the first program
2070 started by the Linux kernel when the system boots.
2071 Init then controls the startup, running and shutdown
2072 of all other programs.</para>
2073 <para>To enable a service using SysVinit, your recipe
2074 needs to inherit the
2075 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-update-rc.d'><filename>update-rc.d</filename></ulink>
2076 class.
2077 The class helps facilitate safely installing the
2078 package on the target.</para>
2079 <para>You will need to set the
2080 <ulink url='&YOCTO_DOCS_REF_URL;#var-INITSCRIPT_PACKAGES'><filename>INITSCRIPT_PACKAGES</filename></ulink>,
2081 <ulink url='&YOCTO_DOCS_REF_URL;#var-INITSCRIPT_NAME'><filename>INITSCRIPT_NAME</filename></ulink>,
2082 and
2083 <ulink url='&YOCTO_DOCS_REF_URL;#var-INITSCRIPT_PARAMS'><filename>INITSCRIPT_PARAMS</filename></ulink>
2084 variables within your recipe.</para></listitem>
2085 <listitem><para><emphasis>systemd:</emphasis>
2086 System Management Daemon (systemd) was designed to
2087 replace SysVinit and to provide
2088 enhanced management of services.
2089 For more information on systemd, see the systemd
2090 homepage at
2091 <ulink url='http://freedesktop.org/wiki/Software/systemd/'></ulink>.
2092 </para>
2093 <para>To enable a service using systemd, your recipe
2094 needs to inherit the
2095 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-systemd'><filename>systemd</filename></ulink>
2096 class.
2097 See the <filename>systemd.class</filename> file
2098 located in your
2099 <link linkend='source-directory'>Source Directory</link>.
2100 section for more information.
2101 </para></listitem>
2102 </itemizedlist>
2103 </para>
2104 </section>
2105
2106 <section id='new-recipe-packaging'>
2107 <title>Packaging</title>
2108
2109 <para>
2110 The <filename>do_package</filename> task splits the files
2111 produced by the recipe into logical components.
2112 Even software that produces a single binary might still have
2113 debug symbols, documentation, and other logical components
2114 that should be split out.
2115 The <filename>do_package</filename> task ensures that files
2116 are split up and packaged correctly.
2117 </para>
2118
2119 <para>
2120 After you build your software, you need to be sure your packages
2121 are correct.
2122 Examine the
2123 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink><filename>}/packages-split</filename>
2124 directory and make sure files are where you expect them to be.
2125 </para>
2126
2127 <para>
2128 If you discover problems, you can set
2129 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'><filename>PACKAGES</filename></ulink>,
2130 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILES'><filename>FILES</filename></ulink>,
2131 <filename>do_install(_append)</filename>, and so forth as
2132 needed.
2133 </para>
2134
2135 <para>
2136 See the
2137 "<link linkend='splitting-an-application-into-multiple-packages'>Splitting an Application into Multiple Packages</link>"
2138 section for an example that shows how you might split
2139 your software into more than one package.
2140 </para>
2141
2142 <para>
2143 For an example showing how to install a post-installation
2144 script, see the
2145 "<link linkend='new-recipe-post-installation-scripts'>Post-Installation Scripts</link>"
2146 section.
2147 </para>
2148 </section>
2149
2150 <section id='new-recipe-post-installation-scripts'>
2151 <title>Post-Installation Scripts</title>
2152
2153 <para>
2154 Post-installation scripts run immediately after installing
2155 a package on the target, or during image creation when a
2156 package is included in an image.
2157 To add a post-installation script to a package, add a
2158 <filename>pkg_postinst_PACKAGENAME()</filename> function to
2159 the recipe file (<filename>.bb</filename>) and use
2160 <filename>PACKAGENAME</filename> as the name of the package
2161 you want to attach to the <filename>postinst</filename>
2162 script.
2163 To apply the post-installation script to the main package
2164 for the recipe, which is usually what is required, specify
2165 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink><filename>}</filename>
2166 in place of <filename>PACKAGENAME</filename>.
2167 </para>
2168
2169 <para>
2170 A post-installation function has the following structure:
2171 <literallayout class='monospaced'>
2172 pkg_postinst_PACKAGENAME () {
2173 #!/bin/sh -e
2174 # Commands to carry out
2175 }
2176 </literallayout>
2177 </para>
2178
2179 <para>
2180 The script defined in the post-installation function is
2181 called when the root filesystem is created.
2182 If the script succeeds, the package is marked as installed.
2183 If the script fails, the package is marked as unpacked and
2184 the script is executed when the image boots again.
2185 </para>
2186
2187 <para>
2188 Sometimes it is necessary for the execution of a
2189 post-installation script to be delayed until the first boot.
2190 For example, the script might need to be executed on the
2191 device itself.
2192 To delay script execution until boot time, use the following
2193 structure in the post-installation script:
2194 <literallayout class='monospaced'>
2195 pkg_postinst_PACKAGENAME () {
2196 #!/bin/sh -e
2197 if [ x"$D" = "x" ]; then
2198 # Actions to carry out on the device go here
2199 else
2200 exit 1
2201 fi
2202 }
2203 </literallayout>
2204 </para>
2205
2206 <para>
2207 The previous example delays execution until the image boots
2208 again because the
2209 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-D'>D</ulink></filename>
2210 variable points to the directory containing the image when
2211 the root filesystem is created at build time but is unset
2212 when executed on the first boot.
2213 </para>
2214
2215 <note>
2216 Equivalent support for pre-install, pre-uninstall, and
2217 post-uninstall scripts exist by way of
2218 <filename>pkg_preinst</filename>,
2219 <filename>pkg_prerm</filename>, and
2220 <filename>pkg_postrm</filename>, respectively.
2221 These scrips work in exactly the same way as does
2222 <filename>pkg_postinst</filename> with the exception that they
2223 run at different times.
2224 Also, because of when they run, they are not applicable to
2225 being run at image creation time like
2226 <filename>pkg_postinst</filename>.
2227 </note>
2228 </section>
2229
2230 <section id='new-recipe-testing'>
2231 <title>Testing</title>
2232
2233 <para>
2234 The final step for completing your recipe is to be sure that
2235 the software you built runs correctly.
2236 To accomplish runtime testing, add the build's output
2237 packages to your image and test them on the target.
2238 </para>
2239
2240 <para>
2241 For information on how to customize your image by adding
2242 specific packages, see the
2243 "<link linkend='usingpoky-extend-customimage'>Customizing Images</link>"
2244 section.
2245 </para>
2246 </section>
2247
2248 <section id='new-recipe-testing-examples'>
2249 <title>Examples</title>
2250
2251 <para>
2252 To help summarize how to write a recipe, this section provides
2253 some examples given various scenarios:
2254 <itemizedlist>
2255 <listitem><para>Recipes that use local files</para></listitem>
2256 <listitem><para>Using an Autotooled package</para></listitem>
2257 <listitem><para>Using a Makefile-based package</para></listitem>
2258 <listitem><para>Splitting an application into multiple packages</para></listitem>
2259 </itemizedlist>
2260 </para>
2261
2262 <section id='new-recipe-single-c-file-package-hello-world'>
2263 <title>Single .c File Package (Hello World!)</title>
2264
2265 <para>
2266 Building an application from a single file that is stored
2267 locally (e.g. under <filename>files/</filename>) requires
2268 a recipe that has the file listed in the
2269 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename>
2270 variable.
2271 Additionally, you need to manually write the
2272 <filename>do_compile</filename> and
2273 <filename>do_install</filename> tasks.
2274 The <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-S'>S</ulink></filename>
2275 variable defines the directory containing the source code,
2276 which is set to
2277 <ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink>
2278 in this case - the directory BitBake uses for the build.
2279 <literallayout class='monospaced'>
2280 SUMMARY = "Simple helloworld application"
2281 SECTION = "examples"
2282 LICENSE = "MIT"
2283 LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
2284
2285 SRC_URI = "file://helloworld.c"
2286
2287 S = "${WORKDIR}"
2288
2289 do_compile() {
2290 ${CC} helloworld.c -o helloworld
2291 }
2292
2293 do_install() {
2294 install -d ${D}${bindir}
2295 install -m 0755 helloworld ${D}${bindir}
2296 }
2297 </literallayout>
2298 </para>
2299
2300 <para>
2301 By default, the <filename>helloworld</filename>,
2302 <filename>helloworld-dbg</filename>, and
2303 <filename>helloworld-dev</filename> packages are built.
2304 For information on how to customize the packaging process,
2305 see the
2306 "<link linkend='splitting-an-application-into-multiple-packages'>Splitting an Application into Multiple Packages</link>"
2307 section.
2308 </para>
2309 </section>
2310
2311 <section id='new-recipe-autotooled-package'>
2312 <title>Autotooled Package</title>
2313 <para>
2314 Applications that use Autotools such as <filename>autoconf</filename> and
2315 <filename>automake</filename> require a recipe that has a source archive listed in
2316 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename> and
2317 also inherit the
2318 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-autotools'><filename>autotools</filename></ulink>
2319 class, which contains the definitions of all the steps
2320 needed to build an Autotool-based application.
2321 The result of the build is automatically packaged.
2322 And, if the application uses NLS for localization, packages with local information are
2323 generated (one package per language).
2324 Following is one example: (<filename>hello_2.3.bb</filename>)
2325 <literallayout class='monospaced'>
2326 SUMMARY = "GNU Helloworld application"
2327 SECTION = "examples"
2328 LICENSE = "GPLv2+"
2329 LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
2330
2331 SRC_URI = "${GNU_MIRROR}/hello/hello-${PV}.tar.gz"
2332
2333 inherit autotools gettext
2334 </literallayout>
2335 </para>
2336
2337 <para>
2338 The variable
2339 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LIC_FILES_CHKSUM'>LIC_FILES_CHKSUM</ulink></filename>
2340 is used to track source license changes as described in the
2341 "<ulink url='&YOCTO_DOCS_REF_URL;#usingpoky-configuring-LIC_FILES_CHKSUM'>Tracking License Changes</ulink>" section.
2342 You can quickly create Autotool-based recipes in a manner similar to the previous example.
2343 </para>
2344 </section>
2345
2346 <section id='new-recipe-makefile-based-package'>
2347 <title>Makefile-Based Package</title>
2348
2349 <para>
2350 Applications that use GNU <filename>make</filename> also require a recipe that has
2351 the source archive listed in
2352 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename>.
2353 You do not need to add a <filename>do_compile</filename> step since by default BitBake
2354 starts the <filename>make</filename> command to compile the application.
2355 If you need additional <filename>make</filename> options, you should store them in the
2356 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_OEMAKE'>EXTRA_OEMAKE</ulink></filename>
2357 variable.
2358 BitBake passes these options into the <filename>make</filename> GNU invocation.
2359 Note that a <filename>do_install</filename> task is still required.
2360 Otherwise, BitBake runs an empty <filename>do_install</filename> task by default.
2361 </para>
2362
2363 <para>
2364 Some applications might require extra parameters to be passed to the compiler.
2365 For example, the application might need an additional header path.
2366 You can accomplish this by adding to the
2367 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-CFLAGS'>CFLAGS</ulink></filename> variable.
2368 The following example shows this:
2369 <literallayout class='monospaced'>
2370 CFLAGS_prepend = "-I ${S}/include "
2371 </literallayout>
2372 </para>
2373
2374 <para>
2375 In the following example, <filename>mtd-utils</filename> is a makefile-based package:
2376 <literallayout class='monospaced'>
2377 SUMMARY = "Tools for managing memory technology devices."
2378 SECTION = "base"
2379 DEPENDS = "zlib lzo e2fsprogs util-linux"
2380 HOMEPAGE = "http://www.linux-mtd.infradead.org/"
2381 LICENSE = "GPLv2+"
2382 LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
2383 file://include/common.h;beginline=1;endline=17;md5=ba05b07912a44ea2bf81ce409380049c"
2384
2385 SRC_URI = "git://git.infradead.org/mtd-utils.git;protocol=git;tag=995cfe51b0a3cf32f381c140bf72b21bf91cef1b \
2386 file://add-exclusion-to-mkfs-jffs2-git-2.patch"
2387
2388 S = "${WORKDIR}/git/"
2389
2390 PR = "r1"
2391
2392 EXTRA_OEMAKE = "'CC=${CC}' 'RANLIB=${RANLIB}' 'AR=${AR}' \
2393 'CFLAGS=${CFLAGS} -I${S}/include -DWITHOUT_XATTR' 'BUILDDIR=${S}'"
2394
2395 do_install () {
2396 oe_runmake install DESTDIR=${D} SBINDIR=${sbindir} MANDIR=${mandir} \
2397 INCLUDEDIR=${includedir}
2398 install -d ${D}${includedir}/mtd/
2399 for f in ${S}/include/mtd/*.h; do
2400 install -m 0644 $f ${D}${includedir}/mtd/
2401 done
2402 }
2403
2404 PARALLEL_MAKE = ""
2405
2406 BBCLASSEXTEND = "native"
2407 </literallayout>
2408 </para>
2409 </section>
2410
2411 <section id='splitting-an-application-into-multiple-packages'>
2412 <title>Splitting an Application into Multiple Packages</title>
2413
2414 <para>
2415 You can use the variables
2416 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'>PACKAGES</ulink></filename> and
2417 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-FILES'>FILES</ulink></filename>
2418 to split an application into multiple packages.
2419 </para>
2420
2421 <para>
2422 Following is an example that uses the <filename>libxpm</filename> recipe.
2423 By default, this recipe generates a single package that contains the library along
2424 with a few binaries.
2425 You can modify the recipe to split the binaries into separate packages:
2426 <literallayout class='monospaced'>
2427 require xorg-lib-common.inc
2428
2429 SUMMARY = "X11 Pixmap library"
2430 LICENSE = "X-BSD"
2431 LIC_FILES_CHKSUM = "file://COPYING;md5=3e07763d16963c3af12db271a31abaa5"
2432 DEPENDS += "libxext libsm libxt"
2433 PR = "r3"
2434 PE = "1"
2435
2436 XORG_PN = "libXpm"
2437
2438 PACKAGES =+ "sxpm cxpm"
2439 FILES_cxpm = "${bindir}/cxpm"
2440 FILES_sxpm = "${bindir}/sxpm"
2441 </literallayout>
2442 </para>
2443
2444 <para>
2445 In the previous example, we want to ship the <filename>sxpm</filename>
2446 and <filename>cxpm</filename> binaries in separate packages.
2447 Since <filename>bindir</filename> would be packaged into the main
2448 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'>PN</ulink></filename>
2449 package by default, we prepend the <filename>PACKAGES</filename>
2450 variable so additional package names are added to the start of list.
2451 This results in the extra <filename>FILES_*</filename>
2452 variables then containing information that define which files and
2453 directories go into which packages.
2454 Files included by earlier packages are skipped by latter packages.
2455 Thus, the main <filename>PN</filename> package
2456 does not include the above listed files.
2457 </para>
2458 </section>
2459 </section>
2460 </section>
2461
2462 <section id="platdev-newmachine">
2463 <title>Adding a New Machine</title>
2464
2465 <para>
2466 Adding a new machine to the Yocto Project is a straight forward
2467 process.
2468 This section describes how to add machines that are similar
2469 to those that the Yocto Project already supports.
2470 <note>
2471 Although well within the capabilities of the Yocto Project,
2472 adding a totally new architecture might require
2473 changes to <filename>gcc/eglibc</filename> and to the site
2474 information, which is beyond the scope of this manual.
2475 </note>
2476 </para>
2477
2478 <para>
2479 For a complete example that shows how to add a new machine,
2480 see the
2481 "<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>"
2482 section in the Yocto Project Board Support Package (BSP) Developer's Guide.
2483 </para>
2484
2485 <section id="platdev-newmachine-conffile">
2486 <title>Adding the Machine Configuration File</title>
2487
2488 <para>
2489 To add a new machine, you need to add a new machine
2490 configuration file to the layer's
2491 <filename>conf/machine</filename> directory.
2492 This configuration file provides details about the device
2493 you are adding.
2494 </para>
2495
2496 <para>
2497 The OpenEmbedded build system uses the root name of the
2498 machine configuration file to reference the new machine.
2499 For example, given a machine configuration file named
2500 <filename>crownbay.conf</filename>, the build system
2501 recognizes the machine as "crownbay".
2502 </para>
2503
2504 <para>
2505 The most important variables you must set in your machine
2506 configuration file are as follows:
2507 <itemizedlist>
2508 <listitem><para><filename><ulink url='&YOCTO_DOCS_REF_URL;#var-TARGET_ARCH'>TARGET_ARCH</ulink></filename>
2509 (e.g. "arm")</para></listitem>
2510 <listitem><para><filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PREFERRED_PROVIDER'>PREFERRED_PROVIDER</ulink>_virtual/kernel</filename>
2511 (see below)</para></listitem>
2512 <listitem><para><filename><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_FEATURES'>MACHINE_FEATURES</ulink></filename>
2513 (e.g. "apm screen wifi")</para></listitem>
2514 </itemizedlist>
2515 </para>
2516
2517 <para>
2518 You might also need these variables:
2519 <itemizedlist>
2520 <listitem><para><filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SERIAL_CONSOLES'>SERIAL_CONSOLES</ulink></filename>
2521 (e.g. "115200;ttyS0 115200;ttyS1")</para></listitem>
2522 <listitem><para><filename><ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_IMAGETYPE'>KERNEL_IMAGETYPE</ulink></filename>
2523 (e.g. "zImage")</para></listitem>
2524 <listitem><para><filename><ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FSTYPES'>IMAGE_FSTYPES</ulink></filename>
2525 (e.g. "tar.gz jffs2")</para></listitem>
2526 </itemizedlist>
2527 </para>
2528
2529 <para>
2530 You can find full details on these variables in the reference
2531 section.
2532 You can leverage existing machine <filename>.conf</filename>
2533 files from <filename>meta-yocto-bsp/conf/machine/</filename>.
2534 </para>
2535 </section>
2536
2537 <section id="platdev-newmachine-kernel">
2538 <title>Adding a Kernel for the Machine</title>
2539
2540 <para>
2541 The OpenEmbedded build system needs to be able to build a kernel
2542 for the machine.
2543 You need to either create a new kernel recipe for this machine,
2544 or extend an existing kernel recipe.
2545 You can find several kernel recipe examples in the
2546 Source Directory at
2547 <filename>meta/recipes-kernel/linux</filename>
2548 that you can use as references.
2549 </para>
2550
2551 <para>
2552 If you are creating a new kernel recipe, normal recipe-writing
2553 rules apply for setting up a
2554 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename>.
2555 Thus, you need to specify any necessary patches and set
2556 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-S'>S</ulink></filename>
2557 to point at the source code.
2558 You need to create a <filename>do_configure</filename> task that
2559 configures the unpacked kernel with a
2560 <filename>defconfig</filename> file.
2561 You can do this by using a <filename>make defconfig</filename>
2562 command or, more commonly, by copying in a suitable
2563 <filename>defconfig</filename> file and then running
2564 <filename>make oldconfig</filename>.
2565 By making use of <filename>inherit kernel</filename> and
2566 potentially some of the <filename>linux-*.inc</filename> files,
2567 most other functionality is centralized and the defaults of the
2568 class normally work well.
2569 </para>
2570
2571 <para>
2572 If you are extending an existing kernel recipe, it is usually
2573 a matter of adding a suitable <filename>defconfig</filename>
2574 file.
2575 The file needs to be added into a location similar to
2576 <filename>defconfig</filename> files used for other machines
2577 in a given kernel recipe.
2578 A possible way to do this is by listing the file in the
2579 <filename>SRC_URI</filename> and adding the machine to the
2580 expression in
2581 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-COMPATIBLE_MACHINE'>COMPATIBLE_MACHINE</ulink></filename>:
2582 <literallayout class='monospaced'>
2583 COMPATIBLE_MACHINE = '(qemux86|qemumips)'
2584 </literallayout>
2585 </para>
2586 </section>
2587
2588 <section id="platdev-newmachine-formfactor">
2589 <title>Adding a Formfactor Configuration File</title>
2590
2591 <para>
2592 A formfactor configuration file provides information about the
2593 target hardware for which the image is being built and information that
2594 the build system cannot obtain from other sources such as the kernel.
2595 Some examples of information contained in a formfactor configuration file include
2596 framebuffer orientation, whether or not the system has a keyboard,
2597 the positioning of the keyboard in relation to the screen, and
2598 the screen resolution.
2599 </para>
2600
2601 <para>
2602 The build system uses reasonable defaults in most cases.
2603 However, if customization is
2604 necessary, you need to create a <filename>machconfig</filename> file
2605 in the <filename>meta/recipes-bsp/formfactor/files</filename>
2606 directory.
2607 This directory contains directories for specific machines such as
2608 <filename>qemuarm</filename> and <filename>qemux86</filename>.
2609 For information about the settings available and the defaults, see the
2610 <filename>meta/recipes-bsp/formfactor/files/config</filename> file found in the
2611 same area.
2612 </para>
2613
2614 <para>
2615 Following is an example for "qemuarm" machine:
2616 <literallayout class='monospaced'>
2617 HAVE_TOUCHSCREEN=1
2618 HAVE_KEYBOARD=1
2619
2620 DISPLAY_CAN_ROTATE=0
2621 DISPLAY_ORIENTATION=0
2622 #DISPLAY_WIDTH_PIXELS=640
2623 #DISPLAY_HEIGHT_PIXELS=480
2624 #DISPLAY_BPP=16
2625 DISPLAY_DPI=150
2626 DISPLAY_SUBPIXEL_ORDER=vrgb
2627 </literallayout>
2628 </para>
2629 </section>
2630 </section>
2631
2632 <section id="platdev-working-with-libraries">
2633 <title>Working With Libraries</title>
2634
2635 <para>
2636 Libraries are an integral part of your system.
2637 This section describes some common practices you might find
2638 helpful when working with libraries to build your system:
2639 <itemizedlist>
2640 <listitem><para><link linkend='including-static-library-files'>How to include static library files</link>
2641 </para></listitem>
2642 <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>
2643 </para></listitem>
2644 <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>
2645 </para></listitem>
2646 </itemizedlist>
2647 </para>
2648
2649 <section id='including-static-library-files'>
2650 <title>Including Static Library Files</title>
2651
2652 <para>
2653 If you are building a library and the library offers static linking, you can control
2654 which static library files (<filename>*.a</filename> files) get included in the
2655 built library.
2656 </para>
2657
2658 <para>
2659 The <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'><filename>PACKAGES</filename></ulink>
2660 and <ulink url='&YOCTO_DOCS_REF_URL;#var-FILES'><filename>FILES_*</filename></ulink>
2661 variables in the
2662 <filename>meta/conf/bitbake.conf</filename> configuration file define how files installed
2663 by the <filename>do_install</filename> task are packaged.
2664 By default, the <filename>PACKAGES</filename> variable contains
2665 <filename>${PN}-staticdev</filename>, which includes all static library files.
2666 <note>
2667 Some previously released versions of the Yocto Project
2668 defined the static library files through
2669 <filename>${PN}-dev</filename>.
2670 </note>
2671 Following, is part of the BitBake configuration file.
2672 You can see where the static library files are defined:
2673 <literallayout class='monospaced'>
2674 PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-dev ${PN}-staticdev ${PN}-locale"
2675 PACKAGES_DYNAMIC = "${PN}-locale-*"
2676 FILES = ""
2677
2678 FILES_${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*${SOLIBS} \
2679 ${sysconfdir} ${sharedstatedir} ${localstatedir} \
2680 ${base_bindir}/* ${base_sbindir}/* \
2681 ${base_libdir}/*${SOLIBS} \
2682 ${datadir}/${BPN} ${libdir}/${BPN}/* \
2683 ${datadir}/pixmaps ${datadir}/applications \
2684 ${datadir}/idl ${datadir}/omf ${datadir}/sounds \
2685 ${libdir}/bonobo/servers"
2686
2687 FILES_${PN}-doc = "${docdir} ${mandir} ${infodir} ${datadir}/gtk-doc \
2688 ${datadir}/gnome/help"
2689 SECTION_${PN}-doc = "doc"
2690
2691 FILES_${PN}-dev = "${includedir} ${libdir}/lib*${SOLIBSDEV} ${libdir}/*.la \
2692 ${libdir}/*.o ${libdir}/pkgconfig ${datadir}/pkgconfig \
2693 ${datadir}/aclocal ${base_libdir}/*.o"
2694 SECTION_${PN}-dev = "devel"
2695 ALLOW_EMPTY_${PN}-dev = "1"
2696 RDEPENDS_${PN}-dev = "${PN} (= ${EXTENDPKGV})"
2697
2698 FILES_${PN}-staticdev = "${libdir}/*.a ${base_libdir}/*.a"
2699 SECTION_${PN}-staticdev = "devel"
2700 RDEPENDS_${PN}-staticdev = "${PN}-dev (= ${EXTENDPKGV})"
2701 </literallayout>
2702 </para>
2703 </section>
2704
2705 <section id="combining-multiple-versions-library-files-into-one-image">
2706 <title>Combining Multiple Versions of Library Files into One Image</title>
2707
2708 <para>
2709 The build system offers the ability to build libraries with different
2710 target optimizations or architecture formats and combine these together
2711 into one system image.
2712 You can link different binaries in the image
2713 against the different libraries as needed for specific use cases.
2714 This feature is called "Multilib."
2715 </para>
2716
2717 <para>
2718 An example would be where you have most of a system compiled in 32-bit
2719 mode using 32-bit libraries, but you have something large, like a database
2720 engine, that needs to be a 64-bit application and uses 64-bit libraries.
2721 Multilib allows you to get the best of both 32-bit and 64-bit libraries.
2722 </para>
2723
2724 <para>
2725 While the Multilib feature is most commonly used for 32 and 64-bit differences,
2726 the approach the build system uses facilitates different target optimizations.
2727 You could compile some binaries to use one set of libraries and other binaries
2728 to use other different sets of libraries.
2729 The libraries could differ in architecture, compiler options, or other
2730 optimizations.
2731 </para>
2732
2733 <para>
2734 This section overviews the Multilib process only.
2735 For more details on how to implement Multilib, see the
2736 <ulink url='&YOCTO_WIKI_URL;/wiki/Multilib'>Multilib</ulink> wiki
2737 page.
2738 </para>
2739
2740 <para>
2741 Aside from this wiki page, several examples exist in the
2742 <filename>meta-skeleton</filename> layer found in the
2743 <link linkend='source-directory'>Source Directory</link>:
2744 <itemizedlist>
2745 <listitem><para><filename>conf/multilib-example.conf</filename>
2746 configuration file</para></listitem>
2747 <listitem><para><filename>conf/multilib-example2.conf</filename>
2748 configuration file</para></listitem>
2749 <listitem><para><filename>recipes-multilib/images/core-image-multilib-example.bb</filename>
2750 recipe</para></listitem>
2751 </itemizedlist>
2752 </para>
2753
2754 <section id='preparing-to-use-multilib'>
2755 <title>Preparing to Use Multilib</title>
2756
2757 <para>
2758 User-specific requirements drive the Multilib feature.
2759 Consequently, there is no one "out-of-the-box" configuration that likely
2760 exists to meet your needs.
2761 </para>
2762
2763 <para>
2764 In order to enable Multilib, you first need to ensure your recipe is
2765 extended to support multiple libraries.
2766 Many standard recipes are already extended and support multiple libraries.
2767 You can check in the <filename>meta/conf/multilib.conf</filename>
2768 configuration file in the
2769 <link linkend='source-directory'>Source Directory</link> to see how this is
2770 done using the
2771 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBCLASSEXTEND'><filename>BBCLASSEXTEND</filename></ulink>
2772 variable.
2773 Eventually, all recipes will be covered and this list will
2774 not be needed.
2775 </para>
2776
2777 <para>
2778 For the most part, the Multilib class extension works automatically to
2779 extend the package name from <filename>${PN}</filename> to
2780 <filename>${MLPREFIX}${PN}</filename>, where <filename>MLPREFIX</filename>
2781 is the particular multilib (e.g. "lib32-" or "lib64-").
2782 Standard variables such as
2783 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>,
2784 <ulink url='&YOCTO_DOCS_REF_URL;#var-RDEPENDS'><filename>RDEPENDS</filename></ulink>,
2785 <ulink url='&YOCTO_DOCS_REF_URL;#var-RPROVIDES'><filename>RPROVIDES</filename></ulink>,
2786 <ulink url='&YOCTO_DOCS_REF_URL;#var-RRECOMMENDS'><filename>RRECOMMENDS</filename></ulink>,
2787 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'><filename>PACKAGES</filename></ulink>,
2788 and <filename>PACKAGES_DYNAMIC</filename> are automatically extended by the system.
2789 If you are extending any manual code in the recipe, you can use the
2790 <filename>${MLPREFIX}</filename> variable to ensure those names are extended
2791 correctly.
2792 This automatic extension code resides in <filename>multilib.bbclass</filename>.
2793 </para>
2794 </section>
2795
2796 <section id='using-multilib'>
2797 <title>Using Multilib</title>
2798
2799 <para>
2800 After you have set up the recipes, you need to define the actual
2801 combination of multiple libraries you want to build.
2802 You accomplish this through your <filename>local.conf</filename>
2803 configuration file in the
2804 <link linkend='build-directory'>Build Directory</link>.
2805 An example configuration would be as follows:
2806 <literallayout class='monospaced'>
2807 MACHINE = "qemux86-64"
2808 require conf/multilib.conf
2809 MULTILIBS = "multilib:lib32"
2810 DEFAULTTUNE_virtclass-multilib-lib32 = "x86"
2811 IMAGE_INSTALL = "lib32-connman"
2812 </literallayout>
2813 This example enables an
2814 additional library named <filename>lib32</filename> alongside the
2815 normal target packages.
2816 When combining these "lib32" alternatives, the example uses "x86" for tuning.
2817 For information on this particular tuning, see
2818 <filename>meta/conf/machine/include/ia32/arch-ia32.inc</filename>.
2819 </para>
2820
2821 <para>
2822 The example then includes <filename>lib32-connman</filename>
2823 in all the images, which illustrates one method of including a
2824 multiple library dependency.
2825 You can use a normal image build to include this dependency,
2826 for example:
2827 <literallayout class='monospaced'>
2828 $ bitbake core-image-sato
2829 </literallayout>
2830 You can also build Multilib packages specifically with a command like this:
2831 <literallayout class='monospaced'>
2832 $ bitbake lib32-connman
2833 </literallayout>
2834 </para>
2835 </section>
2836
2837 <section id='additional-implementation-details'>
2838 <title>Additional Implementation Details</title>
2839
2840 <para>
2841 Different packaging systems have different levels of native Multilib
2842 support.
2843 For the RPM Package Management System, the following implementation details
2844 exist:
2845 <itemizedlist>
2846 <listitem><para>A unique architecture is defined for the Multilib packages,
2847 along with creating a unique deploy folder under
2848 <filename>tmp/deploy/rpm</filename> in the
2849 <link linkend='build-directory'>Build Directory</link>.
2850 For example, consider <filename>lib32</filename> in a
2851 <filename>qemux86-64</filename> image.
2852 The possible architectures in the system are "all", "qemux86_64",
2853 "lib32_qemux86_64", and "lib32_x86".</para></listitem>
2854 <listitem><para>The <filename>${MLPREFIX}</filename> variable is stripped from
2855 <filename>${PN}</filename> during RPM packaging.
2856 The naming for a normal RPM package and a Multilib RPM package in a
2857 <filename>qemux86-64</filename> system resolves to something similar to
2858 <filename>bash-4.1-r2.x86_64.rpm</filename> and
2859 <filename>bash-4.1.r2.lib32_x86.rpm</filename>, respectively.
2860 </para></listitem>
2861 <listitem><para>When installing a Multilib image, the RPM backend first
2862 installs the base image and then installs the Multilib libraries.
2863 </para></listitem>
2864 <listitem><para>The build system relies on RPM to resolve the identical files in the
2865 two (or more) Multilib packages.</para></listitem>
2866 </itemizedlist>
2867 </para>
2868
2869 <para>
2870 For the IPK Package Management System, the following implementation details exist:
2871 <itemizedlist>
2872 <listitem><para>The <filename>${MLPREFIX}</filename> is not stripped from
2873 <filename>${PN}</filename> during IPK packaging.
2874 The naming for a normal RPM package and a Multilib IPK package in a
2875 <filename>qemux86-64</filename> system resolves to something like
2876 <filename>bash_4.1-r2.x86_64.ipk</filename> and
2877 <filename>lib32-bash_4.1-rw_x86.ipk</filename>, respectively.
2878 </para></listitem>
2879 <listitem><para>The IPK deploy folder is not modified with
2880 <filename>${MLPREFIX}</filename> because packages with and without
2881 the Multilib feature can exist in the same folder due to the
2882 <filename>${PN}</filename> differences.</para></listitem>
2883 <listitem><para>IPK defines a sanity check for Multilib installation
2884 using certain rules for file comparison, overridden, etc.
2885 </para></listitem>
2886 </itemizedlist>
2887 </para>
2888 </section>
2889 </section>
2890
2891 <section id='installing-multiple-versions-of-the-same-library'>
2892 <title>Installing Multiple Versions of the Same Library</title>
2893
2894 <para>
2895 Situations can exist where you need to install and use
2896 multiple versions of the same library on the same system
2897 at the same time.
2898 These situations almost always exist when a library API
2899 changes and you have multiple pieces of software that
2900 depend on the separate versions of the library.
2901 To accommodate these situations, you can install multiple
2902 versions of the same library in parallel on the same system.
2903 </para>
2904
2905 <para>
2906 The process is straight forward as long as the libraries use
2907 proper versioning.
2908 With properly versioned libraries, all you need to do to
2909 individually specify the libraries is create separate,
2910 appropriately named recipes where the
2911 <ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink> part of the
2912 name includes a portion that differentiates each library version
2913 (e.g.the major part of the version number).
2914 Thus, instead of having a single recipe that loads one version
2915 of a library (e.g. <filename>clutter</filename>), you provide
2916 multiple recipes that result in different versions
2917 of the libraries you want.
2918 As an example, the following two recipes would allow the
2919 two separate versions of the <filename>clutter</filename>
2920 library to co-exist on the same system:
2921 <literallayout class='monospaced'>
2922 clutter-1.6_1.6.20.bb
2923 clutter-1.8_1.8.4.bb
2924 </literallayout>
2925 Additionally, if you have other recipes that depend on a given
2926 library, you need to use the
2927 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>
2928 variable to create the dependency.
2929 Continuing with the same example, if you want to have a recipe
2930 depend on the 1.8 version of the <filename>clutter</filename>
2931 library, use the following in your recipe:
2932 <literallayout class='monospaced'>
2933 DEPENDS = "clutter-1.8"
2934 </literallayout>
2935 </para>
2936 </section>
2937 </section>
2938
2939 <section id='configuring-the-kernel'>
2940 <title>Configuring the Kernel</title>
2941
2942 <para>
2943 Configuring the Yocto Project kernel consists of making sure the <filename>.config</filename>
2944 file has all the right information in it for the image you are building.
2945 You can use the <filename>menuconfig</filename> tool and configuration fragments to
2946 make sure your <filename>.config</filename> file is just how you need it.
2947 This section describes how to use <filename>menuconfig</filename>, create and use
2948 configuration fragments, and how to interactively tweak your <filename>.config</filename>
2949 file to create the leanest kernel configuration file possible.
2950 </para>
2951
2952 <para>
2953 For more information on kernel configuration, see the
2954 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#changing-the-configuration'>Changing the Configuration</ulink>"
2955 section in the Yocto Project Linux Kernel Development Manual.
2956 </para>
2957
2958 <section id='using-menuconfig'>
2959 <title>Using&nbsp;&nbsp;<filename>menuconfig</filename></title>
2960
2961 <para>
2962 The easiest way to define kernel configurations is to set them through the
2963 <filename>menuconfig</filename> tool.
2964 This tool provides an interactive method with which
2965 to set kernel configurations.
2966 For general information on <filename>menuconfig</filename>, see
2967 <ulink url='http://en.wikipedia.org/wiki/Menuconfig'></ulink>.
2968 </para>
2969
2970 <para>
2971 To use the <filename>menuconfig</filename> tool in the Yocto Project development
2972 environment, you must launch it using BitBake.
2973 Thus, the environment must be set up using the
2974 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
2975 or
2976 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>
2977 script found in the
2978 <link linkend='build-directory'>Build Directory</link>.
2979 The following commands run <filename>menuconfig</filename> assuming the
2980 <link linkend='source-directory'>Source Directory</link>
2981 top-level folder is <filename>~/poky</filename>:
2982 <literallayout class='monospaced'>
2983 $ cd poky
2984 $ source oe-init-build-env
2985 $ bitbake linux-yocto -c menuconfig
2986 </literallayout>
2987 Once <filename>menuconfig</filename> comes up, its standard interface allows you to
2988 interactively examine and configure all the kernel configuration parameters.
2989 After making your changes, simply exit the tool and save your changes to
2990 create an updated version of the <filename>.config</filename> configuration file.
2991 </para>
2992
2993 <para>
2994 Consider an example that configures the <filename>linux-yocto-3.14</filename>
2995 kernel.
2996 The OpenEmbedded build system recognizes this kernel as
2997 <filename>linux-yocto</filename>.
2998 Thus, the following commands from the shell in which you previously sourced the
2999 environment initialization script cleans the shared state cache and the
3000 <ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink>
3001 directory and then runs <filename>menuconfig</filename>:
3002 <literallayout class='monospaced'>
3003 $ bitbake linux-yocto -c menuconfig
3004 </literallayout>
3005 </para>
3006
3007 <para>
3008 Once <filename>menuconfig</filename> launches, use the interface
3009 to navigate through the selections to find the configuration settings in
3010 which you are interested.
3011 For example, consider the <filename>CONFIG_SMP</filename> configuration setting.
3012 You can find it at <filename>Processor Type and Features</filename> under
3013 the configuration selection <filename>Symmetric Multi-processing Support</filename>.
3014 After highlighting the selection, use the arrow keys to select or deselect
3015 the setting.
3016 When you are finished with all your selections, exit out and save them.
3017 </para>
3018
3019 <para>
3020 Saving the selections updates the <filename>.config</filename> configuration file.
3021 This is the file that the OpenEmbedded build system uses to configure the
3022 kernel during the build.
3023 You can find and examine this file in the Build Directory in
3024 <filename>tmp/work/</filename>.
3025 The actual <filename>.config</filename> is located in the area where the
3026 specific kernel is built.
3027 For example, if you were building a Linux Yocto kernel based on the
3028 Linux 3.14 kernel and you were building a QEMU image targeted for
3029 <filename>x86</filename> architecture, the
3030 <filename>.config</filename> file would be located here:
3031 <literallayout class='monospaced'>
3032 poky/build/tmp/work/qemux86-poky-linux/linux-yocto-3.14.11+git1+84f...
3033 ...656ed30-r1/linux-qemux86-standard-build
3034 </literallayout>
3035 <note>
3036 The previous example directory is artificially split and many of the characters
3037 in the actual filename are omitted in order to make it more readable.
3038 Also, depending on the kernel you are using, the exact pathname
3039 for <filename>linux-yocto-3.14...</filename> might differ.
3040 </note>
3041 </para>
3042
3043 <para>
3044 Within the <filename>.config</filename> file, you can see the kernel settings.
3045 For example, the following entry shows that symmetric multi-processor support
3046 is not set:
3047 <literallayout class='monospaced'>
3048 # CONFIG_SMP is not set
3049 </literallayout>
3050 </para>
3051
3052 <para>
3053 A good method to isolate changed configurations is to use a combination of the
3054 <filename>menuconfig</filename> tool and simple shell commands.
3055 Before changing configurations with <filename>menuconfig</filename>, copy the
3056 existing <filename>.config</filename> and rename it to something else,
3057 use <filename>menuconfig</filename> to make
3058 as many changes as you want and save them, then compare the renamed configuration
3059 file against the newly created file.
3060 You can use the resulting differences as your base to create configuration fragments
3061 to permanently save in your kernel layer.
3062 <note>
3063 Be sure to make a copy of the <filename>.config</filename> and don't just
3064 rename it.
3065 The build system needs an existing <filename>.config</filename>
3066 from which to work.
3067 </note>
3068 </para>
3069 </section>
3070
3071 <section id='creating-config-fragments'>
3072 <title>Creating Configuration Fragments</title>
3073
3074 <para>
3075 Configuration fragments are simply kernel options that appear in a file
3076 placed where the OpenEmbedded build system can find and apply them.
3077 Syntactically, the configuration statement is identical to what would appear
3078 in the <filename>.config</filename> file, which is in the
3079 <link linkend='build-directory'>Build Directory</link> in
3080 <filename>tmp/work/&lt;arch&gt;-poky-linux/linux-yocto-&lt;release-specific-string&gt;/linux-&lt;arch&gt;-&lt;build-type&gt;</filename>.
3081 </para>
3082
3083 <para>
3084 It is simple to create a configuration fragment.
3085 For example, issuing the following from the shell creates a configuration fragment
3086 file named <filename>my_smp.cfg</filename> that enables multi-processor support
3087 within the kernel:
3088 <literallayout class='monospaced'>
3089 $ echo "CONFIG_SMP=y" >> my_smp.cfg
3090 </literallayout>
3091 <note>
3092 All configuration files must use the <filename>.cfg</filename> extension in order
3093 for the OpenEmbedded build system to recognize them as a configuration fragment.
3094 </note>
3095 </para>
3096
3097 <para>
3098 Where do you put your configuration files?
3099 You can place these configuration files in the same area pointed to by
3100 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>.
3101 The OpenEmbedded build system will pick up the configuration and add it to the
3102 kernel's configuration.
3103 For example, suppose you had a set of configuration options in a file called
3104 <filename>myconfig.cfg</filename>.
3105 If you put that file inside a directory named <filename>linux-yocto</filename>
3106 that resides in the same directory as the kernel's append file and then add
3107 a <filename>SRC_URI</filename> statement such as the following to the kernel's append file,
3108 those configuration options will be picked up and applied when the kernel is built.
3109 <literallayout class='monospaced'>
3110 SRC_URI += "file://myconfig.cfg"
3111 </literallayout>
3112 </para>
3113
3114 <para>
3115 As mentioned earlier, you can group related configurations into multiple files and
3116 name them all in the <filename>SRC_URI</filename> statement as well.
3117 For example, you could group separate configurations specifically for Ethernet and graphics
3118 into their own files and add those by using a <filename>SRC_URI</filename> statement like the
3119 following in your append file:
3120 <literallayout class='monospaced'>
3121 SRC_URI += "file://myconfig.cfg \
3122 file://eth.cfg \
3123 file://gfx.cfg"
3124 </literallayout>
3125 </para>
3126 </section>
3127
3128 <section id='fine-tuning-the-kernel-configuration-file'>
3129 <title>Fine-Tuning the Kernel Configuration File</title>
3130
3131 <para>
3132 You can make sure the <filename>.config</filename> file is as lean or efficient as
3133 possible by reading the output of the kernel configuration fragment audit,
3134 noting any issues, making changes to correct the issues, and then repeating.
3135 </para>
3136
3137 <para>
3138 As part of the kernel build process, the
3139 <filename>kernel_configcheck</filename> task runs.
3140 This task validates the kernel configuration by checking the final
3141 <filename>.config</filename> file against the input files.
3142 During the check, the task produces warning messages for the following
3143 issues:
3144 <itemizedlist>
3145 <listitem><para>Requested options that did not make the final
3146 <filename>.config</filename> file.</para></listitem>
3147 <listitem><para>Configuration items that appear twice in the same
3148 configuration fragment.</para></listitem>
3149 <listitem><para>Configuration items tagged as "required" that were overridden.
3150 </para></listitem>
3151 <listitem><para>A board overrides a non-board specific option.</para></listitem>
3152 <listitem><para>Listed options not valid for the kernel being processed.
3153 In other words, the option does not appear anywhere.</para></listitem>
3154 </itemizedlist>
3155 <note>
3156 The <filename>kernel_configcheck</filename> task can also optionally report
3157 if an option is overridden during processing.
3158 </note>
3159 </para>
3160
3161 <para>
3162 For each output warning, a message points to the file
3163 that contains a list of the options and a pointer to the config
3164 fragment that defines them.
3165 Collectively, the files are the key to streamlining the configuration.
3166 </para>
3167
3168 <para>
3169 To streamline the configuration, do the following:
3170 <orderedlist>
3171 <listitem><para>Start with a full configuration that you know
3172 works - it builds and boots successfully.
3173 This configuration file will be your baseline.</para></listitem>
3174 <listitem><para>Separately run the <filename>configme</filename> and
3175 <filename>kernel_configcheck</filename> tasks.</para></listitem>
3176 <listitem><para>Take the resulting list of files from the
3177 <filename>kernel_configcheck</filename> task warnings and do the following:
3178 <itemizedlist>
3179 <listitem><para>Drop values that are redefined in the fragment but do not
3180 change the final <filename>.config</filename> file.</para></listitem>
3181 <listitem><para>Analyze and potentially drop values from the
3182 <filename>.config</filename> file that override required
3183 configurations.</para></listitem>
3184 <listitem><para>Analyze and potentially remove non-board specific options.
3185 </para></listitem>
3186 <listitem><para>Remove repeated and invalid options.</para></listitem>
3187 </itemizedlist></para></listitem>
3188 <listitem><para>After you have worked through the output of the kernel configuration
3189 audit, you can re-run the <filename>configme</filename>
3190 and <filename>kernel_configcheck</filename> tasks to see the results of your
3191 changes.
3192 If you have more issues, you can deal with them as described in the
3193 previous step.</para></listitem>
3194 </orderedlist>
3195 </para>
3196
3197 <para>
3198 Iteratively working through steps two through four eventually yields
3199 a minimal, streamlined configuration file.
3200 Once you have the best <filename>.config</filename>, you can build the Linux
3201 Yocto kernel.
3202 </para>
3203 </section>
3204 </section>
3205
3206 <section id="patching-the-kernel">
3207 <title>Patching the Kernel</title>
3208
3209 <para>
3210 Patching the kernel involves changing or adding configurations to an existing kernel,
3211 changing or adding recipes to the kernel that are needed to support specific hardware features,
3212 or even altering the source code itself.
3213 <note>
3214 You can use the <filename>yocto-kernel</filename> script
3215 found in the <link linkend='source-directory'>Source Directory</link>
3216 under <filename>scripts</filename> to manage kernel patches and configuration.
3217 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>"
3218 section in the Yocto Project Board Support Packages (BSP) Developer's Guide for
3219 more information.</note>
3220 </para>
3221
3222 <para>
3223 This example creates a simple patch by adding some QEMU emulator console
3224 output at boot time through <filename>printk</filename> statements in the kernel's
3225 <filename>calibrate.c</filename> source code file.
3226 Applying the patch and booting the modified image causes the added
3227 messages to appear on the emulator's console.
3228 </para>
3229
3230 <para>
3231 The example assumes a clean build exists for the <filename>qemux86</filename>
3232 machine in a
3233 <link linkend='source-directory'>Source Directory</link>
3234 named <filename>poky</filename>.
3235 Furthermore, the <link linkend='build-directory'>Build Directory</link> is
3236 <filename>build</filename> and is located in <filename>poky</filename> and
3237 the kernel is based on the Linux 3.4 kernel.
3238 For general information on how to configure the most efficient build, see the
3239 "<ulink url='&YOCTO_DOCS_QS_URL;#building-image'>Building an Image</ulink>" section
3240 in the Yocto Project Quick Start.
3241 </para>
3242
3243 <para>
3244 Also, for more information on patching the kernel, see the
3245 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#applying-patches'>Applying Patches</ulink>"
3246 section in the Yocto Project Linux Kernel Development Manual.
3247 </para>
3248
3249 <section id='create-a-layer-for-your-changes'>
3250 <title>Create a Layer for your Changes</title>
3251
3252 <para>
3253 The first step is to create a layer so you can isolate your
3254 changes.
3255 Rather than use the <filename>yocto-layer</filename> script
3256 to create the layer, this example steps through the process
3257 by hand.
3258 If you want information on the script that creates a general
3259 layer, see the
3260 "<link linkend='creating-a-general-layer-using-the-yocto-layer-script'>Creating a General Layer Using the yocto-layer Script</link>"
3261 section.
3262 </para>
3263
3264 <para>
3265 These two commands create a directory you can use for your
3266 layer:
3267 <literallayout class='monospaced'>
3268 $ cd ~/poky
3269 $ mkdir meta-mylayer
3270 </literallayout>
3271 Creating a directory that follows the Yocto Project layer naming
3272 conventions sets up the layer for your changes.
3273 The layer is where you place your configuration files, append
3274 files, and patch files.
3275 To learn more about creating a layer and filling it with the
3276 files you need, see the "<link linkend='understanding-and-creating-layers'>Understanding
3277 and Creating Layers</link>" section.
3278 </para>
3279 </section>
3280
3281 <section id='finding-the-kernel-source-code'>
3282 <title>Finding the Kernel Source Code</title>
3283
3284 <para>
3285 Each time you build a kernel image, the kernel source code is fetched
3286 and unpacked into the following directory:
3287 <literallayout class='monospaced'>
3288 ${S}/linux
3289 </literallayout>
3290 See the "<link linkend='finding-the-temporary-source-code'>Finding the Temporary Source Code</link>"
3291 section and the
3292 <ulink url='&YOCTO_DOCS_REF_URL;#var-S'><filename>S</filename></ulink> variable
3293 for more information about where source is kept during a build.
3294 </para>
3295
3296 <para>
3297 For this example, we are going to patch the
3298 <filename>init/calibrate.c</filename> file
3299 by adding some simple console <filename>printk</filename> statements that we can
3300 see when we boot the image using QEMU.
3301 </para>
3302 </section>
3303
3304 <section id='creating-the-patch'>
3305 <title>Creating the Patch</title>
3306
3307 <para>
3308 Two methods exist by which you can create the patch:
3309 <link linkend='using-a-git-workflow'>Git workflow</link> and
3310 <link linkend='using-a-quilt-workflow'>Quilt workflow</link>.
3311 For kernel patches, the Git workflow is more appropriate.
3312 This section assumes the Git workflow and shows the steps specific to
3313 this example.
3314 <orderedlist>
3315 <listitem><para><emphasis>Change the working directory</emphasis>:
3316 Change to where the kernel source code is before making
3317 your edits to the <filename>calibrate.c</filename> file:
3318 <literallayout class='monospaced'>
3319 $ cd ~/poky/build/tmp/work/qemux86-poky-linux/linux-yocto-${PV}-${PR}/linux
3320 </literallayout>
3321 Because you are working in an established Git repository,
3322 you must be in this directory in order to commit your changes
3323 and create the patch file.
3324 <note>The <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink> and
3325 <ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink> variables
3326 represent the version and revision for the
3327 <filename>linux-yocto</filename> recipe.
3328 The <filename>PV</filename> variable includes the Git meta and machine
3329 hashes, which make the directory name longer than you might
3330 expect.
3331 </note></para></listitem>
3332 <listitem><para><emphasis>Edit the source file</emphasis>:
3333 Edit the <filename>init/calibrate.c</filename> file to have the
3334 following changes:
3335 <literallayout class='monospaced'>
3336 void calibrate_delay(void)
3337 {
3338 unsigned long lpj;
3339 static bool printed;
3340 int this_cpu = smp_processor_id();
3341
3342 printk("*************************************\n");
3343 printk("* *\n");
3344 printk("* HELLO YOCTO KERNEL *\n");
3345 printk("* *\n");
3346 printk("*************************************\n");
3347
3348 if (per_cpu(cpu_loops_per_jiffy, this_cpu)) {
3349 .
3350 .
3351 .
3352 </literallayout></para></listitem>
3353 <listitem><para><emphasis>Stage and commit your changes</emphasis>:
3354 These Git commands display the modified file, stage it, and then
3355 commit the file:
3356 <literallayout class='monospaced'>
3357 $ git status
3358 $ git add init/calibrate.c
3359 $ git commit -m "calibrate: Add printk example"
3360 </literallayout></para></listitem>
3361 <listitem><para><emphasis>Generate the patch file</emphasis>:
3362 This Git command creates the a patch file named
3363 <filename>0001-calibrate-Add-printk-example.patch</filename>
3364 in the current directory.
3365 <literallayout class='monospaced'>
3366 $ git format-patch -1
3367 </literallayout>
3368 </para></listitem>
3369 </orderedlist>
3370 </para>
3371 </section>
3372
3373 <section id='set-up-your-layer-for-the-build'>
3374 <title>Set Up Your Layer for the Build</title>
3375
3376 <para>These steps get your layer set up for the build:
3377 <orderedlist>
3378 <listitem><para><emphasis>Create additional structure</emphasis>:
3379 Create the additional layer structure:
3380 <literallayout class='monospaced'>
3381 $ cd ~/poky/meta-mylayer
3382 $ mkdir conf
3383 $ mkdir recipes-kernel
3384 $ mkdir recipes-kernel/linux
3385 $ mkdir recipes-kernel/linux/linux-yocto
3386 </literallayout>
3387 The <filename>conf</filename> directory holds your configuration files, while the
3388 <filename>recipes-kernel</filename> directory holds your append file and
3389 your patch file.</para></listitem>
3390 <listitem><para><emphasis>Create the layer configuration file</emphasis>:
3391 Move to the <filename>meta-mylayer/conf</filename> directory and create
3392 the <filename>layer.conf</filename> file as follows:
3393 <literallayout class='monospaced'>
3394 # We have a conf and classes directory, add to BBPATH
3395 BBPATH .= ":${LAYERDIR}"
3396
3397 # We have recipes-* directories, add to BBFILES
3398 BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
3399 ${LAYERDIR}/recipes-*/*/*.bbappend"
3400
3401 BBFILE_COLLECTIONS += "mylayer"
3402 BBFILE_PATTERN_mylayer = "^${LAYERDIR}/"
3403 BBFILE_PRIORITY_mylayer = "5"
3404 </literallayout>
3405 Notice <filename>mylayer</filename> as part of the last three
3406 statements.</para></listitem>
3407 <listitem><para><emphasis>Create the kernel recipe append file</emphasis>:
3408 Move to the <filename>meta-mylayer/recipes-kernel/linux</filename> directory and create
3409 the <filename>linux-yocto_3.4.bbappend</filename> file as follows:
3410 <literallayout class='monospaced'>
3411 FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
3412
3413 SRC_URI += "file://0001-calibrate-Add-printk-example.patch"
3414 </literallayout>
3415 The <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
3416 and <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
3417 statements enable the OpenEmbedded build system to find the patch file.
3418 For more information on using append files, see the
3419 "<link linkend='using-bbappend-files'>Using .bbappend Files</link>"
3420 section.
3421 </para></listitem>
3422 <listitem><para><emphasis>Put the patch file in your layer</emphasis>:
3423 Move the <filename>0001-calibrate-Add-printk-example.patch</filename> file to
3424 the <filename>meta-mylayer/recipes-kernel/linux/linux-yocto</filename>
3425 directory.</para></listitem>
3426 </orderedlist>
3427 </para>
3428 </section>
3429
3430 <section id='set-up-for-the-build'>
3431 <title>Set Up for the Build</title>
3432
3433 <para>
3434 Do the following to make sure the build parameters are set up for the example.
3435 Once you set up these build parameters, they do not have to change unless you
3436 change the target architecture of the machine you are building:
3437 <itemizedlist>
3438 <listitem><para><emphasis>Build for the correct target architecture:</emphasis> Your
3439 selected <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
3440 definition within the <filename>local.conf</filename> file in the
3441 <link linkend='build-directory'>Build Directory</link>
3442 specifies the target architecture used when building the Linux kernel.
3443 By default, <filename>MACHINE</filename> is set to
3444 <filename>qemux86</filename>, which specifies a 32-bit
3445 <trademark class='registered'>Intel</trademark> Architecture
3446 target machine suitable for the QEMU emulator.</para></listitem>
3447 <listitem><para><emphasis>Identify your <filename>meta-mylayer</filename>
3448 layer:</emphasis> The
3449 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBLAYERS'><filename>BBLAYERS</filename></ulink>
3450 variable in the
3451 <filename>bblayers.conf</filename> file found in the
3452 <filename>poky/build/conf</filename> directory needs to have the path to your local
3453 <filename>meta-mylayer</filename> layer.
3454 By default, the <filename>BBLAYERS</filename> variable contains paths to
3455 <filename>meta</filename>, <filename>meta-yocto</filename>, and
3456 <filename>meta-yocto-bsp</filename> in the
3457 <filename>poky</filename> Git repository.
3458 Add the path to your <filename>meta-mylayer</filename> location:
3459 <literallayout class='monospaced'>
3460 BBLAYERS ?= " \
3461 $HOME/poky/meta \
3462 $HOME/poky/meta-yocto \
3463 $HOME/poky/meta-yocto-bsp \
3464 $HOME/poky/meta-mylayer \
3465 "
3466
3467 BBLAYERS_NON_REMOVABLE ?= " \
3468 $HOME/poky/meta \
3469 $HOME/poky/meta-yocto \
3470 "
3471 </literallayout></para></listitem>
3472 </itemizedlist>
3473 </para>
3474 </section>
3475
3476 <section id='build-the-modified-qemu-kernel-image'>
3477 <title>Build the Modified QEMU Kernel Image</title>
3478
3479 <para>
3480 The following steps build your modified kernel image:
3481 <orderedlist>
3482 <listitem><para><emphasis>Be sure your build environment is initialized</emphasis>:
3483 Your environment should be set up since you previously sourced
3484 the
3485 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
3486 script.
3487 If it is not, source the script again from <filename>poky</filename>.
3488 <literallayout class='monospaced'>
3489 $ cd ~/poky
3490 $ source &OE_INIT_FILE;
3491 </literallayout>
3492 </para></listitem>
3493 <listitem><para><emphasis>Clean up</emphasis>:
3494 Be sure to clean the shared state out by running the
3495 <filename>cleansstate</filename> BitBake task as follows from your Build Directory:
3496 <literallayout class='monospaced'>
3497 $ bitbake -c cleansstate linux-yocto
3498 </literallayout></para>
3499 <para><note>Never remove any files by hand from the <filename>tmp/deploy</filename>
3500 directory inside the
3501 <link linkend='build-directory'>Build Directory</link>.
3502 Always use the various BitBake clean tasks to clear out previous
3503 build artifacts.
3504 </note></para></listitem>
3505 <listitem><para><emphasis>Build the image</emphasis>:
3506 Next, build the kernel image using this command:
3507 <literallayout class='monospaced'>
3508 $ bitbake -k linux-yocto
3509 </literallayout></para></listitem>
3510 </orderedlist>
3511 </para>
3512 </section>
3513
3514 <section id='boot-the-image-and-verify-your-changes'>
3515 <title>Boot the Image and Verify Your Changes</title>
3516
3517 <para>
3518 These steps boot the image and allow you to see the changes
3519 <orderedlist>
3520 <listitem><para><emphasis>Boot the image</emphasis>:
3521 Boot the modified image in the QEMU emulator
3522 using this command:
3523 <literallayout class='monospaced'>
3524 $ runqemu qemux86
3525 </literallayout></para></listitem>
3526 <listitem><para><emphasis>Verify the changes</emphasis>:
3527 Log into the machine using <filename>root</filename> with no password and then
3528 use the following shell command to scroll through the console's boot output.
3529 <literallayout class='monospaced'>
3530 # dmesg | less
3531 </literallayout>
3532 You should see the results of your <filename>printk</filename> statements
3533 as part of the output.</para></listitem>
3534 </orderedlist>
3535 </para>
3536 </section>
3537 </section>
3538
3539 <section id='making-images-more-secure'>
3540 <title>Making Images More Secure</title>
3541
3542 <para>
3543 The Yocto Project has security flags that you can enable that
3544 help make your build output more secure.
3545 The security flags are in the
3546 <filename>meta/conf/distro/include/security_flags.inc</filename>
3547 file in your
3548 <link linkend='source-directory'>Source Directory</link>
3549 (e.g. <filename>poky</filename>).
3550 </para>
3551
3552 <para>
3553 These GCC/LD flags enable more secure code generation.
3554 By including the <filename>security_flags.inc</filename>
3555 file, you enable flags to the compiler and linker that cause
3556 them to generate more secure code.
3557 <note>
3558 These flags are enabled by default in the
3559 <filename>poky-lsb</filename> distribution.
3560 </note>
3561 Use the following line in your
3562 <filename>local.conf</filename> file
3563 to enable the security compiler and
3564 linker flags to your build:
3565 <literallayout class='monospaced'>
3566 require conf/distro/include/security_flags.inc
3567 </literallayout>
3568 </para>
3569 </section>
3570
3571 <section id='creating-your-own-distribution'>
3572 <title>Creating Your Own Distribution</title>
3573
3574 <para>
3575 When you build an image using the Yocto Project and
3576 do not alter any distribution
3577 <link linkend='metadata'>Metadata</link>, you are creating a
3578 Poky distribution.
3579 If you wish to gain more control over package alternative
3580 selections, compile-time options, and other low-level
3581 configurations, you can create your own distribution.
3582 </para>
3583
3584 <para>
3585 To create your own distribution, the basic steps consist of
3586 creating your own distribution layer, creating your own
3587 distribution configuration file, and then adding any needed
3588 code and Metadata to the layer.
3589 The following steps provide some more detail:
3590 <itemizedlist>
3591 <listitem><para><emphasis>Create a layer for your new distro:</emphasis>
3592 Create your distribution layer so that you can keep your
3593 Metadata and code for the distribution separate.
3594 It is strongly recommended that you create and use your own
3595 layer for configuration and code.
3596 Using your own layer as compared to just placing
3597 configurations in a <filename>local.conf</filename>
3598 configuration file makes it easier to reproduce the same
3599 build configuration when using multiple build machines.
3600 See the
3601 "<link linkend='creating-a-general-layer-using-the-yocto-layer-script'>Creating a General Layer Using the yocto-layer Script</link>"
3602 section for information on how to quickly set up a layer.
3603 </para></listitem>
3604 <listitem><para><emphasis>Create the distribution configuration file:</emphasis>
3605 The distribution configuration file needs to be created in
3606 the <filename>conf/distro</filename> directory of your
3607 layer.
3608 You need to name it using your distribution name
3609 (e.g. <filename>mydistro.conf</filename>).
3610 <note>
3611 The
3612 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO'><filename>DISTRO</filename></ulink>
3613 variable in your
3614 <filename>local.conf</filename> file determines the
3615 name of your distribution.
3616 </note></para>
3617 <para>You can split out parts of your configuration file
3618 into include files and then "require" them from within
3619 your distribution configuration file.
3620 Be sure to place the include files in the
3621 <filename>conf/distro/include</filename> directory of
3622 your layer.
3623 A common example usage of include files would be to
3624 separate out the selection of desired version and revisions
3625 for individual recipes.
3626</para>
3627 <para>Your configuration file needs to set the following
3628 required variables:
3629 <literallayout class='monospaced'>
3630 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_NAME'><filename>DISTRO_NAME</filename></ulink>
3631 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_VERSION'><filename>DISTRO_VERSION</filename></ulink>
3632 </literallayout>
3633 These following variables are optional and you typically
3634 set them from the distribution configuration file:
3635 <literallayout class='monospaced'>
3636 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></ulink>
3637 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_EXTRA_RDEPENDS'><filename>DISTRO_EXTRA_RDEPENDS</filename></ulink>
3638 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_EXTRA_RRECOMMENDS'><filename>DISTRO_EXTRA_RRECOMMENDS</filename></ulink>
3639 <ulink url='&YOCTO_DOCS_REF_URL;#var-TCLIBC'><filename>TCLIBC</filename></ulink>
3640 </literallayout>
3641 <tip>
3642 If you want to base your distribution configuration file
3643 on the very basic configuration from OE-Core, you
3644 can use
3645 <filename>conf/distro/defaultsetup.conf</filename> as
3646 a reference and just include variables that differ
3647 as compared to <filename>defaultsetup.conf</filename>.
3648 Alternatively, you can create a distribution
3649 configuration file from scratch using the
3650 <filename>defaultsetup.conf</filename> file
3651 or configuration files from other distributions
3652 such as Poky or Angstrom as references.
3653 </tip></para></listitem>
3654 <listitem><para><emphasis>Provide miscellaneous variables:</emphasis>
3655 Be sure to define any other variables for which you want to
3656 create a default or enforce as part of the distribution
3657 configuration.
3658 You can include nearly any variable from the
3659 <filename>local.conf</filename> file.
3660 The variables you use are not limited to the list in the
3661 previous bulleted item.</para></listitem>
3662 <listitem><para><emphasis>Point to Your distribution configuration file:</emphasis>
3663 In your <filename>local.conf</filename> file in the
3664 <link linkend='build-directory'>Build Directory</link>,
3665 set your
3666 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO'><filename>DISTRO</filename></ulink>
3667 variable to point to your distribution's configuration file.
3668 For example, if your distribution's configuration file is
3669 named <filename>mydistro.conf</filename>, then you point
3670 to it as follows:
3671 <literallayout class='monospaced'>
3672 DISTRO = "mydistro"
3673 </literallayout></para></listitem>
3674 <listitem><para><emphasis>Add more to the layer if necessary:</emphasis>
3675 Use your layer to hold other information needed for the
3676 distribution:
3677 <itemizedlist>
3678 <listitem><para>Add recipes for installing
3679 distro-specific configuration files that are not
3680 already installed by another recipe.
3681 If you have distro-specific configuration files
3682 that are included by an existing recipe, you should
3683 add an append file (<filename>.bbappend</filename>)
3684 for those.
3685 For general information and recommendations
3686 on how to add recipes to your layer, see the
3687 "<link linkend='creating-your-own-layer'>Creating Your Own Layer</link>"
3688 and
3689 "<link linkend='best-practices-to-follow-when-creating-layers'>Best Practices to Follow When Creating Layers</link>"
3690 sections.</para></listitem>
3691 <listitem><para>Add any image recipes that are specific
3692 to your distribution.</para></listitem>
3693 <listitem><para>Add a <filename>psplash</filename>
3694 append file for a branded splash screen.
3695 For information on append files, see the
3696 "<link linkend='using-bbappend-files'>Using .bbappend Files</link>"
3697 section.</para></listitem>
3698 <listitem><para>Add any other append files to make
3699 custom changes that are specific to individual
3700 recipes.</para></listitem>
3701 </itemizedlist></para></listitem>
3702 </itemizedlist>
3703 </para>
3704 </section>
3705
3706 <section id='building-a-tiny-system'>
3707 <title>Building a Tiny System</title>
3708
3709 <para>
3710 Very small distributions have some significant advantages such
3711 as requiring less on-die or in-package memory (cheaper), better
3712 performance through efficient cache usage, lower power requirements
3713 due to less memory, faster boot times, and reduced development
3714 overhead.
3715 Some real-world examples where a very small distribution gives
3716 you distinct advantages are digital cameras, medical devices,
3717 and small headless systems.
3718 </para>
3719
3720 <para>
3721 This section presents information that shows you how you can
3722 trim your distribution to even smaller sizes than the
3723 <filename>poky-tiny</filename> distribution, which is around
3724 5 Mbytes, that can be built out-of-the-box using the Yocto Project.
3725 </para>
3726
3727 <section id='tiny-system-overview'>
3728 <title>Overview</title>
3729
3730 <para>
3731 The following list presents the overall steps you need to
3732 consider and perform to create distributions with smaller
3733 root filesystems, achieve faster boot times, maintain your critical
3734 functionality, and avoid initial RAM disks:
3735 <itemizedlist>
3736 <listitem><para>
3737 <link linkend='goals-and-guiding-principles'>Determine your goals and guiding principles.</link>
3738 </para></listitem>
3739 <listitem><para>
3740 <link linkend='understand-what-gives-your-image-size'>Understand what contributes to your image size.</link>
3741 </para></listitem>
3742 <listitem><para>
3743 <link linkend='trim-the-root-filesystem'>Reduce the size of the root filesystem.</link>
3744 </para></listitem>
3745 <listitem><para>
3746 <link linkend='trim-the-kernel'>Reduce the size of the kernel.</link>
3747 </para></listitem>
3748 <listitem><para>
3749 <link linkend='remove-package-management-requirements'>Eliminate packaging requirements.</link>
3750 </para></listitem>
3751 <listitem><para>
3752 <link linkend='look-for-other-ways-to-minimize-size'>Look for other ways to minimize size.</link>
3753 </para></listitem>
3754 <listitem><para>
3755 <link linkend='iterate-on-the-process'>Iterate on the process.</link>
3756 </para></listitem>
3757 </itemizedlist>
3758 </para>
3759 </section>
3760
3761 <section id='goals-and-guiding-principles'>
3762 <title>Goals and Guiding Principles</title>
3763
3764 <para>
3765 Before you can reach your destination, you need to know
3766 where you are going.
3767 Here is an example list that you can use as a guide when
3768 creating very small distributions:
3769 <itemizedlist>
3770 <listitem><para>Determine how much space you need
3771 (e.g. a kernel that is 1 Mbyte or less and
3772 a root filesystem that is 3 Mbytes or less).
3773 </para></listitem>
3774 <listitem><para>Find the areas that are currently
3775 taking 90% of the space and concentrate on reducing
3776 those areas.
3777 </para></listitem>
3778 <listitem><para>Do not create any difficult "hacks"
3779 to achieve your goals.</para></listitem>
3780 <listitem><para>Leverage the device-specific
3781 options.</para></listitem>
3782 <listitem><para>Work in a separate layer so that you
3783 keep changes isolated.
3784 For information on how to create layers, see
3785 the "<link linkend='understanding-and-creating-layers'>Understanding and Creating Layers</link>" section.
3786 </para></listitem>
3787 </itemizedlist>
3788 </para>
3789 </section>
3790
3791 <section id='understand-what-gives-your-image-size'>
3792 <title>Understand What Contributes to Your Image Size</title>
3793
3794 <para>
3795 It is easiest to have something to start with when creating
3796 your own distribution.
3797 You can use the Yocto Project out-of-the-box to create the
3798 <filename>poky-tiny</filename> distribution.
3799 Ultimately, you will want to make changes in your own
3800 distribution that are likely modeled after
3801 <filename>poky-tiny</filename>.
3802 <note>
3803 To use <filename>poky-tiny</filename> in your build,
3804 set the
3805 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO'><filename>DISTRO</filename></ulink>
3806 variable in your
3807 <filename>local.conf</filename> file to "poky-tiny"
3808 as described in the
3809 "<link linkend='creating-your-own-distribution'>Creating Your Own Distribution</link>"
3810 section.
3811 </note>
3812 </para>
3813
3814 <para>
3815 Understanding some memory concepts will help you reduce the
3816 system size.
3817 Memory consists of static, dynamic, and temporary memory.
3818 Static memory is the TEXT (code), DATA (initialized data
3819 in the code), and BSS (uninitialized data) sections.
3820 Dynamic memory represents memory that is allocated at runtime:
3821 stacks, hash tables, and so forth.
3822 Temporary memory is recovered after the boot process.
3823 This memory consists of memory used for decompressing
3824 the kernel and for the <filename>__init__</filename>
3825 functions.
3826 </para>
3827
3828 <para>
3829 To help you see where you currently are with kernel and root
3830 filesystem sizes, you can use two tools found in the
3831 <link linkend='source-directory'>Source Directory</link> in
3832 the <filename>scripts/tiny/</filename> directory:
3833 <itemizedlist>
3834 <listitem><para><filename>ksize.py</filename>: Reports
3835 component sizes for the kernel build objects.
3836 </para></listitem>
3837 <listitem><para><filename>dirsize.py</filename>: Reports
3838 component sizes for the root filesystem.</para></listitem>
3839 </itemizedlist>
3840 This next tool and command help you organize configuration
3841 fragments and view file dependencies in a human-readable form:
3842 <itemizedlist>
3843 <listitem><para><filename>merge_config.sh</filename>:
3844 Helps you manage configuration files and fragments
3845 within the kernel.
3846 With this tool, you can merge individual configuration
3847 fragments together.
3848 The tool allows you to make overrides and warns you
3849 of any missing configuration options.
3850 The tool is ideal for allowing you to iterate on
3851 configurations, create minimal configurations, and
3852 create configuration files for different machines
3853 without having to duplicate your process.</para>
3854 <para>The <filename>merge_config.sh</filename> script is
3855 part of the Linux Yocto kernel Git repositories
3856 (i.e. <filename>linux-yocto-3.14</filename>,
3857 <filename>linux-yocto-3.10</filename>,
3858 <filename>linux-yocto-3.8</filename>, and so forth)
3859 in the
3860 <filename>scripts/kconfig</filename> directory.</para>
3861 <para>For more information on configuration fragments,
3862 see the
3863 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#generating-configuration-files'>Generating Configuration Files</ulink>"
3864 section of the Yocto Project Linux Kernel Development
3865 Manual and the "<link linkend='creating-config-fragments'>Creating Configuration Fragments</link>"
3866 section, which is in this manual.</para></listitem>
3867 <listitem><para><filename>bitbake -u depexp -g &lt;bitbake_target&gt;</filename>:
3868 Using the BitBake command with these options brings up
3869 a Dependency Explorer from which you can view file
3870 dependencies.
3871 Understanding these dependencies allows you to make
3872 informed decisions when cutting out various pieces of the
3873 kernel and root filesystem.</para></listitem>
3874 </itemizedlist>
3875 </para>
3876 </section>
3877
3878 <section id='trim-the-root-filesystem'>
3879 <title>Trim the Root Filesystem</title>
3880
3881 <para>
3882 The root filesystem is made up of packages for booting,
3883 libraries, and applications.
3884 To change things, you can configure how the packaging happens,
3885 which changes the way you build them.
3886 You can also tweak the filesystem itself or select a different
3887 filesystem.
3888 </para>
3889
3890 <para>
3891 First, find out what is hogging your root filesystem by running the
3892 <filename>dirsize.py</filename> script from your root directory:
3893 <literallayout class='monospaced'>
3894 $ cd &lt;root-directory-of-image&gt;
3895 $ dirsize.py 100000 > dirsize-100k.log
3896 $ cat dirsize-100k.log
3897 </literallayout>
3898 You can apply a filter to the script to ignore files under
3899 a certain size.
3900 The previous example filters out any files below 100 Kbytes.
3901 The sizes reported by the tool are uncompressed, and thus
3902 will be smaller by a relatively constant factor in a
3903 compressed root filesystem.
3904 When you examine your log file, you can focus on areas of the
3905 root filesystem that take up large amounts of memory.
3906 </para>
3907
3908 <para>
3909 You need to be sure that what you eliminate does not cripple
3910 the functionality you need.
3911 One way to see how packages relate to each other is by using
3912 the Dependency Explorer UI with the BitBake command:
3913 <literallayout class='monospaced'>
3914 $ cd &lt;image-directory&gt;
3915 $ bitbake -u depexp -g &lt;image&gt;
3916 </literallayout>
3917 Use the interface to select potential packages you wish to
3918 eliminate and see their dependency relationships.
3919 </para>
3920
3921 <para>
3922 When deciding how to reduce the size, get rid of packages that
3923 result in minimal impact on the feature set.
3924 For example, you might not need a VGA display.
3925 Or, you might be able to get by with <filename>devtmpfs</filename>
3926 and <filename>mdev</filename> instead of
3927 <filename>udev</filename>.
3928 </para>
3929
3930 <para>
3931 Use your <filename>local.conf</filename> file to make changes.
3932 For example, to eliminate <filename>udev</filename> and
3933 <filename>glib</filename>, set the following in the
3934 local configuration file:
3935 <literallayout class='monospaced'>
3936 VIRTUAL-RUNTIME_dev_manager = ""
3937 </literallayout>
3938 </para>
3939
3940 <para>
3941 Finally, you should consider exactly the type of root
3942 filesystem you need to meet your needs while also reducing
3943 its size.
3944 For example, consider <filename>cramfs</filename>,
3945 <filename>squashfs</filename>, <filename>ubifs</filename>,
3946 <filename>ext2</filename>, or an <filename>initramfs</filename>
3947 using <filename>initramfs</filename>.
3948 Be aware that <filename>ext3</filename> requires a 1 Mbyte
3949 journal.
3950 If you are okay with running read-only, you do not need this
3951 journal.
3952 </para>
3953
3954 <note>
3955 After each round of elimination, you need to rebuild your
3956 system and then use the tools to see the effects of your
3957 reductions.
3958 </note>
3959
3960
3961 </section>
3962
3963 <section id='trim-the-kernel'>
3964 <title>Trim the Kernel</title>
3965
3966 <para>
3967 The kernel is built by including policies for hardware-independent
3968 aspects.
3969 What subsystems do you enable?
3970 For what architecture are you building?
3971 Which drivers do you build by default?
3972 <note>You can modify the kernel source if you want to help
3973 with boot time.
3974 </note>
3975 </para>
3976
3977 <para>
3978 Run the <filename>ksize.py</filename> script from the top-level
3979 Linux build directory to get an idea of what is making up
3980 the kernel:
3981 <literallayout class='monospaced'>
3982 $ cd &lt;top-level-linux-build-directory&gt;
3983 $ ksize.py > ksize.log
3984 $ cat ksize.log
3985 </literallayout>
3986 When you examine the log, you will see how much space is
3987 taken up with the built-in <filename>.o</filename> files for
3988 drivers, networking, core kernel files, filesystem, sound,
3989 and so forth.
3990 The sizes reported by the tool are uncompressed, and thus
3991 will be smaller by a relatively constant factor in a compressed
3992 kernel image.
3993 Look to reduce the areas that are large and taking up around
3994 the "90% rule."
3995 </para>
3996
3997 <para>
3998 To examine, or drill down, into any particular area, use the
3999 <filename>-d</filename> option with the script:
4000 <literallayout class='monospaced'>
4001 $ ksize.py -d > ksize.log
4002 </literallayout>
4003 Using this option breaks out the individual file information
4004 for each area of the kernel (e.g. drivers, networking, and
4005 so forth).
4006 </para>
4007
4008 <para>
4009 Use your log file to see what you can eliminate from the kernel
4010 based on features you can let go.
4011 For example, if you are not going to need sound, you do not
4012 need any drivers that support sound.
4013 </para>
4014
4015 <para>
4016 After figuring out what to eliminate, you need to reconfigure
4017 the kernel to reflect those changes during the next build.
4018 You could run <filename>menuconfig</filename> and make all your
4019 changes at once.
4020 However, that makes it difficult to see the effects of your
4021 individual eliminations and also makes it difficult to replicate
4022 the changes for perhaps another target device.
4023 A better method is to start with no configurations using
4024 <filename>allnoconfig</filename>, create configuration
4025 fragments for individual changes, and then manage the
4026 fragments into a single configuration file using
4027 <filename>merge_config.sh</filename>.
4028 The tool makes it easy for you to iterate using the
4029 configuration change and build cycle.
4030 </para>
4031
4032 <para>
4033 Each time you make configuration changes, you need to rebuild
4034 the kernel and check to see what impact your changes had on
4035 the overall size.
4036 </para>
4037 </section>
4038
4039 <section id='remove-package-management-requirements'>
4040 <title>Remove Package Management Requirements</title>
4041
4042 <para>
4043 Packaging requirements add size to the image.
4044 One way to reduce the size of the image is to remove all the
4045 packaging requirements from the image.
4046 This reduction includes both removing the package manager
4047 and its unique dependencies as well as removing the package
4048 management data itself.
4049 </para>
4050
4051 <para>
4052 To eliminate all the packaging requirements for an image,
4053 be sure that "package-management" is not part of your
4054 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink>
4055 statement for the image.
4056 When you remove this feature, you are removing the package
4057 manager as well as its dependencies from the root filesystem.
4058 </para>
4059 </section>
4060
4061 <section id='look-for-other-ways-to-minimize-size'>
4062 <title>Look for Other Ways to Minimize Size</title>
4063
4064 <para>
4065 Depending on your particular circumstances, other areas that you
4066 can trim likely exist.
4067 The key to finding these areas is through tools and methods
4068 described here combined with experimentation and iteration.
4069 Here are a couple of areas to experiment with:
4070 <itemizedlist>
4071 <listitem><para><filename>eglibc</filename>:
4072 In general, follow this process:
4073 <orderedlist>
4074 <listitem><para>Remove <filename>eglibc</filename>
4075 features from
4076 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></ulink>
4077 that you think you do not need.</para></listitem>
4078 <listitem><para>Build your distribution.
4079 </para></listitem>
4080 <listitem><para>If the build fails due to missing
4081 symbols in a package, determine if you can
4082 reconfigure the package to not need those
4083 features.
4084 For example, change the configuration to not
4085 support wide character support as is done for
4086 <filename>ncurses</filename>.
4087 Or, if support for those characters is needed,
4088 determine what <filename>eglibc</filename>
4089 features provide the support and restore the
4090 configuration.
4091 </para></listitem>
4092 <listitem><para>Rebuild and repeat the process.
4093 </para></listitem>
4094 </orderedlist></para></listitem>
4095 <listitem><para><filename>busybox</filename>:
4096 For BusyBox, use a process similar as described for
4097 <filename>eglibc</filename>.
4098 A difference is you will need to boot the resulting
4099 system to see if you are able to do everything you
4100 expect from the running system.
4101 You need to be sure to integrate configuration fragments
4102 into Busybox because BusyBox handles its own core
4103 features and then allows you to add configuration
4104 fragments on top.
4105 </para></listitem>
4106 </itemizedlist>
4107 </para>
4108 </section>
4109
4110 <section id='iterate-on-the-process'>
4111 <title>Iterate on the Process</title>
4112
4113 <para>
4114 If you have not reached your goals on system size, you need
4115 to iterate on the process.
4116 The process is the same.
4117 Use the tools and see just what is taking up 90% of the root
4118 filesystem and the kernel.
4119 Decide what you can eliminate without limiting your device
4120 beyond what you need.
4121 </para>
4122
4123 <para>
4124 Depending on your system, a good place to look might be
4125 Busybox, which provides a stripped down
4126 version of Unix tools in a single, executable file.
4127 You might be able to drop virtual terminal services or perhaps
4128 ipv6.
4129 </para>
4130 </section>
4131 </section>
4132
4133 <section id='working-with-packages'>
4134 <title>Working with Packages</title>
4135
4136 <para>
4137 This section describes a few tasks that involve packages:
4138 <itemizedlist>
4139 <listitem><para>
4140 <link linkend='excluding-packages-from-an-image'>Excluding packages from an image</link>
4141 </para></listitem>
4142 <listitem><para>
4143 <link linkend='incrementing-a-package-revision-number'>Incrementing a package revision number</link>
4144 </para></listitem>
4145 <listitem><para>
4146 <link linkend='usingpoky-configuring-DISTRO_PN_ALIAS'>Handling a package name alias</link>
4147 </para></listitem>
4148 <listitem><para>
4149 <link linkend='handling-optional-module-packaging'>Handling optional module packaging</link>
4150 </para></listitem>
4151 <listitem><para>
4152 <link linkend='using-runtime-package-management'>Using Runtime Package Management</link>
4153 </para></listitem>
4154 <listitem><para>
4155 <link linkend='testing-packages-with-ptest'>Setting up and running package test (ptest)</link>
4156 </para></listitem>
4157 </itemizedlist>
4158 </para>
4159
4160 <section id='excluding-packages-from-an-image'>
4161 <title>Excluding Packages from an Image</title>
4162
4163 <para>
4164 You might find it necessary to prevent specific packages
4165 from being installed into an image.
4166 If so, you can use several variables to direct the build
4167 system to essentially ignore installing recommended packages
4168 or to not install a package at all.
4169 </para>
4170
4171 <para>
4172 The following list introduces variables you can use to
4173 prevent packages from being installed into your image.
4174 Each of these variables only works with IPK and RPM
4175 package types.
4176 Support for Debian packages does not exist.
4177 Also, you can use these variables from your
4178 <filename>local.conf</filename> file or attach them to a
4179 specific image recipe by using a recipe name override.
4180 For more detail on the variables, see the descriptions in the
4181 Yocto Project Reference Manual's glossary chapter.
4182 <itemizedlist>
4183 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></ulink>:
4184 Use this variable to specify "recommended-only"
4185 packages that you do not want installed.
4186 </para></listitem>
4187 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-NO_RECOMMENDATIONS'><filename>NO_RECOMMENDATIONS</filename></ulink>:
4188 Use this variable to prevent all "recommended-only"
4189 packages from being installed.
4190 </para></listitem>
4191 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_EXCLUDE'><filename>PACKAGE_EXCLUDE</filename></ulink>:
4192 Use this variable to prevent specific packages from
4193 being installed regardless of whether they are
4194 "recommended-only" or not.
4195 You need to realize that the build process could
4196 fail with an error when you
4197 prevent the installation of a package whose presence
4198 is required by an installed package.
4199 </para></listitem>
4200 </itemizedlist>
4201 </para>
4202 </section>
4203
4204 <section id='incrementing-a-package-revision-number'>
4205 <title>Incrementing a Package Revision Number</title>
4206
4207 <para>
4208 If a committed change results in changing the package output,
4209 then the value of the
4210 <ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink>
4211 variable needs to be increased (or "bumped").
4212 Increasing <filename>PR</filename> occurs one of two ways:
4213 <itemizedlist>
4214 <listitem><para>Automatically using a Package Revision
4215 Service (PR Service).</para></listitem>
4216 <listitem><para>Manually incrementing the
4217 <filename>PR</filename> variable.</para></listitem>
4218 </itemizedlist>
4219 </para>
4220
4221 <para>
4222 Given that one of the challenges any build system and its
4223 users face is how to maintain a package feed that is compatible
4224 with existing package manager applications such as
4225 RPM, APT, and OPKG, using an automated system is much
4226 preferred over a manual system.
4227 In either system, the main requirement is that version
4228 numbering increases in a linear fashion and that a number of
4229 version components exist that support that linear progression.
4230 </para>
4231
4232 <para>
4233 The following two sections provide information on the PR Service
4234 and on manual <filename>PR</filename> bumping.
4235 </para>
4236
4237 <section id='working-with-a-pr-service'>
4238 <title>Working With a PR Service</title>
4239
4240 <para>
4241 As mentioned, attempting to maintain revision numbers in the
4242 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
4243 is error prone, inaccurate, and causes problems for people
4244 submitting recipes.
4245 Conversely, the PR Service automatically generates
4246 increasing numbers, particularly the revision field,
4247 which removes the human element.
4248 <note>
4249 For additional information on using a PR Service, you
4250 can see the
4251 <ulink url='&YOCTO_WIKI_URL;/wiki/PR_Service'>PR Service</ulink>
4252 wiki page.
4253 </note>
4254 </para>
4255
4256 <para>
4257 The Yocto Project uses variables in order of
4258 decreasing priority to facilitate revision numbering (i.e.
4259 <ulink url='&YOCTO_DOCS_REF_URL;#var-PE'><filename>PE</filename></ulink>,
4260 <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>, and
4261 <ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink>
4262 for epoch, version, and revision, respectively).
4263 The values are highly dependent on the policies and
4264 procedures of a given distribution and package feed.
4265 </para>
4266
4267 <para>
4268 Because the OpenEmbedded build system uses
4269 "<ulink url='&YOCTO_DOCS_REF_URL;#checksums'>signatures</ulink>",
4270 which are unique to a given build, the build system
4271 knows when to rebuild packages.
4272 All the inputs into a given task are represented by a
4273 signature, which can trigger a rebuild when different.
4274 Thus, the build system itself does not rely on the
4275 <filename>PR</filename> numbers to trigger a rebuild.
4276 The signatures, however, can be used to generate
4277 <filename>PR</filename> values.
4278 </para>
4279
4280 <para>
4281 The PR Service works with both
4282 <filename>OEBasic</filename> and
4283 <filename>OEBasicHash</filename> generators.
4284 The value of <filename>PR</filename> bumps when the
4285 checksum changes and the different generator mechanisms
4286 change signatures under different circumstances.
4287 </para>
4288
4289 <para>
4290 As implemented, the build system includes values from
4291 the PR Service into the <filename>PR</filename> field as
4292 an addition using the form "<filename>.x</filename>" so
4293 <filename>r0</filename> becomes <filename>r0.1</filename>,
4294 <filename>r0.2</filename> and so forth.
4295 This scheme allows existing <filename>PR</filename> values
4296 to be used for whatever reasons, which include manual
4297 <filename>PR</filename> bumps, should it be necessary.
4298 </para>
4299
4300 <para>
4301 By default, the PR Service is not enabled or running.
4302 Thus, the packages generated are just "self consistent".
4303 The build system adds and removes packages and
4304 there are no guarantees about upgrade paths but images
4305 will be consistent and correct with the latest changes.
4306 </para>
4307
4308 <para>
4309 The simplest form for a PR Service is for it to exist
4310 for a single host development system that builds the
4311 package feed (building system).
4312 For this scenario, you can enable a local PR Service by
4313 setting
4314 <ulink url='&YOCTO_DOCS_REF_URL;#var-PRSERV_HOST'><filename>PRSERV_HOST</filename></ulink>
4315 in your <filename>local.conf</filename> file in the
4316 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>:
4317 <literallayout class='monospaced'>
4318 PRSERV_HOST = "localhost:0"
4319 </literallayout>
4320 Once the service is started, packages will automatically
4321 get increasing <filename>PR</filename> values and
4322 BitBake will take care of starting and stopping the server.
4323 </para>
4324
4325 <para>
4326 If you have a more complex setup where multiple host
4327 development systems work against a common, shared package
4328 feed, you have a single PR Service running and it is
4329 connected to each building system.
4330 For this scenario, you need to start the PR Service using
4331 the <filename>bitbake-prserv</filename> command:
4332 <literallayout class='monospaced'>
4333 bitbake-prserv &dash;&dash;host &lt;ip&gt; &dash;&dash;port &lt;port&gt; &dash;&dash;start
4334 </literallayout>
4335 In addition to hand-starting the service, you need to
4336 update the <filename>local.conf</filename> file of each
4337 building system as described earlier so each system
4338 points to the server and port.
4339 </para>
4340
4341 <para>
4342 It is also recommended you use build history, which adds
4343 some sanity checks to package versions, in conjunction with
4344 the server that is running the PR Service.
4345 To enable build history, add the following to each building
4346 system's <filename>local.conf</filename> file:
4347 <literallayout class='monospaced'>
4348 # It is recommended to activate "buildhistory" for testing the PR service
4349 INHERIT += "buildhistory"
4350 BUILDHISTORY_COMMIT = "1"
4351 </literallayout>
4352 For information on build history, see the
4353 "<ulink url='&YOCTO_DOCS_REF_URL;#maintaining-build-output-quality'>Maintaining Build Output Quality</ulink>"
4354 section in the Yocto Project Reference Manual.
4355 </para>
4356
4357 <note>
4358 <para>The OpenEmbedded build system does not maintain
4359 <filename>PR</filename> information as part of the
4360 shared state (sstate) packages.
4361 If you maintain an sstate feed, its expected that either
4362 all your building systems that contribute to the sstate
4363 feed use a shared PR Service, or you do not run a PR
4364 Service on any of your building systems.
4365 Having some systems use a PR Service while others do
4366 not leads to obvious problems.</para>
4367 <para>For more information on shared state, see the
4368 "<ulink url='&YOCTO_DOCS_REF_URL;#shared-state-cache'>Shared State Cache</ulink>"
4369 section in the Yocto Project Reference Manual.</para>
4370 </note>
4371 </section>
4372
4373 <section id='manually-bumping-pr'>
4374 <title>Manually Bumping PR</title>
4375
4376 <para>
4377 The alternative to setting up a PR Service is to manually
4378 bump the
4379 <ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink>
4380 variable.
4381 </para>
4382
4383 <para>
4384 If a committed change results in changing the package output,
4385 then the value of the PR variable needs to be increased
4386 (or "bumped") as part of that commit.
4387 For new recipes you should add the <filename>PR</filename>
4388 variable and set its initial value equal to "r0", which is the default.
4389 Even though the default value is "r0", the practice of adding it to a new recipe makes
4390 it harder to forget to bump the variable when you make changes
4391 to the recipe in future.
4392 </para>
4393
4394 <para>
4395 If you are sharing a common <filename>.inc</filename> file with multiple recipes,
4396 you can also use the
4397 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-INC_PR'>INC_PR</ulink></filename>
4398 variable to ensure that
4399 the recipes sharing the <filename>.inc</filename> file are rebuilt when the
4400 <filename>.inc</filename> file itself is changed.
4401 The <filename>.inc</filename> file must set <filename>INC_PR</filename>
4402 (initially to "r0"), and all recipes referring to it should set <filename>PR</filename>
4403 to "$(INC_PR).0" initially, incrementing the last number when the recipe is changed.
4404 If the <filename>.inc</filename> file is changed then its
4405 <filename>INC_PR</filename> should be incremented.
4406 </para>
4407
4408 <para>
4409 When upgrading the version of a package, assuming the
4410 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PV'>PV</ulink></filename>
4411 changes, the <filename>PR</filename> variable should be
4412 reset to "r0" (or "$(INC_PR).0" if you are using
4413 <filename>INC_PR</filename>).
4414 </para>
4415
4416 <para>
4417 Usually, version increases occur only to packages.
4418 However, if for some reason <filename>PV</filename> changes but does not
4419 increase, you can increase the
4420 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PE'>PE</ulink></filename>
4421 variable (Package Epoch).
4422 The <filename>PE</filename> variable defaults to "0".
4423 </para>
4424
4425 <para>
4426 Version numbering strives to follow the
4427 <ulink url='http://www.debian.org/doc/debian-policy/ch-controlfields.html'>
4428 Debian Version Field Policy Guidelines</ulink>.
4429 These guidelines define how versions are compared and what "increasing" a version means.
4430 </para>
4431 </section>
4432 </section>
4433
4434 <section id="usingpoky-configuring-DISTRO_PN_ALIAS">
4435 <title>Handling a Package Name Alias</title>
4436 <para>
4437 Sometimes a package name you are using might exist under an alias or as a similarly named
4438 package in a different distribution.
4439 The OpenEmbedded build system implements a <filename>distro_check</filename>
4440 task that automatically connects to major distributions
4441 and checks for these situations.
4442 If the package exists under a different name in a different distribution, you get a
4443 <filename>distro_check</filename> mismatch.
4444 You can resolve this problem by defining a per-distro recipe name alias using the
4445 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_PN_ALIAS'>DISTRO_PN_ALIAS</ulink></filename>
4446 variable.
4447 </para>
4448
4449 <para>
4450 Following is an example that shows how you specify the <filename>DISTRO_PN_ALIAS</filename>
4451 variable:
4452 <literallayout class='monospaced'>
4453 DISTRO_PN_ALIAS_pn-PACKAGENAME = "distro1=package_name_alias1 \
4454 distro2=package_name_alias2 \
4455 distro3=package_name_alias3 \
4456 ..."
4457 </literallayout>
4458 </para>
4459
4460 <para>
4461 If you have more than one distribution alias, separate them with a space.
4462 Note that the build system currently automatically checks the
4463 Fedora, OpenSUSE, Debian, Ubuntu,
4464 and Mandriva distributions for source package recipes without having to specify them
4465 using the <filename>DISTRO_PN_ALIAS</filename> variable.
4466 For example, the following command generates a report that lists the Linux distributions
4467 that include the sources for each of the recipes.
4468 <literallayout class='monospaced'>
4469 $ bitbake world -f -c distro_check
4470 </literallayout>
4471 The results are stored in the <filename>build/tmp/log/distro_check-${DATETIME}.results</filename>
4472 file found in the
4473 <link linkend='source-directory'>Source Directory</link>.
4474 </para>
4475 </section>
4476
4477 <section id='handling-optional-module-packaging'>
4478 <title>Handling Optional Module Packaging</title>
4479
4480 <para>
4481 Many pieces of software split functionality into optional
4482 modules (or plug-ins) and the plug-ins that are built
4483 might depend on configuration options.
4484 To avoid having to duplicate the logic that determines what
4485 modules are available in your recipe or to avoid having
4486 to package each module by hand, the OpenEmbedded build system
4487 provides functionality to handle module packaging dynamically.
4488 </para>
4489
4490 <para>
4491 To handle optional module packaging, you need to do two things:
4492 <itemizedlist>
4493 <listitem><para>Ensure the module packaging is actually
4494 done.</para></listitem>
4495 <listitem><para>Ensure that any dependencies on optional
4496 modules from other recipes are satisfied by your recipe.
4497 </para></listitem>
4498 </itemizedlist>
4499 </para>
4500
4501 <section id='making-sure-the-packaging-is-done'>
4502 <title>Making Sure the Packaging is Done</title>
4503
4504 <para>
4505 To ensure the module packaging actually gets done, you use
4506 the <filename>do_split_packages</filename> function within
4507 the <filename>populate_packages</filename> Python function
4508 in your recipe.
4509 The <filename>do_split_packages</filename> function
4510 searches for a pattern of files or directories under a
4511 specified path and creates a package for each one it finds
4512 by appending to the
4513 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'><filename>PACKAGES</filename></ulink>
4514 variable and setting the appropriate values for
4515 <filename>FILES_packagename</filename>,
4516 <filename>RDEPENDS_packagename</filename>,
4517 <filename>DESCRIPTION_packagename</filename>, and so forth.
4518 Here is an example from the <filename>lighttpd</filename>
4519 recipe:
4520 <literallayout class='monospaced'>
4521 python populate_packages_prepend () {
4522 lighttpd_libdir = d.expand('${libdir}')
4523 do_split_packages(d, lighttpd_libdir, '^mod_(.*)\.so$',
4524 'lighttpd-module-%s', 'Lighttpd module for %s',
4525 extra_depends='')
4526 }
4527 </literallayout>
4528 The previous example specifies a number of things in the
4529 call to <filename>do_split_packages</filename>.
4530 <itemizedlist>
4531 <listitem><para>A directory within the files installed
4532 by your recipe through <filename>do_install</filename>
4533 in which to search.</para></listitem>
4534 <listitem><para>A regular expression used to match module
4535 files in that directory.
4536 In the example, note the parentheses () that mark
4537 the part of the expression from which the module
4538 name should be derived.</para></listitem>
4539 <listitem><para>A pattern to use for the package names.
4540 </para></listitem>
4541 <listitem><para>A description for each package.
4542 </para></listitem>
4543 <listitem><para>An empty string for
4544 <filename>extra_depends</filename>, which disables
4545 the default dependency on the main
4546 <filename>lighttpd</filename> package.
4547 Thus, if a file in <filename>${libdir}</filename>
4548 called <filename>mod_alias.so</filename> is found,
4549 a package called <filename>lighttpd-module-alias</filename>
4550 is created for it and the
4551 <ulink url='&YOCTO_DOCS_REF_URL;#var-DESCRIPTION'><filename>DESCRIPTION</filename></ulink>
4552 is set to "Lighttpd module for alias".</para></listitem>
4553 </itemizedlist>
4554 </para>
4555
4556 <para>
4557 Often, packaging modules is as simple as the previous
4558 example.
4559 However, more advanced options exist that you can use
4560 within <filename>do_split_packages</filename> to modify its
4561 behavior.
4562 And, if you need to, you can add more logic by specifying
4563 a hook function that is called for each package.
4564 It is also perfectly acceptable to call
4565 <filename>do_split_packages</filename> multiple times if
4566 you have more than one set of modules to package.
4567 </para>
4568
4569 <para>
4570 For more examples that show how to use
4571 <filename>do_split_packages</filename>, see the
4572 <filename>connman.inc</filename> file in the
4573 <filename>meta/recipes-connectivity/connman/</filename>
4574 directory of the <filename>poky</filename>
4575 <link linkend='yocto-project-repositories'>source repository</link>.
4576 You can also find examples in
4577 <filename>meta/classes/kernel.bbclass</filename>.
4578 </para>
4579
4580 <para>
4581 Following is a reference that shows
4582 <filename>do_split_packages</filename> mandatory and
4583 optional arguments:
4584 <literallayout class='monospaced'>
4585 Mandatory arguments
4586
4587 root
4588 The path in which to search
4589 file_regex
4590 Regular expression to match searched files.
4591 Use parentheses () to mark the part of this
4592 expression that should be used to derive the
4593 module name (to be substituted where %s is
4594 used in other function arguments as noted below)
4595 output_pattern
4596 Pattern to use for the package names. Must
4597 include %s.
4598 description
4599 Description to set for each package. Must
4600 include %s.
4601
4602 Optional arguments
4603
4604 postinst
4605 Postinstall script to use for all packages
4606 (as a string)
4607 recursive
4608 True to perform a recursive search - default
4609 False
4610 hook
4611 A hook function to be called for every match.
4612 The function will be called with the following
4613 arguments (in the order listed):
4614
4615 f
4616 Full path to the file/directory match
4617 pkg
4618 The package name
4619 file_regex
4620 As above
4621 output_pattern
4622 As above
4623 modulename
4624 The module name derived using file_regex
4625
4626 extra_depends
4627 Extra runtime dependencies (RDEPENDS) to be
4628 set for all packages. The default value of None
4629 causes a dependency on the main package
4630 (${PN}) - if you do not want this, pass empty
4631 string '' for this parameter.
4632 aux_files_pattern
4633 Extra item(s) to be added to FILES for each
4634 package. Can be a single string item or a list
4635 of strings for multiple items. Must include %s.
4636 postrm
4637 postrm script to use for all packages (as a
4638 string)
4639 allow_dirs
4640 True to allow directories to be matched -
4641 default False
4642 prepend
4643 If True, prepend created packages to PACKAGES
4644 instead of the default False which appends them
4645 match_path
4646 match file_regex on the whole relative path to
4647 the root rather than just the file name
4648 aux_files_pattern_verbatim
4649 Extra item(s) to be added to FILES for each
4650 package, using the actual derived module name
4651 rather than converting it to something legal
4652 for a package name. Can be a single string item
4653 or a list of strings for multiple items. Must
4654 include %s.
4655 allow_links
4656 True to allow symlinks to be matched - default
4657 False
4658 summary
4659 Summary to set for each package. Must include %s;
4660 defaults to description if not set.
4661 </literallayout>
4662 </para>
4663 </section>
4664
4665 <section id='satisfying-dependencies'>
4666 <title>Satisfying Dependencies</title>
4667
4668 <para>
4669 The second part for handling optional module packaging
4670 is to ensure that any dependencies on optional modules
4671 from other recipes are satisfied by your recipe.
4672 You can be sure these dependencies are satisfied by
4673 using the
4674 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES_DYNAMIC'><filename>PACKAGES_DYNAMIC</filename></ulink> variable.
4675 Here is an example that continues with the
4676 <filename>lighttpd</filename> recipe shown earlier:
4677 <literallayout class='monospaced'>
4678 PACKAGES_DYNAMIC = "lighttpd-module-.*"
4679 </literallayout>
4680 The name specified in the regular expression can of
4681 course be anything.
4682 In this example, it is <filename>lighttpd-module-</filename>
4683 and is specified as the prefix to ensure that any
4684 <ulink url='&YOCTO_DOCS_REF_URL;#var-RDEPENDS'><filename>RDEPENDS</filename></ulink>
4685 and <ulink url='&YOCTO_DOCS_REF_URL;#var-RRECOMMENDS'><filename>RRECOMMENDS</filename></ulink>
4686 on a package name starting with the prefix are satisfied
4687 during build time.
4688 If you are using <filename>do_split_packages</filename>
4689 as described in the previous section, the value you put in
4690 <filename>PACKAGES_DYNAMIC</filename> should correspond to
4691 the name pattern specified in the call to
4692 <filename>do_split_packages</filename>.
4693 </para>
4694 </section>
4695 </section>
4696
4697 <section id='using-runtime-package-management'>
4698 <title>Using Runtime Package Management</title>
4699
4700 <para>
4701 During a build, BitBake always transforms a recipe into one or
4702 more packages.
4703 For example, BitBake takes the <filename>bash</filename> recipe
4704 and currently produces the <filename>bash-dbg</filename>,
4705 <filename>bash-staticdev</filename>,
4706 <filename>bash-dev</filename>, <filename>bash-doc</filename>,
4707 <filename>bash-locale</filename>, and
4708 <filename>bash</filename> packages.
4709 Not all generated packages are included in an image.
4710 </para>
4711
4712 <para>
4713 In several situations, you might need to update, add, remove,
4714 or query the packages on a target device at runtime
4715 (i.e. without having to generate a new image).
4716 Examples of such situations include:
4717 <itemizedlist>
4718 <listitem><para>
4719 You want to provide in-the-field updates to deployed
4720 devices (e.g. security updates).
4721 </para></listitem>
4722 <listitem><para>
4723 You want to have a fast turn-around development cycle
4724 for one or more applications that run on your device.
4725 </para></listitem>
4726 <listitem><para>
4727 You want to temporarily install the "debug" packages
4728 of various applications on your device so that
4729 debugging can be greatly improved by allowing
4730 access to symbols and source debugging.
4731 </para></listitem>
4732 <listitem><para>
4733 You want to deploy a more minimal package selection of
4734 your device but allow in-the-field updates to add a
4735 larger selection for customization.
4736 </para></listitem>
4737 </itemizedlist>
4738 </para>
4739
4740 <para>
4741 In all these situations, you have something similar to a more
4742 traditional Linux distribution in that in-field devices
4743 are able to receive pre-compiled packages from a server for
4744 installation or update.
4745 Being able to install these packages on a running,
4746 in-field device is what is termed "runtime package
4747 management".
4748 </para>
4749
4750 <para>
4751 In order to use runtime package management, you
4752 need a host/server machine that serves up the pre-compiled
4753 packages plus the required metadata.
4754 You also need package manipulation tools on the target.
4755 The build machine is a likely candidate to act as the server.
4756 However, that machine does not necessarily have to be the
4757 package server.
4758 The build machine could push its artifacts to another machine
4759 that acts as the server (e.g. Internet-facing).
4760 </para>
4761
4762 <para>
4763 A simple build that targets just one device produces
4764 more than one package database.
4765 In other words, the packages produced by a build are separated
4766 out into a couple of different package groupings based on
4767 criteria such as the target's CPU architecture, the target
4768 board, or the C library used on the target.
4769 For example, a build targeting the <filename>qemuarm</filename>
4770 device produces the following three package databases:
4771 <filename>all</filename>, <filename>armv5te</filename>, and
4772 <filename>qemuarm</filename>.
4773 If you wanted your <filename>qemuarm</filename> device to be
4774 aware of all the packages that were available to it,
4775 you would need to point it to each of these databases
4776 individually.
4777 In a similar way, a traditional Linux distribution usually is
4778 configured to be aware of a number of software repositories
4779 from which it retrieves packages.
4780 </para>
4781
4782 <para>
4783 Using runtime package management is completely optional and
4784 not required for a successful build or deployment in any
4785 way.
4786 But if you want to make use of runtime package management,
4787 you need to do a couple things above and beyond the basics.
4788 The remainder of this section describes what you need to do.
4789 </para>
4790
4791 <section id='runtime-package-management-build'>
4792 <title>Build Considerations</title>
4793
4794 <para>
4795 This section describes build considerations that you need
4796 to be aware of in order to provide support for runtime
4797 package management.
4798 </para>
4799
4800 <para>
4801 When BitBake generates packages it needs to know
4802 what format or formats to use.
4803 In your configuration, you use the
4804 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></ulink>
4805 variable to specify the format.
4806 <note>
4807 You can choose to have more than one format but you must
4808 provide at least one.
4809 </note>
4810 </para>
4811
4812 <para>
4813 If you would like your image to start off with a basic
4814 package database of the packages in your current build
4815 as well as have the relevant tools available on the
4816 target for runtime package management, you can include
4817 "package-management" in the
4818 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink>
4819 variable.
4820 Including "package-management" in this
4821 configuration variable ensures that when the image
4822 is assembled for your target, the image includes
4823 the currently-known package databases as well as
4824 the target-specific tools required for runtime
4825 package management to be performed on the target.
4826 However, this is not strictly necessary.
4827 You could start your image off without any databases
4828 but only include the required on-target package
4829 tool(s).
4830 As an example, you could include "opkg" in your
4831 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></ulink>
4832 variable if you are using the IPK package format.
4833 You can then initialize your target's package database(s)
4834 later once your image is up and running.
4835 </para>
4836
4837 <para>
4838 Whenever you perform any sort of build step that can
4839 potentially generate a package or modify an existing
4840 package, it is always a good idea to re-generate the
4841 package index with:
4842 <literallayout class='monospaced'>
4843 $ bitbake package-index
4844 </literallayout>
4845 Realize that it is not sufficient to simply do the
4846 following:
4847 <literallayout class='monospaced'>
4848 $ bitbake &lt;some-package&gt; package-index
4849 </literallayout>
4850 This is because BitBake does not properly schedule the
4851 <filename>package-index</filename> target fully after any
4852 other target has completed.
4853 Thus, be sure to run the package update step separately.
4854 </para>
4855
4856 <para>
4857 As described below in the
4858 "<link linkend='runtime-package-management-target-ipk'>Using IPK</link>"
4859 section, if you are using IPK as your package format, you
4860 can make use of the
4861 <filename>distro-feed-configs</filename> recipe provided
4862 by <filename>meta-oe</filename> in order to configure your
4863 target to use your IPK databases.
4864 </para>
4865
4866 <para>
4867 When your build is complete, your packages reside in the
4868 <filename>${TMPDIR}/deploy/&lt;package-format&gt;</filename>
4869 directory.
4870 For example, if <filename>${TMPDIR}</filename>
4871 is <filename>tmp</filename> and your selected package type
4872 is IPK, then your IPK packages are available in
4873 <filename>tmp/deploy/ipk</filename>.
4874 </para>
4875 </section>
4876
4877 <section id='runtime-package-management-server'>
4878 <title>Host or Server Machine Setup</title>
4879
4880 <para>
4881 Typically, packages are served from a server using
4882 HTTP.
4883 However, other protocols are possible.
4884 If you want to use HTTP, then setup and configure a
4885 web server, such as Apache 2 or lighttpd, on the machine
4886 serving the packages.
4887 </para>
4888
4889 <para>
4890 As previously mentioned, the build machine can act as the
4891 package server.
4892 In the following sections that describe server machine
4893 setups, the build machine is assumed to also be the server.
4894 </para>
4895
4896 <section id='package-server-apache'>
4897 <title>Serving Packages via Apache 2</title>
4898
4899 <para>
4900 This example assumes you are using the Apache 2
4901 server:
4902 <orderedlist>
4903 <listitem><para>
4904 Add the directory to your Apache
4905 configuration, which you can find at
4906 <filename>/etc/httpd/conf/httpd.conf</filename>.
4907 Use commands similar to these on the
4908 development system.
4909 These example commands assume a top-level
4910 <link linkend='source-directory'>Source Directory</link>
4911 named <filename>poky</filename> in your home
4912 directory.
4913 The example also assumes an RPM package type.
4914 If you are using a different package type, such
4915 as IPK, use "ipk" in the pathnames:
4916 <literallayout class='monospaced'>
4917 &lt;VirtualHost *:80&gt;
4918 ....
4919 Alias /rpm ~/poky/build/tmp/deploy/rpm
4920 &lt;Directory "~/poky/build/tmp/deploy/rpm"&gt;
4921 Options +Indexes
4922 &lt;/Directory&gt;
4923 &lt;/VirtualHost&gt;
4924 </literallayout></para></listitem>
4925 <listitem><para>
4926 Reload the Apache configuration as described
4927 in this step.
4928 For all commands, be sure you have root
4929 privileges.
4930 </para>
4931
4932 <para>
4933 If your development system is using Fedora or
4934 CentOS, use the following:
4935 <literallayout class='monospaced'>
4936 # service httpd reload
4937 </literallayout>
4938 For Ubuntu and Debian, use the following:
4939 <literallayout class='monospaced'>
4940 # /etc/init.d/apache2 reload
4941 </literallayout>
4942 For OpenSUSE, use the following:
4943 <literallayout class='monospaced'>
4944 # /etc/init.d/apache2 reload
4945 </literallayout></para></listitem>
4946 <listitem><para>
4947 If you are using Security-Enhanced Linux
4948 (SELinux), you need to label the files as
4949 being accessible through Apache.
4950 Use the following command from the development
4951 host.
4952 This example assumes RPM package types:
4953 <literallayout class='monospaced'>
4954 # chcon -R -h -t httpd_sys_content_t tmp/deploy/rpm
4955 </literallayout></para></listitem>
4956 </orderedlist>
4957 </para>
4958 </section>
4959
4960 <section id='package-server-lighttpd'>
4961 <title>Serving Packages via lighttpd</title>
4962
4963 <para>
4964 If you are using lighttpd, all you need
4965 to do is to provide a link from your
4966 <filename>${TMPDIR}/deploy/&lt;package-format&gt;</filename>
4967 directory to lighttpd's document-root.
4968 You can determine the specifics of your lighttpd
4969 installation by looking through its configuration file,
4970 which is usually found at:
4971 <filename>/etc/lighttpd/lighttpd.conf</filename>.
4972 </para>
4973
4974 <para>
4975 For example, if you are using IPK, lighttpd's
4976 document-root is set to
4977 <filename>/var/www/lighttpd</filename>, and you had
4978 packages for a target named "BOARD",
4979 then you might create a link from your build location
4980 to lighttpd's document-root as follows:
4981 <literallayout class='monospaced'>
4982 # ln -s $(PWD)/tmp/deploy/ipk /var/www/lighttpd/BOARD-dir
4983 </literallayout>
4984 </para>
4985
4986 <para>
4987 At this point, you need to start the lighttpd server.
4988 The method used to start the server varies by
4989 distribution.
4990 However, one basic method that starts it by hand is:
4991 <literallayout class='monospaced'>
4992 # lighttpd -f /etc/lighttpd/lighttpd.conf
4993 </literallayout>
4994 </para>
4995 </section>
4996 </section>
4997
4998 <section id='runtime-package-management-target'>
4999 <title>Target Setup</title>
5000
5001 <para>
5002 Setting up the target differs depending on the
5003 package management system.
5004 This section provides information for RPM and IPK.
5005 </para>
5006
5007 <section id='runtime-package-management-target-rpm'>
5008 <title>Using RPM</title>
5009
5010 <para>
5011 The application for performing runtime package
5012 management of RPM packages on the target is called
5013 <filename>smart</filename>.
5014 </para>
5015
5016 <para>
5017 On the target machine, you need to inform
5018 <filename>smart</filename> of every package database
5019 you want to use.
5020 As an example, suppose your target device can use the
5021 following three package databases from a server named
5022 <filename>server.name</filename>:
5023 <filename>all</filename>, <filename>i586</filename>,
5024 and <filename>qemux86</filename>.
5025 Given this example, issue the following commands on the
5026 target:
5027 <literallayout class='monospaced'>
5028 # smart channel --add all type=rpm-md baseurl=http://server.name/rpm/all
5029 # smart channel --add i585 type=rpm-md baseurl=http://server.name/rpm/i586
5030 # smart channel --add qemux86 type=rpm-md baseurl=http://server.name/rpm/qemux86
5031 </literallayout>
5032 Also from the target machine, fetch the repository
5033 information using this command:
5034 <literallayout class='monospaced'>
5035 # smart update
5036 </literallayout>
5037 You can now use the <filename>smart query</filename>
5038 and <filename>smart install</filename> commands to
5039 find and install packages from the repositories.
5040 </para>
5041 </section>
5042
5043 <section id='runtime-package-management-target-ipk'>
5044 <title>Using IPK</title>
5045
5046 <para>
5047 The application for performing runtime package
5048 management of IPK packages on the target is called
5049 <filename>opkg</filename>.
5050 </para>
5051
5052 <para>
5053 In order to inform <filename>opkg</filename> of the
5054 package databases you want to use, simply create one
5055 or more <filename>*.conf</filename> files in the
5056 <filename>/etc/opkg</filename> directory on the target.
5057 The <filename>opkg</filename> application uses them
5058 to find its available package databases.
5059 As an example, suppose you configured your HTTP server
5060 on your machine named
5061 <filename>www.mysite.com</filename> to serve files
5062 from a <filename>BOARD-dir</filename> directory under
5063 its document-root.
5064 In this case, you might create a configuration
5065 file on the target called
5066 <filename>/etc/opkg/base-feeds.conf</filename> that
5067 contains:
5068 <literallayout class='monospaced'>
5069 src/gz all http://www.mysite.com/BOARD-dir/all
5070 src/gz armv7a http://www.mysite.com/BOARD-dir/armv7a
5071 src/gz beaglebone http://www.mysite.com/BOARD-dir/beaglebone
5072 </literallayout>
5073 </para>
5074
5075 <para>
5076 As a way of making it easier to generate and make
5077 these IPK configuration files available on your
5078 target, simply define
5079 <ulink url='&YOCTO_DOCS_REF_URL;#var-FEED_DEPLOYDIR_BASE_URI'><filename>FEED_DEPLOYDIR_BASE_URI</filename></ulink>
5080 to point to your server and the location within the
5081 document-root which contains the databases.
5082 For example: if you are serving your packages over
5083 HTTP, your server's IP address is 192.168.7.1, and
5084 your databases are located in a directory called
5085 <filename>BOARD-dir</filename> underneath your HTTP
5086 server's document-root, you need to set
5087 <filename>FEED_DEPLOYDIR_BASE_URI</filename> to
5088 <filename>http://192.168.7.1/BOARD-dir</filename> and
5089 a set of configuration files will be generated for you
5090 in your target to work with this feed.
5091 </para>
5092
5093 <para>
5094 On the target machine, fetch (or refresh) the
5095 repository information using this command:
5096 <literallayout class='monospaced'>
5097 # opkg update
5098 </literallayout>
5099 You can now use the <filename>opkg list</filename> and
5100 <filename>opkg install</filename> commands to find and
5101 install packages from the repositories.
5102 </para>
5103 </section>
5104 </section>
5105 </section>
5106
5107 <section id='testing-packages-with-ptest'>
5108 <title>Testing Packages With ptest</title>
5109
5110 <para>
5111 A Package Test (ptest) runs tests against packages built
5112 by the OpenEmbedded build system on the target machine.
5113 A ptest contains at least two items: the actual test, and
5114 a shell script (<filename>run-ptest</filename>) that starts
5115 the test.
5116 The shell script that starts the test must not contain
5117 the actual test, the script only starts it.
5118 On the other hand, the test can be anything from a simple
5119 shell script that runs a binary and checks the output to
5120 an elaborate system of test binaries and data files.
5121 </para>
5122
5123 <para>
5124 The test generates output in the format used by
5125 Automake:
5126 <literallayout class='monospaced'>
5127 &lt;result&gt;: &lt;testname&gt;
5128 </literallayout>
5129 where the result can be <filename>PASS</filename>,
5130 <filename>FAIL</filename>, or <filename>SKIP</filename>,
5131 and the testname can be any identifying string.
5132 </para>
5133
5134 <note>
5135 A recipe is "ptest-enabled" if it inherits the
5136 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-ptest'><filename>ptest</filename></ulink>
5137 class.
5138 </note>
5139
5140 <section id='adding-ptest-to-your-build'>
5141 <title>Adding ptest to Your Build</title>
5142
5143 <para>
5144 To add package testing to your build, add the
5145 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></ulink>
5146 and <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_IMAGE_FEATURES'><filename>EXTRA_IMAGE_FEATURES</filename></ulink>
5147 variables to your <filename>local.conf</filename> file,
5148 which is found in the
5149 <link linkend='build-directory'>Build Directory</link>:
5150 <literallayout class='monospaced'>
5151 DISTRO_FEATURES_append = " ptest"
5152 EXTRA_IMAGE_FEATURES += "ptest-pkgs"
5153 </literallayout>
5154 Once your build is complete, the ptest files are installed
5155 into the <filename>/usr/lib/&lt;package&gt;/ptest</filename>
5156 directory within the image, where
5157 <filename>&lt;package&gt;</filename> is the name of the
5158 package.
5159 </para>
5160 </section>
5161
5162 <section id='running-ptest'>
5163 <title>Running ptest</title>
5164
5165 <para>
5166 The <filename>ptest-runner</filename> package installs a
5167 shell script that loops through all installed ptest test
5168 suites and runs them in sequence.
5169 Consequently, you might want to add this package to
5170 your image.
5171 </para>
5172 </section>
5173
5174 <section id='getting-your-package-ready'>
5175 <title>Getting Your Package Ready</title>
5176
5177 <para>
5178 In order to enable a recipe to run installed ptests
5179 on target hardware,
5180 you need to prepare the recipes that build the packages
5181 you want to test.
5182 Here is what you have to do for each recipe:
5183 <itemizedlist>
5184 <listitem><para><emphasis>Be sure the recipe
5185 inherits the
5186 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-ptest'><filename>ptest</filename></ulink>
5187 class:</emphasis>
5188 Include the following line in each recipe:
5189 <literallayout class='monospaced'>
5190 inherit ptest
5191 </literallayout>
5192 </para></listitem>
5193 <listitem><para><emphasis>Create <filename>run-ptest</filename>:</emphasis>
5194 This script starts your test.
5195 Locate the script where you will refer to it
5196 using
5197 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>.
5198 Here is an example that starts a test for
5199 <filename>dbus</filename>:
5200 <literallayout class='monospaced'>
5201 #!/bin/sh
5202 cd test
5203 make -k runtest-TESTS
5204 </literallayout>
5205 </para></listitem>
5206 <listitem><para><emphasis>Ensure dependencies are
5207 met:</emphasis>
5208 If the test adds build or runtime dependencies
5209 that normally do not exist for the package
5210 (such as requiring "make" to run the test suite),
5211 use the
5212 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>
5213 and
5214 <ulink url='&YOCTO_DOCS_REF_URL;#var-RDEPENDS'><filename>RDEPENDS</filename></ulink>
5215 variables in your recipe in order for the package
5216 to meet the dependencies.
5217 Here is an example where the package has a runtime
5218 dependency on "make":
5219 <literallayout class='monospaced'>
5220 RDEPENDS_${PN}-ptest += "make"
5221 </literallayout>
5222 </para></listitem>
5223 <listitem><para><emphasis>Add a function to build the
5224 test suite:</emphasis>
5225 Not many packages support cross-compilation of
5226 their test suites.
5227 Consequently, you usually need to add a
5228 cross-compilation function to the package.
5229 </para>
5230 <para>Many packages based on Automake compile and
5231 run the test suite by using a single command
5232 such as <filename>make check</filename>.
5233 However, the native <filename>make check</filename>
5234 builds and runs on the same computer, while
5235 cross-compiling requires that the package is built
5236 on the host but executed on the target.
5237 The built version of Automake that ships with the
5238 Yocto Project includes a patch that separates
5239 building and execution.
5240 Consequently, packages that use the unaltered,
5241 patched version of <filename>make check</filename>
5242 automatically cross-compiles.</para>
5243 <para>However, you still must add a
5244 <filename>do_compile_ptest</filename> function to
5245 build the test suite.
5246 Add a function similar to the following to your
5247 recipe:
5248 <literallayout class='monospaced'>
5249 do_compile_ptest() {
5250 oe_runmake buildtest-TESTS
5251 }
5252 </literallayout>
5253 </para></listitem>
5254 <listitem><para><emphasis>Ensure special configurations
5255 are set:</emphasis>
5256 If the package requires special configurations
5257 prior to compiling the test code, you must
5258 insert a <filename>do_configure_ptest</filename>
5259 function into the recipe.
5260 </para></listitem>
5261 <listitem><para><emphasis>Install the test
5262 suite:</emphasis>
5263 The <filename>ptest</filename> class
5264 automatically copies the file
5265 <filename>run-ptest</filename> to the target and
5266 then runs make <filename>install-ptest</filename>
5267 to run the tests.
5268 If this is not enough, you need to create a
5269 <filename>do_install_ptest</filename> function and
5270 make sure it gets called after the
5271 "make install-ptest" completes.
5272 </para></listitem>
5273 </itemizedlist>
5274 </para>
5275 </section>
5276 </section>
5277 </section>
5278
5279 <section id="building-software-from-an-external-source">
5280 <title>Building Software from an External Source</title>
5281
5282 <para>
5283 By default, the OpenEmbedded build system uses the
5284 <link linkend='build-directory'>Build Directory</link> to
5285 build source code.
5286 The build process involves fetching the source files, unpacking
5287 them, and then patching them if necessary before the build takes
5288 place.
5289 </para>
5290
5291 <para>
5292 Situations exist where you might want to build software from source
5293 files that are external to and thus outside of the
5294 OpenEmbedded build system.
5295 For example, suppose you have a project that includes a new BSP with
5296 a heavily customized kernel.
5297 And, you want to minimize exposing the build system to the
5298 development team so that they can focus on their project and
5299 maintain everyone's workflow as much as possible.
5300 In this case, you want a kernel source directory on the development
5301 machine where the development occurs.
5302 You want the recipe's
5303 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
5304 variable to point to the external directory and use it as is, not
5305 copy it.
5306 </para>
5307
5308 <para>
5309 To build from software that comes from an external source, all you
5310 need to do is inherit the
5311 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-externalsrc'><filename>externalsrc</filename></ulink>
5312 class and then set the
5313 <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTERNALSRC'><filename>EXTERNALSRC</filename></ulink>
5314 variable to point to your external source code.
5315 Here are the statements to put in your
5316 <filename>local.conf</filename> file:
5317 <literallayout class='monospaced'>
5318 INHERIT += "externalsrc"
5319 EXTERNALSRC_pn-myrecipe = "/some/path/to/your/source/tree"
5320 </literallayout>
5321 </para>
5322
5323 <para>
5324 By default, <filename>externalsrc.bbclass</filename> builds
5325 the source code in a directory separate from the external source
5326 directory as specified by
5327 <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTERNALSRC'><filename>EXTERNALSRC</filename></ulink>.
5328 If you need to have the source built in the same directory in
5329 which it resides, or some other nominated directory, you can set
5330 <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTERNALSRC_BUILD'><filename>EXTERNALSRC_BUILD</filename></ulink>
5331 to point to that directory:
5332 <literallayout class='monospaced'>
5333 EXTERNALSRC_BUILD_pn-myrecipe = "/path/to/my/source/tree"
5334 </literallayout>
5335 </para>
5336 </section>
5337
5338 <section id="selecting-an-initialization-manager">
5339 <title>Selecting an Initialization Manager</title>
5340
5341 <para>
5342 By default, the Yocto Project uses SysVinit as the initialization
5343 manager.
5344 However, support also exists for systemd,
5345 which is a full replacement for init with
5346 parallel starting of services, reduced shell overhead and other
5347 features that are used by many distributions.
5348 </para>
5349
5350 <para>
5351 If you want to use SysVinit, you do
5352 not have to do anything.
5353 But, if you want to use systemd, you must
5354 take some steps as described in the following sections.
5355 </para>
5356
5357 <section id='using-systemd-exclusively'>
5358 <title>Using systemd Exclusively</title>
5359
5360 <para>
5361 Set the these variables in your distribution configuration
5362 file as follows:
5363 <literallayout class='monospaced'>
5364 DISTRO_FEATURES_append = " systemd"
5365 VIRTUAL-RUNTIME_init_manager = "systemd"
5366 </literallayout>
5367 You can also prevent the SysVinit
5368 distribution feature from
5369 being automatically enabled as follows:
5370 <literallayout class='monospaced'>
5371 DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
5372 </literallayout>
5373 Doing so removes any redundant SysVinit scripts.
5374 </para>
5375
5376 <para>
5377 To remove initscripts from your image altogether,
5378 set this variable also:
5379 <literallayout class='monospaced'>
5380 VIRTUAL-RUNTIME_initscripts = ""
5381 </literallayout>
5382 </para>
5383
5384 <para>
5385 For information on the backfill variable, see
5386 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_FEATURES_BACKFILL_CONSIDERED'><filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename></ulink>.
5387 </para>
5388 </section>
5389
5390 <section id='using-systemd-for-the-main-image-and-using-sysvinit-for-the-rescue-image'>
5391 <title>Using systemd for the Main Image and Using SysVinit for the Rescue Image</title>
5392
5393 <para>
5394 Set the these variables in your distribution configuration
5395 file as follows:
5396 <literallayout class='monospaced'>
5397 DISTRO_FEATURES_append = " systemd"
5398 VIRTUAL-RUNTIME_init_manager = "systemd"
5399 </literallayout>
5400 Doing so causes your main image to use the
5401 <filename>packagegroup-core-boot.bb</filename> recipe and
5402 systemd.
5403 The rescue/minimal image cannot use this package group.
5404 However, it can install SysVinit
5405 and the appropriate packages will have support for both
5406 systemd and SysVinit.
5407 </para>
5408 </section>
5409 </section>
5410
5411 <section id="platdev-appdev-srcrev">
5412 <title>Using an External SCM</title>
5413
5414 <para>
5415 If you're working on a recipe that pulls from an external Source
5416 Code Manager (SCM), it is possible to have the OpenEmbedded build
5417 system notice new recipe changes added to the SCM and then build
5418 the resulting packages that depend on the new recipes by using
5419 the latest versions.
5420 This only works for SCMs from which it is possible to get a
5421 sensible revision number for changes.
5422 Currently, you can do this with Apache Subversion (SVN), Git, and
5423 Bazaar (BZR) repositories.
5424 </para>
5425
5426 <para>
5427 To enable this behavior, the
5428 <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>
5429 of the recipe needs to reference
5430 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRCPV'><filename>SRCPV</filename></ulink>.
5431 Here is an example:
5432 <literallayout class='monospaced'>
5433 PV = "1.2.3+git${SRCPV}
5434 </literallayout>
5435 Then, you can add the following to your
5436 <filename>local.conf</filename>:
5437 <literallayout class='monospaced'>
5438 SRCREV_pn-&lt;PN&gt; = "${AUTOREV}"
5439 </literallayout>
5440 <ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink>
5441 is the name of the recipe for which you want to enable automatic source
5442 revision updating.
5443 </para>
5444
5445 <para>
5446 If you do not want to update your local configuration file, you can
5447 add the following directly to the recipe to finish enabling
5448 the feature:
5449 <literallayout class='monospaced'>
5450 SRCREV = "${AUTOREV}"
5451 </literallayout>
5452 </para>
5453
5454 <para>
5455 The Yocto Project provides a distribution named
5456 <filename>poky-bleeding</filename>, whose configuration
5457 file contains the line:
5458 <literallayout class='monospaced'>
5459 require conf/distro/include/poky-floating-revisions.inc
5460 </literallayout>
5461 This line pulls in the listed include file that contains
5462 numerous lines of exactly that form:
5463 <literallayout class='monospaced'>
5464 SRCREV_pn-gconf-dbus ?= "${AUTOREV}"
5465 SRCREV_pn-matchbox-common ?= "${AUTOREV}"
5466 SRCREV_pn-matchbox-config-gtk ?= "${AUTOREV}"
5467 SRCREV_pn-matchbox-desktop ?= "${AUTOREV}"
5468 SRCREV_pn-matchbox-keyboard ?= "${AUTOREV}"
5469 SRCREV_pn-matchbox-panel ?= "${AUTOREV}"
5470 SRCREV_pn-matchbox-panel-2 ?= "${AUTOREV}"
5471 SRCREV_pn-matchbox-themes-extra ?= "${AUTOREV}"
5472 SRCREV_pn-matchbox-terminal ?= "${AUTOREV}"
5473 SRCREV_pn-matchbox-wm ?= "${AUTOREV}"
5474 SRCREV_pn-matchbox-wm-2 ?= "${AUTOREV}"
5475 SRCREV_pn-settings-daemon ?= "${AUTOREV}"
5476 SRCREV_pn-screenshot ?= "${AUTOREV}"
5477 SRCREV_pn-libfakekey ?= "${AUTOREV}"
5478 SRCREV_pn-oprofileui ?= "${AUTOREV}"
5479 .
5480 .
5481 .
5482 </literallayout>
5483 These lines allow you to experiment with building a
5484 distribution that tracks the latest development source
5485 for numerous packages.
5486 <note><title>Caution</title>
5487 The <filename>poky-bleeding</filename> distribution
5488 is not tested on a regular basis.
5489 Keep this in mind if you use it.
5490 </note>
5491 </para>
5492 </section>
5493
5494 <section id='creating-a-read-only-root-filesystem'>
5495 <title>Creating a Read-Only Root Filesystem</title>
5496
5497 <para>
5498 Suppose, for security reasons, you need to disable
5499 your target device's root filesystem's write permissions
5500 (i.e. you need a read-only root filesystem).
5501 Or, perhaps you are running the device's operating system
5502 from a read-only storage device.
5503 For either case, you can customize your image for
5504 that behavior.
5505 </para>
5506
5507 <note>
5508 Supporting a read-only root filesystem requires that the system and
5509 applications do not try to write to the root filesystem.
5510 You must configure all parts of the target system to write
5511 elsewhere, or to gracefully fail in the event of attempting to
5512 write to the root filesystem.
5513 </note>
5514
5515 <section id='creating-the-root-filesystem'>
5516 <title>Creating the Root Filesystem</title>
5517
5518 <para>
5519 To create the read-only root filesystem, simply add the
5520 "read-only-rootfs" feature to your image.
5521 Using either of the following statements in your
5522 image recipe or from within the
5523 <filename>local.conf</filename> file found in the
5524 <link linkend='build-directory'>Build Directory</link>
5525 causes the build system to create a read-only root filesystem:
5526 <literallayout class='monospaced'>
5527 IMAGE_FEATURES = "read-only-rootfs"
5528 </literallayout>
5529 or
5530 <literallayout class='monospaced'>
5531 EXTRA_IMAGE_FEATURES += "read-only-rootfs"
5532 </literallayout>
5533 </para>
5534
5535 <para>
5536 For more information on how to use these variables, see the
5537 "<link linkend='usingpoky-extend-customimage-imagefeatures'>Customizing Images Using Custom <filename>IMAGE_FEATURES</filename> and <filename>EXTRA_IMAGE_FEATURES</filename></link>"
5538 section.
5539 For information on the variables, see
5540 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink>
5541 and <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_IMAGE_FEATURES'><filename>EXTRA_IMAGE_FEATURES</filename></ulink>.
5542 </para>
5543 </section>
5544
5545 <section id='post-installation-scripts'>
5546 <title>Post-Installation Scripts</title>
5547
5548 <para>
5549 It is very important that you make sure all
5550 post-Installation (<filename>pkg_postinst</filename>) scripts
5551 for packages that are installed into the image can be run
5552 at the time when the root filesystem is created during the
5553 build on the host system.
5554 These scripts cannot attempt to run during first-boot on the
5555 target device.
5556 With the "read-only-rootfs" feature enabled,
5557 the build system checks during root filesystem creation to make
5558 sure all post-installation scripts succeed.
5559 If any of these scripts still need to be run after the root
5560 filesystem is created, the build immediately fails.
5561 These build-time checks ensure that the build fails
5562 rather than the target device fails later during its
5563 initial boot operation.
5564 </para>
5565
5566 <para>
5567 Most of the common post-installation scripts generated by the
5568 build system for the out-of-the-box Yocto Project are engineered
5569 so that they can run during root filesystem creation
5570 (e.g. post-installation scripts for caching fonts).
5571 However, if you create and add custom scripts, you need
5572 to be sure they can be run during this file system creation.
5573 </para>
5574
5575 <para>
5576 Here are some common problems that prevent
5577 post-installation scripts from running during root filesystem
5578 creation:
5579 <itemizedlist>
5580 <listitem><para>
5581 <emphasis>Not using $D in front of absolute
5582 paths:</emphasis>
5583 The build system defines
5584 <filename>$</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-D'><filename>D</filename></ulink>
5585 when the root filesystem is created.
5586 Furthermore, <filename>$D</filename> is blank when the
5587 script is run on the target device.
5588 This implies two purposes for <filename>$D</filename>:
5589 ensuring paths are valid in both the host and target
5590 environments, and checking to determine which
5591 environment is being used as a method for taking
5592 appropriate actions.
5593 </para></listitem>
5594 <listitem><para>
5595 <emphasis>Attempting to run processes that are
5596 specific to or dependent on the target
5597 architecture:</emphasis>
5598 You can work around these attempts by using native
5599 tools to accomplish the same tasks, or
5600 by alternatively running the processes under QEMU,
5601 which has the <filename>qemu_run_binary</filename>
5602 function.
5603 For more information, see the
5604 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-qemu'><filename>qemu</filename></ulink>
5605 class.</para></listitem>
5606 </itemizedlist>
5607 </para>
5608 </section>
5609
5610 <section id='areas-with-write-access'>
5611 <title>Areas With Write Access</title>
5612
5613 <para>
5614 With the "read-only-rootfs" feature enabled,
5615 any attempt by the target to write to the root filesystem at
5616 runtime fails.
5617 Consequently, you must make sure that you configure processes
5618 and applications that attempt these types of writes do so
5619 to directories with write access (e.g.
5620 <filename>/tmp</filename> or <filename>/var/run</filename>).
5621 </para>
5622 </section>
5623 </section>
5624
5625 <section id="performing-automated-runtime-testing">
5626 <title>Performing Automated Runtime Testing</title>
5627
5628 <para>
5629 The OpenEmbedded build system makes available a series of automated
5630 tests for images to verify runtime functionality.
5631 You can run these tests on either QEMU or actual target hardware.
5632 Tests are written in Python making use of the
5633 <filename>unittest</filename> module, and the majority of them
5634 run commands on the target system over SSH.
5635 This section describes how you set up the environment to use these
5636 tests, run available tests, and write and add your own tests.
5637 </para>
5638
5639 <section id='enabling-tests'>
5640 <title>Enabling Tests</title>
5641
5642 <para>
5643 Depending on whether you are planning on running tests using
5644 QEMU or on running them on the hardware, you have to take
5645 different steps to enable the tests.
5646 See the following subsections for information on how to
5647 enable both types of tests.
5648 </para>
5649
5650 <section id='qemu-image-enabling-tests'>
5651 <title>Enabling Runtime Tests on QEMU</title>
5652
5653 <para>
5654 In order to run tests, you need to do the following:
5655 <itemizedlist>
5656 <listitem><para><emphasis>Set up to avoid interaction
5657 with <filename>sudo</filename> for networking:</emphasis>
5658 To accomplish this, you must do one of the
5659 following:
5660 <itemizedlist>
5661 <listitem><para>Add
5662 <filename>NOPASSWD</filename> for your user
5663 in <filename>/etc/sudoers</filename> either for
5664 ALL commands or just for
5665 <filename>runqemu-ifup</filename>.
5666 You must provide the full path as that can
5667 change if you are using multiple clones of the
5668 source repository.
5669 <note>
5670 On some distributions, you also need to
5671 comment out "Defaults requiretty" in
5672 <filename>/etc/sudoers</filename>.
5673 </note></para></listitem>
5674 <listitem><para>Manually configure a tap interface
5675 for your system.</para></listitem>
5676 <listitem><para>Run as root the script in
5677 <filename>scripts/runqemu-gen-tapdevs</filename>,
5678 which should generate a list of tap devices.
5679 This is the option typically chosen for
5680 Autobuilder-type environments.
5681 </para></listitem>
5682 </itemizedlist></para></listitem>
5683 <listitem><para><emphasis>Set the
5684 <filename>DISPLAY</filename> variable:</emphasis>
5685 You need to set this variable so that you have an X
5686 server available (e.g. start
5687 <filename>vncserver</filename> for a headless machine).
5688 </para></listitem>
5689 <listitem><para><emphasis>Be sure your host's firewall
5690 accepts incoming connections from
5691 192.168.7.0/24:</emphasis>
5692 Some of the tests (in particular smart tests) start an
5693 HTTP server on a random high number port, which is
5694 used to serve files to the target.
5695 The smart module serves
5696 <filename>${DEPLOY_DIR}/rpm</filename> so it can run
5697 smart channel commands. That means your host's firewall
5698 must accept incoming connections from 192.168.7.0/24,
5699 which is the default IP range used for tap devices
5700 by <filename>runqemu</filename>.</para></listitem>
5701 </itemizedlist>
5702 </para>
5703
5704 <para>
5705 Once you start running the tests, the following happens:
5706 <itemizedlist>
5707 <listitem><para>A copy of the root filesystem is written
5708 to <filename>${WORKDIR}/testimage</filename>.
5709 </para></listitem>
5710 <listitem><para>The image is booted under QEMU using the
5711 standard <filename>runqemu</filename> script.
5712 </para></listitem>
5713 <listitem><para>A default timeout of 500 seconds occurs
5714 to allow for the boot process to reach the login prompt.
5715 You can change the timeout period by setting
5716 <ulink url='&YOCTO_DOCS_REF_URL;#var-TEST_QEMUBOOT_TIMEOUT'><filename>TEST_QEMUBOOT_TIMEOUT</filename></ulink>
5717 in the <filename>local.conf</filename> file.
5718 </para></listitem>
5719 <listitem><para>Once the boot process is reached and the
5720 login prompt appears, the tests run.
5721 The full boot log is written to
5722 <filename>${WORKDIR}/testimage/qemu_boot_log</filename>.
5723 </para></listitem>
5724 <listitem><para>Each test module loads in the order found
5725 in <filename>TEST_SUITES</filename>.
5726 You can find the full output of the commands run over
5727 SSH in
5728 <filename>${WORKDIR}/testimgage/ssh_target_log</filename>.
5729 </para></listitem>
5730 <listitem><para>If no failures occur, the task running the
5731 tests ends successfully.
5732 You can find the output from the
5733 <filename>unittest</filename> in the task log at
5734 <filename>${WORKDIR}/temp/log.do_testimage</filename>.
5735 </para></listitem>
5736 </itemizedlist>
5737 </para>
5738 </section>
5739
5740 <section id='hardware-image-enabling-tests'>
5741 <title>Enabling Runtime Tests on Hardware</title>
5742
5743 <para>
5744 The OpenEmbedded build system can run tests on real
5745 hardware, and for certain devices it can also deploy
5746 the image to be tested onto the device beforehand.
5747 </para>
5748
5749 <para>
5750 For automated deployment, a "master image" is installed
5751 onto the hardware once as part of setup.
5752 Then, each time tests are to be run, the following
5753 occurs:
5754 <orderedlist>
5755 <listitem><para>The master image is booted into and
5756 used to write the image to be tested to
5757 a second partition.
5758 </para></listitem>
5759 <listitem><para>The device is then rebooted using an
5760 external script that you need to provide.
5761 </para></listitem>
5762 <listitem><para>The device boots into the image to be
5763 tested.
5764 </para></listitem>
5765 </orderedlist>
5766 </para>
5767
5768 <para>
5769 When running tests (independent of whether the image
5770 has been deployed automatically or not), the device is
5771 expected to be connected to a network on a
5772 pre-determined IP address.
5773 You can either use static IP addresses written into
5774 the image, or set the image to use DHCP and have your
5775 DHCP server on the test network assign a known IP address
5776 based on the MAC address of the device.
5777 </para>
5778
5779 <para>
5780 In order to run tests on hardware, you need to set
5781 <filename>TEST_TARGET</filename> to an appropriate value.
5782 For QEMU, you do not have to change anything, the default
5783 value is "QemuTarget".
5784 For running tests on hardware, two options exist:
5785 "SimpleRemoteTarget" and "GummibootTarget".
5786 <itemizedlist>
5787 <listitem><para><emphasis>"SimpleRemoteTarget":</emphasis>
5788 Choose "SimpleRemoteTarget" if you are going to
5789 run tests on a target system that is already
5790 running the image to be tested and is available
5791 on the network.
5792 You can use "SimpleRemoteTarget" in conjunction
5793 with either real hardware or an image running
5794 within a separately started QEMU or any
5795 other virtual machine manager.
5796 </para></listitem>
5797 <listitem><para><emphasis>"GummibootTarget":</emphasis>
5798 Choose "GummibootTarget" if your hardware is
5799 an EFI-based machine with
5800 <filename>gummiboot</filename> as bootloader and
5801 <filename>core-image-testmaster</filename>
5802 (or something similar) is installed.
5803 Also, your hardware under test must be in a
5804 DHCP-enabled network that gives it the same IP
5805 address for each reboot.</para>
5806 <para>If you choose "GummibootTarget", there are
5807 additional requirements and considerations.
5808 See the
5809 "<link linkend='selecting-gummiboottarget'>Selecting GummibootTarget</link>"
5810 section, which follows, for more information.
5811 </para></listitem>
5812 </itemizedlist>
5813 </para>
5814 </section>
5815
5816 <section id='selecting-gummiboottarget'>
5817 <title>Selecting GummibootTarget</title>
5818
5819 <para>
5820 If you did not set <filename>TEST_TARGET</filename> to
5821 "GummibootTarget", then you do not need any information
5822 in this section.
5823 You can skip down to the
5824 "<link linkend='qemu-image-running-tests'>Running Tests</link>"
5825 section.
5826 </para>
5827
5828 <para>
5829 If you did set <filename>TEST_TARGET</filename> to
5830 "GummibootTarget", you also need to perform a one-time
5831 setup of your master image by doing the following:
5832 <orderedlist>
5833 <listitem><para><emphasis>Set <filename>EFI_PROVIDER</filename>:</emphasis>
5834 Be sure that <filename>EFI_PROVIDER</filename>
5835 is as follows:
5836 <literallayout class='monospaced'>
5837 EFI_PROVIDER = "gummiboot"
5838 </literallayout>
5839 </para></listitem>
5840 <listitem><para><emphasis>Build the master image:</emphasis>
5841 Build the <filename>core-image-testmaster</filename>
5842 image.
5843 The <filename>core-image-testmaster</filename>
5844 recipe is provided as an example for a
5845 "master" image and you can customize the image
5846 recipe as you would any other recipe.
5847 </para>
5848 <para>Here are the image recipe requirements:
5849 <itemizedlist>
5850 <listitem><para>Inherits
5851 <filename>core-image</filename>
5852 so that kernel modules are installed.
5853 </para></listitem>
5854 <listitem><para>Installs normal linux utilities
5855 not busybox ones (e.g.
5856 <filename>bash</filename>,
5857 <filename>coreutils</filename>,
5858 <filename>tar</filename>,
5859 <filename>gzip</filename>, and
5860 <filename>kmod</filename>).
5861 </para></listitem>
5862 <listitem><para>Uses a custom
5863 initramfs image with a custom installer.
5864 A normal image that you can install usually
5865 creates a single rootfs partition.
5866 This image uses another installer that
5867 creates a specific partition layout.
5868 Not all Board Support Packages (BSPs)
5869 can use an installer.
5870 For such cases, you need to manually create
5871 the following partition layout on the
5872 target:
5873 <itemizedlist>
5874 <listitem><para>First partition mounted
5875 under <filename>/boot</filename>,
5876 labeled "boot".
5877 </para></listitem>
5878 <listitem><para>The main rootfs
5879 partition where this image gets
5880 installed, which is mounted under
5881 <filename>/</filename>.
5882 </para></listitem>
5883 <listitem><para>Another partition
5884 labeled "testrootfs" where test
5885 images get deployed.
5886 </para></listitem>
5887 </itemizedlist>
5888 </para></listitem>
5889 </itemizedlist>
5890 </para></listitem>
5891 <listitem><para><emphasis>Install image:</emphasis>
5892 Install the image that you just built on the target
5893 system.
5894 </para></listitem>
5895 </orderedlist>
5896 </para>
5897
5898 <para>
5899 The final thing you need to do when setting
5900 <filename>TEST_TARGET</filename> to "GummibootTarget" is
5901 to set up the test image:
5902 <orderedlist>
5903 <listitem><para><emphasis>Set up your <filename>local.conf</filename> file:</emphasis>
5904 Make sure you have the following statements in
5905 your <filename>local.conf</filename> file:
5906 <literallayout class='monospaced'>
5907 IMAGE_FSTYPES += "tar.gz"
5908 INHERIT += "testimage"
5909 TEST_TARGET = "GummibootTarget"
5910 TEST_TARGET_IP = "192.168.2.3"
5911 </literallayout>
5912 </para></listitem>
5913 <listitem><para><emphasis>Build your test image:</emphasis>
5914 Use BitBake to build the image:
5915 <literallayout class='monospaced'>
5916 $ bitbake core-image-sato
5917 </literallayout>
5918 </para></listitem>
5919 </orderedlist>
5920 </para>
5921
5922 <para>
5923 Here is some additional information regarding running
5924 "GummibootTarget" as your test target:
5925 <itemizedlist>
5926 <listitem><para>
5927 You can use
5928 <filename>TEST_POWERCONTROL_CMD</filename>
5929 together with
5930 <filename>TEST_POWERCONTROL_EXTRA_ARGS</filename>
5931 as a command that runs on the host and does power
5932 cycling.
5933 The test code passes one argument to that command:
5934 off, on or cycle (off then on).
5935 Here is an example that could appear in your
5936 <filename>local.conf</filename> file:
5937 <literallayout class='monospaced'>
5938 TEST_POWERCONTROL_CMD = "powercontrol.exp test 10.11.12.1 nuc1"
5939 </literallayout>
5940 In this example, the expect script does the
5941 following:
5942 <literallayout class='monospaced'>
5943 ssh test@10.11.12.1 "pyctl nuc1 &lt;arg&gt;"
5944 </literallayout>
5945 It then runs a Python script that controls power
5946 for a label called <filename>nuc1</filename>.
5947 <note>
5948 You need to customize
5949 <filename>TEST_POWERCONTROL_CMD</filename>
5950 and
5951 <filename>TEST_POWERCONTROL_EXTRA_ARGS</filename>
5952 for your own setup.
5953 The one requirement is that it accepts
5954 "on", "off", and "cycle" as the last argument.
5955 </note>
5956 </para></listitem>
5957 <listitem><para>
5958 When no command is defined, it connects to the
5959 device over SSH and uses the classic reboot command
5960 to reboot the device.
5961 Classic reboot is fine as long as the machine
5962 actually reboots (i.e. the SSH test has not
5963 failed).
5964 It is useful for scenarios where you have a simple
5965 setup, typically with a single board, and where
5966 some manual interaction is okay from time to time.
5967 </para></listitem>
5968 </itemizedlist>
5969 </para>
5970 </section>
5971 </section>
5972
5973 <section id="qemu-image-running-tests">
5974 <title>Running Tests</title>
5975
5976 <para>
5977 You can start the tests automatically or manually:
5978 <itemizedlist>
5979 <listitem><para><emphasis>Automatically running tests:</emphasis>
5980 To run the tests automatically after the
5981 OpenEmbedded build system successfully creates an image,
5982 first set the
5983 <ulink url='&YOCTO_DOCS_REF_URL;#var-TEST_IMAGE'><filename>TEST_IMAGE</filename></ulink>
5984 variable to "1" in your <filename>local.conf</filename>
5985 file in the
5986 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>:
5987 <literallayout class='monospaced'>
5988 TEST_IMAGE = "1"
5989 </literallayout>
5990 Next, build your image.
5991 If the image successfully builds, the tests will be
5992 run:
5993 <literallayout class='monospaced'>
5994 bitbake core-image-sato
5995 </literallayout></para></listitem>
5996 <listitem><para><emphasis>Manually running tests:</emphasis>
5997 To manually run the tests, first globally inherit the
5998 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-testimage'><filename>testimage</filename></ulink>
5999 class by editing your <filename>local.conf</filename>
6000 file:
6001 <literallayout class='monospaced'>
6002 INHERIT += "testimage"
6003 </literallayout>
6004 Next, use BitBake to run the tests:
6005 <literallayout class='monospaced'>
6006 bitbake -c testimage &lt;image&gt;
6007 </literallayout></para></listitem>
6008 </itemizedlist>
6009 </para>
6010
6011 <para>
6012 All test files reside in
6013 <filename>meta/lib/oeqa/runtime</filename> in the
6014 <link linkend='source-directory'>Source Directory</link>.
6015 A test name maps directly to a Python module.
6016 Each test module may contain a number of individual tests.
6017 Tests are usually grouped together by the area
6018 tested (e.g tests for systemd reside in
6019 <filename>meta/lib/oeqa/runtime/systemd.py</filename>).
6020 </para>
6021
6022 <para>
6023 You can add tests to any layer provided you place them in the
6024 proper area and you extend
6025 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBPATH'><filename>BBPATH</filename></ulink>
6026 in the <filename>local.conf</filename> file as normal.
6027 Be sure that tests reside in
6028 <filename>&lt;layer&gt;/lib/oeqa/runtime</filename>.
6029 <note>
6030 Be sure that module names do not collide with module names
6031 used in the default set of test modules in
6032 <filename>meta/lib/oeqa/runtime</filename>.
6033 </note>
6034 </para>
6035
6036 <para>
6037 You can change the set of tests run by appending or overriding
6038 <ulink url='&YOCTO_DOCS_REF_URL;#var-TEST_SUITES'><filename>TEST_SUITES</filename></ulink>
6039 variable in <filename>local.conf</filename>.
6040 Each name in <filename>TEST_SUITES</filename> represents a
6041 required test for the image.
6042 Test modules named within <filename>TEST_SUITES</filename>
6043 cannot be skipped even if a test is not suitable for an image
6044 (e.g. running the RPM tests on an image without
6045 <filename>rpm</filename>).
6046 Appending "auto" to <filename>TEST_SUITES</filename> causes the
6047 build system to try to run all tests that are suitable for the
6048 image (i.e. each test module may elect to skip itself).
6049 </para>
6050
6051 <para>
6052 The order you list tests in <filename>TEST_SUITES</filename>
6053 is important and influences test dependencies.
6054 Consequently, tests that depend on other tests should be added
6055 after the test on which they depend.
6056 For example, since the <filename>ssh</filename> test
6057 depends on the
6058 <filename>ping</filename> test, "ssh" needs to come after
6059 "ping" in the list.
6060 The test class provides no re-ordering or dependency handling.
6061 <note>
6062 Each module can have multiple classes with multiple test
6063 methods.
6064 And, Python <filename>unittest</filename> rules apply.
6065 </note>
6066 </para>
6067
6068 <para>
6069 Here are some things to keep in mind when running tests:
6070 <itemizedlist>
6071 <listitem><para>The default tests for the image are defined
6072 as:
6073 <literallayout class='monospaced'>
6074 DEFAULT_TEST_SUITES_pn-&lt;image&gt; = "ping ssh df connman syslog xorg scp vnc date rpm smart dmesg"
6075 </literallayout></para></listitem>
6076 <listitem><para>Add your own test to the list of the
6077 by using the following:
6078 <literallayout class='monospaced'>
6079 TEST_SUITES_append = " mytest"
6080 </literallayout></para></listitem>
6081 <listitem><para>Run a specific list of tests as follows:
6082 <literallayout class='monospaced'>
6083 TEST_SUITES = "test1 test2 test3"
6084 </literallayout>
6085 Remember, order is important.
6086 Be sure to place a test that is dependent on another test
6087 later in the order.</para></listitem>
6088 </itemizedlist>
6089 </para>
6090 </section>
6091
6092 <section id="exporting-tests">
6093 <title>Exporting Tests</title>
6094
6095 <para>
6096 You can export tests so that they can run independently of
6097 the build system.
6098 Exporting tests is required if you want to be able to hand
6099 the test execution off to a scheduler.
6100 You can only export tests that are defined in
6101 <ulink url='&YOCTO_DOCS_REF_URL;#var-TEST_SUITES'><filename>TEST_SUITES</filename></ulink>.
6102 </para>
6103
6104 <para>
6105 If you image is already built, make sure the following are set
6106 in your <filename>local.conf</filename> file.
6107 Be sure to provide the IP address you need:
6108 <literallayout class='monospaced'>
6109 TEST_EXPORT_ONLY = "1"
6110 TEST_TARGET = "simpleremote"
6111 TEST_TARGET_IP = "192.168.7.2"
6112 TEST_SERVER_IP = "192.168.7.1"
6113 </literallayout>
6114 You can then export the tests with the following:
6115 <literallayout class='monospaced'>
6116 $ bitbake core-image-sato -c testimage
6117 </literallayout>
6118 Exporting the tests places them in the
6119 <link linkend='build-directory'>Build Directory</link> in
6120 <filename>tmp/testimage/core-image-sato</filename>, which
6121 is controlled by the
6122 <filename>TEST_EXPORT_DIR</filename> variable.
6123 </para>
6124
6125 <para>
6126 The exported data (i.e. <filename>testdata.json</filename>)
6127 contains paths to the Build Directory.
6128 Thus, the contents of the directory can be moved
6129 to another machine as long as you update some paths in the
6130 JSON.
6131 Usually you only care about the
6132 ${DEPLOY_DIR}/rpm directory (assuming the RPM and Smart tests
6133 are enabled).
6134 Consequently, running the tests on other machine
6135 means that you have to move the contents and call
6136 <filename>runexported</filename> with "--deploy-dir PATH:
6137 ./runexported.py --deploy-dir /new/path/on/this/machine testdata.json
6138 runexported.py accepts other arguments as well, see --help.
6139 </para>
6140
6141 <para>
6142 You can now run the tests outside of the build environment:
6143 <literallayout class='monospaced'>
6144 $ cd tmp/testimage/core-image-sato
6145 $ ./runexported.py testdata.json
6146 </literallayout>
6147 <note>
6148 This "export" feature does not deploy or boot the target
6149 image.
6150 Your target (be it a Qemu or hardware one)
6151 has to already be up and running when you call
6152 <filename>runexported.py</filename>
6153 </note>
6154 </para>
6155 </section>
6156
6157 <section id="qemu-image-writing-new-tests">
6158 <title>Writing New Tests</title>
6159
6160 <para>
6161 As mentioned previously, all new test files need to be in the
6162 proper place for the build system to find them.
6163 New tests for additional functionality outside of the core
6164 should be added to the layer that adds the functionality, in
6165 <filename>&lt;layer&gt;/lib/oeqa/runtime</filename> (as
6166 long as
6167 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBPATH'><filename>BBPATH</filename></ulink>
6168 is extended in the layer's
6169 <filename>layer.conf</filename> file as normal).
6170 Just remember that filenames need to map directly to test
6171 (module) names and that you do not use module names that
6172 collide with existing core tests.
6173 </para>
6174
6175 <para>
6176 To create a new test, start by copying an existing module
6177 (e.g. <filename>syslog.py</filename> or
6178 <filename>gcc.py</filename> are good ones to use).
6179 Test modules can use code from
6180 <filename>meta/lib/oeqa/utils</filename>, which are helper
6181 classes.
6182 </para>
6183
6184 <note>
6185 Structure shell commands such that you rely on them and they
6186 return a single code for success.
6187 Be aware that sometimes you will need to parse the output.
6188 See the <filename>df.py</filename> and
6189 <filename>date.py</filename> modules for examples.
6190 </note>
6191
6192 <para>
6193 You will notice that all test classes inherit
6194 <filename>oeRuntimeTest</filename>, which is found in
6195 <filename>meta/lib/oetest.py</filename>.
6196 This base class offers some helper attributes, which are
6197 described in the following sections:
6198 </para>
6199
6200 <section id='qemu-image-writing-tests-class-methods'>
6201 <title>Class Methods</title>
6202
6203 <para>
6204 Class methods are as follows:
6205 <itemizedlist>
6206 <listitem><para><emphasis><filename>hasPackage(pkg)</filename>:</emphasis>
6207 Returns "True" if <filename>pkg</filename> is in the
6208 installed package list of the image, which is based
6209 on the manifest file that is generated during the
6210 <filename>do.rootfs</filename> task.
6211 </para></listitem>
6212 <listitem><para><emphasis><filename>hasFeature(feature)</filename>:</emphasis>
6213 Returns "True" if the feature is in
6214 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink>
6215 or
6216 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></ulink>.
6217 </para></listitem>
6218 </itemizedlist>
6219 </para>
6220 </section>
6221
6222 <section id='qemu-image-writing-tests-class-attributes'>
6223 <title>Class Attributes</title>
6224
6225 <para>
6226 Class attributes are as follows:
6227 <itemizedlist>
6228 <listitem><para><emphasis><filename>pscmd</filename>:</emphasis>
6229 Equals "ps -ef" if <filename>procps</filename> is
6230 installed in the image.
6231 Otherwise, <filename>pscmd</filename> equals
6232 "ps" (busybox).
6233 </para></listitem>
6234 <listitem><para><emphasis><filename>tc</filename>:</emphasis>
6235 The called text context, which gives access to the
6236 following attributes:
6237 <itemizedlist>
6238 <listitem><para><emphasis><filename>d</filename>:</emphasis>
6239 The BitBake datastore, which allows you to
6240 use stuff such as
6241 <filename>oeRuntimeTest.tc.d.getVar("VIRTUAL-RUNTIME_init_manager")</filename>.
6242 </para></listitem>
6243 <listitem><para><emphasis><filename>testslist</filename> and <filename>testsrequired</filename>:</emphasis>
6244 Used internally.
6245 The tests do not need these.
6246 </para></listitem>
6247 <listitem><para><emphasis><filename>filesdir</filename>:</emphasis>
6248 The absolute path to
6249 <filename>meta/lib/oeqa/runtime/files</filename>,
6250 which contains helper files for tests meant
6251 for copying on the target such as small
6252 files written in C for compilation.
6253 </para></listitem>
6254 <listitem><para><emphasis><filename>target</filename>:</emphasis>
6255 The target controller object used to deploy
6256 and start an image on a particular target
6257 (e.g. QemuTarget, SimpleRemote, and
6258 GummibootTarget).
6259 Tests usually use the following:
6260 <itemizedlist>
6261 <listitem><para><emphasis><filename>ip</filename>:</emphasis>
6262 The target's IP address.
6263 </para></listitem>
6264 <listitem><para><emphasis><filename>server_ip</filename>:</emphasis>
6265 The host's IP address, which is
6266 usually used by the "smart" test
6267 suite.
6268 </para></listitem>
6269 <listitem><para><emphasis><filename>run(cmd, timeout=None)</filename>:</emphasis>
6270 The single, most used method.
6271 This command is a wrapper for:
6272 <filename>ssh root@host "cmd"</filename>.
6273 The command returns a tuple:
6274 (status, output), which are what
6275 their names imply - the return code
6276 of 'cmd' and whatever output
6277 it produces.
6278 The optional timeout argument
6279 represents the number of seconds the
6280 test should wait for 'cmd' to
6281 return.
6282 If the argument is "None", the
6283 test uses the default instance's
6284 timeout period, which is 300
6285 seconds.
6286 If the argument is "0", the test
6287 runs until the command returns.
6288 </para></listitem>
6289 <listitem><para><emphasis><filename>copy_to(localpath, remotepath)</filename>:</emphasis>
6290 <filename>scp localpath root@ip:remotepath</filename>.
6291 </para></listitem>
6292 <listitem><para><emphasis><filename>copy_from(remotepath, localpath)</filename>:</emphasis>
6293 <filename>scp root@host:remotepath localpath</filename>.
6294 </para></listitem>
6295 </itemizedlist></para></listitem>
6296 </itemizedlist></para></listitem>
6297 </itemizedlist>
6298 </para>
6299 </section>
6300
6301 <section id='qemu-image-writing-tests-instance-attributes'>
6302 <title>Instance Attributes</title>
6303
6304 <para>
6305 A single instance attribute exists, which is
6306 <filename>target</filename>.
6307 The <filename>target</filename> instance attribute is
6308 identical to the class attribute of the same name, which
6309 is described in the previous section.
6310 This attribute exists as both an instance and class
6311 attribute so tests can use
6312 <filename>self.target.run(cmd)</filename> in instance
6313 methods instead of
6314 <filename>oeRuntimeTest.tc.target.run(cmd)</filename>.
6315 </para>
6316 </section>
6317 </section>
6318 </section>
6319
6320 <section id="platdev-gdb-remotedebug">
6321 <title>Debugging With the GNU Project Debugger (GDB) Remotely</title>
6322
6323 <para>
6324 GDB allows you to examine running programs, which in turn helps you to understand and fix problems.
6325 It also allows you to perform post-mortem style analysis of program crashes.
6326 GDB is available as a package within the Yocto Project and is
6327 installed in SDK images by default.
6328 See the "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>" chapter
6329 in the Yocto Project Reference Manual for a description of these images.
6330 You can find information on GDB at <ulink url="http://sourceware.org/gdb/"/>.
6331 </para>
6332
6333 <tip>
6334 For best results, install DBG (<filename>-dbg</filename>) packages
6335 for the applications you are going to debug.
6336 Doing so makes extra debug symbols available that give you more
6337 meaningful output.
6338 </tip>
6339
6340 <para>
6341 Sometimes, due to memory or disk space constraints, it is not possible
6342 to use GDB directly on the remote target to debug applications.
6343 These constraints arise because GDB needs to load the debugging information and the
6344 binaries of the process being debugged.
6345 Additionally, GDB needs to perform many computations to locate information such as function
6346 names, variable names and values, stack traces and so forth - even before starting the
6347 debugging process.
6348 These extra computations place more load on the target system and can alter the
6349 characteristics of the program being debugged.
6350 </para>
6351
6352 <para>
6353 To help get past the previously mentioned constraints, you can use Gdbserver.
6354 Gdbserver runs on the remote target and does not load any debugging information
6355 from the debugged process.
6356 Instead, a GDB instance processes the debugging information that is run on a
6357 remote computer - the host GDB.
6358 The host GDB then sends control commands to Gdbserver to make it stop or start the debugged
6359 program, as well as read or write memory regions of that debugged program.
6360 All the debugging information loaded and processed as well
6361 as all the heavy debugging is done by the host GDB.
6362 Offloading these processes gives the Gdbserver running on the target a chance to remain
6363 small and fast.
6364 </para>
6365
6366 <para>
6367 Because the host GDB is responsible for loading the debugging information and
6368 for doing the necessary processing to make actual debugging happen, the
6369 user has to make sure the host can access the unstripped binaries complete
6370 with their debugging information and also be sure the target is compiled with no optimizations.
6371 The host GDB must also have local access to all the libraries used by the
6372 debugged program.
6373 Because Gdbserver does not need any local debugging information, the binaries on
6374 the remote target can remain stripped.
6375 However, the binaries must also be compiled without optimization
6376 so they match the host's binaries.
6377 </para>
6378
6379 <para>
6380 To remain consistent with GDB documentation and terminology, the binary being debugged
6381 on the remote target machine is referred to as the "inferior" binary.
6382 For documentation on GDB see the
6383 <ulink url="http://sourceware.org/gdb/documentation/">GDB site</ulink>.
6384 </para>
6385
6386 <para>
6387 The remainder of this section describes the steps you need to take
6388 to debug using the GNU project debugger.
6389 </para>
6390
6391 <section id='platdev-gdb-remotedebug-setup'>
6392 <title>Set Up the Cross-Development Debugging Environment</title>
6393
6394 <para>
6395 Before you can initiate a remote debugging session, you need
6396 to be sure you have set up the cross-development environment,
6397 toolchain, and sysroot.
6398 The "<ulink url='&YOCTO_DOCS_ADT_URL;#adt-prepare'>Preparing for Application Development</ulink>"
6399 chapter of the Yocto Project Application Developer's Guide
6400 describes this process.
6401 Be sure you have read that chapter and have set up
6402 your environment.
6403 </para>
6404 </section>
6405
6406 <section id="platdev-gdb-remotedebug-launch-gdbserver">
6407 <title>Launch Gdbserver on the Target</title>
6408
6409 <para>
6410 Make sure Gdbserver is installed on the target.
6411 If it is not, install the package
6412 <filename>gdbserver</filename>, which needs the
6413 <filename>libthread-db1</filename> package.
6414 </para>
6415
6416 <para>
6417 Here is an example that when entered from the host
6418 connects to the target and launches Gdbserver in order to
6419 "debug" a binary named <filename>helloworld</filename>:
6420 <literallayout class='monospaced'>
6421 $ gdbserver localhost:2345 /usr/bin/helloworld
6422 </literallayout>
6423 Gdbserver should now be listening on port 2345 for debugging
6424 commands coming from a remote GDB process that is running on
6425 the host computer.
6426 Communication between Gdbserver and the host GDB are done
6427 using TCP.
6428 To use other communication protocols, please refer to the
6429 <ulink url='http://www.gnu.org/software/gdb/'>Gdbserver documentation</ulink>.
6430 </para>
6431 </section>
6432
6433 <section id="platdev-gdb-remotedebug-launch-gdb">
6434 <title>Launch GDB on the Host Computer</title>
6435
6436 <para>
6437 Running GDB on the host computer takes a number of stages, which
6438 this section describes.
6439 </para>
6440
6441 <section id="platdev-gdb-remotedebug-launch-gdb-buildcross">
6442 <title>Build the Cross-GDB Package</title>
6443 <para>
6444 A suitable GDB cross-binary is required that runs on your
6445 host computer but also knows about the the ABI of the
6446 remote target.
6447 You can get this binary from the
6448 <link linkend='cross-development-toolchain'>Cross-Development Toolchain</link>.
6449 Here is an example where the toolchain has been installed
6450 in the default directory
6451 <filename>/opt/poky/&DISTRO;</filename>:
6452 <literallayout class='monospaced'>
6453 /opt/poky/&DISTRO;/sysroots/i686-pokysdk-linux/usr/bin/armv7a-vfp-neon-poky-linux-gnueabi/arm-poky-linux-gnueabi-gdb
6454 </literallayout>
6455 where <filename>arm</filename> is the target architecture
6456 and <filename>linux-gnueabi</filename> is the target ABI.
6457 </para>
6458
6459 <para>
6460 Alternatively, you can use BitBake to build the
6461 <filename>gdb-cross</filename> binary.
6462 Here is an example:
6463 <literallayout class='monospaced'>
6464 $ bitbake gdb-cross
6465 </literallayout>
6466 Once the binary is built, you can find it here:
6467 <literallayout class='monospaced'>
6468 tmp/sysroots/&lt;host-arch&gt;/usr/bin/&lt;target-platform&gt;/&lt;target-abi&gt;-gdb
6469 </literallayout>
6470 </para>
6471 </section>
6472
6473 <section id='create-the-gdb-initialization-file'>
6474 <title>Create the GDB Initialization File and Point to Your Root Filesystem</title>
6475
6476 <para>
6477 Aside from the GDB cross-binary, you also need a GDB
6478 initialization file in the same top directory in which
6479 your binary resides.
6480 When you start GDB on your host development system, GDB
6481 finds this initialization file and executes all the
6482 commands within.
6483 For information on the <filename>.gdbinit</filename>, see
6484 "<ulink url='http://sourceware.org/gdb/onlinedocs/gdb/'>Debugging with GDB</ulink>",
6485 which is maintained by
6486 <ulink url='http://www.sourceware.org'>sourceware.org</ulink>.
6487 </para>
6488
6489 <para>
6490 You need to add a statement in the
6491 <filename>.gdbinit</filename> file that points to your
6492 root filesystem.
6493 Here is an example that points to the root filesystem for
6494 an ARM-based target device:
6495 <literallayout class='monospaced'>
6496 set sysroot /home/jzhang/sysroot_arm
6497 </literallayout>
6498 </para>
6499 </section>
6500
6501 <section id="platdev-gdb-remotedebug-launch-gdb-launchhost">
6502 <title>Launch the Host GDB</title>
6503
6504 <para>
6505 Before launching the host GDB, you need to be sure
6506 you have sourced the cross-debugging environment script,
6507 which if you installed the root filesystem in the default
6508 location is at <filename>/opt/poky/&DISTRO;</filename>
6509 and begins with the string "environment-setup".
6510 For more information, see the
6511 "<ulink url='&YOCTO_DOCS_ADT_URL;#setting-up-the-cross-development-environment'>Setting Up the Cross-Development Environment</ulink>"
6512 section in the Yocto Project Application Developer's
6513 Guide.
6514 </para>
6515
6516 <para>
6517 Finally, switch to the directory where the binary resides
6518 and run the <filename>cross-gdb</filename> binary.
6519 Provide the binary file you are going to debug.
6520 For example, the following command continues with the
6521 example used in the previous section by loading
6522 the <filename>helloworld</filename> binary as well as the
6523 debugging information:
6524 <literallayout class='monospaced'>
6525 $ arm-poky-linux-gnuabi-gdb helloworld
6526 </literallayout>
6527 The commands in your <filename>.gdbinit</filename> execute
6528 and the GDB prompt appears.
6529 </para>
6530 </section>
6531 </section>
6532
6533 <section id='platdev-gdb-connect-to-the-remote-gdb-server'>
6534 <title>Connect to the Remote GDB Server</title>
6535
6536 <para>
6537 From the target, you need to connect to the remote GDB
6538 server that is running on the host.
6539 You need to specify the remote host and port.
6540 Here is the command continuing with the example:
6541 <literallayout class='monospaced'>
6542 target remote 192.168.7.2:2345
6543 </literallayout>
6544 </para>
6545 </section>
6546
6547 <section id="platdev-gdb-remotedebug-launch-gdb-using">
6548 <title>Use the Debugger</title>
6549
6550 <para>
6551 You can now proceed with debugging as normal - as if you were debugging
6552 on the local machine.
6553 For example, to instruct GDB to break in the "main" function and then
6554 continue with execution of the inferior binary use the following commands
6555 from within GDB:
6556 <literallayout class='monospaced'>
6557 (gdb) break main
6558 (gdb) continue
6559 </literallayout>
6560 </para>
6561
6562 <para>
6563 For more information about using GDB, see the project's online documentation at
6564 <ulink url="http://sourceware.org/gdb/download/onlinedocs/"/>.
6565 </para>
6566 </section>
6567 </section>
6568
6569 <section id="examining-builds-using-toaster">
6570 <title>Examining Builds Using the Toaster API</title>
6571
6572 <para>
6573 Toaster is an Application Programming Interface (API) and
6574 web-based interface to the OpenEmbedded build system, which uses
6575 BitBake.
6576 Both interfaces are based on a Representational State Transfer
6577 (REST) API that queries for and returns build information using
6578 <filename>GET</filename> and <filename>JSON</filename>.
6579 These types of search operations retrieve sets of objects from
6580 a datastore used to collect build information.
6581 The results contain all the data for the objects being returned.
6582 You can order the results of the search by key and the search
6583 parameters are consistent for all object types.
6584 </para>
6585
6586 <para>
6587 Using the interfaces you can do the following:
6588 <itemizedlist>
6589 <listitem><para>See information about the tasks executed
6590 and reused during the build.</para></listitem>
6591 <listitem><para>See what is built (recipes and
6592 packages) and what packages were installed into the final
6593 image.</para></listitem>
6594 <listitem><para>See performance-related information such
6595 as build time, CPU usage, and disk I/O.</para></listitem>
6596 <listitem><para>Examine error, warning and trace messages
6597 to aid in debugging.</para></listitem>
6598 </itemizedlist>
6599 </para>
6600
6601 <note>
6602 <para>This release of Toaster provides you with information
6603 about a BitBake run.
6604 The tool does not allow you to configure and launch a build.
6605 However, future development includes plans to integrate the
6606 configuration and build launching capabilities of
6607 <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/hob'>Hob</ulink>.
6608 </para>
6609 <para>For more information on using Hob to build an image,
6610 see the
6611 "<link linkend='image-development-using-hob'>Image Development Using Hob</link>"
6612 section.</para>
6613 </note>
6614
6615 <para>
6616 The remainder of this section describes what you need to have in
6617 place to use Toaster, how to start it, use it, and stop it.
6618 For additional information on installing and running Toaster, see the
6619 "<ulink url='https://wiki.yoctoproject.org/wiki/Toaster#Installation_and_Running'>Installation and Running</ulink>"
6620 section of the "Toaster" wiki page.
6621 For complete information on the API and its search operation
6622 URI, parameters, and responses, see the
6623 <ulink url='https://wiki.yoctoproject.org/wiki/REST_API_Contracts'>REST API Contracts</ulink>
6624 Wiki page.
6625 </para>
6626
6627 <section id='starting-toaster'>
6628 <title>Starting Toaster</title>
6629
6630 <para>
6631 Getting set up to use and start Toaster is simple.
6632 First, be sure you have met the following requirements:
6633 <itemizedlist>
6634 <listitem><para>You have set up your
6635 <link linkend='source-directory'>Source Directory</link>
6636 by cloning the upstream <filename>poky</filename>
6637 repository.
6638 See the
6639 <link linkend='local-yp-release'>Yocto Project Release</link>
6640 item for information on how to set up the Source
6641 Directory.</para></listitem>
6642 <listitem><para>Be sure your build machine has
6643 <ulink url='http://en.wikipedia.org/wiki/Django_%28web_framework%29'>Django</ulink>
6644 version 1.5 installed.</para></listitem>
6645 <listitem><para>Make sure that port 8000 and 8200 are
6646 free (i.e. they have no servers on them).
6647 </para></listitem>
6648 </itemizedlist>
6649 </para>
6650
6651 <para>
6652 Once you have met the requirements, follow these steps to
6653 start Toaster running in the background of your shell:
6654 <orderedlist>
6655 <listitem><para><emphasis>Set up your build environment:</emphasis>
6656 Source a build environment script (i.e.
6657 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
6658 or
6659 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>).
6660 </para></listitem>
6661 <listitem><para><emphasis>Start Toaster:</emphasis>
6662 Start the Toaster service using this
6663 command from within your
6664 <link linkend='build-directory'>Build Directory</link>:
6665 <literallayout class='monospaced'>
6666 $ source toaster start
6667 </literallayout></para></listitem>
6668 <note>
6669 The Toaster must be started and running in order
6670 for it to collect data.
6671 </note>
6672 </orderedlist>
6673 </para>
6674
6675 <para>
6676 When Toaster starts, it creates some additional files in your
6677 Build Directory.
6678 Deleting these files will cause you to lose data or interrupt
6679 Toaster:
6680 <itemizedlist>
6681 <listitem><para><emphasis><filename>toaster.sqlite</filename>:</emphasis>
6682 Toaster's database file.</para></listitem>
6683 <listitem><para><emphasis><filename>toaster_web.log</filename>:</emphasis>
6684 The log file of the web server.</para></listitem>
6685 <listitem><para><emphasis><filename>toaster_ui.log</filename>:</emphasis>
6686 The log file of the user interface component.
6687 </para></listitem>
6688 <listitem><para><emphasis><filename>toastermain.pid</filename>:</emphasis>
6689 The PID of the web server.</para></listitem>
6690 <listitem><para><emphasis><filename>toasterui.pid</filename>:</emphasis>
6691 The PID of the DSI data bridge.</para></listitem>
6692 <listitem><para><emphasis><filename>bitbake-cookerdaemon.log</filename>:</emphasis>
6693 The BitBake server's log file.</para></listitem>
6694 </itemizedlist>
6695 </para>
6696 </section>
6697
6698 <section id='using-toaster'>
6699 <title>Using Toaster</title>
6700
6701 <para>
6702 Once Toaster is running, it logs information for any BitBake
6703 run from your Build Directory.
6704 This logging is automatic.
6705 All you need to do is access and use the information.
6706 </para>
6707
6708 <para>
6709 You access the information one of two ways:
6710 <itemizedlist>
6711 <listitem><para>Open a Browser and enter
6712 <filename>http://localhost:8000</filename>
6713 for the URL.
6714 </para></listitem>
6715 <listitem><para>Use the <filename>xdg-open</filename>
6716 tool from the shell and pass it the same URL.
6717 </para></listitem>
6718 </itemizedlist>
6719 Either method opens the home page for the Toaster interface.
6720 </para>
6721
6722 <note><title>Notes</title>
6723 <para>
6724 For information on how to delete information from the Toaster
6725 database, see the
6726 <ulink url='https://wiki.yoctoproject.org/wiki/Toaster#Deleting_a_Build_from_the_Toaster_Database'>Deleting a Build from the Toaster Database</ulink>
6727 wiki page.
6728 </para>
6729
6730 <para>
6731 For information on how to set up an instance of Toaster on
6732 a remote host, see the
6733 <ulink url='https://wiki.yoctoproject.org/wiki/Toaster#Setting_up_a_Toaster_Instance_on_a_Remote_Host'>Setting Up a Toaster Instance on a Remote Host</ulink>
6734 wiki page.
6735 </para>
6736 </note>
6737 </section>
6738
6739 <section id='examining-toaster-data'>
6740 <title>Examining Toaster Data</title>
6741
6742 <para>
6743 The Toaster database is persistent regardless of whether you
6744 start or stop the service.
6745 </para>
6746
6747 <para>
6748 Toaster's interface shows you a list of builds
6749 (successful and unsuccessful) for which it has data.
6750 You can click on any build to see related information.
6751 This information includes configuration details, information
6752 about tasks, all recipes and packages built and their
6753 dependencies, packages and their directory structure as
6754 installed in your final image,
6755 execution time, CPU usage and disk I/O per task.
6756 </para>
6757
6758 <para>
6759 For details on the interface, see the
6760 <ulink url='https://www.yoctoproject.org/documentation/toaster-manual'>Toaster Manual</ulink>.
6761 </para>
6762 </section>
6763
6764 <section id='stopping-toaster'>
6765 <title>Stopping Toaster</title>
6766
6767 <para>
6768 Stop the Toaster service with the following command
6769 from with the
6770 <link linkend='build-directory'>Build Directory</link>:
6771 <literallayout class='monospaced'>
6772 $ source toaster stop
6773 </literallayout>
6774 The service stops but the Toaster database remains persistent.
6775 </para>
6776 </section>
6777 </section>
6778
6779 <section id="platdev-oprofile">
6780 <title>Profiling with OProfile</title>
6781
6782 <para>
6783 <ulink url="http://oprofile.sourceforge.net/">OProfile</ulink> is a
6784 statistical profiler well suited for finding performance
6785 bottlenecks in both user-space software and in the kernel.
6786 This profiler provides answers to questions like "Which functions does my application spend
6787 the most time in when doing X?"
6788 Because the OpenEmbedded build system is well integrated with OProfile, it makes profiling
6789 applications on target hardware straight forward.
6790 <note>
6791 For more information on how to set up and run OProfile, see the
6792 "<ulink url='&YOCTO_DOCS_PROF_URL;#profile-manual-oprofile'>oprofile</ulink>"
6793 section in the Yocto Project Profiling and Tracing Manual.
6794 </note>
6795 </para>
6796
6797 <para>
6798 To use OProfile, you need an image that has OProfile installed.
6799 The easiest way to do this is with "tools-profile" in the
6800 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'>IMAGE_FEATURES</ulink></filename> variable.
6801 You also need debugging symbols to be available on the system where the analysis
6802 takes place.
6803 You can gain access to the symbols by using "dbg-pkgs" in the
6804 <filename>IMAGE_FEATURES</filename> variable or by
6805 installing the appropriate DBG (<filename>-dbg</filename>) packages.
6806 </para>
6807
6808 <para>
6809 For successful call graph analysis, the binaries must preserve the frame
6810 pointer register and should also be compiled with the
6811 <filename>-fno-omit-framepointer</filename> flag.
6812 You can achieve this by setting the
6813 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SELECTED_OPTIMIZATION'>SELECTED_OPTIMIZATION</ulink></filename>
6814 variable with the following options:
6815 <literallayout class='monospaced'>
6816 -fexpensive-optimizations
6817 -fno-omit-framepointer
6818 -frename-registers
6819 -O2
6820 </literallayout>
6821 You can also achieve it by setting the
6822 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-DEBUG_BUILD'>DEBUG_BUILD</ulink></filename>
6823 variable to "1" in the <filename>local.conf</filename> configuration file.
6824 If you use the <filename>DEBUG_BUILD</filename> variable,
6825 you also add extra debugging information that can make the debug
6826 packages large.
6827 </para>
6828
6829 <section id="platdev-oprofile-target">
6830 <title>Profiling on the Target</title>
6831
6832 <para>
6833 Using OProfile, you can perform all the profiling work on the target device.
6834 A simple OProfile session might look like the following:
6835 </para>
6836
6837 <para>
6838 <literallayout class='monospaced'>
6839 # opcontrol --reset
6840 # opcontrol --start --separate=lib --no-vmlinux -c 5
6841 .
6842 .
6843 [do whatever is being profiled]
6844 .
6845 .
6846 # opcontrol --stop
6847 $ opreport -cl
6848 </literallayout>
6849 </para>
6850
6851 <para>
6852 In this example, the <filename>reset</filename> command clears any previously profiled data.
6853 The next command starts OProfile.
6854 The options used when starting the profiler separate dynamic library data
6855 within applications, disable kernel profiling, and enable callgraphing up to
6856 five levels deep.
6857 <note>
6858 To profile the kernel, you would specify the
6859 <filename>--vmlinux=/path/to/vmlinux</filename> option.
6860 The <filename>vmlinux</filename> file is usually in the source directory in the
6861 <filename>/boot/</filename> directory and must match the running kernel.
6862 </note>
6863 </para>
6864
6865 <para>
6866 After you perform your profiling tasks, the next command stops the profiler.
6867 After that, you can view results with the <filename>opreport</filename> command with options
6868 to see the separate library symbols and callgraph information.
6869 </para>
6870
6871 <para>
6872 Callgraphing logs information about time spent in functions and about a function's
6873 calling function (parent) and called functions (children).
6874 The higher the callgraphing depth, the more accurate the results.
6875 However, higher depths also increase the logging overhead.
6876 Consequently, you should take care when setting the callgraphing depth.
6877 <note>
6878 On ARM, binaries need to have the frame pointer enabled for callgraphing to work.
6879 To accomplish this use the <filename>-fno-omit-framepointer</filename> option
6880 with <filename>gcc</filename>.
6881 </note>
6882 </para>
6883
6884 <para>
6885 For more information on using OProfile, see the OProfile
6886 online documentation at
6887 <ulink url="http://oprofile.sourceforge.net/docs/"/>.
6888 </para>
6889 </section>
6890
6891 <section id="platdev-oprofile-oprofileui">
6892 <title>Using OProfileUI</title>
6893
6894 <para>
6895 A graphical user interface for OProfile is also available.
6896 You can download and build this interface from the Yocto Project at
6897 <ulink url="&YOCTO_GIT_URL;/cgit.cgi/oprofileui/"></ulink>.
6898 If the "tools-profile" image feature is selected, all necessary binaries
6899 are installed onto the target device for OProfileUI interaction.
6900 For a list of image features that ship with the Yocto Project,
6901 see the
6902 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-features-image'>Image Features</ulink>"
6903 section in the Yocto Project Reference Manual.
6904 </para>
6905
6906 <para>
6907 Even though the source directory usually includes all needed patches on the target device, you
6908 might find you need other OProfile patches for recent OProfileUI features.
6909 If so, see the <ulink url='&YOCTO_GIT_URL;/cgit.cgi/oprofileui/tree/README'>
6910 OProfileUI README</ulink> for the most recent information.
6911 </para>
6912
6913 <section id="platdev-oprofile-oprofileui-online">
6914 <title>Online Mode</title>
6915
6916 <para>
6917 Using OProfile in online mode assumes a working network connection with the target
6918 hardware.
6919 With this connection, you just need to run "oprofile-server" on the device.
6920 By default, OProfile listens on port 4224.
6921 <note>
6922 You can change the port using the <filename>--port</filename> command-line
6923 option.
6924 </note>
6925 </para>
6926
6927 <para>
6928 The client program is called <filename>oprofile-viewer</filename> and its UI is relatively
6929 straight forward.
6930 You access key functionality through the buttons on the toolbar, which
6931 are duplicated in the menus.
6932 Here are the buttons:
6933 <itemizedlist>
6934 <listitem><para><emphasis>Connect:</emphasis> Connects to the remote host.
6935 You can also supply the IP address or hostname.</para></listitem>
6936 <listitem><para><emphasis>Disconnect:</emphasis> Disconnects from the target.
6937 </para></listitem>
6938 <listitem><para><emphasis>Start:</emphasis> Starts profiling on the device.
6939 </para></listitem>
6940 <listitem><para><emphasis>Stop:</emphasis> Stops profiling on the device and
6941 downloads the data to the local host.
6942 Stopping the profiler generates the profile and displays it in the viewer.
6943 </para></listitem>
6944 <listitem><para><emphasis>Download:</emphasis> Downloads the data from the
6945 target and generates the profile, which appears in the viewer.</para></listitem>
6946 <listitem><para><emphasis>Reset:</emphasis> Resets the sample data on the device.
6947 Resetting the data removes sample information collected from previous
6948 sampling runs.
6949 Be sure you reset the data if you do not want to include old sample information.
6950 </para></listitem>
6951 <listitem><para><emphasis>Save:</emphasis> Saves the data downloaded from the
6952 target to another directory for later examination.</para></listitem>
6953 <listitem><para><emphasis>Open:</emphasis> Loads previously saved data.
6954 </para></listitem>
6955 </itemizedlist>
6956 </para>
6957
6958 <para>
6959 The client downloads the complete profile archive from
6960 the target to the host for processing.
6961 This archive is a directory that contains the sample data, the object files,
6962 and the debug information for the object files.
6963 The archive is then converted using the <filename>oparchconv</filename> script, which is
6964 included in this distribution.
6965 The script uses <filename>opimport</filename> to convert the archive from
6966 the target to something that can be processed on the host.
6967 </para>
6968
6969 <para>
6970 Downloaded archives reside in the
6971 <link linkend='build-directory'>Build Directory</link> in
6972 <filename>tmp</filename> and are cleared up when they are no longer in use.
6973 </para>
6974
6975 <para>
6976 If you wish to perform kernel profiling, you need to be sure
6977 a <filename>vmlinux</filename> file that matches the running kernel is available.
6978 In the source directory, that file is usually located in
6979 <filename>/boot/vmlinux-KERNELVERSION</filename>, where
6980 <filename>KERNEL-version</filename> is the version of the kernel.
6981 The OpenEmbedded build system generates separate <filename>vmlinux</filename>
6982 packages for each kernel it builds.
6983 Thus, it should just be a question of making sure a matching package is
6984 installed (e.g. <filename>opkg install kernel-vmlinux</filename>).
6985 The files are automatically installed into development and profiling images
6986 alongside OProfile.
6987 A configuration option exists within the OProfileUI settings page that you can use to
6988 enter the location of the <filename>vmlinux</filename> file.
6989 </para>
6990
6991 <para>
6992 Waiting for debug symbols to transfer from the device can be slow, and it
6993 is not always necessary to actually have them on the device for OProfile use.
6994 All that is needed is a copy of the filesystem with the debug symbols present
6995 on the viewer system.
6996 The "<link linkend='platdev-gdb-remotedebug-launch-gdb'>Launch GDB on the Host Computer</link>"
6997 section covers how to create such a directory within
6998 the source directory and how to use the OProfileUI Settings
6999 Dialog to specify the location.
7000 If you specify the directory, it will be used when the file checksums
7001 match those on the system you are profiling.
7002 </para>
7003 </section>
7004
7005 <section id="platdev-oprofile-oprofileui-offline">
7006 <title>Offline Mode</title>
7007
7008 <para>
7009 If network access to the target is unavailable, you can generate
7010 an archive for processing in <filename>oprofile-viewer</filename> as follows:
7011 <literallayout class='monospaced'>
7012 # opcontrol --reset
7013 # opcontrol --start --separate=lib --no-vmlinux -c 5
7014 .
7015 .
7016 [do whatever is being profiled]
7017 .
7018 .
7019 # opcontrol --stop
7020 # oparchive -o my_archive
7021 </literallayout>
7022 </para>
7023
7024 <para>
7025 In the above example, <filename>my_archive</filename> is the name of the
7026 archive directory where you would like the profile archive to be kept.
7027 After the directory is created, you can copy it to another host and load it
7028 using <filename>oprofile-viewer</filename> open functionality.
7029 If necessary, the archive is converted.
7030 </para>
7031 </section>
7032 </section>
7033 </section>
7034
7035 <section id='maintaining-open-source-license-compliance-during-your-products-lifecycle'>
7036 <title>Maintaining Open Source License Compliance During Your Product's Lifecycle</title>
7037
7038 <para>
7039 One of the concerns for a development organization using open source
7040 software is how to maintain compliance with various open source
7041 licensing during the lifecycle of the product.
7042 While this section does not provide legal advice or
7043 comprehensively cover all scenarios, it does
7044 present methods that you can use to
7045 assist you in meeting the compliance requirements during a software
7046 release.
7047 </para>
7048
7049 <para>
7050 With hundreds of different open source licenses that the Yocto
7051 Project tracks, it is difficult to know the requirements of each
7052 and every license.
7053 However, the requirements of the major FLOSS licenses can begin
7054 to be covered by
7055 assuming that three main areas of concern exist:
7056 <itemizedlist>
7057 <listitem><para>Source code must be provided.</para></listitem>
7058 <listitem><para>License text for the software must be
7059 provided.</para></listitem>
7060 <listitem><para>Compilation scripts and modifications to the
7061 source code must be provided.
7062 </para></listitem>
7063 </itemizedlist>
7064 There are other requirements beyond the scope of these
7065 three and the methods described in this section
7066 (e.g. the mechanism through which source code is distributed).
7067 </para>
7068
7069 <para>
7070 As different organizations have different methods of complying with
7071 open source licensing, this section is not meant to imply that
7072 there is only one single way to meet your compliance obligations,
7073 but rather to describe one method of achieving compliance.
7074 The remainder of this section describes methods supported to meet the
7075 previously mentioned three requirements.
7076 Once you take steps to meet these requirements,
7077 and prior to releasing images, sources, and the build system,
7078 you should audit all artifacts to ensure completeness.
7079 <note>
7080 The Yocto Project generates a license manifest during
7081 image creation that is located
7082 in <filename>${DEPLOY_DIR}/licenses/&lt;image_name-datestamp&gt;</filename>
7083 to assist with any audits.
7084 </note>
7085 </para>
7086
7087 <section id='providing-the-source-code'>
7088 <title>Providing the Source Code</title>
7089
7090 <para>
7091 Compliance activities should begin before you generate the
7092 final image.
7093 The first thing you should look at is the requirement that
7094 tops the list for most compliance groups - providing
7095 the source.
7096 The Yocto Project has a few ways of meeting this
7097 requirement.
7098 </para>
7099
7100 <para>
7101 One of the easiest ways to meet this requirement is
7102 to provide the entire
7103 <ulink url='&YOCTO_DOCS_REF_URL;#var-DL_DIR'><filename>DL_DIR</filename></ulink>
7104 used by the build.
7105 This method, however, has a few issues.
7106 The most obvious is the size of the directory since it includes
7107 all sources used in the build and not just the source used in
7108 the released image.
7109 It will include toolchain source, and other artifacts, which
7110 you would not generally release.
7111 However, the more serious issue for most companies is accidental
7112 release of proprietary software.
7113 The Yocto Project provides an
7114 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-archiver'><filename>archiver</filename></ulink>
7115 class to help avoid some of these concerns.
7116 </para>
7117
7118 <para>
7119 Before you employ <filename>DL_DIR</filename> or the
7120 archiver class, you need to decide how you choose to
7121 provide source.
7122 The source archiver class can generate tarballs and SRPMs
7123 and can create them with various levels of compliance in mind.
7124 </para>
7125
7126 <para>
7127 One way of doing this (but certainly not the only way) is to
7128 release just the source as a tarball.
7129 You can do this by adding the following to the
7130 <filename>local.conf</filename> file found in the
7131 <link linkend='build-directory'>Build Directory</link>:
7132 <literallayout class='monospaced'>
7133 INHERIT += "archiver"
7134 ARCHIVER_MODE[src] = "original"
7135 </literallayout>
7136 During the creation of your image, the source from all
7137 recipes that deploy packages to the image is placed within
7138 subdirectories of
7139 <filename>DEPLOY_DIR/sources</filename> based on the
7140 <ulink url='&YOCTO_DOCS_REF_URL;#var-LICENSE'><filename>LICENSE</filename></ulink>
7141 for each recipe.
7142 Releasing the entire directory enables you to comply with
7143 requirements concerning providing the unmodified source.
7144 It is important to note that the size of the directory can
7145 get large.
7146 </para>
7147
7148 <para>
7149 A way to help mitigate the size issue is to only release
7150 tarballs for licenses that require the release of
7151 source.
7152 Let us assume you are only concerned with GPL code as
7153 identified with the following:
7154 <literallayout class='monospaced'>
7155 $ cd poky/build/tmp/deploy/sources
7156 $ mkdir ~/gpl_source_release
7157 $ for dir in */*GPL*; do cp -r $dir ~/gpl_source_release; done
7158 </literallayout>
7159 At this point, you could create a tarball from the
7160 <filename>gpl_source_release</filename> directory and
7161 provide that to the end user.
7162 This method would be a step toward achieving compliance
7163 with section 3a of GPLv2 and with section 6 of GPLv3.
7164 </para>
7165 </section>
7166
7167 <section id='providing-license-text'>
7168 <title>Providing License Text</title>
7169
7170 <para>
7171 One requirement that is often overlooked is inclusion
7172 of license text.
7173 This requirement also needs to be dealt with prior to
7174 generating the final image.
7175 Some licenses require the license text to accompany
7176 the binary.
7177 You can achieve this by adding the following to your
7178 <filename>local.conf</filename> file:
7179 <literallayout class='monospaced'>
7180 COPY_LIC_MANIFEST = "1"
7181 COPY_LIC_DIRS = "1"
7182 </literallayout>
7183 Adding these statements to the configuration file ensures
7184 that the licenses collected during package generation
7185 are included on your image.
7186 As the source archiver has already archived the original
7187 unmodified source that contains the license files,
7188 you would have already met the requirements for inclusion
7189 of the license information with source as defined by the GPL
7190 and other open source licenses.
7191 </para>
7192 </section>
7193
7194 <section id='providing-compilation-scripts-and-source-code-modifications'>
7195 <title>Providing Compilation Scripts and Source Code Modifications</title>
7196
7197 <para>
7198 At this point, we have addressed all we need to address
7199 prior to generating the image.
7200 The next two requirements are addressed during the final
7201 packaging of the release.
7202 </para>
7203
7204 <para>
7205 By releasing the version of the OpenEmbedded build system
7206 and the layers used during the build, you will be providing both
7207 compilation scripts and the source code modifications in one
7208 step.
7209 </para>
7210
7211 <para>
7212 If the deployment team has a
7213 <ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP layer</ulink>
7214 and a distro layer, and those those layers are used to patch,
7215 compile, package, or modify (in any way) any open source
7216 software included in your released images, you
7217 might be required to to release those layers under section 3 of
7218 GPLv2 or section 1 of GPLv3.
7219 One way of doing that is with a clean
7220 checkout of the version of the Yocto Project and layers used
7221 during your build.
7222 Here is an example:
7223 <literallayout class='monospaced'>
7224 # We built using the &DISTRO_NAME; branch of the poky repo
7225 $ git clone -b &DISTRO_NAME; git://git.yoctoproject.org/poky
7226 $ cd poky
7227 # We built using the release_branch for our layers
7228 $ git clone -b release_branch git://git.mycompany.com/meta-my-bsp-layer
7229 $ git clone -b release_branch git://git.mycompany.com/meta-my-software-layer
7230 # clean up the .git repos
7231 $ find . -name ".git" -type d -exec rm -rf {} \;
7232 </literallayout>
7233 One thing a development organization might want to consider
7234 for end-user convenience is to modify
7235 <filename>meta-yocto/conf/bblayers.conf.sample</filename> to
7236 ensure that when the end user utilizes the released build
7237 system to build an image, the development organization's
7238 layers are included in the <filename>bblayers.conf</filename>
7239 file automatically:
7240 <literallayout class='monospaced'>
7241 # LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf
7242 # changes incompatibly
7243 LCONF_VERSION = "6"
7244
7245 BBPATH = "${TOPDIR}"
7246 BBFILES ?= ""
7247
7248 BBLAYERS ?= " \
7249 ##OEROOT##/meta \
7250 ##OEROOT##/meta-yocto \
7251 ##OEROOT##/meta-yocto-bsp \
7252 ##OEROOT##/meta-mylayer \
7253 "
7254
7255 BBLAYERS_NON_REMOVABLE ?= " \
7256 ##OEROOT##/meta \
7257 ##OEROOT##/meta-yocto \
7258 "
7259 </literallayout>
7260 Creating and providing an archive of the
7261 <link linkend='metadata'>Metadata</link> layers
7262 (recipes, configuration files, and so forth)
7263 enables you to meet your
7264 requirements to include the scripts to control compilation
7265 as well as any modifications to the original source.
7266 </para>
7267 </section>
7268 </section>
7269
7270 <section id='using-the-error-reporting-tool'>
7271 <title>Using the Error Reporting Tool</title>
7272
7273 <para>
7274 The error reporting tool allows you to
7275 submit errors encountered during builds to a central database.
7276 Outside of the build environment, you can use a web interface to
7277 browse errors, view statistics, and query for errors.
7278 The tool works using a client-server system where the client
7279 portion is integrated with the installed Yocto Project
7280 <link linkend='source-directory'>Source Directory</link>
7281 (e.g. <filename>poky</filename>).
7282 The server receives the information collected and saves it in a
7283 database.
7284 </para>
7285
7286 <para>
7287 A live instance of the error reporting server exists at
7288 <ulink url='http://errors.yoctoproject.org'></ulink>.
7289 This server exists so that when you want to get help with
7290 build failures, you can submit all of the information on the
7291 failure easily and then point to the URL in your bug report
7292 or send an email to the mailing list.
7293 <note>
7294 If you send error reports to this server, the reports become
7295 publicly visible.
7296 </note>
7297 </para>
7298
7299 <section id='enabling-and-using-the-tool'>
7300 <title>Enabling and Using the Tool</title>
7301
7302 <para>
7303 By default, the error reporting tool is disabled.
7304 You can enable it by inheriting the
7305 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-report-error'><filename>report-error</filename></ulink>
7306 class by adding the following statement to the end of
7307 your <filename>local.conf</filename> file in your
7308 <link linkend='build-directory'>Build Directory</link>.
7309 <literallayout class='monospaced'>
7310 INHERIT += "report-error"
7311 </literallayout>
7312 </para>
7313
7314 <para>
7315 By default, the error reporting feature stores information in
7316 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LOG_DIR'><filename>LOG_DIR</filename></ulink><filename>}/error-report</filename>.
7317 However, you can specify a directory to use by adding the following
7318 to your <filename>local.conf</filename> file:
7319 <literallayout class='monospaced'>
7320 ERR_REPORT_DIR = "path"
7321 </literallayout>
7322 Enabling error reporting causes the build process to collect
7323 the errors and store them in a file as previously described.
7324 When the build system encounters an error, it includes a command
7325 as part of the console output.
7326 You can run the command to send the error file to the server.
7327 For example, the following command sends the errors to an upstream
7328 server:
7329 <literallayout class='monospaced'>
7330 send-error-report /home/brandusa/project/poky/build/tmp/log/error-report/error_report_201403141617.txt [server]
7331 </literallayout>
7332 In the above example, the <filename>server</filename> parameter is
7333 optional.
7334 By default, the errors are sent to a database used by the entire
7335 community.
7336 If you specify a particular server, you can send them to a different
7337 database.
7338 </para>
7339
7340 <para>
7341 When sending the error file, you receive a link that corresponds
7342 to your entry in the database.
7343 For example, here is a typical link:
7344 <literallayout class='monospaced'>
7345 http://localhost:8000/Errors/Search/1/158
7346 </literallayout>
7347 Following the link takes you to a web interface where you can
7348 browse, query the errors, and view statistics.
7349 </para>
7350 </section>
7351
7352 <section id='disabling-the-tool'>
7353 <title>Disabling the Tool</title>
7354
7355 <para>
7356 To disable the error reporting feature, simply remove or comment
7357 out the following statement from the end of your
7358 <filename>local.conf</filename> file in your
7359 <link linkend='build-directory'>Build Directory</link>.
7360 <literallayout class='monospaced'>
7361 INHERIT += "report-error"
7362 </literallayout>
7363 </para>
7364 </section>
7365
7366 <section id='setting-up-your-own-error-reporting-server'>
7367 <title>Setting Up Your Own Error Reporting Server</title>
7368
7369 <para>
7370 If you want to set up your own error reporting server, you
7371 can obtain the code from the Git repository at
7372 <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/error-report-web/'></ulink>.
7373 Instructions on how to set it up are in the README document.
7374 </para>
7375 </section>
7376 </section>
7377</chapter>
7378
7379<!--
7380vim: expandtab tw=80 ts=4
7381-->
diff --git a/documentation/dev-manual/dev-manual-customization.xsl b/documentation/dev-manual/dev-manual-customization.xsl
new file mode 100644
index 0000000000..8969605989
--- /dev/null
+++ b/documentation/dev-manual/dev-manual-customization.xsl
@@ -0,0 +1,10 @@
1<?xml version='1.0'?>
2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
3
4 <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl" />
5
6 <xsl:param name="html.stylesheet" select="'dev-style.css'" />
7 <xsl:param name="chapter.autolabel" select="1" />
8 <xsl:param name="section.autolabel" select="1" />
9 <xsl:param name="section.label.includes.component.label" select="1" />
10</xsl:stylesheet>
diff --git a/documentation/dev-manual/dev-manual-eclipse-customization.xsl b/documentation/dev-manual/dev-manual-eclipse-customization.xsl
new file mode 100644
index 0000000000..8ac4c18f25
--- /dev/null
+++ b/documentation/dev-manual/dev-manual-eclipse-customization.xsl
@@ -0,0 +1,27 @@
1<?xml version='1.0'?>
2<xsl:stylesheet
3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4 xmlns="http://www.w3.org/1999/xhtml"
5 xmlns:fo="http://www.w3.org/1999/XSL/Format"
6 version="1.0">
7
8 <xsl:import
9 href="http://docbook.sourceforge.net/release/xsl/current/eclipse/eclipse3.xsl" />
10
11 <xsl:param name="chunker.output.indent" select="'yes'"/>
12 <xsl:param name="chunk.quietly" select="1"/>
13 <xsl:param name="chunk.first.sections" select="1"/>
14 <xsl:param name="chunk.section.depth" select="10"/>
15 <xsl:param name="use.id.as.filename" select="1"/>
16 <xsl:param name="ulink.target" select="'_self'" />
17 <xsl:param name="base.dir" select="'html/dev-manual/'"/>
18 <xsl:param name="html.stylesheet" select="'../book.css'"/>
19 <xsl:param name="eclipse.manifest" select="0"/>
20 <xsl:param name="create.plugin.xml" select="0"/>
21 <xsl:param name="suppress.navigation" select="1"/>
22 <xsl:param name="generate.index" select="0"/>
23 <xsl:param name="chapter.autolabel" select="1" />
24 <xsl:param name="appendix.autolabel" select="1" />
25 <xsl:param name="section.autolabel" select="1" />
26 <xsl:param name="section.label.includes.component.label" select="1" />
27</xsl:stylesheet>
diff --git a/documentation/dev-manual/dev-manual-intro.xml b/documentation/dev-manual/dev-manual-intro.xml
new file mode 100644
index 0000000000..f3cf489f5b
--- /dev/null
+++ b/documentation/dev-manual/dev-manual-intro.xml
@@ -0,0 +1,207 @@
1<!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='dev-manual-intro'>
6
7<title>The Yocto Project Development Manual</title>
8 <section id='intro'>
9 <title>Introduction</title>
10
11 <para>
12 Welcome to the Yocto Project Development Manual!
13 This manual provides information on how to use the Yocto Project to
14 develop embedded Linux images and user-space applications that
15 run on targeted devices.
16 The manual provides an overview of image, kernel, and
17 user-space application development using the Yocto Project.
18 Because much of the information in this manual is general, it
19 contains many references to other sources where you can find more
20 detail.
21 For example, you can find detailed information on Git, repositories,
22 and open source in general in many places on the Internet.
23 Another example specific to the Yocto Project is how to quickly
24 set up your host development system and build an image, which you
25 find in the
26 <ulink url='&YOCTO_DOCS_QS_URL;'>Yocto Project Quick Start</ulink>.
27 </para>
28
29 <para>
30 The Yocto Project Development Manual does, however, provide
31 guidance and examples on how to change the kernel source code,
32 reconfigure the kernel, and develop an application using the
33 popular <trademark class='trade'>Eclipse</trademark> IDE.
34 </para>
35
36 <note>
37 By default, using the Yocto Project creates a Poky distribution.
38 However, you can create your own distribution by providing key
39 <link linkend='metadata'>Metadata</link>.
40 A good example is Angstrom, which has had a distribution
41 based on the Yocto Project since its inception.
42 Other examples include commercial distributions like
43 Wind River Linux, Mentor Embedded Linux, and ENEA Linux.
44 See the "<link linkend='creating-your-own-distribution'>Creating Your Own Distribution</link>"
45 section for more information.
46 </note>
47 </section>
48
49 <section id='what-this-manual-provides'>
50 <title>What This Manual Provides</title>
51
52 <para>
53 The following list describes what you can get from this manual:
54 <itemizedlist>
55 <listitem><para>Information that lets you get set
56 up to develop using the Yocto Project.</para></listitem>
57 <listitem><para>Information to help developers who are new to
58 the open source environment and to the distributed revision
59 control system Git, which the Yocto Project uses.
60 </para></listitem>
61 <listitem><para>An understanding of common end-to-end
62 development models and tasks.</para></listitem>
63 <listitem><para>Information about common development tasks
64 generally used during image development for
65 embedded devices.
66 </para></listitem>
67 <listitem><para>Many references to other sources of related
68 information.</para></listitem>
69 </itemizedlist>
70 </para>
71 </section>
72
73 <section id='what-this-manual-does-not-provide'>
74 <title>What this Manual Does Not Provide</title>
75
76 <para>
77 This manual will not give you the following:
78 <itemizedlist>
79 <listitem><para><emphasis>Step-by-step instructions when those instructions exist in other Yocto
80 Project documentation:</emphasis>
81 For example, the Yocto Project Application Developer's Guide contains detailed
82 instructions on how to run the
83 <ulink url='&YOCTO_DOCS_ADT_URL;#installing-the-adt'>ADT Installer</ulink>,
84 which is used to set up a cross-development environment.</para></listitem>
85 <listitem><para><emphasis>Reference material:</emphasis>
86 This type of material resides in an appropriate reference manual.
87 For example, system variables are documented in the
88 <ulink url='&YOCTO_DOCS_REF_URL;'>Yocto Project Reference Manual</ulink>.</para></listitem>
89 <listitem><para><emphasis>Detailed public information that is not specific to the Yocto Project:</emphasis>
90 For example, exhaustive information on how to use Git is covered better through the
91 Internet than in this manual.</para></listitem>
92 </itemizedlist>
93 </para>
94 </section>
95
96 <section id='other-information'>
97 <title>Other Information</title>
98
99 <para>
100 Because this manual presents overview information for many different
101 topics, supplemental information is recommended for full
102 comprehension.
103 The following list presents other sources of information you might find helpful:
104 <itemizedlist>
105 <listitem><para><emphasis><ulink url='&YOCTO_HOME_URL;'>Yocto Project Website</ulink>:
106 </emphasis> The home page for the Yocto Project provides lots of information on the project
107 as well as links to software and documentation.</para></listitem>
108 <listitem><para><emphasis>
109 <ulink url='&YOCTO_DOCS_QS_URL;'>Yocto Project Quick Start</ulink>:</emphasis> This short document lets you get started
110 with the Yocto Project and quickly begin building an image.</para></listitem>
111 <listitem><para><emphasis>
112 <ulink url='&YOCTO_DOCS_REF_URL;'>Yocto Project Reference Manual</ulink>:</emphasis> This manual is a reference
113 guide to the OpenEmbedded build system, which is based on BitBake.
114 The build system is sometimes referred to as "Poky".
115 </para></listitem>
116 <listitem><para><emphasis>
117 <ulink url='&YOCTO_DOCS_ADT_URL;'>Yocto Project Application Developer's Guide</ulink>:</emphasis>
118 This guide provides information that lets you get going with the Application
119 Development Toolkit (ADT) and stand-alone cross-development toolchains to
120 develop projects using the Yocto Project.</para></listitem>
121 <listitem><para><emphasis>
122 <ulink url='&YOCTO_DOCS_BSP_URL;'>Yocto Project Board Support Package (BSP) Developer's Guide</ulink>:</emphasis>
123 This guide defines the structure for BSP components.
124 Having a commonly understood structure encourages standardization.</para></listitem>
125 <listitem><para><emphasis>
126 <ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;'>Yocto Project Linux Kernel Development Manual</ulink>:</emphasis>
127 This manual describes how to work with Linux Yocto kernels as well as provides a bit
128 of conceptual information on the construction of the Yocto Linux kernel tree.
129 </para></listitem>
130 <listitem><para><emphasis>
131 <ulink url='&YOCTO_DOCS_PROF_URL;'>Yocto Project Profiling and Tracing Manual</ulink>:</emphasis>
132 This manual presents a set of common and generally useful tracing and
133 profiling schemes along with their applications (as appropriate) to each tool.
134 </para></listitem>
135 <listitem><para><emphasis>
136 <ulink url='http://www.youtube.com/watch?v=3ZlOu-gLsh0'>
137 Eclipse IDE Yocto Plug-in</ulink>:</emphasis> A step-by-step instructional video that
138 demonstrates how an application developer uses Yocto Plug-in features within
139 the Eclipse IDE.</para></listitem>
140 <listitem><para><emphasis>
141 <ulink url='&YOCTO_WIKI_URL;/wiki/FAQ'>FAQ</ulink>:</emphasis>
142 A list of commonly asked questions and their answers.</para></listitem>
143 <listitem><para><emphasis>
144 <ulink url='&YOCTO_RELEASE_NOTES;'>Release Notes</ulink>:</emphasis>
145 Features, updates and known issues for the current
146 release of the Yocto Project.</para></listitem>
147 <listitem><para><emphasis>
148 <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/hob'>
149 Hob</ulink>:</emphasis> A graphical user interface for BitBake.
150 Hob's primary goal is to enable a user to perform common tasks more easily.</para></listitem>
151 <listitem><para><emphasis>
152 <ulink url='&YOCTO_HOME_URL;/download/build-appliance-0'>
153 Build Appliance</ulink>:</emphasis> A virtual machine that
154 enables you to build and boot a custom embedded Linux image
155 with the Yocto Project using a non-Linux development system.
156 </para></listitem>
157 <listitem><para><emphasis>
158 <ulink url='&YOCTO_BUGZILLA_URL;'>Bugzilla</ulink>:</emphasis>
159 The bug tracking application the Yocto Project uses.
160 If you find problems with the Yocto Project, you should report them using this
161 application.</para></listitem>
162 <listitem><para><emphasis>
163 Yocto Project Mailing Lists:</emphasis> To subscribe to the Yocto Project mailing
164 lists, click on the following URLs and follow the instructions:
165 <itemizedlist>
166 <listitem><para><ulink url='&YOCTO_LISTS_URL;/listinfo/yocto'></ulink> for a
167 Yocto Project Discussions mailing list.</para></listitem>
168 <listitem><para><ulink url='&YOCTO_LISTS_URL;/listinfo/poky'></ulink> for a
169 Yocto Project Discussions mailing list about the
170 OpenEmbedded build system (Poky).
171 </para></listitem>
172 <listitem><para><ulink url='&YOCTO_LISTS_URL;/listinfo/yocto-announce'></ulink>
173 for a mailing list to receive official Yocto Project announcements
174 as well as Yocto Project milestones.</para></listitem>
175 <listitem><para><ulink url='&YOCTO_LISTS_URL;/listinfo'></ulink> for a
176 listing of all public mailing lists on <filename>lists.yoctoproject.org</filename>.
177 </para></listitem>
178 </itemizedlist></para></listitem>
179 <listitem><para><emphasis>Internet Relay Chat (IRC):</emphasis>
180 Two IRC channels on freenode are available
181 for Yocto Project and Poky discussions: <filename>#yocto</filename> and
182 <filename>#poky</filename>, respectively.</para></listitem>
183 <listitem><para><emphasis>
184 <ulink url='&OE_HOME_URL;'>OpenEmbedded</ulink>:</emphasis>
185 The build system used by the Yocto Project.
186 This project is the upstream, generic, embedded distribution
187 from which the Yocto Project derives its build system (Poky)
188 and to which it contributes.</para></listitem>
189 <listitem><para><emphasis>
190 <ulink url='http://developer.berlios.de/projects/bitbake/'>
191 BitBake</ulink>:</emphasis> The tool used by the OpenEmbedded build system
192 to process project metadata.</para></listitem>
193 <listitem><para><emphasis>
194 <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual:</ulink></emphasis>
195 A comprehensive guide to the BitBake tool.
196 If you want information on BitBake, see this manual.
197 </para></listitem>
198 <listitem><para><emphasis>
199 <ulink url='http://wiki.qemu.org/Index.html'>Quick EMUlator (QEMU)</ulink>:
200 </emphasis> An open-source machine emulator and virtualizer.</para></listitem>
201 </itemizedlist>
202 </para>
203 </section>
204</chapter>
205<!--
206vim: expandtab tw=80 ts=4
207-->
diff --git a/documentation/dev-manual/dev-manual-model.xml b/documentation/dev-manual/dev-manual-model.xml
new file mode 100644
index 0000000000..4fd4c4e1e3
--- /dev/null
+++ b/documentation/dev-manual/dev-manual-model.xml
@@ -0,0 +1,2069 @@
1<!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='dev-manual-model'>
6
7<title>Common Development Models</title>
8
9<para>
10 Many development models exist for which you can use the Yocto Project.
11 This chapter overviews simple methods that use tools provided by the
12 Yocto Project:
13 <itemizedlist>
14 <listitem><para><emphasis>System Development:</emphasis>
15 System Development covers Board Support Package (BSP) development and kernel
16 modification or configuration.
17 For an example on how to create a BSP, see the
18 "<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>"
19 section in the Yocto Project Board Support Package (BSP) Developer's Guide.
20 For more complete information on how to work with the kernel, see the
21 <ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;'>Yocto Project Linux Kernel
22 Development Manual</ulink>.
23 </para></listitem>
24 <listitem><para><emphasis>User Application Development:</emphasis>
25 User Application Development covers development of applications that you intend
26 to run on target hardware.
27 For information on how to set up your host development system for user-space
28 application development, see the
29 <ulink url='&YOCTO_DOCS_ADT_URL;'>Yocto Project Application Developer's Guide</ulink>.
30 For a simple example of user-space application development using the
31 <trademark class='trade'>Eclipse</trademark> IDE, see the
32 "<link linkend='application-development-workflow'>Application
33 Development Workflow</link>" section.
34 </para></listitem>
35 <listitem><para><emphasis>Temporary Source Code Modification:</emphasis>
36 Direct modification of temporary source code is a convenient development model
37 to quickly iterate and develop towards a solution.
38 Once you implement the solution, you should of course take steps to
39 get the changes upstream and applied in the affected recipes.</para></listitem>
40 <listitem><para><emphasis>Image Development using Hob:</emphasis>
41 You can use the <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/hob'>Hob</ulink> to build
42 custom operating system images within the build environment.
43 Hob provides an efficient interface to the OpenEmbedded build system.</para></listitem>
44 <listitem><para><emphasis>Using a Development Shell:</emphasis>
45 You can use a <filename>devshell</filename> to efficiently debug commands or simply
46 edit packages.
47 Working inside a development shell is a quick way to set up the OpenEmbedded build
48 environment to work on parts of a project.</para></listitem>
49 </itemizedlist>
50</para>
51
52<section id='system-development-model'>
53 <title>System Development Workflow</title>
54
55 <para>
56 System development involves modification or creation of an image that you want to run on
57 a specific hardware target.
58 Usually, when you want to create an image that runs on embedded hardware, the image does
59 not require the same number of features that a full-fledged Linux distribution provides.
60 Thus, you can create a much smaller image that is designed to use only the
61 features for your particular hardware.
62 </para>
63
64 <para>
65 To help you understand how system development works in the Yocto Project, this section
66 covers two types of image development: BSP creation and kernel modification or
67 configuration.
68 </para>
69
70 <section id='developing-a-board-support-package-bsp'>
71 <title>Developing a Board Support Package (BSP)</title>
72
73 <para>
74 A BSP is a package of recipes that, when applied during a build, results in
75 an image that you can run on a particular board.
76 Thus, the package when compiled into the new image, supports the operation of the board.
77 </para>
78
79 <note>
80 For a brief list of terms used when describing the development process in the Yocto Project,
81 see the "<link linkend='yocto-project-terms'>Yocto Project Terms</link>" section.
82 </note>
83
84 <para>
85 The remainder of this section presents the basic
86 steps used to create a BSP using the Yocto Project's
87 <ulink url='&YOCTO_DOCS_BSP_URL;#using-the-yocto-projects-bsp-tools'>BSP Tools</ulink>.
88 Although not required for BSP creation, the
89 <filename>meta-intel</filename> repository, which contains
90 many BSPs supported by the Yocto Project, is part of the example.
91 </para>
92
93 <para>
94 For an example that shows how to create a new layer using the tools, see the
95 "<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>"
96 section in the Yocto Project Board Support Package (BSP) Developer's Guide.
97 </para>
98
99 <para>
100 The following illustration and list summarize the BSP creation general workflow.
101 </para>
102
103 <para>
104 <imagedata fileref="figures/bsp-dev-flow.png" width="6in" depth="7in" align="center" scalefit="1" />
105 </para>
106
107 <para>
108 <orderedlist>
109 <listitem><para><emphasis>Set up your host development system to support
110 development using the Yocto Project</emphasis>: See the
111 "<ulink url='&YOCTO_DOCS_QS_URL;#the-linux-distro'>The Linux Distribution</ulink>"
112 and the
113 "<ulink url='&YOCTO_DOCS_QS_URL;#packages'>The Packages</ulink>" sections both
114 in the Yocto Project Quick Start for requirements.</para></listitem>
115 <listitem><para><emphasis>Establish a local copy of the project files on your
116 system</emphasis>: You need this <link linkend='source-directory'>Source
117 Directory</link> available on your host system.
118 Having these files on your system gives you access to the build
119 process and to the tools you need.
120 For information on how to set up the Source Directory,
121 see the
122 "<link linkend='getting-setup'>Getting Set Up</link>" section.</para></listitem>
123 <listitem><para><emphasis>Establish the <filename>meta-intel</filename>
124 repository on your system</emphasis>: Having local copies
125 of these supported BSP layers on your system gives you
126 access to layers you might be able to build on or modify
127 to create your BSP.
128 For information on how to get these files, see the
129 "<link linkend='getting-setup'>Getting Set Up</link>" section.</para></listitem>
130 <listitem><para><emphasis>Create your own BSP layer using the
131 <ulink url='&YOCTO_DOCS_BSP_URL;#creating-a-new-bsp-layer-using-the-yocto-bsp-script'><filename>yocto-bsp</filename></ulink> script</emphasis>:
132 Layers are ideal for
133 isolating and storing work for a given piece of hardware.
134 A layer is really just a location or area in which you place
135 the recipes and configurations for your BSP.
136 In fact, a BSP is, in itself, a special type of layer.
137 The simplest way to create a new BSP layer that is compliant with the
138 Yocto Project is to use the <filename>yocto-bsp</filename> script.
139 For information about that script, see the
140 "<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>"
141 section in the Yocto Project Board Support (BSP) Developer's Guide.
142 </para>
143 <para>
144 Another example that illustrates a layer is an application.
145 Suppose you are creating an application that has library or other dependencies in
146 order for it to compile and run.
147 The layer, in this case, would be where all the recipes that define those dependencies
148 are kept.
149 The key point for a layer is that it is an isolated area that contains
150 all the relevant information for the project that the OpenEmbedded build
151 system knows about.
152 For more information on layers, see the
153 "<link linkend='understanding-and-creating-layers'>Understanding and Creating Layers</link>"
154 section.
155 For more information on BSP layers, see the
156 "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>" section in the
157 Yocto Project Board Support Package (BSP) Developer's Guide.</para>
158 <note>Five BSPs exist that are part of the
159 Yocto Project release: <filename>genericx86</filename>, <filename>genericx86-64</filename>,
160 <filename>beaglebone</filename>,
161 <filename>mpc8315e</filename>, and <filename>edgerouter</filename>.
162 The recipes and configurations for these five BSPs are located and dispersed
163 within the <link linkend='source-directory'>Source Directory</link>.
164 On the other hand, BSP layers for Crown Bay,
165 Crystal Forest, Emenlow, Fish River Island 2, Haswell,
166 Jasper Forest, NUC DC3217IYE,
167 Romley, Sugar Bay, and tlk exist in their own separate layers
168 within the larger <filename>meta-intel</filename> layer.</note>
169 <para>When you set up a layer for a new BSP, you should follow a standard layout.
170 This layout is described in the
171 "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-filelayout'>Example Filesystem Layout</ulink>"
172 section of the Board Support Package (BSP) Development Guide.
173 In the standard layout, you will notice a suggested structure for recipes and
174 configuration information.
175 You can see the standard layout for a BSP by examining
176 any supported BSP found in the <filename>meta-intel</filename> layer inside
177 the Source Directory.</para></listitem>
178 <listitem><para><emphasis>Make configuration changes to your new BSP
179 layer</emphasis>: The standard BSP layer structure organizes the files you need
180 to edit in <filename>conf</filename> and several <filename>recipes-*</filename>
181 directories within the BSP layer.
182 Configuration changes identify where your new layer is on the local system
183 and identify which kernel you are going to use.
184 When you run the <filename>yocto-bsp</filename> script, you are able to interactively
185 configure many things for the BSP (e.g. keyboard, touchscreen, and so forth).
186 </para></listitem>
187 <listitem><para><emphasis>Make recipe changes to your new BSP layer</emphasis>: Recipe
188 changes include altering recipes (<filename>.bb</filename> files), removing
189 recipes you do not use, and adding new recipes or append files
190 (<filename>.bbappend</filename>) that you need to support your hardware.
191 </para></listitem>
192 <listitem><para><emphasis>Prepare for the build</emphasis>: Once you have made all the
193 changes to your BSP layer, there remains a few things
194 you need to do for the OpenEmbedded build system in order for it to create your image.
195 You need to get the build environment ready by sourcing an environment setup script
196 (i.e. <filename>oe-init-build-env</filename> or
197 <filename>oe-init-build-env-memres</filename>)
198 and you need to be sure two key configuration files are configured appropriately:
199 the <filename>conf/local.conf</filename> and the
200 <filename>conf/bblayers.conf</filename> file.
201 You must make the OpenEmbedded build system aware of your new layer.
202 See the
203 "<link linkend='enabling-your-layer'>Enabling Your Layer</link>" section
204 for information on how to let the build system know about your new layer.</para>
205 <para>The entire process for building an image is overviewed in the section
206 "<ulink url='&YOCTO_DOCS_QS_URL;#building-image'>Building an Image</ulink>" section
207 of the Yocto Project Quick Start.
208 You might want to reference this information.</para></listitem>
209 <listitem><para><emphasis>Build the image</emphasis>: The OpenEmbedded build system
210 uses the BitBake tool to build images based on the type of image you want to create.
211 You can find more information about BitBake in the
212 <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
213 </para>
214 <para>The build process supports several types of images to satisfy different needs.
215 See the
216 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>" chapter
217 in the Yocto Project Reference Manual for information on
218 supported images.</para></listitem>
219 </orderedlist>
220 </para>
221
222 <para>
223 You can view a video presentation on "Building Custom Embedded Images with Yocto"
224 at <ulink url='http://free-electrons.com/blog/elc-2011-videos'>Free Electrons</ulink>.
225 After going to the page, just search for "Embedded".
226 You can also find supplemental information in the
227 <ulink url='&YOCTO_DOCS_BSP_URL;'>
228 Yocto Project Board Support Package (BSP) Developer's Guide</ulink>.
229 Finally, there is a wiki page write up of the example also located
230 <ulink url='&YOCTO_WIKI_URL;/wiki/Transcript:_creating_one_generic_Atom_BSP_from_another'>
231 here</ulink> that you might find helpful.
232 </para>
233 </section>
234
235 <section id='modifying-the-kernel'>
236 <title><anchor id='kernel-spot' />Modifying the Kernel</title>
237
238 <para>
239 Kernel modification involves changing the Yocto Project kernel, which could involve changing
240 configuration options as well as adding new kernel recipes.
241 Configuration changes can be added in the form of configuration fragments, while recipe
242 modification comes through the kernel's <filename>recipes-kernel</filename> area
243 in a kernel layer you create.
244 </para>
245
246 <para>
247 The remainder of this section presents a high-level overview of the Yocto Project
248 kernel architecture and the steps to modify the kernel.
249 You can reference the
250 "<link linkend='patching-the-kernel'>Patching the Kernel</link>" section
251 for an example that changes the source code of the kernel.
252 For information on how to configure the kernel, see the
253 "<link linkend='configuring-the-kernel'>Configuring the Kernel</link>" section.
254 For more information on the kernel and on modifying the kernel, see the
255 <ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;'>Yocto Project Linux Kernel Development Manual</ulink>.
256 </para>
257
258 <section id='kernel-overview'>
259 <title>Kernel Overview</title>
260
261 <para>
262 Traditionally, when one thinks of a patched kernel, they think of a base kernel
263 source tree and a fixed structure that contains kernel patches.
264 The Yocto Project, however, employs mechanisms that, in a sense, result in a kernel source
265 generator.
266 By the end of this section, this analogy will become clearer.
267 </para>
268
269 <para>
270 You can find a web interface to the Yocto Project kernel source repositories at
271 <ulink url='&YOCTO_GIT_URL;'></ulink>.
272 If you look at the interface, you will see to the left a grouping of
273 Git repositories titled "Yocto Linux Kernel."
274 Within this group, you will find several kernels supported by
275 the Yocto Project:
276 <itemizedlist>
277 <listitem><para><emphasis><filename>linux-yocto-3.4</filename></emphasis> - The
278 stable Yocto Project kernel to use with the Yocto Project Release 1.3. This kernel
279 is based on the Linux 3.4 released kernel.</para></listitem>
280 <listitem><para><emphasis><filename>linux-yocto-3.8</filename></emphasis> - The
281 stable Yocto Project kernel to use with the Yocto Project Release 1.4. This kernel
282 is based on the Linux 3.8 released kernel.</para></listitem>
283 <listitem><para><emphasis><filename>linux-yocto-3.10</filename></emphasis> - The
284 stable Yocto Project kernel to use with the Yocto Project Release 1.5. This kernel
285 is based on the Linux 3.10 released kernel.</para></listitem>
286 <listitem><para><emphasis><filename>linux-yocto-3.14</filename></emphasis> - The
287 stable Yocto Project kernel to use with the Yocto Project Release 1.6. This kernel
288 is based on the Linux 3.14 released kernel.</para></listitem>
289 <listitem><para><emphasis><filename>linux-yocto-dev</filename></emphasis> - A development
290 kernel based on the latest upstream release candidate available.</para></listitem>
291 </itemizedlist>
292 </para>
293
294 <para>
295 The kernels are maintained using the Git revision control system
296 that structures them using the familiar "tree", "branch", and "leaf" scheme.
297 Branches represent diversions from general code to more specific code, while leaves
298 represent the end-points for a complete and unique kernel whose source files,
299 when gathered from the root of the tree to the leaf, accumulate to create the files
300 necessary for a specific piece of hardware and its features.
301 The following figure displays this concept:
302 <para>
303 <imagedata fileref="figures/kernel-overview-1.png"
304 width="6in" depth="6in" align="center" scale="100" />
305 </para>
306
307 <para>
308 Within the figure, the "Kernel.org Branch Point" represents the point in the tree
309 where a supported base kernel is modified from the Linux kernel.
310 For example, this could be the branch point for the <filename>linux-yocto-3.4</filename>
311 kernel.
312 Thus, everything further to the right in the structure is based on the
313 <filename>linux-yocto-3.4</filename> kernel.
314 Branch points to right in the figure represent where the
315 <filename>linux-yocto-3.4</filename> kernel is modified for specific hardware
316 or types of kernels, such as real-time kernels.
317 Each leaf thus represents the end-point for a kernel designed to run on a specific
318 targeted device.
319 </para>
320
321 <para>
322 The overall result is a Git-maintained repository from which all the supported
323 kernel types can be derived for all the supported devices.
324 A big advantage to this scheme is the sharing of common features by keeping them in
325 "larger" branches within the tree.
326 This practice eliminates redundant storage of similar features shared among kernels.
327 </para>
328
329 <note>
330 Keep in mind the figure does not take into account all the supported Yocto
331 Project kernel types, but rather shows a single generic kernel just for conceptual purposes.
332 Also keep in mind that this structure represents the Yocto Project source repositories
333 that are either pulled from during the build or established on the host development system
334 prior to the build by either cloning a particular kernel's Git repository or by
335 downloading and unpacking a tarball.
336 </note>
337
338 <para>
339 Upstream storage of all the available kernel source code is one thing, while
340 representing and using the code on your host development system is another.
341 Conceptually, you can think of the kernel source repositories as all the
342 source files necessary for all the supported kernels.
343 As a developer, you are just interested in the source files for the kernel on
344 which you are working.
345 And, furthermore, you need them available on your host system.
346 </para>
347
348 <para>
349 Kernel source code is available on your host system a couple of different
350 ways.
351 If you are working in the kernel all the time, you probably would want
352 to set up your own local Git repository of the kernel tree.
353 If you just need to make some patches to the kernel, you can access
354 temporary kernel source files that were extracted and used
355 during a build.
356 We will just talk about working with the temporary source code.
357 For more information on how to get kernel source code onto your
358 host system, see the
359 "<link linkend='local-kernel-files'>Yocto Project Kernel</link>"
360 bulleted item earlier in the manual.
361 </para>
362
363 <para>
364 What happens during the build?
365 When you build the kernel on your development system, all files needed for the build
366 are taken from the source repositories pointed to by the
367 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink> variable
368 and gathered in a temporary work area
369 where they are subsequently used to create the unique kernel.
370 Thus, in a sense, the process constructs a local source tree specific to your
371 kernel to generate the new kernel image - a source generator if you will.
372 </para>
373 The following figure shows the temporary file structure
374 created on your host system when the build occurs.
375 This
376 <link linkend='build-directory'>Build Directory</link> contains all the
377 source files used during the build.
378 </para>
379
380 <para>
381 <imagedata fileref="figures/kernel-overview-2-generic.png"
382 width="6in" depth="5in" align="center" scale="100" />
383 </para>
384
385 <para>
386 Again, for additional information on the Yocto Project kernel's
387 architecture and its branching strategy, see the
388 <ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;'>Yocto Project Linux Kernel Development Manual</ulink>.
389 You can also reference the
390 "<link linkend='patching-the-kernel'>Patching the Kernel</link>"
391 section for a detailed example that modifies the kernel.
392 </para>
393 </section>
394
395 <section id='kernel-modification-workflow'>
396 <title>Kernel Modification Workflow</title>
397
398 <para>
399 This illustration and the following list summarizes the kernel modification general workflow.
400 </para>
401
402 <para>
403 <imagedata fileref="figures/kernel-dev-flow.png"
404 width="6in" depth="5in" align="center" scalefit="1" />
405 </para>
406
407 <para>
408 <orderedlist>
409 <listitem><para><emphasis>Set up your host development system to support
410 development using the Yocto Project</emphasis>: See
411 "<ulink url='&YOCTO_DOCS_QS_URL;#the-linux-distro'>The Linux Distribution</ulink>" and
412 "<ulink url='&YOCTO_DOCS_QS_URL;#packages'>The Packages</ulink>" sections both
413 in the Yocto Project Quick Start for requirements.</para></listitem>
414 <listitem><para><emphasis>Establish a local copy of project files on your
415 system</emphasis>: Having the <link linkend='source-directory'>Source
416 Directory</link> on your system gives you access to the build process and tools
417 you need.
418 For information on how to get these files, see the bulleted item
419 "<link linkend='local-yp-release'>Yocto Project Release</link>" earlier in this manual.
420 </para></listitem>
421 <listitem><para><emphasis>Establish the temporary kernel source files</emphasis>:
422 Temporary kernel source files are kept in the
423 <link linkend='build-directory'>Build Directory</link>
424 created by the
425 OpenEmbedded build system when you run BitBake.
426 If you have never built the kernel in which you are
427 interested, you need to run an initial build to
428 establish local kernel source files.</para>
429 <para>If you are building an image for the first time, you need to get the build
430 environment ready by sourcing an environment setup script
431 (i.e. <filename>oe-init-build-env</filename> or
432 <filename>oe-init-build-env-memres</filename>).
433 You also need to be sure two key configuration files
434 (<filename>local.conf</filename> and <filename>bblayers.conf</filename>)
435 are configured appropriately.</para>
436 <para>The entire process for building an image is overviewed in the
437 "<ulink url='&YOCTO_DOCS_QS_URL;#building-image'>Building an Image</ulink>"
438 section of the Yocto Project Quick Start.
439 You might want to reference this information.
440 You can find more information on BitBake in the
441 <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
442 </para>
443 <para>The build process supports several types of images to satisfy different needs.
444 See the "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>" chapter in
445 the Yocto Project Reference Manual for information on supported images.
446 </para></listitem>
447 <listitem><para><emphasis>Make changes to the kernel source code if
448 applicable</emphasis>: Modifying the kernel does not always mean directly
449 changing source files.
450 However, if you have to do this, you make the changes to the files in the
451 Build Directory.</para></listitem>
452 <listitem><para><emphasis>Make kernel configuration changes
453 if applicable</emphasis>:
454 If your situation calls for changing the kernel's configuration, you can
455 use the <filename>yocto-kernel</filename> script or <filename>menuconfig</filename>
456 to enable and disable kernel configurations.
457 Using the script lets you interactively set up kernel configurations.
458 Using <filename>menuconfig</filename> allows you to interactively develop and test the
459 configuration changes you are making to the kernel.
460 When saved, changes using <filename>menuconfig</filename> update the kernel's
461 <filename>.config</filename> file.
462 Try to resist the temptation of directly editing the <filename>.config</filename>
463 file found in the Build Directory at
464 <filename>tmp/sysroots/&lt;machine-name&gt;/kernel</filename>.
465 Doing so, can produce unexpected results when the OpenEmbedded build system
466 regenerates the configuration file.</para>
467 <para>Once you are satisfied with the configuration changes made using
468 <filename>menuconfig</filename>, you can directly compare the
469 <filename>.config</filename> file against a saved original and gather those
470 changes into a config fragment to be referenced from within the kernel's
471 <filename>.bbappend</filename> file.</para></listitem>
472 <listitem><para><emphasis>Rebuild the kernel image with your changes</emphasis>:
473 Rebuilding the kernel image applies your changes.</para></listitem>
474 </orderedlist>
475 </para>
476 </section>
477 </section>
478</section>
479
480<section id='application-development-workflow'>
481 <title>Application Development Workflow</title>
482
483 <para>
484 Application development involves creating an application that you want
485 to run on your target hardware, which is running a kernel image created using the
486 OpenEmbedded build system.
487 The Yocto Project provides an
488 <ulink url='&YOCTO_DOCS_ADT_URL;#adt-intro'>Application Development Toolkit (ADT)</ulink>
489 and stand-alone
490 <ulink url='&YOCTO_DOCS_ADT_URL;#the-cross-development-toolchain'>cross-development toolchains</ulink>
491 that facilitate quick development and integration of your application into its runtime environment.
492 Using the ADT and toolchains, you can compile and link your application.
493 You can then deploy your application to the actual hardware or to the QEMU emulator for testing.
494 If you are familiar with the popular <trademark class='trade'>Eclipse</trademark> IDE,
495 you can use an Eclipse Yocto Plug-in to
496 allow you to develop, deploy, and test your application all from within Eclipse.
497 </para>
498
499 <para>
500 While we strongly suggest using the ADT to develop your application, this option might not
501 be best for you.
502 If this is the case, you can still use pieces of the Yocto Project for your development process.
503 However, because the process can vary greatly, this manual does not provide detail on the process.
504 </para>
505
506 <section id='workflow-using-the-adt-and-eclipse'>
507 <title>Workflow Using the ADT and <trademark class='trade'>Eclipse</trademark></title>
508
509 <para>
510 To help you understand how application development works using the ADT, this section
511 provides an overview of the general development process and a detailed example of the process
512 as it is used from within the Eclipse IDE.
513 </para>
514
515 <para>
516 The following illustration and list summarize the application development general workflow.
517 </para>
518
519 <para>
520 <imagedata fileref="figures/app-dev-flow.png"
521 width="7in" depth="8in" align="center" scale="100" />
522 </para>
523
524 <para>
525 <orderedlist>
526 <listitem><para><emphasis>Prepare the host system for the Yocto Project</emphasis>:
527 See
528 "<ulink url='&YOCTO_DOCS_REF_URL;#detailed-supported-distros'>Supported Linux Distributions</ulink>"
529 and
530 "<ulink url='&YOCTO_DOCS_REF_URL;#required-packages-for-the-host-development-system'>Required Packages for the Host Development System</ulink>" sections both
531 in the Yocto Project Reference Manual for requirements.
532 In particular, be sure your host system has the
533 <filename>xterm</filename> package installed.
534 </para></listitem>
535 <listitem><para><emphasis>Secure the Yocto Project kernel target image</emphasis>:
536 You must have a target kernel image that has been built using the OpenEmbedded
537 build system.</para>
538 <para>Depending on whether the Yocto Project has a pre-built image that matches your target
539 architecture and where you are going to run the image while you develop your application
540 (QEMU or real hardware), the area from which you get the image differs.
541 <itemizedlist>
542 <listitem><para>Download the image from
543 <ulink url='&YOCTO_MACHINES_DL_URL;'><filename>machines</filename></ulink>
544 if your target architecture is supported and you are going to develop
545 and test your application on actual hardware.</para></listitem>
546 <listitem><para>Download the image from
547 <ulink url='&YOCTO_QEMU_DL_URL;'>
548 <filename>machines/qemu</filename></ulink> if your target architecture is supported
549 and you are going to develop and test your application using the QEMU
550 emulator.</para></listitem>
551 <listitem><para>Build your image if you cannot find a pre-built image that matches
552 your target architecture.
553 If your target architecture is similar to a supported architecture, you can
554 modify the kernel image before you build it.
555 See the
556 "<link linkend='patching-the-kernel'>Patching the Kernel</link>"
557 section for an example.</para></listitem>
558 </itemizedlist></para>
559 <para>For information on pre-built kernel image naming schemes for images
560 that can run on the QEMU emulator, see the
561 "<ulink url='&YOCTO_DOCS_QS_URL;#downloading-the-pre-built-linux-kernel'>Downloading the Pre-Built Linux Kernel</ulink>"
562 section in the Yocto Project Quick Start.</para></listitem>
563 <listitem><para><emphasis>Install the ADT</emphasis>:
564 The ADT provides a target-specific cross-development toolchain, the root filesystem,
565 the QEMU emulator, and other tools that can help you develop your application.
566 While it is possible to get these pieces separately, the ADT Installer provides an
567 easy, inclusive method.
568 You can get these pieces by running an ADT installer script, which is configurable.
569 For information on how to install the ADT, see the
570 "<ulink url='&YOCTO_DOCS_ADT_URL;#using-the-adt-installer'>Using the ADT Installer</ulink>"
571 section
572 in the Yocto Project Application Developer's Guide.</para></listitem>
573 <listitem><para><emphasis>If applicable, secure the target root filesystem
574 and the Cross-development toolchain</emphasis>:
575 If you choose not to install the ADT using the ADT Installer,
576 you need to find and download the appropriate root filesystem and
577 the cross-development toolchain.</para>
578 <para>You can find the tarballs for the root filesystem in the same area used
579 for the kernel image.
580 Depending on the type of image you are running, the root filesystem you need differs.
581 For example, if you are developing an application that runs on an image that
582 supports Sato, you need to get a root filesystem that supports Sato.</para>
583 <para>You can find the cross-development toolchains at
584 <ulink url='&YOCTO_TOOLCHAIN_DL_URL;'><filename>toolchains</filename></ulink>.
585 Be sure to get the correct toolchain for your development host and your
586 target architecture.
587 See the "<ulink url='&YOCTO_DOCS_ADT_URL;#using-an-existing-toolchain-tarball'>Using a Cross-Toolchain Tarball</ulink>"
588 section in the Yocto Project Application Developer's Guide for information
589 and the
590 "<ulink url='&YOCTO_DOCS_QS_URL;#installing-the-toolchain'>Installing the Toolchain</ulink>"
591 in the Yocto Project Quick Start for information on finding and installing
592 the correct toolchain based on your host development system and your target
593 architecture.
594 </para></listitem>
595 <listitem><para><emphasis>Create and build your application</emphasis>:
596 At this point, you need to have source files for your application.
597 Once you have the files, you can use the Eclipse IDE to import them and build the
598 project.
599 If you are not using Eclipse, you need to use the cross-development tools you have
600 installed to create the image.</para></listitem>
601 <listitem><para><emphasis>Deploy the image with the application</emphasis>:
602 If you are using the Eclipse IDE, you can deploy your image to the hardware or to
603 QEMU through the project's preferences.
604 If you are not using the Eclipse IDE, then you need to deploy the application
605 to the hardware using other methods.
606 Or, if you are using QEMU, you need to use that tool and load your image in for testing.
607 </para></listitem>
608 <listitem><para><emphasis>Test and debug the application</emphasis>:
609 Once your application is deployed, you need to test it.
610 Within the Eclipse IDE, you can use the debugging environment along with the
611 set of user-space tools installed along with the ADT to debug your application.
612 Of course, the same user-space tools are available separately if you choose
613 not to use the Eclipse IDE.</para></listitem>
614 </orderedlist>
615 </para>
616 </section>
617
618 <section id='adt-eclipse'>
619 <title>Working Within Eclipse</title>
620
621 <para>
622 The Eclipse IDE is a popular development environment and it fully
623 supports development using the Yocto Project.
624 <note>
625 This release of the Yocto Project supports both the Kepler
626 and Juno versions of the Eclipse IDE.
627 Thus, the following information provides setup information for
628 both versions.
629 </note>
630 </para>
631
632 <para>
633 When you install and configure the Eclipse Yocto Project Plug-in
634 into the Eclipse IDE, you maximize your Yocto Project experience.
635 Installing and configuring the Plug-in results in an environment
636 that has extensions specifically designed to let you more easily
637 develop software.
638 These extensions allow for cross-compilation, deployment, and
639 execution of your output into a QEMU emulation session as well as
640 actual target hardware.
641 You can also perform cross-debugging and profiling.
642 The environment also supports a suite of tools that allows you
643 to perform remote profiling, tracing, collection of power data,
644 collection of latency data, and collection of performance data.
645 </para>
646
647 <para>
648 This section describes how to install and configure the Eclipse IDE
649 Yocto Plug-in and how to use it to develop your application.
650 </para>
651
652 <section id='setting-up-the-eclipse-ide'>
653 <title>Setting Up the Eclipse IDE</title>
654
655 <para>
656 To develop within the Eclipse IDE, you need to do the following:
657 <orderedlist>
658 <listitem><para>Install the optimal version of the Eclipse
659 IDE.</para></listitem>
660 <listitem><para>Configure the Eclipse IDE.
661 </para></listitem>
662 <listitem><para>Install the Eclipse Yocto Plug-in.
663 </para></listitem>
664 <listitem><para>Configure the Eclipse Yocto Plug-in.
665 </para></listitem>
666 </orderedlist>
667 <note>
668 Do not install Eclipse from your distribution's package
669 repository.
670 Be sure to install Eclipse from the official Eclipse
671 download site as directed in the next section.
672 </note>
673 </para>
674
675 <section id='installing-eclipse-ide'>
676 <title>Installing the Eclipse IDE</title>
677
678 <para>
679 It is recommended that you have the Kepler 4.3.2 version of
680 the Eclipse IDE installed on your development system.
681 However, if you currently have the Juno 4.2 version
682 installed and you do not want to upgrade the IDE, you can
683 configure Juno to work with the Yocto Project.
684 </para>
685
686 <para>
687 If you do not have the Kepler 4.3.2 Eclipse IDE installed,
688 you can find the tarball at
689 <ulink url='&ECLIPSE_MAIN_URL;'></ulink>.
690 From that site, choose the Eclipse Standard 4.3.2 version
691 particular to your development host.
692 This version contains the Eclipse Platform, the Java
693 Development Tools (JDT), and the Plug-in Development
694 Environment.
695 </para>
696
697 <para>
698 Once you have downloaded the tarball, extract it into a
699 clean directory.
700 For example, the following commands unpack and install the
701 downloaded Eclipse IDE tarball into a clean directory
702 using the default name <filename>eclipse</filename>:
703 <literallayout class='monospaced'>
704 $ cd ~
705 $ tar -xzvf ~/Downloads/eclipse-standard-kepler-SR2-linux-gtk-x86_64.tar.gz
706 </literallayout>
707 </para>
708 </section>
709
710 <section id='configuring-the-eclipse-ide'>
711 <title>Configuring the Eclipse IDE</title>
712
713 <para>
714 This section presents the steps needed to configure the
715 Eclipse IDE.
716 </para>
717
718 <para>
719 Before installing and configuring the Eclipse Yocto Plug-in,
720 you need to configure the Eclipse IDE.
721 Follow these general steps:
722 <orderedlist>
723 <listitem><para>Start the Eclipse IDE.</para></listitem>
724 <listitem><para>Make sure you are in your Workbench and
725 select "Install New Software" from the "Help"
726 pull-down menu.</para></listitem>
727 <listitem><para>Select
728 <filename>Kepler - &ECLIPSE_KEPLER_URL;</filename>
729 from the "Work with:" pull-down menu.
730 <note>
731 For Juno, select
732 <filename>Juno - &ECLIPSE_JUNO_URL;</filename>
733 </note>
734 </para></listitem>
735 <listitem><para>Expand the box next to "Linux Tools"
736 and select the
737 <filename>LTTng - Linux Tracing Toolkit</filename>
738 boxes.</para></listitem>
739 <listitem><para>Expand the box next to "Mobile and
740 Device Development" and select the following boxes:
741 <itemizedlist>
742 <listitem><para><filename>C/C++ Remote Launch (Requires RSE Remote System Explorer)</filename></para></listitem>
743 <listitem><para><filename>Remote System Explorer End-user Runtime</filename></para></listitem>
744 <listitem><para><filename>Remote System Explorer User Actions</filename></para></listitem>
745 <listitem><para><filename>Target Management Terminal</filename></para></listitem>
746 <listitem><para><filename>TCF Remote System Explorer add-in</filename></para></listitem>
747 <listitem><para><filename>TCF Target Explorer</filename></para></listitem>
748 </itemizedlist></para></listitem>
749 <listitem><para>Expand the box next to "Programming
750 Languages" and select the
751 <filename>C/C++ Autotools Support</filename>
752 and <filename>C/C++ Development Tools</filename>
753 boxes.</para></listitem>
754 <listitem><para>Complete the installation and restart
755 the Eclipse IDE.</para></listitem>
756 </orderedlist>
757 </para>
758 </section>
759
760 <section id='installing-the-eclipse-yocto-plug-in'>
761 <title>Installing or Accessing the Eclipse Yocto Plug-in</title>
762
763 <para>
764 You can install the Eclipse Yocto Plug-in into the Eclipse
765 IDE one of two ways: use the Yocto Project's Eclipse
766 Update site to install the pre-built plug-in or build and
767 install the plug-in from the latest source code.
768 </para>
769
770 <section id='new-software'>
771 <title>Installing the Pre-built Plug-in from the Yocto Project Eclipse Update Site</title>
772
773 <para>
774 To install the Eclipse Yocto Plug-in from the update
775 site, follow these steps:
776 <orderedlist>
777 <listitem><para>Start up the Eclipse IDE.
778 </para></listitem>
779 <listitem><para>In Eclipse, select "Install New
780 Software" from the "Help" menu.
781 </para></listitem>
782 <listitem><para>Click "Add..." in the "Work with:"
783 area.</para></listitem>
784 <listitem><para>Enter
785 <filename>&ECLIPSE_DL_PLUGIN_URL;/kepler</filename>
786 in the URL field and provide a meaningful name
787 in the "Name" field.
788 <note>
789 If you are using Juno, use
790 <filename>&ECLIPSE_DL_PLUGIN_URL;/juno</filename>
791 in the URL field.
792 </note></para></listitem>
793 <listitem><para>Click "OK" to have the entry added
794 to the "Work with:" drop-down list.
795 </para></listitem>
796 <listitem><para>Select the entry for the plug-in
797 from the "Work with:" drop-down list.
798 </para></listitem>
799 <listitem><para>Check the boxes next to
800 <filename>Yocto Project ADT Plug-in</filename>,
801 <filename>Yocto Project Bitbake Commander Plug-in</filename>,
802 and
803 <filename>Yocto Project Documentation plug-in</filename>.
804 </para></listitem>
805 <listitem><para>Complete the remaining software
806 installation steps and then restart the Eclipse
807 IDE to finish the installation of the plug-in.
808 </para></listitem>
809 </orderedlist>
810 </para>
811 </section>
812
813 <section id='zip-file-method'>
814 <title>Installing the Plug-in Using the Latest Source Code</title>
815
816 <para>
817 To install the Eclipse Yocto Plug-in from the latest
818 source code, follow these steps:
819 <orderedlist>
820 <listitem><para>Be sure your development system
821 is not using OpenJDK to build the plug-in
822 by doing the following:
823 <orderedlist>
824 <listitem><para>Use the Oracle JDK.
825 If you don't have that, go to
826 <ulink url='http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html'></ulink>
827 and download the appropriate tarball
828 for your development system and
829 extract it into your home directory.
830 </para></listitem>
831 <listitem><para>In the shell you are going
832 to do your work, export the location of
833 the Oracle Java as follows:
834 <literallayout class='monospaced'>
835 export PATH=~/jdk1.7.0_40/bin:$PATH
836 </literallayout></para></listitem>
837 </orderedlist></para></listitem>
838 <listitem><para>In the same shell, create a Git
839 repository with:
840 <literallayout class='monospaced'>
841 $ cd ~
842 $ git clone git://git.yoctoproject.org/eclipse-poky-kepler
843 </literallayout>
844 <note>
845 If you are using Juno, the repository is
846 located at
847 <filename>git://git.yoctoproject.org/eclipse-poky-juno</filename>.
848 </note>
849 For this example, the repository is named
850 <filename>~/eclipse-poky-kepler</filename>.
851 </para></listitem>
852 <listitem><para>Change to the directory where you
853 set up the Git repository:
854 <literallayout class='monospaced'>
855 $ cd ~/eclipse-poky-kepler
856 </literallayout></para></listitem>
857 <listitem><para>Be sure you are in the right branch
858 for your Git repository.
859 For this release set the branch to
860 <filename>&DISTRO_NAME;</filename>:
861 <literallayout class='monospaced'>
862 $ git checkout &DISTRO_NAME;
863 </literallayout></para></listitem>
864 <listitem><para>Change to the
865 <filename>scripts</filename>
866 directory within the Git repository:
867 <literallayout class='monospaced'>
868 $ cd scripts
869 </literallayout></para></listitem>
870 <listitem><para>Set up the local build environment
871 by running the setup script:
872 <literallayout class='monospaced'>
873 $ ./setup.sh
874 </literallayout></para></listitem>
875 <listitem><para>When the script finishes execution,
876 it prompts you with instructions on how to run
877 the <filename>build.sh</filename> script, which
878 is also in the <filename>scripts</filename>
879 directory of
880 the Git repository created earlier.
881 </para></listitem>
882 <listitem><para>Run the <filename>build.sh</filename> script
883 as directed.
884 Be sure to provide the name of the Git branch
885 along with the Yocto Project release you are
886 using.
887 Here is an example that uses the
888 <filename>&DISTRO_NAME;</filename> branch:
889 <literallayout class='monospaced'>
890 $ ECLIPSE_HOME=/home/scottrif/eclipse-poky-kepler/scripts/eclipse ./build.sh &DISTRO_NAME; &DISTRO_NAME;
891 </literallayout>
892 After running the script, the file
893 <filename>org.yocto.sdk-&lt;release&gt;-&lt;date&gt;-archive.zip</filename>
894 is in the current directory.</para></listitem>
895 <listitem><para>If necessary, start the Eclipse IDE
896 and be sure you are in the Workbench.
897 </para></listitem>
898 <listitem><para>Select "Install New Software" from the "Help" pull-down menu.
899 </para></listitem>
900 <listitem><para>Click "Add".</para></listitem>
901 <listitem><para>Provide anything you want in the
902 "Name" field.</para></listitem>
903 <listitem><para>Click "Archive" and browse to the
904 ZIP file you built in step eight.
905 This ZIP file should not be "unzipped", and must
906 be the <filename>*archive.zip</filename> file
907 created by running the
908 <filename>build.sh</filename> script.
909 </para></listitem>
910 <listitem><para>Click through the "Okay" buttons.
911 </para></listitem>
912 <listitem><para>Check the boxes
913 in the installation window and complete
914 the installation.</para></listitem>
915 <listitem><para>Restart the Eclipse IDE if
916 necessary.</para></listitem>
917 </orderedlist>
918 </para>
919
920 <para>
921 At this point you should be able to configure the
922 Eclipse Yocto Plug-in as described in the
923 "<link linkend='configuring-the-eclipse-yocto-plug-in'>Configuring the Eclipse Yocto Plug-in</link>"
924 section.</para>
925 </section>
926 </section>
927
928 <section id='configuring-the-eclipse-yocto-plug-in'>
929 <title>Configuring the Eclipse Yocto Plug-in</title>
930
931 <para>
932 Configuring the Eclipse Yocto Plug-in involves setting the
933 Cross Compiler options and the Target options.
934 The configurations you choose become the default settings
935 for all projects.
936 You do have opportunities to change them later when
937 you configure the project (see the following section).
938 </para>
939
940 <para>
941 To start, you need to do the following from within the
942 Eclipse IDE:
943 <itemizedlist>
944 <listitem><para>Choose "Preferences" from the
945 "Windows" menu to display the Preferences Dialog.
946 </para></listitem>
947 <listitem><para>Click "Yocto Project ADT".
948 </para></listitem>
949 </itemizedlist>
950 </para>
951
952 <section id='configuring-the-cross-compiler-options'>
953 <title>Configuring the Cross-Compiler Options</title>
954
955 <para>
956 To configure the Cross Compiler Options, you must select
957 the type of toolchain, point to the toolchain, specify
958 the sysroot location, and select the target
959 architecture.
960 <itemizedlist>
961 <listitem><para><emphasis>Selecting the Toolchain Type:</emphasis>
962 Choose between
963 <filename>Standalone pre-built toolchain</filename>
964 and
965 <filename>Build system derived toolchain</filename>
966 for Cross Compiler Options.
967 <itemizedlist>
968 <listitem><para><emphasis>
969 <filename>Standalone Pre-built Toolchain:</filename></emphasis>
970 Select this mode when you are using
971 a stand-alone cross-toolchain.
972 For example, suppose you are an
973 application developer and do not
974 need to build a target image.
975 Instead, you just want to use an
976 architecture-specific toolchain on
977 an existing kernel and target root
978 filesystem.</para></listitem>
979 <listitem><para><emphasis>
980 <filename>Build System Derived Toolchain:</filename></emphasis>
981 Select this mode if the
982 cross-toolchain has been installed
983 and built as part of the
984 <link linkend='build-directory'>Build Directory</link>.
985 When you select
986 <filename>Build system derived toolchain</filename>,
987 you are using the toolchain bundled
988 inside the Build Directory.
989 </para></listitem>
990 </itemizedlist>
991 </para></listitem>
992 <listitem><para><emphasis>Point to the Toolchain:</emphasis>
993 If you are using a stand-alone pre-built
994 toolchain, you should be pointing to where it is
995 installed.
996 If you used the ADT Installer script and
997 accepted the default installation directory, the
998 toolchain will be installed in the
999 <filename>&YOCTO_ADTPATH_DIR;</filename>
1000 directory.
1001 Sections "<ulink url='&YOCTO_DOCS_ADT_URL;#configuring-and-running-the-adt-installer-script'>Configuring and Running the ADT Installer Script</ulink>"
1002 and
1003 "<ulink url='&YOCTO_DOCS_ADT_URL;#using-an-existing-toolchain-tarball'>Using a Cross-Toolchain Tarball</ulink>"
1004 in the Yocto Project Application Developer's
1005 Guide describe how to install a stand-alone
1006 cross-toolchain.</para>
1007 <para>If you are using a system-derived
1008 toolchain, the path you provide for the
1009 <filename>Toolchain Root Location</filename>
1010 field is the
1011 <link linkend='build-directory'>Build Directory</link>.
1012 See the
1013 "<ulink url='&YOCTO_DOCS_ADT_URL;#using-the-toolchain-from-within-the-build-tree'>Using BitBake and the Build Directory</ulink>"
1014 section in the Yocto Project Application
1015 Developer's Guide for information on how to
1016 install the toolchain into the Build
1017 Directory.</para></listitem>
1018 <listitem><para><emphasis>Specify the Sysroot Location:</emphasis>
1019 This location is where the root filesystem for
1020 the target hardware resides.
1021 If you used the ADT Installer script and
1022 accepted the default installation directory,
1023 then the location is
1024 <filename>/opt/poky/&DISTRO;</filename>.
1025 Additionally, when you use the ADT Installer
1026 script, the same location is used for the QEMU
1027 user-space tools and the NFS boot process.
1028 </para>
1029 <para>If you used either of the other two
1030 methods to install the toolchain or did not
1031 accept the ADT Installer script's default
1032 installation directory, then the location of
1033 the sysroot filesystem depends on where you
1034 separately extracted and installed the
1035 filesystem.</para>
1036 <para>For information on how to install the
1037 toolchain and on how to extract and install the
1038 sysroot filesystem, see the
1039 "<ulink url='&YOCTO_DOCS_ADT_URL;#installing-the-adt'>Installing the ADT and Toolchains</ulink>"
1040 section in the Yocto Project Application
1041 Developer's Guide.
1042 </para></listitem>
1043 <listitem><para><emphasis>Select the Target Architecture:</emphasis>
1044 The target architecture is the type of hardware
1045 you are going to use or emulate.
1046 Use the pull-down
1047 <filename>Target Architecture</filename> menu
1048 to make your selection.
1049 The pull-down menu should have the supported
1050 architectures.
1051 If the architecture you need is not listed in
1052 the menu, you will need to build the image.
1053 See the
1054 "<ulink url='&YOCTO_DOCS_QS_URL;#building-image'>Building an Image</ulink>"
1055 section of the Yocto Project Quick Start for
1056 more information.</para></listitem>
1057 </itemizedlist>
1058 </para>
1059 </section>
1060
1061 <section id='configuring-the-target-options'>
1062 <title>Configuring the Target Options</title>
1063
1064 <para>
1065 You can choose to emulate hardware using the QEMU
1066 emulator, or you can choose to run your image on actual
1067 hardware.
1068 <itemizedlist>
1069 <listitem><para><emphasis>QEMU:</emphasis>
1070 Select this option if you will be using the
1071 QEMU emulator.
1072 If you are using the emulator, you also need to
1073 locate the kernel and specify any custom
1074 options.</para>
1075 <para>If you selected
1076 <filename>Build system derived toolchain</filename>,
1077 the target kernel you built will be located in
1078 the Build Directory in
1079 <filename>tmp/deploy/images/&lt;machine&gt;</filename>
1080 directory.
1081 If you selected
1082 <filename>Standalone pre-built toolchain</filename>,
1083 the pre-built image you downloaded is located
1084 in the directory you specified when you
1085 downloaded the image.</para>
1086 <para>Most custom options are for advanced QEMU
1087 users to further customize their QEMU instance.
1088 These options are specified between paired
1089 angled brackets.
1090 Some options must be specified outside the
1091 brackets.
1092 In particular, the options
1093 <filename>serial</filename>,
1094 <filename>nographic</filename>, and
1095 <filename>kvm</filename> must all be outside the
1096 brackets.
1097 Use the <filename>man qemu</filename> command
1098 to get help on all the options and their use.
1099 The following is an example:
1100 <literallayout class='monospaced'>
1101 serial ‘&lt;-m 256 -full-screen&gt;’
1102 </literallayout></para>
1103 <para>
1104 Regardless of the mode, Sysroot is already
1105 defined as part of the Cross-Compiler Options
1106 configuration in the
1107 <filename>Sysroot Location:</filename> field.
1108 </para></listitem>
1109 <listitem><para><emphasis>External HW:</emphasis>
1110 Select this option if you will be using actual
1111 hardware.</para></listitem>
1112 </itemizedlist>
1113 </para>
1114
1115 <para>
1116 Click the "OK" to save your plug-in configurations.
1117 </para>
1118 </section>
1119 </section>
1120 </section>
1121
1122 <section id='creating-the-project'>
1123 <title>Creating the Project</title>
1124
1125 <para>
1126 You can create two types of projects: Autotools-based, or
1127 Makefile-based.
1128 This section describes how to create Autotools-based projects
1129 from within the Eclipse IDE.
1130 For information on creating Makefile-based projects in a
1131 terminal window, see the section
1132 "<ulink url='&YOCTO_DOCS_ADT_URL;#using-the-command-line'>Using the Command Line</ulink>"
1133 in the Yocto Project Application Developer's Guide.
1134 <note>
1135 Do not use special characters in project names
1136 (e.g. spaces, underscores, etc.). Doing so can
1137 cause configuration to fail.
1138 </note>
1139 </para>
1140
1141 <para>
1142 To create a project based on a Yocto template and then display
1143 the source code, follow these steps:
1144 <orderedlist>
1145 <listitem><para>Select "Project" from the "File -> New" menu.
1146 </para></listitem>
1147 <listitem><para>Double click <filename>CC++</filename>.
1148 </para></listitem>
1149 <listitem><para>Double click <filename>C Project</filename>
1150 to create the project.</para></listitem>
1151 <listitem><para>Expand <filename>Yocto Project ADT Project</filename>.
1152 </para></listitem>
1153 <listitem><para>Select <filename>Hello World ANSI C Autotools Project</filename>.
1154 This is an Autotools-based project based on a Yocto
1155 template.</para></listitem>
1156 <listitem><para>Put a name in the <filename>Project name:</filename>
1157 field.
1158 Do not use hyphens as part of the name.
1159 </para></listitem>
1160 <listitem><para>Click "Next".</para></listitem>
1161 <listitem><para>Add information in the
1162 <filename>Author</filename> and
1163 <filename>Copyright notice</filename> fields.
1164 </para></listitem>
1165 <listitem><para>Be sure the <filename>License</filename>
1166 field is correct.</para></listitem>
1167 <listitem><para>Click "Finish".</para></listitem>
1168 <listitem><para>If the "open perspective" prompt appears,
1169 click "Yes" so that you in the C/C++ perspective.
1170 </para></listitem>
1171 <listitem><para>The left-hand navigation pane shows your
1172 project.
1173 You can display your source by double clicking the
1174 project's source file.</para></listitem>
1175 </orderedlist>
1176 </para>
1177 </section>
1178
1179 <section id='configuring-the-cross-toolchains'>
1180 <title>Configuring the Cross-Toolchains</title>
1181
1182 <para>
1183 The earlier section,
1184 "<link linkend='configuring-the-eclipse-yocto-plug-in'>Configuring the Eclipse Yocto Plug-in</link>",
1185 sets up the default project configurations.
1186 You can override these settings for a given project by following
1187 these steps:
1188 <orderedlist>
1189 <listitem><para>Select "Change Yocto Project Settings" from
1190 the "Project" menu.
1191 This selection brings up the Yocto Project Settings
1192 Dialog and allows you to make changes specific to an
1193 individual project.</para>
1194 <para>By default, the Cross Compiler Options and Target
1195 Options for a project are inherited from settings you
1196 provided using the Preferences Dialog as described
1197 earlier in the
1198 "<link linkend='configuring-the-eclipse-yocto-plug-in'>Configuring the Eclipse Yocto Plug-in</link>" section.
1199 The Yocto Project Settings Dialog allows you to override
1200 those default settings for a given project.
1201 </para></listitem>
1202 <listitem><para>Make your configurations for the project
1203 and click "OK".
1204 If you are running the Juno version of Eclipse, you can
1205 skip down to the next section where you build the
1206 project.
1207 If you are not working with Juno, you need to reconfigure the
1208 project as described in the next step.
1209 </para></listitem>
1210 <listitem><para>Select "Reconfigure Project" from the
1211 "Project" menu.
1212 This selection reconfigures the project by running
1213 <filename>autogen.sh</filename> in the workspace for
1214 your project.
1215 The script also runs <filename>libtoolize</filename>,
1216 <filename>aclocal</filename>,
1217 <filename>autoconf</filename>,
1218 <filename>autoheader</filename>,
1219 <filename>automake --a</filename>, and
1220 <filename>./configure</filename>.
1221 Click on the "Console" tab beneath your source code to
1222 see the results of reconfiguring your project.
1223 </para></listitem>
1224 </orderedlist>
1225 </para>
1226 </section>
1227
1228 <section id='building-the-project'>
1229 <title>Building the Project</title>
1230
1231 <para>
1232 To build the project in Juno, right click on the project in
1233 the navigator pane and select "Build Project".
1234 If you are not running Juno, select "Build Project" from the
1235 "Project" menu.
1236 The console should update and you can note the cross-compiler
1237 you are using.
1238 </para>
1239 </section>
1240
1241 <section id='starting-qemu-in-user-space-nfs-mode'>
1242 <title>Starting QEMU in User-Space NFS Mode</title>
1243
1244 <para>
1245 To start the QEMU emulator from within Eclipse, follow these
1246 steps:
1247 <orderedlist>
1248 <listitem><para>Expose and select "External Tools" from
1249 the "Run" menu.
1250 Your image should appear as a selectable menu item.
1251 </para></listitem>
1252 <listitem><para>Select your image from the menu to launch
1253 the emulator in a new window.</para></listitem>
1254 <listitem><para>If needed, enter your host root password in
1255 the shell window at the prompt.
1256 This sets up a <filename>Tap 0</filename> connection
1257 needed for running in user-space NFS mode.
1258 </para></listitem>
1259 <listitem><para>Wait for QEMU to launch.</para></listitem>
1260 <listitem><para>Once QEMU launches, you can begin operating
1261 within that environment.
1262 For example, you could determine the IP Address
1263 for the user-space NFS by using the
1264 <filename>ifconfig</filename> command.</para></listitem>
1265 </orderedlist>
1266 </para>
1267 </section>
1268
1269 <section id='deploying-and-debugging-the-application'>
1270 <title>Deploying and Debugging the Application</title>
1271
1272 <para>
1273 Once the QEMU emulator is running the image, you can deploy
1274 your application using the Eclipse IDE and then use
1275 the emulator to perform debugging.
1276 Follow these steps to deploy the application.
1277 <orderedlist>
1278 <listitem><para>Select "Debug Configurations..." from the
1279 "Run" menu.</para></listitem>
1280 <listitem><para>In the left area, expand
1281 <filename>C/C++Remote Application</filename>.
1282 </para></listitem>
1283 <listitem><para>Locate your project and select it to bring
1284 up a new tabbed view in the Debug Configurations Dialog.
1285 </para></listitem>
1286 <listitem><para>Enter the absolute path into which you want
1287 to deploy the application.
1288 Use the "Remote Absolute File Path for
1289 C/C++Application:" field.
1290 For example, enter
1291 <filename>/usr/bin/&lt;programname&gt;</filename>.
1292 </para></listitem>
1293 <listitem><para>Click on the "Debugger" tab to see the
1294 cross-tool debugger you are using.</para></listitem>
1295 <listitem><para>Click on the "Main" tab.</para></listitem>
1296 <listitem><para>Create a new connection to the QEMU instance
1297 by clicking on "new".</para></listitem>
1298 <listitem><para>Select <filename>TCF</filename>, which means
1299 Target Communication Framework.</para></listitem>
1300 <listitem><para>Click "Next".</para></listitem>
1301 <listitem><para>Clear out the "host name" field and enter
1302 the IP Address determined earlier.</para></listitem>
1303 <listitem><para>Click "Finish" to close the
1304 New Connections Dialog.</para></listitem>
1305 <listitem><para>Use the drop-down menu now in the
1306 "Connection" field and pick the IP Address you entered.
1307 </para></listitem>
1308 <listitem><para>Click "Run" to bring up a login screen
1309 and login.</para></listitem>
1310 <listitem><para>Accept the debug perspective.
1311 </para></listitem>
1312 </orderedlist>
1313 </para>
1314 </section>
1315
1316 <section id='running-user-space-tools'>
1317 <title>Running User-Space Tools</title>
1318
1319 <para>
1320 As mentioned earlier in the manual, several tools exist that
1321 enhance your development experience.
1322 These tools are aids in developing and debugging applications
1323 and images.
1324 You can run these user-space tools from within the Eclipse
1325 IDE through the "YoctoTools" menu.
1326 </para>
1327
1328 <para>
1329 Once you pick a tool, you need to configure it for the remote
1330 target.
1331 Every tool needs to have the connection configured.
1332 You must select an existing TCF-based RSE connection to the
1333 remote target.
1334 If one does not exist, click "New" to create one.
1335 </para>
1336
1337 <para>
1338 Here are some specifics about the remote tools:
1339 <itemizedlist>
1340 <listitem><para><emphasis><filename>OProfile</filename>:</emphasis>
1341 Selecting this tool causes the
1342 <filename>oprofile-server</filename> on the remote
1343 target to launch on the local host machine.
1344 The <filename>oprofile-viewer</filename> must be
1345 installed on the local host machine and the
1346 <filename>oprofile-server</filename> must be installed
1347 on the remote target, respectively, in order to use.
1348 You must compile and install the
1349 <filename>oprofile-viewer</filename> from the source
1350 code on your local host machine.
1351 Furthermore, in order to convert the target's sample
1352 format data into a form that the host can use, you must
1353 have OProfile version 0.9.4 or greater installed on the
1354 host.</para>
1355 <para>You can locate both the viewer and server from
1356 <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/oprofileui/'></ulink>.
1357 You can also find more information on setting up and
1358 using this tool in the
1359 "<ulink url='&YOCTO_DOCS_PROF_URL;#profile-manual-oprofile'>oprofile</ulink>"
1360 section of the Yocto Project Profiling and Tracing
1361 Manual.
1362 <note>The <filename>oprofile-server</filename> is
1363 installed by default on the
1364 <filename>core-image-sato-sdk</filename> image.</note>
1365 </para></listitem>
1366 <listitem><para><emphasis><filename>Lttng2.0 ust trace import</filename>:</emphasis>
1367 Selecting this tool transfers the remote target's
1368 <filename>Lttng</filename> tracing data back to the
1369 local host machine and uses the Lttng Eclipse plug-in
1370 to graphically display the output.
1371 For information on how to use Lttng to trace an
1372 application,
1373 see <ulink url='http://lttng.org/documentation'></ulink>
1374 and the
1375 "<ulink url='&YOCTO_DOCS_PROF_URL;#lttng-linux-trace-toolkit-next-generation'>LTTng (Linux Trace Toolkit, next generation)</ulink>"
1376 section, which is in the Yocto Project Profiling and
1377 Tracing Manual.
1378 <note>Do not use
1379 <filename>Lttng-user space (legacy)</filename> tool.
1380 This tool no longer has any upstream support.</note>
1381 </para>
1382 <para>Before you use the
1383 <filename>Lttng2.0 ust trace import</filename> tool,
1384 you need to setup the Lttng Eclipse plug-in and create a
1385 Tracing project.
1386 Do the following:
1387 <orderedlist>
1388 <listitem><para>Select "Open Perspective" from the
1389 "Window" menu and then select "Tracing".
1390 </para></listitem>
1391 <listitem><para>Click "OK" to change the Eclipse
1392 perspective into the Tracing perspective.
1393 </para></listitem>
1394 <listitem><para>Create a new Tracing project by
1395 selecting "Project" from the "File -> New" menu.
1396 </para></listitem>
1397 <listitem><para>Choose "Tracing Project" from the
1398 "Tracing" menu.
1399 </para></listitem>
1400 <listitem><para>Generate your tracing data on the
1401 remote target.</para></listitem>
1402 <listitem><para>Select "Lttng2.0 ust trace import"
1403 from the "Yocto Project Tools" menu to
1404 start the data import process.</para></listitem>
1405 <listitem><para>Specify your remote connection name.
1406 </para></listitem>
1407 <listitem><para>For the Ust directory path, specify
1408 the location of your remote tracing data.
1409 Make sure the location ends with
1410 <filename>ust</filename> (e.g.
1411 <filename>/usr/mysession/ust</filename>).
1412 </para></listitem>
1413 <listitem><para>Click "OK" to complete the import
1414 process.
1415 The data is now in the local tracing project
1416 you created.</para></listitem>
1417 <listitem><para>Right click on the data and then use
1418 the menu to Select "Generic CTF Trace" from the
1419 "Trace Type... -> Common Trace Format" menu to
1420 map the tracing type.</para></listitem>
1421 <listitem><para>Right click the mouse and select
1422 "Open" to bring up the Eclipse Lttng Trace
1423 Viewer so you view the tracing data.
1424 </para></listitem>
1425 </orderedlist></para></listitem>
1426 <listitem><para><emphasis><filename>PowerTOP</filename>:</emphasis>
1427 Selecting this tool runs PowerTOP on the remote target
1428 machine and displays the results in a new view called
1429 PowerTOP.</para>
1430 <para>The "Time to gather data(sec):" field is the time
1431 passed in seconds before data is gathered from the
1432 remote target for analysis.</para>
1433 <para>The "show pids in wakeups list:" field corresponds
1434 to the <filename>-p</filename> argument passed to
1435 <filename>PowerTOP</filename>.</para></listitem>
1436 <listitem><para><emphasis><filename>LatencyTOP and Perf</filename>:</emphasis>
1437 LatencyTOP identifies system latency, while
1438 Perf monitors the system's performance counter
1439 registers.
1440 Selecting either of these tools causes an RSE terminal
1441 view to appear from which you can run the tools.
1442 Both tools refresh the entire screen to display results
1443 while they run.
1444 For more information on setting up and using
1445 <filename>perf</filename>, see the
1446 "<ulink url='&YOCTO_DOCS_PROF_URL;#profile-manual-perf'>perf</ulink>"
1447 section in the Yocto Project Profiling and Tracing
1448 Manual.
1449 </para></listitem>
1450 </itemizedlist>
1451 </para>
1452 </section>
1453
1454 <section id='customizing-an-image-using-a-bitbake-commander-project-and-hob'>
1455 <title>Customizing an Image Using a BitBake Commander Project and Hob</title>
1456
1457 <para>
1458 Within the Eclipse IDE, you can create a Yocto BitBake Commander
1459 project, edit the <link linkend='metadata'>Metadata</link>, and
1460 then use
1461 <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/hob'>Hob</ulink> to build a customized image all within one IDE.
1462 </para>
1463
1464 <section id='creating-the-yocto-bitbake-commander-project'>
1465 <title>Creating the Yocto BitBake Commander Project</title>
1466
1467 <para>
1468 To create a Yocto BitBake Commander project, follow these
1469 steps:
1470 <orderedlist>
1471 <listitem><para>Select "Other" from the
1472 "Window -> Open Perspective" menu
1473 and then choose "Bitbake Commander".
1474 </para></listitem>
1475 <listitem><para>Click "OK" to change the perspective to
1476 Bitbake Commander.</para></listitem>
1477 <listitem><para>Select "Project" from the "File -> New"
1478 menu to create a new Yocto
1479 Bitbake Commander project.</para></listitem>
1480 <listitem><para>Choose "New Yocto Project" from the
1481 "Yocto Project Bitbake Commander" menu and click
1482 "Next".</para></listitem>
1483 <listitem><para>Enter the Project Name and choose the
1484 Project Location.
1485 The Yocto project's Metadata files will be put under
1486 the directory
1487 <filename>&lt;project_location&gt;/&lt;project_name&gt;</filename>.
1488 If that directory does not exist, you need to check
1489 the "Clone from Yocto Git Repository" box, which
1490 would execute a <filename>git clone</filename>
1491 command to get the project's Metadata files.
1492 <note>
1493 Do not specify your BitBake Commander project
1494 location as your Eclipse workspace.
1495 Doing so causes an error indicating that the
1496 current project overlaps the location of
1497 another project.
1498 This error occurs even if no such project exits.
1499 </note></para></listitem>
1500 <listitem><para>Select <filename>Finish</filename> to
1501 create the project.</para></listitem>
1502 </orderedlist>
1503 </para>
1504 </section>
1505
1506 <section id='editing-the-metadata'>
1507 <title>Editing the Metadata</title>
1508
1509 <para>
1510 After you create the Yocto Bitbake Commander project, you
1511 can modify the <link linkend='metadata'>Metadata</link>
1512 files by opening them in the project.
1513 When editing recipe files (<filename>.bb</filename> files),
1514 you can view BitBake variable values and information by
1515 hovering the mouse pointer over the variable name and
1516 waiting a few seconds.
1517 </para>
1518
1519 <para>
1520 To edit the Metadata, follow these steps:
1521 <orderedlist>
1522 <listitem><para>Select your Yocto Bitbake Commander
1523 project.</para></listitem>
1524 <listitem><para>Select "BitBake Recipe" from the
1525 "File -> New -> Yocto BitBake Commander" menu
1526 to open a new recipe wizard.</para></listitem>
1527 <listitem><para>Point to your source by filling in the
1528 "SRC_URL" field.
1529 For example, you can add a recipe to your
1530 <link linkend='source-directory'>Source Directory</link>
1531 by defining "SRC_URL" as follows:
1532 <literallayout class='monospaced'>
1533 ftp://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz
1534 </literallayout></para></listitem>
1535 <listitem><para>Click "Populate" to calculate the
1536 archive md5, sha256, license checksum values and to
1537 auto-generate the recipe filename.</para></listitem>
1538 <listitem><para>Fill in the "Description" field.
1539 </para></listitem>
1540 <listitem><para>Be sure values for all required
1541 fields exist.</para></listitem>
1542 <listitem><para>Click "Finish".</para></listitem>
1543 </orderedlist>
1544 </para>
1545 </section>
1546
1547 <section id='biding-and-customizing-the-image-using-hob'>
1548 <title>Building and Customizing the Image Using Hob</title>
1549
1550 <para>
1551 To build and customize the image using Hob from within the
1552 Eclipse IDE, follow these steps:
1553 <orderedlist>
1554 <listitem><para>Select your Yocto Bitbake Commander
1555 project.</para></listitem>
1556 <listitem><para>Select "Launch Hob" from the "Project"
1557 menu.</para></listitem>
1558 <listitem><para>Enter the
1559 <link linkend='build-directory'>Build Directory</link>
1560 where you want to put your final images.
1561 </para></listitem>
1562 <listitem><para>Click "OK" to launch Hob.
1563 </para></listitem>
1564 <listitem><para>Use Hob to customize and build your own
1565 images.
1566 For information on Hob, see the
1567 <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/hob'>Hob Project Page</ulink>
1568 on the Yocto Project website.</para></listitem>
1569 </orderedlist>
1570 </para>
1571 </section>
1572 </section>
1573 </section>
1574
1575 <section id='workflow-using-stand-alone-cross-development-toolchains'>
1576 <title>Workflow Using Stand-Alone Cross-Development Toolchains</title>
1577
1578 <para>
1579 If you want to develop an application without prior installation
1580 of the ADT, you still can employ the
1581 <link linkend='cross-development-toolchain'>Cross Development Toolchain</link>,
1582 the QEMU emulator, and a number of supported target image files.
1583 You just need to follow these general steps:
1584 <orderedlist>
1585 <listitem><para><emphasis>Install the cross-development
1586 toolchain for your target hardware:</emphasis>
1587 For information on how to install the toolchain, see the
1588 "<ulink url='&YOCTO_DOCS_ADT_URL;#using-an-existing-toolchain-tarball'>Using a Cross-Toolchain Tarball</ulink>"
1589 section in the Yocto Project Application Developer's
1590 Guide.</para></listitem>
1591 <listitem><para><emphasis>Download the Target Image:</emphasis>
1592 The Yocto Project supports several target architectures
1593 and has many pre-built kernel images and root filesystem
1594 images.</para>
1595 <para>If you are going to develop your application on
1596 hardware, go to the
1597 <ulink url='&YOCTO_MACHINES_DL_URL;'><filename>machines</filename></ulink>
1598 download area and choose a target machine area
1599 from which to download the kernel image and root filesystem.
1600 This download area could have several files in it that
1601 support development using actual hardware.
1602 For example, the area might contain
1603 <filename>.hddimg</filename> files that combine the
1604 kernel image with the filesystem, boot loaders, and
1605 so forth.
1606 Be sure to get the files you need for your particular
1607 development process.</para>
1608 <para>If you are going to develop your application and
1609 then run and test it using the QEMU emulator, go to the
1610 <ulink url='&YOCTO_QEMU_DL_URL;'><filename>machines/qemu</filename></ulink>
1611 download area.
1612 From this area, go down into the directory for your
1613 target architecture (e.g. <filename>qemux86_64</filename>
1614 for an <trademark class='registered'>Intel</trademark>-based
1615 64-bit architecture).
1616 Download kernel, root filesystem, and any other files you
1617 need for your process.
1618 <note>In order to use the root filesystem in QEMU, you
1619 need to extract it.
1620 See the
1621 "<ulink url='&YOCTO_DOCS_ADT_URL;#extracting-the-root-filesystem'>Extracting the Root Filesystem</ulink>"
1622 section for information on how to extract the root
1623 filesystem.</note></para></listitem>
1624 <listitem><para><emphasis>Develop and Test your
1625 Application:</emphasis> At this point, you have the tools
1626 to develop your application.
1627 If you need to separately install and use the QEMU
1628 emulator, you can go to
1629 <ulink url='http://wiki.qemu.org/Main_Page'>QEMU Home Page</ulink>
1630 to download and learn about the emulator.</para></listitem>
1631 </orderedlist>
1632 </para>
1633 </section>
1634</section>
1635
1636<section id="modifying-temporary-source-code">
1637 <title>Modifying Temporary Source Code</title>
1638
1639 <para>
1640 You might
1641 find it helpful during development to modify the temporary source code used by recipes
1642 to build packages.
1643 For example, suppose you are developing a patch and you need to experiment a bit
1644 to figure out your solution.
1645 After you have initially built the package, you can iteratively tweak the
1646 source code, which is located in the
1647 <link linkend='build-directory'>Build Directory</link>, and then
1648 you can force a re-compile and quickly test your altered code.
1649 Once you settle on a solution, you can then preserve your changes in the form of
1650 patches.
1651 You can accomplish these steps all within either a
1652 <ulink url='http://savannah.nongnu.org/projects/quilt'>Quilt</ulink> or
1653 <link linkend='git'>Git</link> workflow.
1654 </para>
1655
1656 <section id='finding-the-temporary-source-code'>
1657 <title>Finding the Temporary Source Code</title>
1658
1659 <para>
1660 During a build, the unpacked temporary source code used by recipes
1661 to build packages is available in the Build Directory as
1662 defined by the
1663 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-S'>S</ulink></filename> variable.
1664 Below is the default value for the <filename>S</filename> variable as defined in the
1665 <filename>meta/conf/bitbake.conf</filename> configuration file in the
1666 <link linkend='source-directory'>Source Directory</link>:
1667 <literallayout class='monospaced'>
1668 S = "${WORKDIR}/${BP}"
1669 </literallayout>
1670 You should be aware that many recipes override the <filename>S</filename> variable.
1671 For example, recipes that fetch their source from Git usually set
1672 <filename>S</filename> to <filename>${WORKDIR}/git</filename>.
1673 <note>
1674 The
1675 <ulink url='&YOCTO_DOCS_REF_URL;#var-BP'><filename>BP</filename></ulink>
1676 represents the base recipe name, which consists of the name and version:
1677 <literallayout class='monospaced'>
1678 BP = "${BPN}-${PV}"
1679 </literallayout>
1680 </note>
1681 </para>
1682
1683 <para>
1684 The path to the work directory for the recipe
1685 (<ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink>)
1686 is defined as follows:
1687 <literallayout class='monospaced'>
1688 ${TMPDIR}/work/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}
1689 </literallayout>
1690 The actual directory depends on several things:
1691 <itemizedlist>
1692 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-TMPDIR'><filename>TMPDIR</filename></ulink>:
1693 The top-level build output directory</listitem>
1694 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-MULTIMACH_TARGET_SYS'><filename>MULTIMACH_TARGET_SYS</filename></ulink>:
1695 The target system identifier</listitem>
1696 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink>:
1697 The recipe name</listitem>
1698 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-EXTENDPE'><filename>EXTENDPE</filename></ulink>:
1699 The epoch - (if
1700 <ulink url='&YOCTO_DOCS_REF_URL;#var-PE'><filename>PE</filename></ulink>
1701 is not specified, which is usually the case for most
1702 recipes, then <filename>EXTENDPE</filename> is blank)</listitem>
1703 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>:
1704 The recipe version</listitem>
1705 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink>:
1706 The recipe revision</listitem>
1707 </itemizedlist>
1708 </para>
1709
1710 <para>
1711 As an example, assume a Source Directory top-level folder
1712 name <filename>poky</filename>, a default Build Directory at
1713 <filename>poky/build</filename>, and a
1714 <filename>qemux86-poky-linux</filename> machine target
1715 system.
1716 Furthermore, suppose your recipe is named
1717 <filename>foo_1.3.0-r0.bb</filename>.
1718 In this case, the work directory the build system uses to
1719 build the package would be as follows:
1720 <literallayout class='monospaced'>
1721 poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
1722 </literallayout>
1723 </para>
1724
1725 <para>
1726 Now that you know where to locate the directory that has the temporary source code,
1727 you can use a Quilt or Git workflow to make your edits, test the changes,
1728 and preserve the changes in the form of patches.
1729 </para>
1730 </section>
1731
1732 <section id="using-a-quilt-workflow">
1733 <title>Using a Quilt Workflow</title>
1734
1735 <para>
1736 <ulink url='http://savannah.nongnu.org/projects/quilt'>Quilt</ulink>
1737 is a powerful tool that allows you to capture source code changes without having
1738 a clean source tree.
1739 This section outlines the typical workflow you can use to modify temporary source code,
1740 test changes, and then preserve the changes in the form of a patch all using Quilt.
1741 </para>
1742
1743 <para>
1744 Follow these general steps:
1745 <orderedlist>
1746 <listitem><para><emphasis>Find the Source Code:</emphasis>
1747 The temporary source code used by the OpenEmbedded build system is kept in the
1748 Build Directory.
1749 See the
1750 "<link linkend='finding-the-temporary-source-code'>Finding the Temporary Source Code</link>"
1751 section to learn how to locate the directory that has the temporary source code for a
1752 particular package.</para></listitem>
1753 <listitem><para><emphasis>Change Your Working Directory:</emphasis>
1754 You need to be in the directory that has the temporary source code.
1755 That directory is defined by the
1756 <ulink url='&YOCTO_DOCS_REF_URL;#var-S'><filename>S</filename></ulink>
1757 variable.</para></listitem>
1758 <listitem><para><emphasis>Create a New Patch:</emphasis>
1759 Before modifying source code, you need to create a new patch.
1760 To create a new patch file, use <filename>quilt new</filename> as below:
1761 <literallayout class='monospaced'>
1762 $ quilt new my_changes.patch
1763 </literallayout></para></listitem>
1764 <listitem><para><emphasis>Notify Quilt and Add Files:</emphasis>
1765 After creating the patch, you need to notify Quilt about the files
1766 you plan to edit.
1767 You notify Quilt by adding the files to the patch you just created:
1768 <literallayout class='monospaced'>
1769 $ quilt add file1.c file2.c file3.c
1770 </literallayout>
1771 </para></listitem>
1772 <listitem><para><emphasis>Edit the Files:</emphasis>
1773 Make your changes in the temporary source code to the files you added
1774 to the patch.</para></listitem>
1775 <listitem><para><emphasis>Test Your Changes:</emphasis>
1776 Once you have modified the source code, the easiest way to test your changes
1777 is by calling the <filename>compile</filename> task as shown in the following example:
1778 <literallayout class='monospaced'>
1779 $ bitbake -c compile -f &lt;name_of_package&gt;
1780 </literallayout>
1781 The <filename>-f</filename> or <filename>--force</filename>
1782 option forces the specified task to execute.
1783 If you find problems with your code, you can just keep editing and
1784 re-testing iteratively until things work as expected.
1785 <note>All the modifications you make to the temporary source code
1786 disappear once you <filename>-c clean</filename> or
1787 <filename>-c cleanall</filename> with BitBake for the package.
1788 Modifications will also disappear if you use the <filename>rm_work</filename>
1789 feature as described in the
1790 "<ulink url='&YOCTO_DOCS_QS_URL;#building-image'>Building an Image</ulink>"
1791 section of the Yocto Project Quick Start.
1792 </note></para></listitem>
1793 <listitem><para><emphasis>Generate the Patch:</emphasis>
1794 Once your changes work as expected, you need to use Quilt to generate the final patch that
1795 contains all your modifications.
1796 <literallayout class='monospaced'>
1797 $ quilt refresh
1798 </literallayout>
1799 At this point, the <filename>my_changes.patch</filename> file has all your edits made
1800 to the <filename>file1.c</filename>, <filename>file2.c</filename>, and
1801 <filename>file3.c</filename> files.</para>
1802 <para>You can find the resulting patch file in the <filename>patches/</filename>
1803 subdirectory of the source (<filename>S</filename>) directory.</para></listitem>
1804 <listitem><para><emphasis>Copy the Patch File:</emphasis>
1805 For simplicity, copy the patch file into a directory named <filename>files</filename>,
1806 which you can create in the same directory that holds the recipe
1807 (<filename>.bb</filename>) file or the
1808 append (<filename>.bbappend</filename>) file.
1809 Placing the patch here guarantees that the OpenEmbedded build system will find
1810 the patch.
1811 Next, add the patch into the
1812 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename>
1813 of the recipe.
1814 Here is an example:
1815 <literallayout class='monospaced'>
1816 SRC_URI += "file://my_changes.patch"
1817 </literallayout></para></listitem>
1818 <listitem><para><emphasis>Increment the Recipe Revision Number:</emphasis>
1819 Finally, don't forget to 'bump' the
1820 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PR'>PR</ulink></filename>
1821 value in the recipe since the resulting packages have changed.</para></listitem>
1822 </orderedlist>
1823 </para> </section>
1824
1825 <section id='using-a-git-workflow'>
1826 <title>Using a Git Workflow</title>
1827 <para>
1828 Git is an even more powerful tool that allows you to capture source code changes without having
1829 a clean source tree.
1830 This section outlines the typical workflow you can use to modify temporary source code,
1831 test changes, and then preserve the changes in the form of a patch all using Git.
1832 For general information on Git as it is used in the Yocto Project, see the
1833 "<link linkend='git'>Git</link>" section.
1834 </para>
1835
1836 <note>
1837 This workflow uses Git only for its ability to manage local changes to the source code
1838 and produce patches independent of any version control system used with the Yocto Project.
1839 </note>
1840
1841 <para>
1842 Follow these general steps:
1843 <orderedlist>
1844 <listitem><para><emphasis>Find the Source Code:</emphasis>
1845 The temporary source code used by the OpenEmbedded build system is kept in the
1846 Build Directory.
1847 See the
1848 "<link linkend='finding-the-temporary-source-code'>Finding the Temporary Source Code</link>"
1849 section to learn how to locate the directory that has the temporary source code for a
1850 particular package.</para></listitem>
1851 <listitem><para><emphasis>Change Your Working Directory:</emphasis>
1852 You need to be in the directory that has the temporary source code.
1853 That directory is defined by the
1854 <ulink url='&YOCTO_DOCS_REF_URL;#var-S'><filename>S</filename></ulink>
1855 variable.</para></listitem>
1856 <listitem><para><emphasis>If needed, initialize a Git Repository:</emphasis>
1857 If the recipe you are working with does not use a Git fetcher,
1858 you need to set up a Git repository as follows:
1859 <literallayout class='monospaced'>
1860 $ git init
1861 $ git add *
1862 $ git commit -m "initial revision"
1863 </literallayout>
1864 The above Git commands initialize a Git repository that is based on the
1865 files in your current working directory, stage all the files, and commit
1866 the files.
1867 At this point, your Git repository is aware of all the source code files.
1868 Any edits you now make to files can be committed later and will be tracked by
1869 Git.</para></listitem>
1870 <listitem><para><emphasis>Edit the Files:</emphasis>
1871 Make your changes to the temporary source code.</para></listitem>
1872 <listitem><para><emphasis>Test Your Changes:</emphasis>
1873 Once you have modified the source code, the easiest way to test your changes
1874 is by calling the <filename>compile</filename> task as shown in the following example:
1875 <literallayout class='monospaced'>
1876 $ bitbake -c compile -f &lt;name_of_package&gt;
1877 </literallayout>
1878 The <filename>-f</filename> or <filename>--force</filename>
1879 option forces the specified task to execute.
1880 If you find problems with your code, you can just keep editing and
1881 re-testing iteratively until things work as expected.
1882 <note>All the modifications you make to the temporary source code
1883 disappear once you <filename>-c clean</filename>, <filename>-c cleansstate</filename>,
1884 or <filename>-c cleanall</filename> with BitBake for the package.
1885 Modifications will also disappear if you use the <filename>rm_work</filename>
1886 feature as described in the
1887 "<ulink url='&YOCTO_DOCS_QS_URL;#building-image'>Building an Image</ulink>"
1888 section of the Yocto Project Quick Start.
1889 </note></para></listitem>
1890 <listitem><para><emphasis>See the List of Files You Changed:</emphasis>
1891 Use the <filename>git status</filename> command to see what files you have actually edited.
1892 The ability to have Git track the files you have changed is an advantage that this
1893 workflow has over the Quilt workflow.
1894 Here is the Git command to list your changed files:
1895 <literallayout class='monospaced'>
1896 $ git status
1897 </literallayout></para></listitem>
1898 <listitem><para><emphasis>Stage the Modified Files:</emphasis>
1899 Use the <filename>git add</filename> command to stage the changed files so they
1900 can be committed as follows:
1901 <literallayout class='monospaced'>
1902 $ git add file1.c file2.c file3.c
1903 </literallayout></para></listitem>
1904 <listitem><para><emphasis>Commit the Staged Files and View Your Changes:</emphasis>
1905 Use the <filename>git commit</filename> command to commit the changes to the
1906 local repository.
1907 Once you have committed the files, you can use the <filename>git log</filename>
1908 command to see your changes:
1909 <literallayout class='monospaced'>
1910 $ git commit -m "&lt;commit-summary-message&gt;"
1911 $ git log
1912 </literallayout>
1913 <note>The name of the patch file created in the next step is based on your
1914 <filename>commit-summary-message</filename>.</note></para></listitem>
1915 <listitem><para><emphasis>Generate the Patch:</emphasis>
1916 Once the changes are committed, use the <filename>git format-patch</filename>
1917 command to generate a patch file:
1918 <literallayout class='monospaced'>
1919 $ git format-patch -1
1920 </literallayout>
1921 Specifying "-1" causes Git to generate the
1922 patch file for the most recent commit.</para>
1923 <para>At this point, the patch file has all your edits made
1924 to the <filename>file1.c</filename>, <filename>file2.c</filename>, and
1925 <filename>file3.c</filename> files.
1926 You can find the resulting patch file in the current directory and it
1927 is named according to the <filename>git commit</filename> summary line.
1928 The patch file ends with <filename>.patch</filename>.</para></listitem>
1929 <listitem><para><emphasis>Copy the Patch File:</emphasis>
1930 For simplicity, copy the patch file into a directory named <filename>files</filename>,
1931 which you can create in the same directory that holds the recipe
1932 (<filename>.bb</filename>) file or the
1933 append (<filename>.bbappend</filename>) file.
1934 Placing the patch here guarantees that the OpenEmbedded build system will find
1935 the patch.
1936 Next, add the patch into the
1937 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename>
1938 of the recipe.
1939 Here is an example:
1940 <literallayout class='monospaced'>
1941 SRC_URI += "file://0001-&lt;commit-summary-message&gt;.patch"
1942 </literallayout></para></listitem>
1943 <listitem><para><emphasis>Increment the Recipe Revision Number:</emphasis>
1944 Finally, don't forget to 'bump' the
1945 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PR'>PR</ulink></filename>
1946 value in the recipe since the resulting packages have changed.</para></listitem>
1947 </orderedlist>
1948 </para>
1949 </section>
1950</section>
1951
1952<section id='image-development-using-hob'>
1953 <title>Image Development Using Hob</title>
1954
1955 <para>
1956 The <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/hob'>Hob</ulink> is a graphical user interface for the
1957 OpenEmbedded build system, which is based on BitBake.
1958 You can use the Hob to build custom operating system images within the Yocto Project build environment.
1959 Hob simply provides a friendly interface over the build system used during development.
1960 In other words, building images with the Hob lets you take care of common build tasks more easily.
1961 </para>
1962
1963 <para>
1964 For a better understanding of Hob, see the project page at
1965 <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/hob'></ulink>
1966 on the Yocto Project website.
1967 If you follow the "Documentation" link from the Hob page, you will
1968 find a short introductory training video on Hob.
1969 The following lists some features of Hob:
1970 <itemizedlist>
1971 <listitem><para>You can setup and run Hob using these commands:
1972 <literallayout class='monospaced'>
1973 $ source oe-init-build-env
1974 $ hob
1975 </literallayout></para></listitem>
1976 <listitem><para>You can set the
1977 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
1978 for which you are building the image.</para></listitem>
1979 <listitem><para>You can modify various policy settings such as the
1980 package format with which to build,
1981 the parallelism BitBake uses, whether or not to build an
1982 external toolchain, and which host to build against.
1983 </para></listitem>
1984 <listitem><para>You can manage
1985 <link linkend='understanding-and-creating-layers'>layers</link>.</para></listitem>
1986 <listitem><para>You can select a base image and then add extra packages for your custom build.
1987 </para></listitem>
1988 <listitem><para>You can launch and monitor the build from within Hob.</para></listitem>
1989 </itemizedlist>
1990 </para>
1991</section>
1992
1993<section id="platdev-appdev-devshell">
1994 <title>Using a Development Shell</title>
1995
1996 <para>
1997 When debugging certain commands or even when just editing packages,
1998 <filename>devshell</filename> can be a useful tool.
1999 When you invoke <filename>devshell</filename>, source files are
2000 extracted into your working directory and patches are applied.
2001 Then, a new terminal is opened and you are placed in the working directory.
2002 In the new terminal, all the OpenEmbedded build-related environment variables are
2003 still defined so you can use commands such as <filename>configure</filename> and
2004 <filename>make</filename>.
2005 The commands execute just as if the OpenEmbedded build system were executing them.
2006 Consequently, working this way can be helpful when debugging a build or preparing
2007 software to be used with the OpenEmbedded build system.
2008 </para>
2009
2010 <para>
2011 Following is an example that uses <filename>devshell</filename> on a target named
2012 <filename>matchbox-desktop</filename>:
2013 <literallayout class='monospaced'>
2014 $ bitbake matchbox-desktop -c devshell
2015 </literallayout>
2016 </para>
2017
2018 <para>
2019 This command spawns a terminal with a shell prompt within the OpenEmbedded build environment.
2020 The <ulink url='&YOCTO_DOCS_REF_URL;#var-OE_TERMINAL'><filename>OE_TERMINAL</filename></ulink>
2021 variable controls what type of shell is opened.
2022 </para>
2023
2024 <para>
2025 For spawned terminals, the following occurs:
2026 <itemizedlist>
2027 <listitem><para>The <filename>PATH</filename> variable includes the
2028 cross-toolchain.</para></listitem>
2029 <listitem><para>The <filename>pkgconfig</filename> variables find the correct
2030 <filename>.pc</filename> files.</para></listitem>
2031 <listitem><para>The <filename>configure</filename> command finds the
2032 Yocto Project site files as well as any other necessary files.</para></listitem>
2033 </itemizedlist>
2034 </para>
2035
2036 <para>
2037 Within this environment, you can run configure or compile
2038 commands as if they were being run by
2039 the OpenEmbedded build system itself.
2040 As noted earlier, the working directory also automatically changes to the
2041 Source Directory (<ulink url='&YOCTO_DOCS_REF_URL;#var-S'><filename>S</filename></ulink>).
2042 </para>
2043
2044 <para>
2045 When you are finished, you just exit the shell or close the terminal window.
2046 </para>
2047
2048 <note>
2049 <para>
2050 It is worth remembering that when using <filename>devshell</filename>
2051 you need to use the full compiler name such as <filename>arm-poky-linux-gnueabi-gcc</filename>
2052 instead of just using <filename>gcc</filename>.
2053 The same applies to other applications such as <filename>binutils</filename>,
2054 <filename>libtool</filename> and so forth.
2055 BitBake sets up environment variables such as <filename>CC</filename>
2056 to assist applications, such as <filename>make</filename> to find the correct tools.
2057 </para>
2058
2059 <para>
2060 It is also worth noting that <filename>devshell</filename> still works over
2061 X11 forwarding and similar situations.
2062 </para>
2063 </note>
2064</section>
2065
2066</chapter>
2067<!--
2068vim: expandtab tw=80 ts=4
2069-->
diff --git a/documentation/dev-manual/dev-manual-newbie.xml b/documentation/dev-manual/dev-manual-newbie.xml
new file mode 100644
index 0000000000..37fa5afdd5
--- /dev/null
+++ b/documentation/dev-manual/dev-manual-newbie.xml
@@ -0,0 +1,1687 @@
1<!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='dev-manual-newbie'>
6
7<title>The Yocto Project Open Source Development Environment</title>
8
9<para>
10 This chapter helps you understand the Yocto Project as an open source development project.
11 In general, working in an open source environment is very different from working in a
12 closed, proprietary environment.
13 Additionally, the Yocto Project uses specific tools and constructs as part of its development
14 environment.
15 This chapter specifically addresses open source philosophy, using the
16 Yocto Project in a team environment, source repositories, Yocto Project
17 terms, licensing, the open source distributed version control system Git,
18 workflows, bug tracking, and how to submit changes.
19</para>
20
21<section id='open-source-philosophy'>
22 <title>Open Source Philosophy</title>
23
24 <para>
25 Open source philosophy is characterized by software development directed by peer production
26 and collaboration through an active community of developers.
27 Contrast this to the more standard centralized development models used by commercial software
28 companies where a finite set of developers produces a product for sale using a defined set
29 of procedures that ultimately result in an end product whose architecture and source material
30 are closed to the public.
31 </para>
32
33 <para>
34 Open source projects conceptually have differing concurrent agendas, approaches, and production.
35 These facets of the development process can come from anyone in the public (community) that has a
36 stake in the software project.
37 The open source environment contains new copyright, licensing, domain, and consumer issues
38 that differ from the more traditional development environment.
39 In an open source environment, the end product, source material, and documentation are
40 all available to the public at no cost.
41 </para>
42
43 <para>
44 A benchmark example of an open source project is the Linux Kernel, which was initially conceived
45 and created by Finnish computer science student Linus Torvalds in 1991.
46 Conversely, a good example of a non-open source project is the
47 <trademark class='registered'>Windows</trademark> family of operating
48 systems developed by <trademark class='registered'>Microsoft</trademark> Corporation.
49 </para>
50
51 <para>
52 Wikipedia has a good historical description of the Open Source Philosophy
53 <ulink url='http://en.wikipedia.org/wiki/Open_source'>here</ulink>.
54 You can also find helpful information on how to participate in the Linux Community
55 <ulink url='http://ldn.linuxfoundation.org/book/how-participate-linux-community'>here</ulink>.
56 </para>
57</section>
58
59<section id="usingpoky-changes-collaborate">
60 <title>Using the Yocto Project in a Team Environment</title>
61
62 <para>
63 It might not be immediately clear how you can use the Yocto
64 Project in a team environment, or scale it for a large team of
65 developers.
66 One of the strengths of the Yocto Project is that it is extremely
67 flexible.
68 Thus, you can adapt it to many different use cases and scenarios.
69 However, these characteristics can cause a struggle if you are trying
70 to create a working setup that scales across a large team.
71 </para>
72
73 <para>
74 To help with these types of situations, this section presents
75 some of the project's most successful experiences,
76 practices, solutions, and available technologies that work well.
77 Keep in mind, the information here is a starting point.
78 You can build off it and customize it to fit any
79 particular working environment and set of practices.
80 </para>
81
82 <section id='best-practices-system-configurations'>
83 <title>System Configurations</title>
84
85 <para>
86 Systems across a large team should meet the needs of
87 two types of developers: those working on the contents of the
88 operating system image itself and those developing applications.
89 Regardless of the type of developer, their workstations must
90 be both reasonably powerful and run Linux.
91 </para>
92
93 <section id='best-practices-application-development'>
94 <title>Application Development</title>
95
96 <para>
97 For developers who mainly do application level work
98 on top of an existing software stack,
99 here are some practices that work best:
100 <itemizedlist>
101 <listitem><para>Use a pre-built toolchain that
102 contains the software stack itself.
103 Then, develop the application code on top of the
104 stack.
105 This method works well for small numbers of relatively
106 isolated applications.</para></listitem>
107 <listitem><para>When possible, use the Yocto Project
108 plug-in for the <trademark class='trade'>Eclipse</trademark> IDE
109 and other pieces of Application Development
110 Technology (ADT).
111 For more information, see the
112 "<link linkend='application-development-workflow'>Application
113 Development Workflow</link>" section as well as the
114 <ulink url='&YOCTO_DOCS_ADT_URL;'>Yocto Project Application Developer's Guide</ulink>.
115 </para></listitem>
116 <listitem><para>Keep your cross-development toolchains
117 updated.
118 You can do this through provisioning either as new
119 toolchain downloads or as updates through a package
120 update mechanism using <filename>opkg</filename>
121 to provide updates to an existing toolchain.
122 The exact mechanics of how and when to do this are a
123 question for local policy.</para></listitem>
124 <listitem><para>Use multiple toolchains installed locally
125 into different locations to allow development across
126 versions.</para></listitem>
127 </itemizedlist>
128 </para>
129 </section>
130
131 <section id='best-practices-core-system-development'>
132 <title>Core System Development</title>
133
134 <para>
135 For core system development, it is often best to have the
136 build system itself available on the developer workstations
137 so developers can run their own builds and directly
138 rebuild the software stack.
139 You should keep the core system unchanged as much as
140 possible and do your work in layers on top of the core system.
141 Doing so gives you a greater level of portability when
142 upgrading to new versions of the core system or Board
143 Support Packages (BSPs).
144 You can share layers amongst the developers of a particular
145 project and contain the policy configuration that defines
146 the project.
147 </para>
148
149 <para>
150 Aside from the previous best practices, there exists a number
151 of tips and tricks that can help speed up core development
152 projects:
153 <itemizedlist>
154 <listitem><para>Use a
155 <ulink url='&YOCTO_DOCS_REF_URL;#shared-state-cache'>Shared State Cache</ulink>
156 (sstate) among groups of developers who are on a
157 fast network.
158 The best way to share sstate is through a
159 Network File System (NFS) share.
160 The first user to build a given component for the
161 first time contributes that object to the sstate,
162 while subsequent builds from other developers then
163 reuse the object rather than rebuild it themselves.
164 </para>
165 <para>Although it is possible to use other protocols for the
166 sstate such as HTTP and FTP, you should avoid these.
167 Using HTTP limits the sstate to read-only and
168 FTP provides poor performance.
169 </para></listitem>
170 <listitem><para>Have autobuilders contribute to the sstate
171 pool similarly to how the developer workstations
172 contribute.
173 For information, see the
174 "<link linkend='best-practices-autobuilders'>Autobuilders</link>"
175 section.</para></listitem>
176 <listitem><para>Build stand-alone tarballs that contain
177 "missing" system requirements if for some reason
178 developer workstations do not meet minimum system
179 requirements such as latest Python versions,
180 <filename>chrpath</filename>, or other tools.
181 You can install and relocate the tarball exactly as you
182 would the usual cross-development toolchain so that
183 all developers can meet minimum version requirements
184 on most distributions.</para></listitem>
185 <listitem><para>Use a small number of shared,
186 high performance systems for testing purposes
187 (e.g. dual, six-core Xeons with 24 Gbytes of RAM
188 and plenty of disk space).
189 Developers can use these systems for wider, more
190 extensive testing while they continue to develop
191 locally using their primary development system.
192 </para></listitem>
193 <listitem><para>Enable the PR Service when package feeds
194 need to be incremental with continually increasing
195 <ulink url='&YOCTO_DOCS_REF_URL;#var-PR'>PR</ulink>
196 values.
197 Typically, this situation occurs when you use or
198 publish package feeds and use a shared state.
199 You should enable the PR Service for all users who
200 use the shared state pool.
201 For more information on the PR Service, see the
202 "<link linkend='working-with-a-pr-service'>Working With a PR Service</link>".
203 </para></listitem>
204 </itemizedlist>
205 </para>
206 </section>
207 </section>
208
209 <section id='best-practices-source-control-management'>
210 <title>Source Control Management (SCM)</title>
211
212 <para>
213 Keeping your
214 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
215 and any software you are developing under the
216 control of an SCM system that is compatible
217 with the OpenEmbedded build system is advisable.
218 Of the SCMs BitBake supports, the
219 Yocto Project team strongly recommends using
220 <link linkend='git'>Git</link>.
221 Git is a distributed system that is easy to backup,
222 allows you to work remotely, and then connects back to the
223 infrastructure.
224 <note>
225 For information about BitBake, see the
226 <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
227 </note>
228 </para>
229
230 <para>
231 It is relatively easy to set up Git services and create
232 infrastructure like
233 <ulink url='&YOCTO_GIT_URL;'>http://git.yoctoproject.org</ulink>,
234 which is based on server software called
235 <filename>gitolite</filename> with <filename>cgit</filename>
236 being used to generate the web interface that lets you view the
237 repositories.
238 The <filename>gitolite</filename> software identifies users
239 using SSH keys and allows branch-based
240 access controls to repositories that you can control as little
241 or as much as necessary.
242 </para>
243
244 <note>
245 The setup of these services is beyond the scope of this manual.
246 However, sites such as these exist that describe how to perform
247 setup:
248 <itemizedlist>
249 <listitem><para><ulink url='http://git-scm.com/book/ch4-8.html'>Git documentation</ulink>:
250 Describes how to install <filename>gitolite</filename>
251 on the server.</para></listitem>
252 <listitem><para><ulink url='http://sitaramc.github.com/gitolite/master-toc.html'>The <filename>gitolite</filename> master index</ulink>:
253 All topics for <filename>gitolite</filename>.
254 </para></listitem>
255 <listitem><para><ulink url='https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools'>Interfaces, frontends, and tools</ulink>:
256 Documentation on how to create interfaces and frontends
257 for Git.</para></listitem>
258 </itemizedlist>
259 </note>
260 </section>
261
262 <section id='best-practices-autobuilders'>
263 <title>Autobuilders</title>
264
265 <para>
266 Autobuilders are often the core of a development project.
267 It is here that changes from individual developers are brought
268 together and centrally tested and subsequent decisions about
269 releases can be made.
270 Autobuilders also allow for "continuous integration" style
271 testing of software components and regression identification
272 and tracking.
273 </para>
274
275 <para>
276 See "<ulink url='http://autobuilder.yoctoproject.org'>Yocto Project Autobuilder</ulink>"
277 for more information and links to buildbot.
278 The Yocto Project team has found this implementation
279 works well in this role.
280 A public example of this is the Yocto Project
281 Autobuilders, which we use to test the overall health of the
282 project.
283 </para>
284
285 <para>
286 The features of this system are:
287 <itemizedlist>
288 <listitem><para>Highlights when commits break the build.
289 </para></listitem>
290 <listitem><para>Populates an sstate cache from which
291 developers can pull rather than requiring local
292 builds.</para></listitem>
293 <listitem><para>Allows commit hook triggers,
294 which trigger builds when commits are made.
295 </para></listitem>
296 <listitem><para>Allows triggering of automated image booting
297 and testing under the QuickEMUlator (QEMU).
298 </para></listitem>
299 <listitem><para>Supports incremental build testing and
300 from-scratch builds.</para></listitem>
301 <listitem><para>Shares output that allows developer
302 testing and historical regression investigation.
303 </para></listitem>
304 <listitem><para>Creates output that can be used for releases.
305 </para></listitem>
306 <listitem><para>Allows scheduling of builds so that resources
307 can be used efficiently.</para></listitem>
308 </itemizedlist>
309 </para>
310 </section>
311
312 <section id='best-practices-policies-and-change-flow'>
313 <title>Policies and Change Flow</title>
314
315 <para>
316 The Yocto Project itself uses a hierarchical structure and a
317 pull model.
318 Scripts exist to create and send pull requests
319 (i.e. <filename>create-pull-request</filename> and
320 <filename>send-pull-request</filename>).
321 This model is in line with other open source projects where
322 maintainers are responsible for specific areas of the project
323 and a single maintainer handles the final "top-of-tree" merges.
324 </para>
325
326 <note>
327 You can also use a more collective push model.
328 The <filename>gitolite</filename> software supports both the
329 push and pull models quite easily.
330 </note>
331
332 <para>
333 As with any development environment, it is important
334 to document the policy used as well as any main project
335 guidelines so they are understood by everyone.
336 It is also a good idea to have well structured
337 commit messages, which are usually a part of a project's
338 guidelines.
339 Good commit messages are essential when looking back in time and
340 trying to understand why changes were made.
341 </para>
342
343 <para>
344 If you discover that changes are needed to the core layer of the
345 project, it is worth sharing those with the community as soon
346 as possible.
347 Chances are if you have discovered the need for changes, someone
348 else in the community needs them also.
349 </para>
350 </section>
351
352 <section id='best-practices-summary'>
353 <title>Summary</title>
354
355 <para>
356 This section summarizes the key recommendations described in the
357 previous sections:
358 <itemizedlist>
359 <listitem><para>Use <link linkend='git'>Git</link>
360 as the source control system.</para></listitem>
361 <listitem><para>Maintain your Metadata in layers that make sense
362 for your situation.
363 See the "<link linkend='understanding-and-creating-layers'>Understanding
364 and Creating Layers</link>" section for more information on
365 layers.</para></listitem>
366 <listitem><para>
367 Separate the project's Metadata and code by using
368 separate Git repositories.
369 See the
370 "<link linkend='yocto-project-repositories'>Yocto Project Source Repositories</link>"
371 section for information on these repositories.
372 See the
373 "<link linkend='getting-setup'>Getting Set Up</link>"
374 section for information on how to set up local Git
375 repositories for related upstream Yocto Project
376 Git repositories.
377 </para></listitem>
378 <listitem><para>Set up the directory for the shared state cache
379 (<ulink url='&YOCTO_DOCS_REF_URL;#var-SSTATE_DIR'><filename>SSTATE_DIR</filename></ulink>)
380 where it makes sense.
381 For example, set up the sstate cache on a system used
382 by developers in the same organization and share the
383 same source directories on their machines.
384 </para></listitem>
385 <listitem><para>Set up an Autobuilder and have it populate the
386 sstate cache and source directories.</para></listitem>
387 <listitem><para>The Yocto Project community encourages you
388 to send patches to the project to fix bugs or add features.
389 If you do submit patches, follow the project commit
390 guidelines for writing good commit messages.
391 See the "<link linkend='how-to-submit-a-change'>How to Submit a Change</link>"
392 section.</para></listitem>
393 <listitem><para>Send changes to the core sooner than later
394 as others are likely to run into the same issues.
395 For some guidance on mailing lists to use, see the list in the
396 "<link linkend='how-to-submit-a-change'>How to Submit a Change</link>"
397 section.
398 For a description of the available mailing lists, see the
399 "<ulink url='&YOCTO_DOCS_REF_URL;#resources-mailinglist'>Mailing Lists</ulink>"
400 section in the Yocto Project Reference Manual.
401 </para></listitem>
402 </itemizedlist>
403 </para>
404 </section>
405</section>
406
407<section id='yocto-project-repositories'>
408 <title>Yocto Project Source Repositories</title>
409
410 <para>
411 The Yocto Project team maintains complete source repositories for all
412 Yocto Project files at
413 <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi'></ulink>.
414 This web-based source code browser is organized into categories by
415 function such as IDE Plugins, Matchbox, Poky, Yocto Linux Kernel, and
416 so forth.
417 From the interface, you can click on any particular item in the "Name"
418 column and see the URL at the bottom of the page that you need to clone
419 a Git repository for that particular item.
420 Having a local Git repository of the
421 <link linkend='source-directory'>Source Directory</link>, which is
422 usually named "poky", allows
423 you to make changes, contribute to the history, and ultimately enhance
424 the Yocto Project's tools, Board Support Packages, and so forth.
425 </para>
426
427 <para>
428 For any supported release of Yocto Project, you can also go to the
429 <ulink url='&YOCTO_HOME_URL;'>Yocto Project Website</ulink> and
430 select the "Downloads" tab and get a released tarball of the
431 <filename>poky</filename> repository or any supported BSP tarballs.
432 Unpacking these tarballs gives you a snapshot of the released
433 files.
434 <note><title>Notes</title>
435 <itemizedlist>
436 <listitem><para>
437 The recommended method for setting up the Yocto Project
438 <link linkend='source-directory'>Source Directory</link>
439 and the files for supported BSPs
440 (e.g., <filename>meta-intel</filename>) is to use
441 <link linkend='git'>Git</link> to create a local copy of
442 the upstream repositories.
443 </para></listitem>
444 <listitem><para>
445 Be sure to always work in matching branches for both
446 the <filename>meta-intel</filename> repository and the
447 <link linkend='source-directory'>Source Directory</link>
448 (i.e. <filename>poky</filename>) repository.
449 For example, if you have checked out the "master" branch
450 of <filename>poky</filename> and you are going to use
451 <filename>meta-intel</filename>, be sure to checkout the
452 "master" branch of <filename>meta-intel</filename>.
453 </para></listitem>
454 </itemizedlist>
455 </note>
456 </para>
457
458 <para>
459 In summary, here is where you can get the project files needed for development:
460 <itemizedlist>
461 <listitem><para id='source-repositories'><emphasis><ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi'>Source Repositories:</ulink></emphasis>
462 This area contains IDE Plugins, Matchbox, Poky, Poky Support, Tools, Yocto Linux Kernel, and Yocto
463 Metadata Layers.
464 You can create local copies of Git repositories for each of these areas.</para>
465 <para>
466 <imagedata fileref="figures/source-repos.png" align="center" width="6in" depth="4in" />
467 </para></listitem>
468 <listitem><para><anchor id='index-downloads' /><emphasis><ulink url='&YOCTO_DL_URL;/releases/'>Index of /releases:</ulink></emphasis>
469 This is an index of releases such as
470 the <trademark class='trade'>Eclipse</trademark>
471 Yocto Plug-in, miscellaneous support, Poky, Pseudo, installers for cross-development toolchains,
472 and all released versions of Yocto Project in the form of images or tarballs.
473 Downloading and extracting these files does not produce a local copy of the
474 Git repository but rather a snapshot of a particular release or image.</para>
475 <para>
476 <imagedata fileref="figures/index-downloads.png" align="center" width="6in" depth="3.5in" />
477 </para></listitem>
478 <listitem><para><emphasis>"Downloads" page for the
479 <ulink url='&YOCTO_HOME_URL;'>Yocto Project Website</ulink>:</emphasis>
480 Access this page by going to the website and then selecting
481 the "Downloads" tab.
482 This page allows you to download any Yocto Project
483 release or Board Support Package (BSP) in tarball form.
484 The tarballs are similar to those found in the
485 <ulink url='&YOCTO_DL_URL;/releases/'>Index of /releases:</ulink> area.</para>
486 <para>
487 <imagedata fileref="figures/yp-download.png" align="center" width="6in" depth="4in" />
488 </para></listitem>
489 </itemizedlist>
490 </para>
491</section>
492
493<section id='yocto-project-terms'>
494 <title>Yocto Project Terms</title>
495
496 <para>
497 Following is a list of terms and definitions users new to the Yocto Project development
498 environment might find helpful.
499 While some of these terms are universal, the list includes them just in case:
500 <itemizedlist>
501 <listitem><para><emphasis>Append Files:</emphasis> Files that append build information to
502 a recipe file.
503 Append files are known as BitBake append files and <filename>.bbappend</filename> files.
504 The OpenEmbedded build system expects every append file to have a corresponding
505 recipe (<filename>.bb</filename>) file.
506 Furthermore, the append file and corresponding recipe file
507 must use the same root filename.
508 The filenames can differ only in the file type suffix used (e.g.
509 <filename>formfactor_0.0.bb</filename> and <filename>formfactor_0.0.bbappend</filename>).
510 </para>
511 <para>Information in append files overrides the information in the similarly-named recipe file.
512 For an example of an append file in use, see the
513 "<link linkend='using-bbappend-files'>Using .bbappend Files</link>" section.
514 </para></listitem>
515 <listitem><para id='bitbake-term'><emphasis>BitBake:</emphasis>
516 The task executor and scheduler used by the OpenEmbedded build
517 system to build images.
518 For more information on BitBake, see the
519 <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
520 </para></listitem>
521 <listitem>
522 <para id='build-directory'><emphasis>Build Directory:</emphasis>
523 This term refers to the area used by the OpenEmbedded build
524 system for builds.
525 The area is created when you <filename>source</filename> the
526 setup environment script that is found in the Source Directory
527 (i.e. <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
528 or
529 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>).
530 The <ulink url='&YOCTO_DOCS_REF_URL;#var-TOPDIR'><filename>TOPDIR</filename></ulink>
531 variable points to the Build Directory.</para>
532
533 <para>
534 You have a lot of flexibility when creating the Build
535 Directory.
536 Following are some examples that show how to create the
537 directory.
538 The examples assume your
539 <link linkend='source-directory'>Source Directory</link> is
540 named <filename>poky</filename>:
541 <itemizedlist>
542 <listitem><para>Create the Build Directory inside your
543 Source Directory and let the name of the Build
544 Directory default to <filename>build</filename>:
545 <literallayout class='monospaced'>
546 $ cd $HOME/poky
547 $ source &OE_INIT_FILE;
548 </literallayout></para></listitem>
549 <listitem><para>Create the Build Directory inside your
550 home directory and specifically name it
551 <filename>test-builds</filename>:
552 <literallayout class='monospaced'>
553 $ cd $HOME
554 $ source poky/&OE_INIT_FILE; test-builds
555 </literallayout></para></listitem>
556 <listitem><para>
557 Provide a directory path and
558 specifically name the Build Directory.
559 Any intermediate folders in the pathname must
560 exist.
561 This next example creates a Build Directory named
562 <filename>YP-&POKYVERSION;</filename>
563 in your home directory within the existing
564 directory <filename>mybuilds</filename>:
565 <literallayout class='monospaced'>
566 $cd $HOME
567 $ source $HOME/poky/&OE_INIT_FILE; $HOME/mybuilds/YP-&POKYVERSION;
568 </literallayout></para></listitem>
569 </itemizedlist>
570 <note>
571 By default, the Build Directory contains
572 <ulink url='&YOCTO_DOCS_REF_URL;#var-TMPDIR'><filename>TMPDIR</filename></ulink>,
573 which is a temporary directory the build system uses for
574 its work.
575 <filename>TMPDIR</filename> cannot be under NFS.
576 Thus, by default, the Build Directory cannot be under NFS.
577 However, if you need the Build Directory to be under NFS,
578 you can set this up by setting <filename>TMPDIR</filename>
579 in your <filename>local.conf</filename> file
580 to use a local drive.
581 Doing so effectively separates <filename>TMPDIR</filename>
582 from <filename>TOPDIR</filename>, which is the Build
583 Directory.
584 </note>
585 </para></listitem>
586 <listitem><para id='build-system-term'><emphasis>Build System:</emphasis>
587 In the context of the Yocto Project,
588 this term refers to the OpenEmbedded build system used by the project.
589 This build system is based on the project known as "Poky."
590 For some historical information about Poky, see the
591 <link linkend='poky'>Poky</link> term.
592 </para></listitem>
593 <listitem><para><emphasis>Classes:</emphasis> Files that provide for logic encapsulation
594 and inheritance so that commonly used patterns can be defined once and then easily used
595 in multiple recipes.
596 For reference information on the Yocto Project classes, see the
597 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-classes'>Classes</ulink>" chapter of the
598 Yocto Project Reference Manual.
599 Class files end with the <filename>.bbclass</filename> filename extension.
600 </para></listitem>
601 <listitem><para><emphasis>Configuration File:</emphasis>
602 Configuration information in various <filename>.conf</filename>
603 files provides global definitions of variables.
604 The <filename>conf/local.conf</filename> configuration file in
605 the
606 <link linkend='build-directory'>Build Directory</link>
607 contains user-defined variables that affect every build.
608 The <filename>meta-yocto/conf/distro/poky.conf</filename>
609 configuration file defines Yocto "distro" configuration
610 variables used only when building with this policy.
611 Machine configuration files, which
612 are located throughout the
613 <link linkend='source-directory'>Source Directory</link>, define
614 variables for specific hardware and are only used when building
615 for that target (e.g. the
616 <filename>machine/beaglebone.conf</filename> configuration
617 file defines variables for the Texas Instruments ARM Cortex-A8
618 development board).
619 Configuration files end with a <filename>.conf</filename>
620 filename extension.
621 </para></listitem>
622 <listitem><para id='cross-development-toolchain'>
623 <emphasis>Cross-Development Toolchain:</emphasis>
624 In general, a cross-development toolchain is a collection of
625 software development tools and utilities that run on one
626 architecture and allow you to develop software for a
627 different, or targeted, architecture.
628 These toolchains contain cross-compilers, linkers, and
629 debuggers that are specific to the target architecture.
630 </para>
631
632 <para>The Yocto Project supports two different cross-development
633 toolchains:
634 <itemizedlist>
635 <listitem><para>A toolchain only used by and within
636 BitBake when building an image for a target
637 architecture.</para></listitem>
638 <listitem><para>A relocatable toolchain used outside of
639 BitBake by developers when developing applications
640 that will run on a targeted device.
641 Sometimes this relocatable cross-development
642 toolchain is referred to as the meta-toolchain.
643 </para></listitem>
644 </itemizedlist>
645 </para>
646
647 <para>
648 Creation of these toolchains is simple and automated.
649 For information on toolchain concepts as they apply to the
650 Yocto Project, see the
651 "<ulink url='&YOCTO_DOCS_REF_URL;#cross-development-toolchain-generation'>Cross-Development Toolchain Generation</ulink>"
652 section in the Yocto Project Reference Manual.
653 You can also find more information on using the
654 relocatable toolchain in the
655 <ulink url='&YOCTO_DOCS_ADT_URL;'>Yocto Project
656 Application Developer's Guide</ulink>.
657 </para></listitem>
658 <listitem><para><emphasis>Image:</emphasis>
659 An image is the result produced when BitBake processes a given
660 collection of recipes and related Metadata.
661 Images are the binary output that run on specific hardware or
662 QEMU and are used for specific use-cases.
663 For a list of the supported image types that the Yocto Project provides, see the
664 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>"
665 chapter in the Yocto Project Reference Manual.</para></listitem>
666 <listitem><para id='layer'><emphasis>Layer:</emphasis> A collection of recipes representing the core,
667 a BSP, or an application stack.
668 For a discussion on BSP Layers, see the
669 "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>"
670 section in the Yocto Project Board Support Packages (BSP)
671 Developer's Guide.</para></listitem>
672 <listitem><para id='meta-toolchain'><emphasis>Meta-Toolchain:</emphasis>
673 A term sometimes used for
674 <link linkend='cross-development-toolchain'>Cross-Development Toolchain</link>.
675 </para></listitem>
676 <listitem><para id='metadata'><emphasis>Metadata:</emphasis>
677 The files that BitBake parses when building an image.
678 In general, Metadata includes recipes, classes, and
679 configuration files.
680 In the context of the kernel ("kernel Metadata"),
681 it refers to Metadata in the <filename>meta</filename>
682 branches of the kernel source Git repositories.
683 </para></listitem>
684 <listitem><para id='oe-core'><emphasis>OE-Core:</emphasis> A core set of Metadata originating
685 with OpenEmbedded (OE) that is shared between OE and the Yocto Project.
686 This Metadata is found in the <filename>meta</filename> directory of the
687 <link linkend='source-directory'>Source Directory</link>.</para></listitem>
688 <listitem><para><emphasis>Package:</emphasis>
689 In the context of the Yocto Project, this term refers a
690 recipe's packaged output produced by BitBake (i.e. a
691 "baked recipe").
692 A package is generally the compiled binaries produced from the
693 recipe's sources.
694 You "bake" something by running it through BitBake.</para>
695 <para>It is worth noting that the term "package" can, in general, have subtle
696 meanings. For example, the packages referred to in the
697 "<ulink url='&YOCTO_DOCS_QS_URL;#packages'>The Packages</ulink>" section are
698 compiled binaries that when installed add functionality to your Linux
699 distribution.</para>
700 <para>Another point worth noting is that historically within the Yocto Project,
701 recipes were referred to as packages - thus, the existence of several BitBake
702 variables that are seemingly mis-named,
703 (e.g. <ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink>,
704 <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>, and
705 <ulink url='&YOCTO_DOCS_REF_URL;#var-PE'><filename>PE</filename></ulink>).
706 </para></listitem>
707 <listitem><para><emphasis>Package Groups:</emphasis>
708 Arbitrary groups of software Recipes.
709 You use package groups to hold recipes that, when built,
710 usually accomplish a single task.
711 For example, a package group could contain the recipes for a
712 company’s proprietary or value-add software.
713 Or, the package group could contain the recipes that enable
714 graphics.
715 A package group is really just another recipe.
716 Because package group files are recipes, they end with the
717 <filename>.bb</filename> filename extension.</para></listitem>
718 <listitem><para id='poky'><emphasis>Poky:</emphasis> The term "poky" can mean several things.
719 In its most general sense, it is an open-source project that was initially developed
720 by OpenedHand. With OpenedHand, poky was developed off of the existing OpenEmbedded
721 build system becoming a build system for embedded images.
722 After Intel Corporation acquired OpenedHand, the project poky became the basis for
723 the Yocto Project's build system.</para>
724 <para>
725 Within the Yocto Project source repositories, <filename>poky</filename>
726 exists as a separate Git repository
727 that can be cloned to yield a local copy on the host system.
728 Thus, "poky" can refer to the local copy of the Source Directory used to develop within
729 the Yocto Project.</para></listitem>
730 <listitem><para><emphasis>Recipe:</emphasis>
731 A set of instructions for building packages.
732 A recipe describes where you get source code and which patches
733 to apply.
734 Recipes describe dependencies for libraries or for other
735 recipes, and they also contain configuration and compilation
736 options.
737 Recipes contain the logical unit of execution, the software
738 to build, the images to build, and use the
739 <filename>.bb</filename> file extension.
740 </para></listitem>
741 <listitem>
742 <para id='source-directory'><emphasis>Source Directory:</emphasis>
743 This term refers to the directory structure created as a result
744 of creating a local copy of the <filename>poky</filename> Git
745 repository <filename>git://git.yoctoproject.org/poky</filename>
746 or expanding a released <filename>poky</filename> tarball.
747 <note>
748 Creating a local copy of the <filename>poky</filename>
749 Git repository is the recommended method for setting up
750 your Source Directory.
751 </note>
752 Sometimes you might hear the term "poky directory" used to refer
753 to this directory structure.
754 <note>
755 The OpenEmbedded build system does not support file or
756 directory names that contain spaces.
757 Be sure that the Source Directory you use does not contain
758 these types of names.
759 </note></para>
760
761 <para>The Source Directory contains BitBake, Documentation,
762 Metadata and other files that all support the Yocto Project.
763 Consequently, you must have the Source Directory in place on
764 your development system in order to do any development using
765 the Yocto Project.</para>
766
767 <para>When you create a local copy of the Git repository, you
768 can name the repository anything you like.
769 Throughout much of the documentation, "poky"
770 is used as the name of the top-level folder of the local copy of
771 the poky Git repository.
772 So, for example, cloning the <filename>poky</filename> Git
773 repository results in a local Git repository whose top-level
774 folder is also named "poky".</para>
775
776 <para>While it is not recommended that you use tarball expansion
777 to setup the Source Directory, if you do, the top-level
778 directory name of the Source Directory is derived from the
779 Yocto Project release tarball.
780 For example, downloading and unpacking
781 <filename>&YOCTO_POKY_TARBALL;</filename> results in a
782 Source Directory whose root folder is named
783 <filename>&YOCTO_POKY;</filename>.</para>
784
785 <para>It is important to understand the differences between the
786 Source Directory created by unpacking a released tarball as
787 compared to cloning
788 <filename>git://git.yoctoproject.org/poky</filename>.
789 When you unpack a tarball, you have an exact copy of the files
790 based on the time of release - a fixed release point.
791 Any changes you make to your local files in the Source Directory
792 are on top of the release and will remain local only.
793 On the other hand, when you clone the <filename>poky</filename>
794 Git repository, you have an active development repository with
795 access to the upstream repository's branches and tags.
796 In this case, any local changes you make to the local
797 Source Directory can be later applied to active development
798 branches of the upstream <filename>poky</filename> Git
799 repository.</para>
800
801 <para>For more information on concepts related to Git
802 repositories, branches, and tags, see the
803 "<link linkend='repositories-tags-and-branches'>Repositories, Tags, and Branches</link>"
804 section.</para></listitem>
805 <listitem><para><emphasis>Task:</emphasis>
806 A unit of execution for BitBake (e.g.
807 <filename>do_compile</filename>,
808 <filename>do_fetch</filename>, <filename>do_patch</filename>,
809 and so forth).
810 </para></listitem>
811 <listitem><para><emphasis>Upstream:</emphasis> A reference to source code or repositories
812 that are not local to the development system but located in a master area that is controlled
813 by the maintainer of the source code.
814 For example, in order for a developer to work on a particular piece of code, they need to
815 first get a copy of it from an "upstream" source.</para></listitem>
816 </itemizedlist>
817 </para>
818</section>
819
820<section id='licensing'>
821 <title>Licensing</title>
822
823 <para>
824 Because open source projects are open to the public, they have different licensing structures in place.
825 License evolution for both Open Source and Free Software has an interesting history.
826 If you are interested in this history, you can find basic information here:
827 <itemizedlist>
828 <listitem><para><ulink url='http://en.wikipedia.org/wiki/Open-source_license'>Open source license history</ulink>
829 </para></listitem>
830 <listitem><para><ulink url='http://en.wikipedia.org/wiki/Free_software_license'>Free software license
831 history</ulink></para></listitem>
832 </itemizedlist>
833 </para>
834
835 <para>
836 In general, the Yocto Project is broadly licensed under the Massachusetts Institute of Technology
837 (MIT) License.
838 MIT licensing permits the reuse of software within proprietary software as long as the
839 license is distributed with that software.
840 MIT is also compatible with the GNU General Public License (GPL).
841 Patches to the Yocto Project follow the upstream licensing scheme.
842 You can find information on the MIT license at
843 <ulink url='http://www.opensource.org/licenses/mit-license.php'>here</ulink>.
844 You can find information on the GNU GPL <ulink url='http://www.opensource.org/licenses/LGPL-3.0'>
845 here</ulink>.
846 </para>
847
848 <para>
849 When you build an image using the Yocto Project, the build process uses a
850 known list of licenses to ensure compliance.
851 You can find this list in the
852 <link linkend='source-directory'>Source Directory</link> at
853 <filename>meta/files/common-licenses</filename>.
854 Once the build completes, the list of all licenses found and used during that build are
855 kept in the
856 <link linkend='build-directory'>Build Directory</link> at
857 <filename>tmp/deploy/licenses</filename>.
858 </para>
859
860 <para>
861 If a module requires a license that is not in the base list, the build process
862 generates a warning during the build.
863 These tools make it easier for a developer to be certain of the licenses with which
864 their shipped products must comply.
865 However, even with these tools it is still up to the developer to resolve potential licensing issues.
866 </para>
867
868 <para>
869 The base list of licenses used by the build process is a combination of the Software Package
870 Data Exchange (SPDX) list and the Open Source Initiative (OSI) projects.
871 <ulink url='http://spdx.org'>SPDX Group</ulink> is a working group of the Linux Foundation
872 that maintains a specification
873 for a standard format for communicating the components, licenses, and copyrights
874 associated with a software package.
875 <ulink url='http://opensource.org'>OSI</ulink> is a corporation dedicated to the Open Source
876 Definition and the effort for reviewing and approving licenses that
877 conform to the Open Source Definition (OSD).
878 </para>
879
880 <para>
881 You can find a list of the combined SPDX and OSI licenses that the
882 Yocto Project uses in the
883 <filename>meta/files/common-licenses</filename> directory in your
884 <link linkend='source-directory'>Source Directory</link>.
885 </para>
886
887 <para>
888 For information that can help you maintain compliance with various
889 open source licensing during the lifecycle of a product created using
890 the Yocto Project, see the
891 "<link linkend='maintaining-open-source-license-compliance-during-your-products-lifecycle'>Maintaining Open Source License Compliance During Your Product's Lifecycle</link>"
892 section.
893 </para>
894</section>
895
896<section id='git'>
897 <title>Git</title>
898
899 <para>
900 The Yocto Project makes extensive use of Git,
901 which is a free, open source distributed version control system.
902 Git supports distributed development, non-linear development, and can handle large projects.
903 It is best that you have some fundamental understanding of how Git tracks projects and
904 how to work with Git if you are going to use the Yocto Project for development.
905 This section provides a quick overview of how Git works and provides you with a summary
906 of some essential Git commands.
907 </para>
908
909 <para>
910 For more information on Git, see
911 <ulink url='http://git-scm.com/documentation'></ulink>.
912 If you need to download Git, go to <ulink url='http://git-scm.com/download'></ulink>.
913 </para>
914
915 <section id='repositories-tags-and-branches'>
916 <title>Repositories, Tags, and Branches</title>
917
918 <para>
919 As mentioned earlier in the section
920 "<link linkend='yocto-project-repositories'>Yocto Project Source Repositories</link>",
921 the Yocto Project maintains source repositories at
922 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink>.
923 If you look at this web-interface of the repositories, each item is a separate
924 Git repository.
925 </para>
926
927 <para>
928 Git repositories use branching techniques that track content change (not files)
929 within a project (e.g. a new feature or updated documentation).
930 Creating a tree-like structure based on project divergence allows for excellent historical
931 information over the life of a project.
932 This methodology also allows for an environment from which you can do lots of
933 local experimentation on projects as you develop changes or new features.
934 </para>
935
936 <para>
937 A Git repository represents all development efforts for a given project.
938 For example, the Git repository <filename>poky</filename> contains all changes
939 and developments for Poky over the course of its entire life.
940 That means that all changes that make up all releases are captured.
941 The repository maintains a complete history of changes.
942 </para>
943
944 <para>
945 You can create a local copy of any repository by "cloning" it with the Git
946 <filename>clone</filename> command.
947 When you clone a Git repository, you end up with an identical copy of the
948 repository on your development system.
949 Once you have a local copy of a repository, you can take steps to develop locally.
950 For examples on how to clone Git repositories, see the
951 "<link linkend='getting-setup'>Getting Set Up</link>" section.
952 </para>
953
954 <para>
955 It is important to understand that Git tracks content change and
956 not files.
957 Git uses "branches" to organize different development efforts.
958 For example, the <filename>poky</filename> repository has
959 <filename>denzil</filename>, <filename>danny</filename>,
960 <filename>dylan</filename>, <filename>dora</filename>,
961 <filename>daisy</filename>, and <filename>master</filename> branches
962 among others.
963 You can see all the branches by going to
964 <ulink url='&YOCTO_GIT_URL;/cgit.cgi/poky/'></ulink> and
965 clicking on the
966 <filename><ulink url='&YOCTO_GIT_URL;/cgit.cgi/poky/refs/heads'>[...]</ulink></filename>
967 link beneath the "Branch" heading.
968 </para>
969
970 <para>
971 Each of these branches represents a specific area of development.
972 The <filename>master</filename> branch represents the current or most recent
973 development.
974 All other branches represent off-shoots of the <filename>master</filename>
975 branch.
976 </para>
977
978 <para>
979 When you create a local copy of a Git repository, the copy has the same set
980 of branches as the original.
981 This means you can use Git to create a local working area (also called a branch)
982 that tracks a specific development branch from the source Git repository.
983 in other words, you can define your local Git environment to work on any development
984 branch in the repository.
985 To help illustrate, here is a set of commands that creates a local copy of the
986 <filename>poky</filename> Git repository and then creates and checks out a local
987 Git branch that tracks the Yocto Project &DISTRO; Release (&DISTRO_NAME;) development:
988 <literallayout class='monospaced'>
989 $ cd ~
990 $ git clone git://git.yoctoproject.org/poky
991 $ cd poky
992 $ git checkout -b &DISTRO_NAME; origin/&DISTRO_NAME;
993 </literallayout>
994 In this example, the name of the top-level directory of your local
995 <link linkend='source-directory'>Source Directory</link>
996 is "poky" and the name of that local working area (local branch)
997 you just created and checked out is "&DISTRO_NAME;".
998 The files in your local repository now reflect the same files that
999 are in the "&DISTRO_NAME;" development branch of the
1000 Yocto Project's "poky" upstream repository.
1001 It is important to understand that when you create and checkout a
1002 local working branch based on a branch name,
1003 your local environment matches the "tip" of that development branch
1004 at the time you created your local branch, which could be
1005 different from the files at the time of a similarly named release.
1006 In other words, creating and checking out a local branch based on
1007 the "&DISTRO_NAME;" branch name is not the same as
1008 cloning and checking out the "master" branch.
1009 Keep reading to see how you create a local snapshot of a Yocto
1010 Project Release.
1011 </para>
1012
1013 <para>
1014 Git uses "tags" to mark specific changes in a repository.
1015 Typically, a tag is used to mark a special point such as the final
1016 change before a project is released.
1017 You can see the tags used with the <filename>poky</filename> Git
1018 repository by going to
1019 <ulink url='&YOCTO_GIT_URL;/cgit.cgi/poky/'></ulink> and
1020 clicking on the
1021 <filename><ulink url='&YOCTO_GIT_URL;/cgit.cgi/poky/refs/tags'>[...]</ulink></filename>
1022 link beneath the "Tag" heading.
1023 </para>
1024
1025 <para>
1026 Some key tags are <filename>dylan-9.0.0</filename>,
1027 <filename>dora-10.0.0</filename>,
1028 and <filename>&DISTRO_NAME;-&POKYVERSION;</filename>.
1029 These tags represent Yocto Project releases.
1030 </para>
1031
1032 <para>
1033 When you create a local copy of the Git repository, you also have access to all the
1034 tags.
1035 Similar to branches, you can create and checkout a local working Git branch based
1036 on a tag name.
1037 When you do this, you get a snapshot of the Git repository that reflects
1038 the state of the files when the change was made associated with that tag.
1039 The most common use is to checkout a working branch that matches a specific
1040 Yocto Project release.
1041 Here is an example:
1042 <literallayout class='monospaced'>
1043 $ cd ~
1044 $ git clone git://git.yoctoproject.org/poky
1045 $ cd poky
1046 $ git checkout -b my-&DISTRO_NAME;-&POKYVERSION; &DISTRO_NAME;-&POKYVERSION;
1047 </literallayout>
1048 In this example, the name of the top-level directory of your local Yocto Project
1049 Files Git repository is <filename>poky</filename>.
1050 And, the name of the local branch you have created and checked out is
1051 <filename>my-&DISTRO_NAME;-&POKYVERSION;</filename>.
1052 The files in your repository now exactly match the Yocto Project &DISTRO;
1053 Release tag (<filename>&DISTRO_NAME;-&POKYVERSION;</filename>).
1054 It is important to understand that when you create and checkout a local
1055 working branch based on a tag, your environment matches a specific point
1056 in time and not the entire development branch.
1057 </para>
1058 </section>
1059
1060 <section id='basic-commands'>
1061 <title>Basic Commands</title>
1062
1063 <para>
1064 Git has an extensive set of commands that lets you manage changes and perform
1065 collaboration over the life of a project.
1066 Conveniently though, you can manage with a small set of basic operations and workflows
1067 once you understand the basic philosophy behind Git.
1068 You do not have to be an expert in Git to be functional.
1069 A good place to look for instruction on a minimal set of Git commands is
1070 <ulink url='http://git-scm.com/documentation'>here</ulink>.
1071 If you need to download Git, you can do so
1072 <ulink url='http://git-scm.com/download'>here</ulink>.
1073 </para>
1074
1075 <para>
1076 If you do not know much about Git, you should educate
1077 yourself by visiting the links previously mentioned.
1078 </para>
1079
1080 <para>
1081 The following list briefly describes some basic Git operations as a way to get started.
1082 As with any set of commands, this list (in most cases) simply shows the base command and
1083 omits the many arguments they support.
1084 See the Git documentation for complete descriptions and strategies on how to use these commands:
1085 <itemizedlist>
1086 <listitem><para><emphasis><filename>git init</filename>:</emphasis> Initializes an empty Git repository.
1087 You cannot use Git commands unless you have a <filename>.git</filename> repository.</para></listitem>
1088 <listitem><para><emphasis><filename>git clone</filename>:</emphasis>
1089 Creates a local clone of a Git repository.
1090 During collaboration, this command allows you to create a
1091 local Git repository that is on equal footing with a fellow
1092 developer’s Git repository.
1093 </para></listitem>
1094 <listitem><para><emphasis><filename>git add</filename>:</emphasis> Stages updated file contents
1095 to the index that
1096 Git uses to track changes.
1097 You must stage all files that have changed before you can commit them.</para></listitem>
1098 <listitem><para><emphasis><filename>git commit</filename>:</emphasis> Creates a "commit" that documents
1099 the changes you made.
1100 Commits are used for historical purposes, for determining if a maintainer of a project
1101 will allow the change, and for ultimately pushing the change from your local Git repository
1102 into the project’s upstream (or master) repository.</para></listitem>
1103 <listitem><para><emphasis><filename>git status</filename>:</emphasis> Reports any modified files that
1104 possibly need to be staged and committed.</para></listitem>
1105 <listitem><para><emphasis><filename>git checkout &lt;branch-name&gt;</filename>:</emphasis> Changes
1106 your working branch.
1107 This command is analogous to "cd".</para></listitem>
1108 <listitem><para><emphasis><filename>git checkout –b &lt;working-branch&gt;</filename>:</emphasis> Creates
1109 a working branch on your local machine where you can isolate work.
1110 It is a good idea to use local branches when adding specific features or changes.
1111 This way if you do not like what you have done you can easily get rid of the work.</para></listitem>
1112 <listitem><para><emphasis><filename>git branch</filename>:</emphasis> Reports
1113 existing local branches and
1114 tells you the branch in which you are currently working.</para></listitem>
1115 <listitem><para><emphasis><filename>git branch -D &lt;branch-name&gt;</filename>:</emphasis>
1116 Deletes an existing local branch.
1117 You need to be in a local branch other than the one you are deleting
1118 in order to delete <filename>&lt;branch-name&gt;</filename>.</para></listitem>
1119 <listitem><para><emphasis><filename>git pull</filename>:</emphasis> Retrieves information
1120 from an upstream Git
1121 repository and places it in your local Git repository.
1122 You use this command to make sure you are synchronized with the repository
1123 from which you are basing changes (.e.g. the master branch).</para></listitem>
1124 <listitem><para><emphasis><filename>git push</filename>:</emphasis>
1125 Sends all your committed local changes to an upstream Git
1126 repository (e.g. a contribution repository).
1127 The maintainer of the project draws from these repositories
1128 when adding changes to the project’s master repository or
1129 other development branch.
1130 </para></listitem>
1131 <listitem><para><emphasis><filename>git merge</filename>:</emphasis> Combines or adds changes from one
1132 local branch of your repository with another branch.
1133 When you create a local Git repository, the default branch is named "master".
1134 A typical workflow is to create a temporary branch for isolated work, make and commit your
1135 changes, switch to your local master branch, merge the changes from the temporary branch into the
1136 local master branch, and then delete the temporary branch.</para></listitem>
1137 <listitem><para><emphasis><filename>git cherry-pick</filename>:</emphasis> Choose and apply specific
1138 commits from one branch into another branch.
1139 There are times when you might not be able to merge all the changes in one branch with
1140 another but need to pick out certain ones.</para></listitem>
1141 <listitem><para><emphasis><filename>gitk</filename>:</emphasis> Provides a GUI view of the branches
1142 and changes in your local Git repository.
1143 This command is a good way to graphically see where things have diverged in your
1144 local repository.</para></listitem>
1145 <listitem><para><emphasis><filename>git log</filename>:</emphasis> Reports a history of your changes to the
1146 repository.</para></listitem>
1147 <listitem><para><emphasis><filename>git diff</filename>:</emphasis> Displays line-by-line differences
1148 between your local working files and the same files in the upstream Git repository that your
1149 branch currently tracks.</para></listitem>
1150 </itemizedlist>
1151 </para>
1152 </section>
1153</section>
1154
1155<section id='workflows'>
1156 <title>Workflows</title>
1157
1158 <para>
1159 This section provides some overview on workflows using Git.
1160 In particular, the information covers basic practices that describe roles and actions in a
1161 collaborative development environment.
1162 Again, if you are familiar with this type of development environment, you might want to just
1163 skip this section.
1164 </para>
1165
1166 <para>
1167 The Yocto Project files are maintained using Git in a "master" branch whose Git history
1168 tracks every change and whose structure provides branches for all diverging functionality.
1169 Although there is no need to use Git, many open source projects do so.
1170 For the Yocto Project, a key individual called the "maintainer" is responsible for the "master"
1171 branch of a given Git repository.
1172 The "master" branch is the “upstream” repository where the final builds of the project occur.
1173 The maintainer is responsible for allowing changes in from other developers and for
1174 organizing the underlying branch structure to reflect release strategies and so forth.
1175 <note>For information on finding out who is responsible (maintains)
1176 for a particular area of code, see the
1177 "<link linkend='how-to-submit-a-change'>How to Submit a Change</link>"
1178 section.
1179 </note>
1180 </para>
1181
1182 <para>
1183 The project also has an upstream contribution Git repository named
1184 <filename>poky-contrib</filename>.
1185 You can see all the branches in this repository using the web interface
1186 of the
1187 <ulink url='&YOCTO_GIT_URL;'>Source Repositories</ulink> organized
1188 within the "Poky Support" area.
1189 These branches temporarily hold changes to the project that have been
1190 submitted or committed by the Yocto Project development team and by
1191 community members who contribute to the project.
1192 The maintainer determines if the changes are qualified to be moved
1193 from the "contrib" branches into the "master" branch of the Git
1194 repository.
1195 </para>
1196
1197 <para>
1198 Developers (including contributing community members) create and maintain cloned repositories
1199 of the upstream "master" branch.
1200 These repositories are local to their development platforms and are used to develop changes.
1201 When a developer is satisfied with a particular feature or change, they "push" the changes
1202 to the appropriate "contrib" repository.
1203 </para>
1204
1205 <para>
1206 Developers are responsible for keeping their local repository up-to-date with "master".
1207 They are also responsible for straightening out any conflicts that might arise within files
1208 that are being worked on simultaneously by more than one person.
1209 All this work is done locally on the developer’s machines before anything is pushed to a
1210 "contrib" area and examined at the maintainer’s level.
1211 </para>
1212
1213 <para>
1214 A somewhat formal method exists by which developers commit changes and push them into the
1215 "contrib" area and subsequently request that the maintainer include them into "master"
1216 This process is called “submitting a patch” or "submitting a change."
1217 For information on submitting patches and changes, see the
1218 "<link linkend='how-to-submit-a-change'>How to Submit a Change</link>" section.
1219 </para>
1220
1221 <para>
1222 To summarize the environment: a single point of entry exists for
1223 changes into the project’s "master" branch of the Git repository,
1224 which is controlled by the project’s maintainer.
1225 And, a set of developers exist who independently develop, test, and
1226 submit changes to "contrib" areas for the maintainer to examine.
1227 The maintainer then chooses which changes are going to become a
1228 permanent part of the project.
1229 </para>
1230
1231 <para>
1232 <imagedata fileref="figures/git-workflow.png" width="6in" depth="3in" align="left" scalefit="1" />
1233 </para>
1234
1235 <para>
1236 While each development environment is unique, there are some best practices or methods
1237 that help development run smoothly.
1238 The following list describes some of these practices.
1239 For more information about Git workflows, see the workflow topics in the
1240 <ulink url='http://book.git-scm.com'>Git Community Book</ulink>.
1241 <itemizedlist>
1242 <listitem><para><emphasis>Make Small Changes:</emphasis> It is best to keep the changes you commit
1243 small as compared to bundling many disparate changes into a single commit.
1244 This practice not only keeps things manageable but also allows the maintainer
1245 to more easily include or refuse changes.</para>
1246 <para>It is also good practice to leave the repository in a state that allows you to
1247 still successfully build your project. In other words, do not commit half of a feature,
1248 then add the other half as a separate, later commit.
1249 Each commit should take you from one buildable project state to another
1250 buildable state.</para></listitem>
1251 <listitem><para><emphasis>Use Branches Liberally:</emphasis> It is very easy to create, use, and
1252 delete local branches in your working Git repository.
1253 You can name these branches anything you like.
1254 It is helpful to give them names associated with the particular feature or change
1255 on which you are working.
1256 Once you are done with a feature or change and have merged it
1257 into your local master branch, simply discard the temporary
1258 branch.</para></listitem>
1259 <listitem><para><emphasis>Merge Changes:</emphasis> The <filename>git merge</filename>
1260 command allows you to take the
1261 changes from one branch and fold them into another branch.
1262 This process is especially helpful when more than a single developer might be working
1263 on different parts of the same feature.
1264 Merging changes also automatically identifies any collisions or "conflicts"
1265 that might happen as a result of the same lines of code being altered by two different
1266 developers.</para></listitem>
1267 <listitem><para><emphasis>Manage Branches:</emphasis> Because branches are easy to use, you should
1268 use a system where branches indicate varying levels of code readiness.
1269 For example, you can have a "work" branch to develop in, a "test" branch where the code or
1270 change is tested, a "stage" branch where changes are ready to be committed, and so forth.
1271 As your project develops, you can merge code across the branches to reflect ever-increasing
1272 stable states of the development.</para></listitem>
1273 <listitem><para><emphasis>Use Push and Pull:</emphasis> The push-pull workflow is based on the
1274 concept of developers "pushing" local commits to a remote repository, which is
1275 usually a contribution repository.
1276 This workflow is also based on developers "pulling" known states of the project down into their
1277 local development repositories.
1278 The workflow easily allows you to pull changes submitted by other developers from the
1279 upstream repository into your work area ensuring that you have the most recent software
1280 on which to develop.
1281 The Yocto Project has two scripts named <filename>create-pull-request</filename> and
1282 <filename>send-pull-request</filename> that ship with the release to facilitate this
1283 workflow.
1284 You can find these scripts in the <filename>scripts</filename>
1285 folder of the
1286 <link linkend='source-directory'>Source Directory</link>.
1287 For information on how to use these scripts, see the
1288 "<link linkend='pushing-a-change-upstream'>Using Scripts to Push a Change Upstream and Request a Pull</link>" section.
1289 </para></listitem>
1290 <listitem><para><emphasis>Patch Workflow:</emphasis> This workflow allows you to notify the
1291 maintainer through an email that you have a change (or patch) you would like considered
1292 for the "master" branch of the Git repository.
1293 To send this type of change, you format the patch and then send the email using the Git commands
1294 <filename>git format-patch</filename> and <filename>git send-email</filename>.
1295 For information on how to use these scripts, see the
1296 "<link linkend='how-to-submit-a-change'>How to Submit a Change</link>"
1297 section.
1298 </para></listitem>
1299 </itemizedlist>
1300 </para>
1301</section>
1302
1303<section id='tracking-bugs'>
1304 <title>Tracking Bugs</title>
1305
1306 <para>
1307 The Yocto Project uses its own implementation of
1308 <ulink url='http://www.bugzilla.org/about/'>Bugzilla</ulink> to track bugs.
1309 Implementations of Bugzilla work well for group development because they track bugs and code
1310 changes, can be used to communicate changes and problems with developers, can be used to
1311 submit and review patches, and can be used to manage quality assurance.
1312 The home page for the Yocto Project implementation of Bugzilla is
1313 <ulink url='&YOCTO_BUGZILLA_URL;'>&YOCTO_BUGZILLA_URL;</ulink>.
1314 </para>
1315
1316 <para>
1317 Sometimes it is helpful to submit, investigate, or track a bug against the Yocto Project itself
1318 such as when discovering an issue with some component of the build system that acts contrary
1319 to the documentation or your expectations.
1320 Following is the general procedure for submitting a new bug using the Yocto Project
1321 Bugzilla.
1322 You can find more information on defect management, bug tracking, and feature request
1323 processes all accomplished through the Yocto Project Bugzilla on the wiki page
1324 <ulink url='&YOCTO_WIKI_URL;/wiki/Bugzilla_Configuration_and_Bug_Tracking'>here</ulink>.
1325 <orderedlist>
1326 <listitem><para>Always use the Yocto Project implementation of Bugzilla to submit
1327 a bug.</para></listitem>
1328 <listitem><para>When submitting a new bug, be sure to choose the appropriate
1329 Classification, Product, and Component for which the issue was found.
1330 Defects for the Yocto Project fall into one of six classifications: Yocto Project
1331 Components, Infrastructure, Build System &amp; Metadata, Documentation,
1332 QA/Testing, and Runtime.
1333 Each of these Classifications break down into multiple Products and, in some
1334 cases, multiple Components.</para></listitem>
1335 <listitem><para>Use the bug form to choose the correct Hardware and Architecture
1336 for which the bug applies.</para></listitem>
1337 <listitem><para>Indicate the Yocto Project version you were using when the issue
1338 occurred.</para></listitem>
1339 <listitem><para>Be sure to indicate the Severity of the bug.
1340 Severity communicates how the bug impacted your work.</para></listitem>
1341 <listitem><para>Select the appropriate "Documentation change" item
1342 for the bug.
1343 Fixing a bug may or may not affect the Yocto Project
1344 documentation.</para></listitem>
1345 <listitem><para>Provide a brief summary of the issue.
1346 Try to limit your summary to just a line or two and be sure to capture the
1347 essence of the issue.</para></listitem>
1348 <listitem><para>Provide a detailed description of the issue.
1349 You should provide as much detail as you can about the context, behavior, output,
1350 and so forth that surrounds the issue.
1351 You can even attach supporting files for output from logs by
1352 using the "Add an attachment" button.</para></listitem>
1353 <listitem><para>Be sure to copy the appropriate people in the
1354 "CC List" for the bug.
1355 See the "<link linkend='how-to-submit-a-change'>How to Submit a Change</link>"
1356 section for information about finding out who is responsible
1357 for code.</para></listitem>
1358 <listitem><para>Submit the bug by clicking the "Submit Bug" button.</para></listitem>
1359 </orderedlist>
1360 </para>
1361</section>
1362
1363<section id='how-to-submit-a-change'>
1364 <title>How to Submit a Change</title>
1365
1366 <para>
1367 Contributions to the Yocto Project and OpenEmbedded are very welcome.
1368 Because the system is extremely configurable and flexible, we recognize that developers
1369 will want to extend, configure or optimize it for their specific uses.
1370 You should send patches to the appropriate mailing list so that they
1371 can be reviewed and merged by the appropriate maintainer.
1372 </para>
1373
1374 <para>
1375 Before submitting any change, be sure to find out who you should be
1376 notifying.
1377 Several methods exist through which you find out who you should be copying
1378 or notifying:
1379 <itemizedlist>
1380 <listitem><para><emphasis>Maintenance File:</emphasis>
1381 Examine the <filename>maintainers.inc</filename> file, which is
1382 located in the
1383 <link linkend='source-directory'>Source Directory</link>
1384 at <filename>meta-yocto/conf/distro/include</filename>, to
1385 see who is responsible for code.
1386 </para></listitem>
1387 <listitem><para><emphasis>Board Support Package (BSP) README Files:</emphasis>
1388 For BSP maintainers of supported BSPs, you can examine
1389 individual BSP <filename>README</filename> files.
1390 In addition, some layers (such as the <filename>meta-intel</filename> layer),
1391 include a <filename>MAINTAINERS</filename> file which contains
1392 a list of all supported BSP maintainers for that layer.
1393 </para></listitem>
1394 <listitem><para><emphasis>Search by File:</emphasis>
1395 Using <link linkend='git'>Git</link>, you can enter the
1396 following command to bring up a short list of all commits
1397 against a specific file:
1398 <literallayout class='monospaced'>
1399 git shortlog -- &lt;filename&gt;
1400 </literallayout>
1401 Just provide the name of the file for which you are interested.
1402 The information returned is not ordered by history but does
1403 include a list of all committers grouped by name.
1404 From the list, you can see who is responsible for the bulk of
1405 the changes against the file.
1406 </para></listitem>
1407 </itemizedlist>
1408 </para>
1409
1410 <para>
1411 For a list of the Yocto Project and related mailing lists, see the
1412 "<ulink url='&YOCTO_DOCS_REF_URL;#resources-mailinglist'>Mailing lists</ulink>" section in
1413 the Yocto Project Reference Manual.
1414 </para>
1415
1416 <para>
1417 Here is some guidance on which mailing list to use for what type of change:
1418 <itemizedlist>
1419 <listitem><para>For changes to the core
1420 <link linkend='metadata'>Metadata</link>, send your patch to the
1421 <ulink url='&OE_LISTS_URL;/listinfo/openembedded-core'>openembedded-core</ulink> mailing list.
1422 For example, a change to anything under the <filename>meta</filename> or
1423 <filename>scripts</filename> directories
1424 should be sent to this mailing list.</para></listitem>
1425 <listitem><para>For changes to BitBake (anything under the <filename>bitbake</filename>
1426 directory), send your patch to the
1427 <ulink url='&OE_LISTS_URL;/listinfo/bitbake-devel'>bitbake-devel</ulink> mailing list.</para></listitem>
1428 <listitem><para>For changes to <filename>meta-yocto</filename>, send your patch to the
1429 <ulink url='&YOCTO_LISTS_URL;/listinfo/poky'>poky</ulink> mailing list.</para></listitem>
1430 <listitem><para>For changes to other layers hosted on
1431 <filename>yoctoproject.org</filename> (unless the
1432 layer's documentation specifies otherwise), tools, and Yocto Project
1433 documentation, use the
1434 <ulink url='&YOCTO_LISTS_URL;/listinfo/yocto'>yocto</ulink> mailing list.</para></listitem>
1435 <listitem><para>For additional recipes that do not fit into the core Metadata,
1436 you should determine which layer the recipe should go into and submit the
1437 change in the manner recommended by the documentation (e.g. README) supplied
1438 with the layer. If in doubt, please ask on the
1439 <ulink url='&YOCTO_LISTS_URL;/listinfo/yocto'>yocto</ulink> or
1440 <ulink url='&OE_LISTS_URL;/listinfo/openembedded-devel'>openembedded-devel</ulink>
1441 mailing lists.</para></listitem>
1442 </itemizedlist>
1443 </para>
1444
1445 <para>
1446 When you send a patch, be sure to include a "Signed-off-by:"
1447 line in the same style as required by the Linux kernel.
1448 Adding this line signifies that you, the submitter, have agreed to the Developer's Certificate of Origin 1.1
1449 as follows:
1450 <literallayout class='monospaced'>
1451 Developer's Certificate of Origin 1.1
1452
1453 By making a contribution to this project, I certify that:
1454
1455 (a) The contribution was created in whole or in part by me and I
1456 have the right to submit it under the open source license
1457 indicated in the file; or
1458
1459 (b) The contribution is based upon previous work that, to the best
1460 of my knowledge, is covered under an appropriate open source
1461 license and I have the right under that license to submit that
1462 work with modifications, whether created in whole or in part
1463 by me, under the same open source license (unless I am
1464 permitted to submit under a different license), as indicated
1465 in the file; or
1466
1467 (c) The contribution was provided directly to me by some other
1468 person who certified (a), (b) or (c) and I have not modified
1469 it.
1470
1471 (d) I understand and agree that this project and the contribution
1472 are public and that a record of the contribution (including all
1473 personal information I submit with it, including my sign-off) is
1474 maintained indefinitely and may be redistributed consistent with
1475 this project or the open source license(s) involved.
1476 </literallayout>
1477 </para>
1478
1479 <para>
1480 In a collaborative environment, it is necessary to have some sort of standard
1481 or method through which you submit changes.
1482 Otherwise, things could get quite chaotic.
1483 One general practice to follow is to make small, controlled changes.
1484 Keeping changes small and isolated aids review, makes merging/rebasing easier
1485 and keeps the change history clean when anyone needs to refer to it in future.
1486 </para>
1487
1488 <para>
1489 When you make a commit, you must follow certain standards established by the
1490 OpenEmbedded and Yocto Project development teams.
1491 For each commit, you must provide a single-line summary of the change and you
1492 should almost always provide a more detailed description of what you did (i.e.
1493 the body of the commit message).
1494 The only exceptions for not providing a detailed description would be if your
1495 change is a simple, self-explanatory change that needs no further description
1496 beyond the summary.
1497 Here are the guidelines for composing a commit message:
1498 <itemizedlist>
1499 <listitem><para>Provide a single-line, short summary of the change.
1500 This summary is typically viewable in the "shortlist" of changes.
1501 Thus, providing something short and descriptive that gives the reader
1502 a summary of the change is useful when viewing a list of many commits.
1503 This short description should be prefixed by the recipe name (if changing a recipe), or
1504 else the short form path to the file being changed.
1505 </para></listitem>
1506 <listitem><para>For the body of the commit message, provide detailed information
1507 that describes what you changed, why you made the change, and the approach
1508 you used. It may also be helpful if you mention how you tested the change.
1509 Provide as much detail as you can in the body of the commit message.
1510 </para></listitem>
1511 <listitem><para>
1512 If the change addresses a specific bug or issue that is
1513 associated with a bug-tracking ID, include a reference to that
1514 ID in your detailed description.
1515 For example, the Yocto Project uses a specific convention for
1516 bug references - any commit that addresses a specific bug should
1517 use the following form for the detailed description:
1518 <literallayout class='monospaced'>
1519 Fixes [YOCTO #&lt;bug-id&gt;]
1520
1521 &lt;detailed description of change&gt;
1522 </literallayout></para></listitem>
1523 Where &lt;bug-id&gt; is replaced with the specific bug ID from
1524 the Yocto Project Bugzilla instance.
1525 </itemizedlist>
1526 </para>
1527
1528 <para>
1529 You can find more guidance on creating well-formed commit messages at this OpenEmbedded
1530 wiki page:
1531 <ulink url='&OE_HOME_URL;/wiki/Commit_Patch_Message_Guidelines'></ulink>.
1532 </para>
1533
1534 <para>
1535 The next two sections describe general instructions for both pushing
1536 changes upstream and for submitting changes as patches.
1537 </para>
1538
1539 <section id='pushing-a-change-upstream'>
1540 <title>Using Scripts to Push a Change Upstream and Request a Pull</title>
1541
1542 <para>
1543 The basic flow for pushing a change to an upstream "contrib" Git repository is as follows:
1544 <itemizedlist>
1545 <listitem><para>Make your changes in your local Git repository.</para></listitem>
1546 <listitem><para>Stage your changes by using the <filename>git add</filename>
1547 command on each file you changed.</para></listitem>
1548 <listitem><para>
1549 Commit the change by using the
1550 <filename>git commit</filename> command.
1551 Be sure to provide a commit message that follows the
1552 project’s commit message standards as described earlier.
1553 </para></listitem>
1554 <listitem><para>
1555 Push the change to the upstream "contrib" repository by
1556 using the <filename>git push</filename> command.
1557 </para></listitem>
1558 <listitem><para>Notify the maintainer that you have pushed a change by making a pull
1559 request.
1560 The Yocto Project provides two scripts that conveniently let you generate and send
1561 pull requests to the Yocto Project.
1562 These scripts are <filename>create-pull-request</filename> and
1563 <filename>send-pull-request</filename>.
1564 You can find these scripts in the <filename>scripts</filename> directory
1565 within the <link linkend='source-directory'>Source Directory</link>.</para>
1566 <para>Using these scripts correctly formats the requests without introducing any
1567 whitespace or HTML formatting.
1568 The maintainer that receives your patches needs to be able to save and apply them
1569 directly from your emails.
1570 Using these scripts is the preferred method for sending patches.</para>
1571 <para>For help on using these scripts, simply provide the
1572 <filename>-h</filename> argument as follows:
1573 <literallayout class='monospaced'>
1574 $ poky/scripts/create-pull-request -h
1575 $ poky/scripts/send-pull-request -h
1576 </literallayout></para></listitem>
1577 </itemizedlist>
1578 </para>
1579
1580 <para>
1581 You can find general Git information on how to push a change upstream in the
1582 <ulink url='http://book.git-scm.com/3_distributed_workflows.html'>Git Community Book</ulink>.
1583 </para>
1584 </section>
1585
1586 <section id='submitting-a-patch'>
1587 <title>Using Email to Submit a Patch</title>
1588
1589 <para>
1590 You can submit patches without using the <filename>create-pull-request</filename> and
1591 <filename>send-pull-request</filename> scripts described in the previous section.
1592 However, keep in mind, the preferred method is to use the scripts.
1593 </para>
1594
1595 <para>
1596 Depending on the components changed, you need to submit the email to a specific
1597 mailing list.
1598 For some guidance on which mailing list to use, see the list in the
1599 "<link linkend='how-to-submit-a-change'>How to Submit a Change</link>"
1600 section.
1601 For a description of the available mailing lists, see the
1602 "<ulink url='&YOCTO_DOCS_REF_URL;#resources-mailinglist'>Mailing Lists</ulink>"
1603 section in the Yocto Project Reference Manual.
1604 </para>
1605
1606 <para>
1607 Here is the general procedure on how to submit a patch through email without using the
1608 scripts:
1609 <itemizedlist>
1610 <listitem><para>Make your changes in your local Git repository.</para></listitem>
1611 <listitem><para>Stage your changes by using the <filename>git add</filename>
1612 command on each file you changed.</para></listitem>
1613 <listitem><para>Commit the change by using the
1614 <filename>git commit --signoff</filename> command.
1615 Using the <filename>--signoff</filename> option identifies you as the person
1616 making the change and also satisfies the Developer's Certificate of
1617 Origin (DCO) shown earlier.</para>
1618 <para>When you form a commit, you must follow certain standards established by the
1619 Yocto Project development team.
1620 See the earlier section
1621 "<link linkend='how-to-submit-a-change'>How to Submit a Change</link>"
1622 for Yocto Project commit message standards.</para></listitem>
1623 <listitem><para>Format the commit into an email message.
1624 To format commits, use the <filename>git format-patch</filename> command.
1625 When you provide the command, you must include a revision list or a number of patches
1626 as part of the command.
1627 For example, either of these two commands takes your most
1628 recent single commit and formats it as an email message in
1629 the current directory:
1630 <literallayout class='monospaced'>
1631 $ git format-patch -1
1632 </literallayout>
1633 or
1634 <literallayout class='monospaced'>
1635 $ git format-patch HEAD~
1636 </literallayout></para>
1637 <para>After the command is run, the current directory contains a
1638 numbered <filename>.patch</filename> file for the commit.</para>
1639 <para>If you provide several commits as part of the command,
1640 the <filename>git format-patch</filename> command produces a
1641 series of numbered files in the current directory – one for each commit.
1642 If you have more than one patch, you should also use the
1643 <filename>--cover</filename> option with the command, which generates a
1644 cover letter as the first "patch" in the series.
1645 You can then edit the cover letter to provide a description for
1646 the series of patches.
1647 For information on the <filename>git format-patch</filename> command,
1648 see <filename>GIT_FORMAT_PATCH(1)</filename> displayed using the
1649 <filename>man git-format-patch</filename> command.</para>
1650 <note>If you are or will be a frequent contributor to the Yocto Project
1651 or to OpenEmbedded, you might consider requesting a contrib area and the
1652 necessary associated rights.</note></listitem>
1653 <listitem><para>Import the files into your mail client by using the
1654 <filename>git send-email</filename> command.
1655 <note>In order to use <filename>git send-email</filename>, you must have the
1656 the proper Git packages installed.
1657 For Ubuntu, Debian, and Fedora the package is <filename>git-email</filename>.</note></para>
1658 <para>The <filename>git send-email</filename> command sends email by using a local
1659 or remote Mail Transport Agent (MTA) such as
1660 <filename>msmtp</filename>, <filename>sendmail</filename>, or through a direct
1661 <filename>smtp</filename> configuration in your Git <filename>config</filename>
1662 file.
1663 If you are submitting patches through email only, it is very important
1664 that you submit them without any whitespace or HTML formatting that
1665 either you or your mailer introduces.
1666 The maintainer that receives your patches needs to be able to save and
1667 apply them directly from your emails.
1668 A good way to verify that what you are sending will be applicable by the
1669 maintainer is to do a dry run and send them to yourself and then
1670 save and apply them as the maintainer would.</para>
1671 <para>The <filename>git send-email</filename> command is the preferred method
1672 for sending your patches since there is no risk of compromising whitespace
1673 in the body of the message, which can occur when you use your own mail client.
1674 The command also has several options that let you
1675 specify recipients and perform further editing of the email message.
1676 For information on how to use the <filename>git send-email</filename> command,
1677 see <filename>GIT-SEND-EMAIL(1)</filename> displayed using
1678 the <filename>man git-send-email</filename> command.
1679 </para></listitem>
1680 </itemizedlist>
1681 </para>
1682 </section>
1683</section>
1684</chapter>
1685<!--
1686vim: expandtab tw=80 ts=4
1687-->
diff --git a/documentation/dev-manual/dev-manual-start.xml b/documentation/dev-manual/dev-manual-start.xml
new file mode 100644
index 0000000000..6ab93f79cf
--- /dev/null
+++ b/documentation/dev-manual/dev-manual-start.xml
@@ -0,0 +1,415 @@
1<!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='dev-manual-start'>
6
7<title>Getting Started with the Yocto Project</title>
8
9<para>
10 This chapter introduces the Yocto Project and gives you an idea of what you need to get started.
11 You can find enough information to set up your development host and build or use images for
12 hardware supported by the Yocto Project by reading the
13 <ulink url='&YOCTO_DOCS_QS_URL;'>Yocto Project Quick Start</ulink>.
14</para>
15
16<para>
17 The remainder of this chapter summarizes what is in the Yocto Project Quick Start and provides
18 some higher-level concepts you might want to consider.
19</para>
20
21<section id='introducing-the-yocto-project'>
22 <title>Introducing the Yocto Project</title>
23
24 <para>
25 The Yocto Project is an open-source collaboration project focused on embedded Linux development.
26 The project currently provides a build system that is
27 referred to as the
28 <link linkend='build-system-term'>OpenEmbedded build system</link>
29 in the Yocto Project documentation.
30 The Yocto Project provides various ancillary tools for the embedded developer
31 and also features the Sato reference User Interface, which is optimized for
32 stylus driven, low-resolution screens.
33 </para>
34
35 <para>
36 You can use the OpenEmbedded build system, which uses
37 <link linkend='bitbake-term'>BitBake</link>, to develop complete Linux
38 images and associated user-space applications for architectures based
39 on ARM, MIPS, PowerPC, x86 and x86-64.
40 <note>
41 By default, using the Yocto Project creates a Poky distribution.
42 However, you can create your own distribution by providing key
43 <link linkend='metadata'>Metadata</link>.
44 See the "<link linkend='creating-your-own-distribution'>Creating Your Own Distribution</link>"
45 section for more information.
46 </note>
47 While the Yocto Project does not provide a strict testing framework,
48 it does provide or generate for you artifacts that let you perform target-level and
49 emulated testing and debugging.
50 Additionally, if you are an <trademark class='trade'>Eclipse</trademark>
51 IDE user, you can install an Eclipse Yocto Plug-in to allow you to
52 develop within that familiar environment.
53 </para>
54</section>
55
56<section id='getting-setup'>
57 <title>Getting Set Up</title>
58
59 <para>
60 Here is what you need to use the Yocto Project:
61 <itemizedlist>
62 <listitem><para><emphasis>Host System:</emphasis> You should have a reasonably current
63 Linux-based host system.
64 You will have the best results with a recent release of Fedora,
65 openSUSE, Debian, Ubuntu, or CentOS as these releases are frequently tested against the Yocto Project
66 and officially supported.
67 For a list of the distributions under validation and their status, see the
68 "<ulink url='&YOCTO_DOCS_REF_URL;#detailed-supported-distros'>Supported Linux Distributions</ulink>" section
69 in the Yocto Project Reference Manual and the wiki page at
70 <ulink url='&YOCTO_WIKI_URL;/wiki/Distribution_Support'>Distribution Support</ulink>.</para>
71 <para>
72 You should also have about 50 Gbytes of free disk space for building images.
73 </para></listitem>
74 <listitem><para><emphasis>Packages:</emphasis> The OpenEmbedded build system
75 requires that certain packages exist on your development system (e.g. Python 2.6 or 2.7).
76 See "<ulink url='&YOCTO_DOCS_QS_URL;#packages'>The Packages</ulink>"
77 section in the Yocto Project Quick Start and the
78 "<ulink url='&YOCTO_DOCS_REF_URL;#required-packages-for-the-host-development-system'>Required Packages for the Host Development System</ulink>"
79 section in the Yocto Project Reference Manual for the exact
80 package requirements and the installation commands to install
81 them for the supported distributions.
82 </para></listitem>
83 <listitem id='local-yp-release'><para><emphasis>Yocto Project Release:</emphasis>
84 You need a release of the Yocto Project locally installed on
85 your development system.
86 The documentation refers to this set of locally installed files
87 as the <link linkend='source-directory'>Source Directory</link>.
88 You create your Source Directory by using
89 <link linkend='git'>Git</link> to clone a local copy
90 of the upstream <filename>poky</filename> repository,
91 or by downloading and unpacking a tarball of an official
92 Yocto Project release.</para>
93 <para>Working from a copy of the upstream repository allows you
94 to contribute back into the Yocto Project or simply work with
95 the latest software on a development branch.
96 Because Git maintains and creates an upstream repository with
97 a complete history of changes and you are working with a local
98 clone of that repository, you have access to all the Yocto
99 Project development branches and tag names used in the upstream
100 repository.</para>
101 <note>You can view the Yocto Project Source Repositories at
102 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink>
103 </note>
104 <para>The following transcript shows how to clone the
105 <filename>poky</filename> Git repository into the current
106 working directory.
107 The command creates the local repository in a directory
108 named <filename>poky</filename>.
109 For information on Git used within the Yocto Project, see
110 the "<link linkend='git'>Git</link>" section.
111 <literallayout class='monospaced'>
112 $ git clone git://git.yoctoproject.org/poky
113 Cloning into 'poky'...
114 remote: Counting objects: 226790, done.
115 remote: Compressing objects: 100% (57465/57465), done.
116 remote: Total 226790 (delta 165212), reused 225887 (delta 164327)
117 Receiving objects: 100% (226790/226790), 100.98 MiB | 263 KiB/s, done.
118 Resolving deltas: 100% (165212/165212), done.
119 </literallayout></para>
120 <para>For another example of how to set up your own local Git
121 repositories, see this
122 <ulink url='&YOCTO_WIKI_URL;/wiki/Transcript:_from_git_checkout_to_meta-intel_BSP'>
123 wiki page</ulink>, which describes how to create local
124 Git repositories for both
125 <filename>poky</filename> and <filename>meta-intel</filename>.
126 </para></listitem>
127 <listitem id='local-kernel-files'><para><emphasis>Yocto Project Kernel:</emphasis>
128 If you are going to be making modifications to a supported Yocto Project kernel, you
129 need to establish local copies of the source.
130 You can find Git repositories of supported Yocto Project kernels organized under
131 "Yocto Linux Kernel" in the Yocto Project Source Repositories at
132 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink>.</para>
133 <para>This setup can involve creating a bare clone of the Yocto Project kernel and then
134 copying that cloned repository.
135 You can create the bare clone and the copy of the bare clone anywhere you like.
136 For simplicity, it is recommended that you create these structures outside of the
137 Source Directory, which is usually named <filename>poky</filename>.</para>
138 <para>As an example, the following transcript shows how to create the bare clone
139 of the <filename>linux-yocto-3.10</filename> kernel and then create a copy of
140 that clone.
141 <note>When you have a local Yocto Project kernel Git repository, you can
142 reference that repository rather than the upstream Git repository as
143 part of the <filename>clone</filename> command.
144 Doing so can speed up the process.</note></para>
145 <para>In the following example, the bare clone is named
146 <filename>linux-yocto-3.10.git</filename>, while the
147 copy is named <filename>my-linux-yocto-3.10-work</filename>:
148 <literallayout class='monospaced'>
149 $ git clone --bare git://git.yoctoproject.org/linux-yocto-3.10 linux-yocto-3.10.git
150 Cloning into bare repository 'linux-yocto-3.10.git'...
151 remote: Counting objects: 3364487, done.
152 remote: Compressing objects: 100% (507178/507178), done.
153 remote: Total 3364487 (delta 2827715), reused 3364481 (delta 2827709)
154 Receiving objects: 100% (3364487/3364487), 722.95 MiB | 423 KiB/s, done.
155 Resolving deltas: 100% (2827715/2827715), done.
156 </literallayout></para>
157 <para>Now create a clone of the bare clone just created:
158 <literallayout class='monospaced'>
159 $ git clone linux-yocto-3.10.git my-linux-yocto-3.10-work
160 Cloning into 'my-linux-yocto-3.10-work'...
161 done.
162 </literallayout></para></listitem>
163 <listitem id='meta-yocto-kernel-extras-repo'><para><emphasis>
164 The <filename>meta-yocto-kernel-extras</filename> Git Repository</emphasis>:
165 The <filename>meta-yocto-kernel-extras</filename> Git repository contains Metadata needed
166 only if you are modifying and building the kernel image.
167 In particular, it contains the kernel BitBake append (<filename>.bbappend</filename>)
168 files that you
169 edit to point to your locally modified kernel source files and to build the kernel
170 image.
171 Pointing to these local files is much more efficient than requiring a download of the
172 kernel's source files from upstream each time you make changes to the kernel.</para>
173 <para>You can find the <filename>meta-yocto-kernel-extras</filename> Git Repository in the
174 "Yocto Metadata Layers" area of the Yocto Project Source Repositories at
175 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink>.
176 It is good practice to create this Git repository inside the Source Directory.</para>
177 <para>Following is an example that creates the <filename>meta-yocto-kernel-extras</filename> Git
178 repository inside the Source Directory, which is named <filename>poky</filename>
179 in this case:
180 <literallayout class='monospaced'>
181 $ cd ~/poky
182 $ git clone git://git.yoctoproject.org/meta-yocto-kernel-extras meta-yocto-kernel-extras
183 Cloning into 'meta-yocto-kernel-extras'...
184 remote: Counting objects: 727, done.
185 remote: Compressing objects: 100% (452/452), done.
186 remote: Total 727 (delta 260), reused 719 (delta 252)
187 Receiving objects: 100% (727/727), 536.36 KiB | 240 KiB/s, done.
188 Resolving deltas: 100% (260/260), done.
189 </literallayout></para></listitem>
190 <listitem><para id='supported-board-support-packages-(bsps)'><emphasis>Supported Board Support Packages (BSPs):</emphasis>
191 The Yocto Project provides a layer called
192 <filename>meta-intel</filename> and it is maintained in its own
193 separate Git repository.
194 The <filename>meta-intel</filename> layer contains many
195 supported
196 <ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>.
197 </para>
198
199 <para>The Yocto Project uses the following BSP layer naming
200 scheme:
201 <literallayout class='monospaced'>
202 meta-&lt;BSP_name&gt;
203 </literallayout>
204 where <filename>&lt;BSP_name&gt;</filename> is the recognized
205 BSP name.
206 Here are some examples:
207 <literallayout class='monospaced'>
208 meta-crownbay
209 meta-emenlow
210 meta-n450
211 </literallayout>
212 See the
213 "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>"
214 section in the Yocto Project Board Support Package (BSP)
215 Developer's Guide for more information on BSP Layers.
216 </para>
217
218 <para>
219 You can locate the <filename>meta-intel</filename> Git
220 repository in the "Yocto Metadata Layers" area of the Yocto
221 Project Source Repositories at
222 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink>.
223 </para>
224
225 <para>
226 Using
227 <link linkend='git'>Git</link> to create a local clone of the
228 upstream repository can be helpful if you are working with
229 BSPs.
230 Typically, you set up the <filename>meta-intel</filename>
231 Git repository inside the Source Directory.
232 For example, the following transcript shows the steps to clone
233 <filename>meta-intel</filename>.
234 <note>
235 Be sure to work in the <filename>meta-intel</filename>
236 branch that matches your
237 <link linkend='source-directory'>Source Directory</link>
238 (i.e. <filename>poky</filename>) branch.
239 For example, if you have checked out the "master" branch
240 of <filename>poky</filename> and you are going to use
241 <filename>meta-intel</filename>, be sure to checkout the
242 "master" branch of <filename>meta-intel</filename>.
243 </note>
244 <literallayout class='monospaced'>
245 $ cd ~/poky
246 $ git clone git://git.yoctoproject.org/meta-intel.git
247 Cloning into 'meta-intel'...
248 remote: Counting objects: 8844, done.
249 remote: Compressing objects: 100% (2864/2864), done.
250 remote: Total 8844 (delta 4931), reused 8780 (delta 4867)
251 Receiving objects: 100% (8844/8844), 2.48 MiB | 264 KiB/s, done.
252 Resolving deltas: 100% (4931/4931), done.
253 </literallayout>
254 </para>
255
256 <para>
257 The same
258 <ulink url='&YOCTO_WIKI_URL;/wiki/Transcript:_from_git_checkout_to_meta-intel_BSP'>wiki page</ulink>
259 referenced earlier covers how to set up the
260 <filename>meta-intel</filename> Git repository.
261 </para></listitem>
262 <listitem><para><emphasis>Eclipse Yocto Plug-in:</emphasis> If you are developing
263 applications using the Eclipse Integrated Development Environment (IDE),
264 you will need this plug-in.
265 See the
266 "<link linkend='setting-up-the-eclipse-ide'>Setting up the Eclipse IDE</link>"
267 section for more information.</para></listitem>
268 </itemizedlist>
269 </para>
270</section>
271
272<section id='building-images'>
273 <title>Building Images</title>
274
275 <para>
276 The build process creates an entire Linux distribution, including the toolchain, from source.
277 For more information on this topic, see the
278 "<ulink url='&YOCTO_DOCS_QS_URL;#building-image'>Building an Image</ulink>"
279 section in the Yocto Project Quick Start.
280 </para>
281
282 <para>
283 The build process is as follows:
284 <orderedlist>
285 <listitem><para>Make sure you have set up the Source Directory described in the
286 previous section.</para></listitem>
287 <listitem><para>Initialize the build environment by sourcing a build
288 environment script (i.e.
289 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
290 or
291 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>).
292 </para></listitem>
293 <listitem><para>Optionally ensure the <filename>conf/local.conf</filename> configuration file,
294 which is found in the
295 <link linkend='build-directory'>Build Directory</link>,
296 is set up how you want it.
297 This file defines many aspects of the build environment including
298 the target machine architecture through the
299 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'>MACHINE</ulink></filename> variable,
300 the development machine's processor use through the
301 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BB_NUMBER_THREADS'>BB_NUMBER_THREADS</ulink></filename> and
302 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PARALLEL_MAKE'>PARALLEL_MAKE</ulink></filename> variables, and
303 a centralized tarball download directory through the
304 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-DL_DIR'>DL_DIR</ulink></filename> variable.</para></listitem>
305 <listitem><para>
306 Build the image using the <filename>bitbake</filename> command.
307 If you want information on BitBake, see the
308 <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
309 </para></listitem>
310 <listitem><para>Run the image either on the actual hardware or using the QEMU
311 emulator.</para></listitem>
312 </orderedlist>
313 </para>
314</section>
315
316<section id='using-pre-built-binaries-and-qemu'>
317 <title>Using Pre-Built Binaries and QEMU</title>
318
319 <para>
320 Another option you have to get started is to use pre-built binaries.
321 The Yocto Project provides many types of binaries with each release.
322 See the "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>"
323 chapter in the Yocto Project Reference Manual
324 for descriptions of the types of binaries that ship with a Yocto Project
325 release.
326 </para>
327
328 <para>
329 Using a pre-built binary is ideal for developing software applications to run on your
330 target hardware.
331 To do this, you need to be able to access the appropriate cross-toolchain tarball for
332 the architecture on which you are developing.
333 If you are using an SDK type image, the image ships with the complete toolchain native to
334 the architecture.
335 If you are not using an SDK type image, you need to separately download and
336 install the stand-alone Yocto Project cross-toolchain tarball.
337 </para>
338
339 <para>
340 Regardless of the type of image you are using, you need to download the pre-built kernel
341 that you will boot in the QEMU emulator and then download and extract the target root
342 filesystem for your target machine’s architecture.
343 You can get architecture-specific binaries and file systems from
344 <ulink url='&YOCTO_MACHINES_DL_URL;'>machines</ulink>.
345 You can get installation scripts for stand-alone toolchains from
346 <ulink url='&YOCTO_TOOLCHAIN_DL_URL;'>toolchains</ulink>.
347 Once you have all your files, you set up the environment to emulate the hardware
348 by sourcing an environment setup script.
349 Finally, you start the QEMU emulator.
350 You can find details on all these steps in the
351 "<ulink url='&YOCTO_DOCS_QS_URL;#using-pre-built'>Using Pre-Built Binaries and QEMU</ulink>"
352 section of the Yocto Project Quick Start.
353 </para>
354
355 <para>
356 Using QEMU to emulate your hardware can result in speed issues
357 depending on the target and host architecture mix.
358 For example, using the <filename>qemux86</filename> image in the emulator
359 on an Intel-based 32-bit (x86) host machine is fast because the target and
360 host architectures match.
361 On the other hand, using the <filename>qemuarm</filename> image on the same Intel-based
362 host can be slower.
363 But, you still achieve faithful emulation of ARM-specific issues.
364 </para>
365
366 <para>
367 To speed things up, the QEMU images support using <filename>distcc</filename>
368 to call a cross-compiler outside the emulated system.
369 If you used <filename>runqemu</filename> to start QEMU, and the
370 <filename>distccd</filename> application is present on the host system, any
371 BitBake cross-compiling toolchain available from the build system is automatically
372 used from within QEMU simply by calling <filename>distcc</filename>.
373 You can accomplish this by defining the cross-compiler variable
374 (e.g. <filename>export CC="distcc"</filename>).
375 Alternatively, if you are using a suitable SDK image or the appropriate
376 stand-alone toolchain is present,
377 the toolchain is also automatically used.
378 </para>
379
380 <note>
381 Several mechanisms exist that let you connect to the system running on the
382 QEMU emulator:
383 <itemizedlist>
384 <listitem><para>QEMU provides a framebuffer interface that makes standard
385 consoles available.</para></listitem>
386 <listitem><para>Generally, headless embedded devices have a serial port.
387 If so, you can configure the operating system of the running image
388 to use that port to run a console.
389 The connection uses standard IP networking.</para></listitem>
390 <listitem><para>
391 SSH servers exist in some QEMU images.
392 The <filename>core-image-sato</filename> QEMU image has a
393 Dropbear secure shell (SSH) server that runs with the root
394 password disabled.
395 The <filename>core-image-full-cmdline</filename> and
396 <filename>core-image-lsb</filename> QEMU images
397 have OpenSSH instead of Dropbear.
398 Including these SSH servers allow you to use standard
399 <filename>ssh</filename> and <filename>scp</filename> commands.
400 The <filename>core-image-minimal</filename> QEMU image,
401 however, contains no SSH server.
402 </para></listitem>
403 <listitem><para>You can use a provided, user-space NFS server to boot the QEMU session
404 using a local copy of the root filesystem on the host.
405 In order to make this connection, you must extract a root filesystem tarball by using the
406 <filename>runqemu-extract-sdk</filename> command.
407 After running the command, you must then point the <filename>runqemu</filename>
408 script to the extracted directory instead of a root filesystem image file.</para></listitem>
409 </itemizedlist>
410 </note>
411</section>
412</chapter>
413<!--
414vim: expandtab tw=80 ts=4
415-->
diff --git a/documentation/dev-manual/dev-manual.xml b/documentation/dev-manual/dev-manual.xml
new file mode 100644
index 0000000000..a5d52cd2d7
--- /dev/null
+++ b/documentation/dev-manual/dev-manual.xml
@@ -0,0 +1,107 @@
1<!DOCTYPE book 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<book id='dev-manual' lang='en'
6 xmlns:xi="http://www.w3.org/2003/XInclude"
7 xmlns="http://docbook.org/ns/docbook"
8 >
9 <bookinfo>
10
11 <mediaobject>
12 <imageobject>
13 <imagedata fileref='figures/dev-title.png'
14 format='SVG'
15 align='left' scalefit='1' width='100%'/>
16 </imageobject>
17 </mediaobject>
18
19 <title>
20 Yocto Project Development Manual
21 </title>
22
23 <authorgroup>
24 <author>
25 <firstname>Scott</firstname> <surname>Rifenbark</surname>
26 <affiliation>
27 <orgname>Intel Corporation</orgname>
28 </affiliation>
29 <email>scott.m.rifenbark@intel.com</email>
30 </author>
31 </authorgroup>
32
33 <revhistory>
34 <revision>
35 <revnumber>1.1</revnumber>
36 <date>6 October 2011</date>
37 <revremark>The initial document released with the Yocto Project 1.1 Release.</revremark>
38 </revision>
39 <revision>
40 <revnumber>1.2</revnumber>
41 <date>April 2012</date>
42 <revremark>Released with the Yocto Project 1.2 Release.</revremark>
43 </revision>
44 <revision>
45 <revnumber>1.3</revnumber>
46 <date>October 2012</date>
47 <revremark>Released with the Yocto Project 1.3 Release.</revremark>
48 </revision>
49 <revision>
50 <revnumber>1.4</revnumber>
51 <date>April 2013</date>
52 <revremark>Released with the Yocto Project 1.4 Release.</revremark>
53 </revision>
54 <revision>
55 <revnumber>1.5</revnumber>
56 <date>October 2013</date>
57 <revremark>Released with the Yocto Project 1.5 Release.</revremark>
58 </revision>
59 <revision>
60 <revnumber>1.5.1</revnumber>
61 <date>January 2014</date>
62 <revremark>Released with the Yocto Project 1.5.1 Release.</revremark>
63 </revision>
64 <revision>
65 <revnumber>1.6</revnumber>
66 <date>April 2014</date>
67 <revremark>Released with the Yocto Project 1.6 Release.</revremark>
68 </revision>
69 </revhistory>
70
71 <copyright>
72 <year>&COPYRIGHT_YEAR;</year>
73 <holder>Linux Foundation</holder>
74 </copyright>
75
76 <legalnotice>
77 <para>
78 Permission is granted to copy, distribute and/or modify this document under
79 the terms of the <ulink type="http" url="http://creativecommons.org/licenses/by-sa/2.0/uk/">
80 Creative Commons Attribution-Share Alike 2.0 UK: England &amp; Wales</ulink> as published by
81 Creative Commons.
82 </para>
83
84 <note>
85 For the latest version of this manual associated with this
86 Yocto Project release, see the
87 <ulink url='&YOCTO_DOCS_DEV_URL;'>Yocto Project Development Manual</ulink>
88 from the Yocto Project website.
89 </note>
90 </legalnotice>
91
92 </bookinfo>
93
94 <xi:include href="dev-manual-intro.xml"/>
95
96 <xi:include href="dev-manual-start.xml"/>
97
98 <xi:include href="dev-manual-newbie.xml"/>
99
100 <xi:include href="dev-manual-model.xml"/>
101
102 <xi:include href="dev-manual-common-tasks.xml"/>
103
104</book>
105<!--
106vim: expandtab tw=80 ts=4
107-->
diff --git a/documentation/dev-manual/dev-style.css b/documentation/dev-manual/dev-style.css
new file mode 100644
index 0000000000..23c8e74c1e
--- /dev/null
+++ b/documentation/dev-manual/dev-style.css
@@ -0,0 +1,979 @@
1/*
2 Generic XHTML / DocBook XHTML CSS Stylesheet.
3
4 Browser wrangling and typographic design by
5 Oyvind Kolas / pippin@gimp.org
6
7 Customised for Poky by
8 Matthew Allum / mallum@o-hand.com
9
10 Thanks to:
11 Liam R. E. Quin
12 William Skaggs
13 Jakub Steiner
14
15 Structure
16 ---------
17
18 The stylesheet is divided into the following sections:
19
20 Positioning
21 Margins, paddings, width, font-size, clearing.
22 Decorations
23 Borders, style
24 Colors
25 Colors
26 Graphics
27 Graphical backgrounds
28 Nasty IE tweaks
29 Workarounds needed to make it work in internet explorer,
30 currently makes the stylesheet non validating, but up until
31 this point it is validating.
32 Mozilla extensions
33 Transparency for footer
34 Rounded corners on boxes
35
36*/
37
38
39 /*************** /
40 / Positioning /
41/ ***************/
42
43body {
44 font-family: Verdana, Sans, sans-serif;
45
46 min-width: 640px;
47 width: 80%;
48 margin: 0em auto;
49 padding: 2em 5em 5em 5em;
50 color: #333;
51}
52
53h1,h2,h3,h4,h5,h6,h7 {
54 font-family: Arial, Sans;
55 color: #00557D;
56 clear: both;
57}
58
59h1 {
60 font-size: 2em;
61 text-align: left;
62 padding: 0em 0em 0em 0em;
63 margin: 2em 0em 0em 0em;
64}
65
66h2.subtitle {
67 margin: 0.10em 0em 3.0em 0em;
68 padding: 0em 0em 0em 0em;
69 font-size: 1.8em;
70 padding-left: 20%;
71 font-weight: normal;
72 font-style: italic;
73}
74
75h2 {
76 margin: 2em 0em 0.66em 0em;
77 padding: 0.5em 0em 0em 0em;
78 font-size: 1.5em;
79 font-weight: bold;
80}
81
82h3.subtitle {
83 margin: 0em 0em 1em 0em;
84 padding: 0em 0em 0em 0em;
85 font-size: 142.14%;
86 text-align: right;
87}
88
89h3 {
90 margin: 1em 0em 0.5em 0em;
91 padding: 1em 0em 0em 0em;
92 font-size: 140%;
93 font-weight: bold;
94}
95
96h4 {
97 margin: 1em 0em 0.5em 0em;
98 padding: 1em 0em 0em 0em;
99 font-size: 120%;
100 font-weight: bold;
101}
102
103h5 {
104 margin: 1em 0em 0.5em 0em;
105 padding: 1em 0em 0em 0em;
106 font-size: 110%;
107 font-weight: bold;
108}
109
110h6 {
111 margin: 1em 0em 0em 0em;
112 padding: 1em 0em 0em 0em;
113 font-size: 110%;
114 font-weight: bold;
115}
116
117.authorgroup {
118 background-color: transparent;
119 background-repeat: no-repeat;
120 padding-top: 256px;
121 background-image: url("figures/dev-title.png");
122 background-position: left top;
123 margin-top: -256px;
124 padding-right: 50px;
125 margin-left: 0px;
126 text-align: right;
127 width: 740px;
128}
129
130h3.author {
131 margin: 0em 0me 0em 0em;
132 padding: 0em 0em 0em 0em;
133 font-weight: normal;
134 font-size: 100%;
135 color: #333;
136 clear: both;
137}
138
139.author tt.email {
140 font-size: 66%;
141}
142
143.titlepage hr {
144 width: 0em;
145 clear: both;
146}
147
148.revhistory {
149 padding-top: 2em;
150 clear: both;
151}
152
153.toc,
154.list-of-tables,
155.list-of-examples,
156.list-of-figures {
157 padding: 1.33em 0em 2.5em 0em;
158 color: #00557D;
159}
160
161.toc p,
162.list-of-tables p,
163.list-of-figures p,
164.list-of-examples p {
165 padding: 0em 0em 0em 0em;
166 padding: 0em 0em 0.3em;
167 margin: 1.5em 0em 0em 0em;
168}
169
170.toc p b,
171.list-of-tables p b,
172.list-of-figures p b,
173.list-of-examples p b{
174 font-size: 100.0%;
175 font-weight: bold;
176}
177
178.toc dl,
179.list-of-tables dl,
180.list-of-figures dl,
181.list-of-examples dl {
182 margin: 0em 0em 0.5em 0em;
183 padding: 0em 0em 0em 0em;
184}
185
186.toc dt {
187 margin: 0em 0em 0em 0em;
188 padding: 0em 0em 0em 0em;
189}
190
191.toc dd {
192 margin: 0em 0em 0em 2.6em;
193 padding: 0em 0em 0em 0em;
194}
195
196div.glossary dl,
197div.variablelist dl {
198}
199
200.glossary dl dt,
201.variablelist dl dt,
202.variablelist dl dt span.term {
203 font-weight: normal;
204 width: 20em;
205 text-align: right;
206}
207
208.variablelist dl dt {
209 margin-top: 0.5em;
210}
211
212.glossary dl dd,
213.variablelist dl dd {
214 margin-top: -1em;
215 margin-left: 25.5em;
216}
217
218.glossary dd p,
219.variablelist dd p {
220 margin-top: 0em;
221 margin-bottom: 1em;
222}
223
224
225div.calloutlist table td {
226 padding: 0em 0em 0em 0em;
227 margin: 0em 0em 0em 0em;
228}
229
230div.calloutlist table td p {
231 margin-top: 0em;
232 margin-bottom: 1em;
233}
234
235div p.copyright {
236 text-align: left;
237}
238
239div.legalnotice p.legalnotice-title {
240 margin-bottom: 0em;
241}
242
243p {
244 line-height: 1.5em;
245 margin-top: 0em;
246
247}
248
249dl {
250 padding-top: 0em;
251}
252
253hr {
254 border: solid 1px;
255}
256
257
258.mediaobject,
259.mediaobjectco {
260 text-align: center;
261}
262
263img {
264 border: none;
265}
266
267ul {
268 padding: 0em 0em 0em 1.5em;
269}
270
271ul li {
272 padding: 0em 0em 0em 0em;
273}
274
275ul li p {
276 text-align: left;
277}
278
279table {
280 width :100%;
281}
282
283th {
284 padding: 0.25em;
285 text-align: left;
286 font-weight: normal;
287 vertical-align: top;
288}
289
290td {
291 padding: 0.25em;
292 vertical-align: top;
293}
294
295p a[id] {
296 margin: 0px;
297 padding: 0px;
298 display: inline;
299 background-image: none;
300}
301
302a {
303 text-decoration: underline;
304 color: #444;
305}
306
307pre {
308 overflow: auto;
309}
310
311a:hover {
312 text-decoration: underline;
313 /*font-weight: bold;*/
314}
315
316
317div.informalfigure,
318div.informalexample,
319div.informaltable,
320div.figure,
321div.table,
322div.example {
323 margin: 1em 0em;
324 padding: 1em;
325 page-break-inside: avoid;
326}
327
328
329div.informalfigure p.title b,
330div.informalexample p.title b,
331div.informaltable p.title b,
332div.figure p.title b,
333div.example p.title b,
334div.table p.title b{
335 padding-top: 0em;
336 margin-top: 0em;
337 font-size: 100%;
338 font-weight: normal;
339}
340
341.mediaobject .caption,
342.mediaobject .caption p {
343 text-align: center;
344 font-size: 80%;
345 padding-top: 0.5em;
346 padding-bottom: 0.5em;
347}
348
349.epigraph {
350 padding-left: 55%;
351 margin-bottom: 1em;
352}
353
354.epigraph p {
355 text-align: left;
356}
357
358.epigraph .quote {
359 font-style: italic;
360}
361.epigraph .attribution {
362 font-style: normal;
363 text-align: right;
364}
365
366span.application {
367 font-style: italic;
368}
369
370.programlisting {
371 font-family: monospace;
372 font-size: 80%;
373 white-space: pre;
374 margin: 1.33em 0em;
375 padding: 1.33em;
376}
377
378.tip,
379.warning,
380.caution,
381.note {
382 margin-top: 1em;
383 margin-bottom: 1em;
384
385}
386
387/* force full width of table within div */
388.tip table,
389.warning table,
390.caution table,
391.note table {
392 border: none;
393 width: 100%;
394}
395
396
397.tip table th,
398.warning table th,
399.caution table th,
400.note table th {
401 padding: 0.8em 0.0em 0.0em 0.0em;
402 margin : 0em 0em 0em 0em;
403}
404
405.tip p,
406.warning p,
407.caution p,
408.note p {
409 margin-top: 0.5em;
410 margin-bottom: 0.5em;
411 padding-right: 1em;
412 text-align: left;
413}
414
415.acronym {
416 text-transform: uppercase;
417}
418
419b.keycap,
420.keycap {
421 padding: 0.09em 0.3em;
422 margin: 0em;
423}
424
425.itemizedlist li {
426 clear: none;
427}
428
429.filename {
430 font-size: medium;
431 font-family: Courier, monospace;
432}
433
434
435div.navheader, div.heading{
436 position: absolute;
437 left: 0em;
438 top: 0em;
439 width: 100%;
440 background-color: #cdf;
441 width: 100%;
442}
443
444div.navfooter, div.footing{
445 position: fixed;
446 left: 0em;
447 bottom: 0em;
448 background-color: #eee;
449 width: 100%;
450}
451
452
453div.navheader td,
454div.navfooter td {
455 font-size: 66%;
456}
457
458div.navheader table th {
459 /*font-family: Georgia, Times, serif;*/
460 /*font-size: x-large;*/
461 font-size: 80%;
462}
463
464div.navheader table {
465 border-left: 0em;
466 border-right: 0em;
467 border-top: 0em;
468 width: 100%;
469}
470
471div.navfooter table {
472 border-left: 0em;
473 border-right: 0em;
474 border-bottom: 0em;
475 width: 100%;
476}
477
478div.navheader table td a,
479div.navfooter table td a {
480 color: #777;
481 text-decoration: none;
482}
483
484/* normal text in the footer */
485div.navfooter table td {
486 color: black;
487}
488
489div.navheader table td a:visited,
490div.navfooter table td a:visited {
491 color: #444;
492}
493
494
495/* links in header and footer */
496div.navheader table td a:hover,
497div.navfooter table td a:hover {
498 text-decoration: underline;
499 background-color: transparent;
500 color: #33a;
501}
502
503div.navheader hr,
504div.navfooter hr {
505 display: none;
506}
507
508
509.qandaset tr.question td p {
510 margin: 0em 0em 1em 0em;
511 padding: 0em 0em 0em 0em;
512}
513
514.qandaset tr.answer td p {
515 margin: 0em 0em 1em 0em;
516 padding: 0em 0em 0em 0em;
517}
518.answer td {
519 padding-bottom: 1.5em;
520}
521
522.emphasis {
523 font-weight: bold;
524}
525
526
527 /************* /
528 / decorations /
529/ *************/
530
531.titlepage {
532}
533
534.part .title {
535}
536
537.subtitle {
538 border: none;
539}
540
541/*
542h1 {
543 border: none;
544}
545
546h2 {
547 border-top: solid 0.2em;
548 border-bottom: solid 0.06em;
549}
550
551h3 {
552 border-top: 0em;
553 border-bottom: solid 0.06em;
554}
555
556h4 {
557 border: 0em;
558 border-bottom: solid 0.06em;
559}
560
561h5 {
562 border: 0em;
563}
564*/
565
566.programlisting {
567 border: solid 1px;
568}
569
570div.figure,
571div.table,
572div.informalfigure,
573div.informaltable,
574div.informalexample,
575div.example {
576 border: 1px solid;
577}
578
579
580
581.tip,
582.warning,
583.caution,
584.note {
585 border: 1px solid;
586}
587
588.tip table th,
589.warning table th,
590.caution table th,
591.note table th {
592 border-bottom: 1px solid;
593}
594
595.question td {
596 border-top: 1px solid black;
597}
598
599.answer {
600}
601
602
603b.keycap,
604.keycap {
605 border: 1px solid;
606}
607
608
609div.navheader, div.heading{
610 border-bottom: 1px solid;
611}
612
613
614div.navfooter, div.footing{
615 border-top: 1px solid;
616}
617
618 /********* /
619 / colors /
620/ *********/
621
622body {
623 color: #333;
624 background: white;
625}
626
627a {
628 background: transparent;
629}
630
631a:hover {
632 background-color: #dedede;
633}
634
635
636h1,
637h2,
638h3,
639h4,
640h5,
641h6,
642h7,
643h8 {
644 background-color: transparent;
645}
646
647hr {
648 border-color: #aaa;
649}
650
651
652.tip, .warning, .caution, .note {
653 border-color: #fff;
654}
655
656
657.tip table th,
658.warning table th,
659.caution table th,
660.note table th {
661 border-bottom-color: #fff;
662}
663
664
665.warning {
666 background-color: #f0f0f2;
667}
668
669.caution {
670 background-color: #f0f0f2;
671}
672
673.tip {
674 background-color: #f0f0f2;
675}
676
677.note {
678 background-color: #f0f0f2;
679}
680
681.glossary dl dt,
682.variablelist dl dt,
683.variablelist dl dt span.term {
684 color: #044;
685}
686
687div.figure,
688div.table,
689div.example,
690div.informalfigure,
691div.informaltable,
692div.informalexample {
693 border-color: #aaa;
694}
695
696pre.programlisting {
697 color: black;
698 background-color: #fff;
699 border-color: #aaa;
700 border-width: 2px;
701}
702
703.guimenu,
704.guilabel,
705.guimenuitem {
706 background-color: #eee;
707}
708
709
710b.keycap,
711.keycap {
712 background-color: #eee;
713 border-color: #999;
714}
715
716
717div.navheader {
718 border-color: black;
719}
720
721
722div.navfooter {
723 border-color: black;
724}
725
726
727 /*********** /
728 / graphics /
729/ ***********/
730
731/*
732body {
733 background-image: url("images/body_bg.jpg");
734 background-attachment: fixed;
735}
736
737.navheader,
738.note,
739.tip {
740 background-image: url("images/note_bg.jpg");
741 background-attachment: fixed;
742}
743
744.warning,
745.caution {
746 background-image: url("images/warning_bg.jpg");
747 background-attachment: fixed;
748}
749
750.figure,
751.informalfigure,
752.example,
753.informalexample,
754.table,
755.informaltable {
756 background-image: url("images/figure_bg.jpg");
757 background-attachment: fixed;
758}
759
760*/
761h1,
762h2,
763h3,
764h4,
765h5,
766h6,
767h7{
768}
769
770/*
771Example of how to stick an image as part of the title.
772
773div.article .titlepage .title
774{
775 background-image: url("figures/white-on-black.png");
776 background-position: center;
777 background-repeat: repeat-x;
778}
779*/
780
781div.preface .titlepage .title,
782div.colophon .title,
783div.chapter .titlepage .title,
784div.article .titlepage .title
785{
786}
787
788div.section div.section .titlepage .title,
789div.sect2 .titlepage .title {
790 background: none;
791}
792
793
794h1.title {
795 background-color: transparent;
796 background-image: url("figures/yocto-project-bw.png");
797 background-repeat: no-repeat;
798 height: 256px;
799 text-indent: -9000px;
800 overflow:hidden;
801}
802
803h2.subtitle {
804 background-color: transparent;
805 text-indent: -9000px;
806 overflow:hidden;
807 width: 0px;
808 display: none;
809}
810
811 /*************************************** /
812 / pippin.gimp.org specific alterations /
813/ ***************************************/
814
815/*
816div.heading, div.navheader {
817 color: #777;
818 font-size: 80%;
819 padding: 0;
820 margin: 0;
821 text-align: left;
822 position: absolute;
823 top: 0px;
824 left: 0px;
825 width: 100%;
826 height: 50px;
827 background: url('/gfx/heading_bg.png') transparent;
828 background-repeat: repeat-x;
829 background-attachment: fixed;
830 border: none;
831}
832
833div.heading a {
834 color: #444;
835}
836
837div.footing, div.navfooter {
838 border: none;
839 color: #ddd;
840 font-size: 80%;
841 text-align:right;
842
843 width: 100%;
844 padding-top: 10px;
845 position: absolute;
846 bottom: 0px;
847 left: 0px;
848
849 background: url('/gfx/footing_bg.png') transparent;
850}
851*/
852
853
854
855 /****************** /
856 / nasty ie tweaks /
857/ ******************/
858
859/*
860div.heading, div.navheader {
861 width:expression(document.body.clientWidth + "px");
862}
863
864div.footing, div.navfooter {
865 width:expression(document.body.clientWidth + "px");
866 margin-left:expression("-5em");
867}
868body {
869 padding:expression("4em 5em 0em 5em");
870}
871*/
872
873 /**************************************** /
874 / mozilla vendor specific css extensions /
875/ ****************************************/
876/*
877div.navfooter, div.footing{
878 -moz-opacity: 0.8em;
879}
880
881div.figure,
882div.table,
883div.informalfigure,
884div.informaltable,
885div.informalexample,
886div.example,
887.tip,
888.warning,
889.caution,
890.note {
891 -moz-border-radius: 0.5em;
892}
893
894b.keycap,
895.keycap {
896 -moz-border-radius: 0.3em;
897}
898*/
899
900table tr td table tr td {
901 display: none;
902}
903
904
905hr {
906 display: none;
907}
908
909table {
910 border: 0em;
911}
912
913 .photo {
914 float: right;
915 margin-left: 1.5em;
916 margin-bottom: 1.5em;
917 margin-top: 0em;
918 max-width: 17em;
919 border: 1px solid gray;
920 padding: 3px;
921 background: white;
922}
923 .seperator {
924 padding-top: 2em;
925 clear: both;
926 }
927
928 #validators {
929 margin-top: 5em;
930 text-align: right;
931 color: #777;
932 }
933 @media print {
934 body {
935 font-size: 8pt;
936 }
937 .noprint {
938 display: none;
939 }
940 }
941
942
943.tip,
944.note {
945 background: #f0f0f2;
946 color: #333;
947 padding: 20px;
948 margin: 20px;
949}
950
951.tip h3,
952.note h3 {
953 padding: 0em;
954 margin: 0em;
955 font-size: 2em;
956 font-weight: bold;
957 color: #333;
958}
959
960.tip a,
961.note a {
962 color: #333;
963 text-decoration: underline;
964}
965
966.footnote {
967 font-size: small;
968 color: #333;
969}
970
971/* Changes the announcement text */
972.tip h3,
973.warning h3,
974.caution h3,
975.note h3 {
976 font-size:large;
977 color: #00557D;
978}
979
diff --git a/documentation/dev-manual/figures/app-dev-flow.png b/documentation/dev-manual/figures/app-dev-flow.png
new file mode 100644
index 0000000000..ec93374ee7
--- /dev/null
+++ b/documentation/dev-manual/figures/app-dev-flow.png
Binary files differ
diff --git a/documentation/dev-manual/figures/bsp-dev-flow.png b/documentation/dev-manual/figures/bsp-dev-flow.png
new file mode 100644
index 0000000000..540b0abb9f
--- /dev/null
+++ b/documentation/dev-manual/figures/bsp-dev-flow.png
Binary files differ
diff --git a/documentation/dev-manual/figures/dev-title.png b/documentation/dev-manual/figures/dev-title.png
new file mode 100644
index 0000000000..d3cac4a7e5
--- /dev/null
+++ b/documentation/dev-manual/figures/dev-title.png
Binary files differ
diff --git a/documentation/dev-manual/figures/git-workflow.png b/documentation/dev-manual/figures/git-workflow.png
new file mode 100644
index 0000000000..e401330a12
--- /dev/null
+++ b/documentation/dev-manual/figures/git-workflow.png
Binary files differ
diff --git a/documentation/dev-manual/figures/index-downloads.png b/documentation/dev-manual/figures/index-downloads.png
new file mode 100644
index 0000000000..41251d5d18
--- /dev/null
+++ b/documentation/dev-manual/figures/index-downloads.png
Binary files differ
diff --git a/documentation/dev-manual/figures/kernel-dev-flow.png b/documentation/dev-manual/figures/kernel-dev-flow.png
new file mode 100644
index 0000000000..009105d122
--- /dev/null
+++ b/documentation/dev-manual/figures/kernel-dev-flow.png
Binary files differ
diff --git a/documentation/dev-manual/figures/kernel-overview-1.png b/documentation/dev-manual/figures/kernel-overview-1.png
new file mode 100644
index 0000000000..116c0b9bd4
--- /dev/null
+++ b/documentation/dev-manual/figures/kernel-overview-1.png
Binary files differ
diff --git a/documentation/dev-manual/figures/kernel-overview-2-generic.png b/documentation/dev-manual/figures/kernel-overview-2-generic.png
new file mode 100644
index 0000000000..889ff1bf0d
--- /dev/null
+++ b/documentation/dev-manual/figures/kernel-overview-2-generic.png
Binary files differ
diff --git a/documentation/dev-manual/figures/recipe-workflow.png b/documentation/dev-manual/figures/recipe-workflow.png
new file mode 100644
index 0000000000..c0e960b13b
--- /dev/null
+++ b/documentation/dev-manual/figures/recipe-workflow.png
Binary files differ
diff --git a/documentation/dev-manual/figures/source-repos.png b/documentation/dev-manual/figures/source-repos.png
new file mode 100644
index 0000000000..65c5f29a43
--- /dev/null
+++ b/documentation/dev-manual/figures/source-repos.png
Binary files differ
diff --git a/documentation/dev-manual/figures/yp-download.png b/documentation/dev-manual/figures/yp-download.png
new file mode 100644
index 0000000000..7f1e5ca118
--- /dev/null
+++ b/documentation/dev-manual/figures/yp-download.png
Binary files differ
diff --git a/documentation/kernel-dev/figures/kernel-architecture-overview.png b/documentation/kernel-dev/figures/kernel-architecture-overview.png
new file mode 100755
index 0000000000..2aad172db3
--- /dev/null
+++ b/documentation/kernel-dev/figures/kernel-architecture-overview.png
Binary files differ
diff --git a/documentation/kernel-dev/figures/kernel-dev-title.png b/documentation/kernel-dev/figures/kernel-dev-title.png
new file mode 100644
index 0000000000..7a8dd54372
--- /dev/null
+++ b/documentation/kernel-dev/figures/kernel-dev-title.png
Binary files differ
diff --git a/documentation/kernel-dev/kernel-dev-advanced.xml b/documentation/kernel-dev/kernel-dev-advanced.xml
new file mode 100644
index 0000000000..4a6aeb7391
--- /dev/null
+++ b/documentation/kernel-dev/kernel-dev-advanced.xml
@@ -0,0 +1,1073 @@
1<!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='kernel-dev-advanced'>
6<title>Working with Advanced Metadata</title>
7
8<section id='kernel-dev-advanced-overview'>
9 <title>Overview</title>
10
11 <para>
12 In addition to supporting configuration fragments and patches, the
13 Yocto Project kernel tools also support rich
14 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink> that you can
15 use to define complex policies and Board Support Package (BSP) support.
16 The purpose of the Metadata and the tools that manage it, known as
17 the kern-tools (<filename>kern-tools-native_git.bb</filename>), is
18 to help you manage the complexity of the configuration and sources
19 used to support multiple BSPs and Linux kernel types.
20 </para>
21</section>
22
23<section id='using-kernel-metadata-in-a-recipe'>
24 <title>Using Kernel Metadata in a Recipe</title>
25
26 <para>
27 The kernel sources in the Yocto Project contain kernel Metadata, which is
28 located in the <filename>meta</filename> branches of the kernel source
29 Git repositories.
30 This Metadata defines Board Support Packages (BSPs) that
31 correspond to definitions in linux-yocto recipes for the same BSPs.
32 A BSP consists of an aggregation of kernel policy and hardware-specific
33 feature enablements.
34 The BSP can be influenced from within the linux-yocto recipe.
35 <note>
36 Linux kernel source that contains kernel Metadata is said to be
37 "linux-yocto style" kernel source.
38 A Linux kernel recipe that inherits from the
39 <filename>linux-yocto.inc</filename> include file is said to be a
40 "linux-yocto style" recipe.
41 </note>
42 </para>
43
44 <para>
45 Every linux-yocto style recipe must define the
46 <ulink url='&YOCTO_DOCS_REF_URL;#var-KMACHINE'><filename>KMACHINE</filename></ulink>
47 variable.
48 This variable is typically set to the same value as the
49 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
50 variable, which is used by
51 <ulink url='&YOCTO_DOCS_DEV_URL;#bitbake-term'>BitBake</ulink>
52 (e.g. "edgerouter" or "fri2").
53 Multiple BSPs can reuse the same <filename>KMACHINE</filename>
54 name if they are built using the same BSP description.
55 The "fri2" and "fri2-noemgd" BSP combination
56 in the <filename>meta-intel</filename>
57 layer is a good example of two BSPs using the same
58 <filename>KMACHINE</filename> value (i.e. "fri2").
59 See the <link linkend='bsp-descriptions'>BSP Descriptions</link> section
60 for more information.
61 </para>
62
63 <para>
64 The linux-yocto style recipes can optionally define the following
65 variables:
66 <literallayout class='monospaced'>
67 <ulink url='&YOCTO_DOCS_REF_URL;#var-KBRANCH'>KBRANCH</ulink>
68 <ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_FEATURES'>KERNEL_FEATURES</ulink>
69 <ulink url='&YOCTO_DOCS_REF_URL;#var-KBRANCH_DEFAULT'>KBRANCH_DEFAULT</ulink>
70 <ulink url='&YOCTO_DOCS_REF_URL;#var-LINUX_KERNEL_TYPE'>LINUX_KERNEL_TYPE</ulink>
71 </literallayout>
72 <filename>KBRANCH_DEFAULT</filename> defines the Linux kernel source
73 repository's default branch to use to build the Linux kernel.
74 The value is used as the default for <filename>KBRANCH</filename>, which
75 can define an alternate branch typically with a machine override as
76 follows:
77 <literallayout class='monospaced'>
78 KBRANCH_fri2 = "standard/fri2"
79 </literallayout>
80 Unless you specify otherwise, <filename>KBRANCH_DEFAULT</filename>
81 initializes to "master".
82 </para>
83
84 <para>
85 <filename>LINUX_KERNEL_TYPE</filename> defines the kernel type to be
86 used in assembling the configuration.
87 If you do not specify a <filename>LINUX_KERNEL_TYPE</filename>,
88 it defaults to "standard".
89 Together with
90 <ulink url='&YOCTO_DOCS_REF_URL;#var-KMACHINE'><filename>KMACHINE</filename></ulink>,
91 <filename>LINUX_KERNEL_TYPE</filename> defines the search
92 arguments used by the kernel tools to find the
93 appropriate description within the kernel Metadata with which to
94 build out the sources and configuration.
95 The linux-yocto recipes define "standard", "tiny", and "preempt-rt"
96 kernel types.
97 See the <link linkend='kernel-types'>Kernel Types</link> section
98 for more information on kernel types.
99 </para>
100
101 <para>
102 During the build, the kern-tools search for the BSP description
103 file that most closely matches the <filename>KMACHINE</filename>
104 and <filename>LINUX_KERNEL_TYPE</filename> variables passed in from the
105 recipe.
106 The tools use the first BSP description it finds that match
107 both variables.
108 If the tools cannot find a match, they issue a warning such as
109 the following:
110 <literallayout class='monospaced'>
111 WARNING: Can't find any BSP hardware or required configuration fragments.
112 WARNING: Looked at meta/cfg/broken/fri2-broken/hdw_frags.txt and
113 meta/cfg/broken/fri2-broken/required_frags.txt in directory:
114 meta/cfg/broken/fri2-broken
115 </literallayout>
116 In this example, <filename>KMACHINE</filename> was set to "fri2-broken"
117 and <filename>LINUX_KERNEL_TYPE</filename> was set to "broken".
118 </para>
119
120 <para>
121 The tools first search for the <filename>KMACHINE</filename> and
122 then for the <filename>LINUX_KERNEL_TYPE</filename>.
123 If the tools cannot find a partial match, they will use the
124 sources from the <filename>KBRANCH</filename> and any configuration
125 specified in the
126 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>.
127 </para>
128
129 <para>
130 You can use the <filename>KERNEL_FEATURES</filename> variable
131 to include features (configuration fragments, patches, or both) that
132 are not already included by the <filename>KMACHINE</filename> and
133 <filename>LINUX_KERNEL_TYPE</filename> variable combination.
134 For example, to include a feature specified as "features/netfilter.scc",
135 specify:
136 <literallayout class='monospaced'>
137 KERNEL_FEATURES += "features/netfilter.scc"
138 </literallayout>
139 To include a feature called "cfg/sound.scc" just for the
140 <filename>qemux86</filename> machine, specify:
141 <literallayout class='monospaced'>
142 KERNEL_FEATURES_append_qemux86 = "cfg/sound.scc"
143 </literallayout>
144 The value of the entries in <filename>KERNEL_FEATURES</filename>
145 are dependent on their location within the kernel Metadata itself.
146 The examples here are taken from the
147 <filename>linux-yocto-3.4</filename> repository where "features"
148 and "cfg" are subdirectories within the
149 <filename>meta/cfg/kernel-cache</filename> directory.
150 For more information, see the
151 "<link linkend='kernel-metadata-syntax'>Kernel Metadata Syntax</link>" section.
152 <note>
153 The processing of the these variables has evolved some between the
154 0.9 and 1.3 releases of the Yocto Project and associated
155 kern-tools sources.
156 The descriptions in this section are accurate for 1.3 and later
157 releases of the Yocto Project.
158 </note>
159 </para>
160</section>
161
162<section id='kernel-metadata-location'>
163 <title>Kernel Metadata Location</title>
164
165 <para>
166 Kernel Metadata can be defined in either the kernel recipe
167 (recipe-space) or in the kernel tree (in-tree).
168 Where you choose to define the Metadata depends on what you want
169 to do and how you intend to work.
170 Regardless of where you define the kernel Metadata, the syntax used
171 applies equally.
172 </para>
173
174 <para>
175 If you are unfamiliar with the Linux kernel and only wish
176 to apply a configuration and possibly a couple of patches provided to
177 you by others, the recipe-space method is recommended.
178 This method is also a good approach if you are working with Linux kernel
179 sources you do not control or if you just do not want to maintain a
180 Linux kernel Git repository on your own.
181 For partial information on how you can define kernel Metadata in
182 the recipe-space, see the
183 "<link linkend='modifying-an-existing-recipe'>Modifying an Existing Recipe</link>"
184 section.
185 </para>
186
187 <para>
188 Conversely, if you are actively developing a kernel and are already
189 maintaining a Linux kernel Git repository of your own, you might find
190 it more convenient to work with the kernel Metadata in the same
191 repository as the Linux kernel sources.
192 This method can make iterative development of the Linux kernel
193 more efficient outside of the BitBake environment.
194 </para>
195
196 <section id='recipe-space-metadata'>
197 <title>Recipe-Space Metadata</title>
198
199 <para>
200 When stored in recipe-space, the kernel Metadata files reside in a
201 directory hierarchy below
202 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>.
203 For a linux-yocto recipe or for a Linux kernel recipe derived
204 by copying and modifying
205 <filename>oe-core/meta-skeleton/recipes-kernel/linux/linux-yocto-custom.bb</filename>
206 to a recipe in your layer, <filename>FILESEXTRAPATHS</filename>
207 is typically set to
208 <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>.
209 See the "<link linkend='modifying-an-existing-recipe'>Modifying an Existing Recipe</link>"
210 section for more information.
211 </para>
212
213 <para>
214 Here is an example that shows a trivial tree of kernel Metadata
215 stored in recipe-space within a BSP layer:
216 <literallayout class='monospaced'>
217 meta-my_bsp_layer/
218 `-- recipes-kernel
219 `-- linux
220 `-- linux-yocto
221 |-- bsp-standard.scc
222 |-- bsp.cfg
223 `-- standard.cfg
224 </literallayout>
225 </para>
226
227 <para>
228 When the Metadata is stored in recipe-space, you must take
229 steps to ensure BitBake has the necessary information to decide
230 what files to fetch and when they need to be fetched again.
231 It is only necessary to specify the <filename>.scc</filename>
232 files on the
233 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>.
234 BitBake parses them and fetches any files referenced in the
235 <filename>.scc</filename> files by the <filename>include</filename>,
236 <filename>patch</filename>, or <filename>kconf</filename> commands.
237 Because of this, it is necessary to bump the recipe
238 <ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink>
239 value when changing the content of files not explicitly listed
240 in the <filename>SRC_URI</filename>.
241 </para>
242 </section>
243
244 <section id='in-tree-metadata'>
245 <title>In-Tree Metadata</title>
246
247 <para>
248 When stored in-tree, the kernel Metadata files reside in the
249 <filename>meta</filename> directory of the Linux kernel sources.
250 The <filename>meta</filename> directory can be present in the
251 same repository branch as the sources,
252 such as "master", or <filename>meta</filename> can be its own
253 orphan branch.
254 <note>
255 An orphan branch in Git is a branch with unique history and
256 content to the other branches in the repository.
257 Orphan branches are useful to track Metadata changes
258 independently from the sources of the Linux kernel, while
259 still keeping them together in the same repository.
260 </note>
261 For the purposes of this document, we will discuss all
262 in-tree Metadata as residing below the
263 <filename>meta/cfg/kernel-cache</filename> directory.
264 </para>
265
266 <para>
267 Following is an example that shows how a trivial tree of Metadata
268 is stored in a custom Linux kernel Git repository:
269 <literallayout class='monospaced'>
270 meta/
271 `-- cfg
272 `-- kernel-cache
273 |-- bsp-standard.scc
274 |-- bsp.cfg
275 `-- standard.cfg
276 </literallayout>
277 </para>
278
279 <para>
280 To use a branch different from where the sources reside,
281 specify the branch in the <filename>KMETA</filename> variable
282 in your Linux kernel recipe.
283 Here is an example:
284 <literallayout class='monospaced'>
285 KMETA = "meta"
286 </literallayout>
287 To use the same branch as the sources, set
288 <filename>KMETA</filename> to an empty string:
289 <literallayout class='monospaced'>
290 KMETA = ""
291 </literallayout>
292 If you are working with your own sources and want to create an
293 orphan <filename>meta</filename> branch, use these commands
294 from within your Linux kernel Git repository:
295 <literallayout class='monospaced'>
296 $ git checkout --orphan meta
297 $ git rm -rf .
298 $ git commit --allow-empty -m "Create orphan meta branch"
299 </literallayout>
300 </para>
301
302 <para>
303 If you modify the Metadata in the linux-yocto
304 <filename>meta</filename> branch, you must not forget to update
305 the
306 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRCREV'><filename>SRCREV</filename></ulink>
307 statements in the kernel's recipe.
308 In particular, you need to update the
309 <filename>SRCREV_meta</filename> variable to match the commit in
310 the <filename>KMETA</filename> branch you wish to use.
311 Changing the data in these branches and not updating the
312 <filename>SRCREV</filename> statements to match will cause the
313 build to fetch an older commit.
314 </para>
315 </section>
316</section>
317
318<section id='kernel-metadata-syntax'>
319 <title>Kernel Metadata Syntax</title>
320
321 <para>
322 The kernel Metadata consists of three primary types of files:
323 <filename>scc</filename>
324 <footnote>
325 <para>
326 <filename>scc</filename> stands for Series Configuration
327 Control, but the naming has less significance in the
328 current implementation of the tooling than it had in the
329 past.
330 Consider <filename>scc</filename> files to be description files.
331 </para>
332 </footnote>
333 description files, configuration fragments, and patches.
334 The <filename>scc</filename> files define variables and include or
335 otherwise reference any of the three file types.
336 The description files are used to aggregate all types of kernel
337 Metadata into
338 what ultimately describes the sources and the configuration required
339 to build a Linux kernel tailored to a specific machine.
340 </para>
341
342 <para>
343 The <filename>scc</filename> description files are used to define two
344 fundamental types of kernel Metadata:
345 <itemizedlist>
346 <listitem><para>Features</para></listitem>
347 <listitem><para>Board Support Packages (BSPs)</para></listitem>
348 </itemizedlist>
349 </para>
350
351 <para>
352 Features aggregate sources in the form of patches and configuration
353 fragments into a modular reusable unit.
354 You can use features to implement conceptually separate kernel
355 Metadata descriptions such as pure configuration fragments,
356 simple patches, complex features, and kernel types.
357 <link linkend='kernel-types'>Kernel types</link> define general
358 kernel features and policy to be reused in the BSPs.
359 </para>
360
361 <para>
362 BSPs define hardware-specific features and aggregate them with kernel
363 types to form the final description of what will be assembled and built.
364 </para>
365
366 <para>
367 While the kernel Metadata syntax does not enforce any logical
368 separation of configuration fragments, patches, features or kernel
369 types, best practices dictate a logical separation of these types
370 of Metadata.
371 The following Metadata file hierarchy is recommended:
372 <literallayout class='monospaced'>
373 &lt;base&gt;/
374 bsp/
375 cfg/
376 features/
377 ktypes/
378 patches/
379 </literallayout>
380 </para>
381
382 <para>
383 The <filename>bsp</filename> directory contains the
384 <link linkend='bsp-descriptions'>BSP descriptions</link>.
385 The remaining directories all contain "features".
386 Separating <filename>bsp</filename> from the rest of the structure
387 aids conceptualizing intended usage.
388 </para>
389
390 <para>
391 Use these guidelines to help place your <filename>scc</filename>
392 description files within the structure:
393 <itemizedlist>
394 <listitem><para>If your file contains
395 only configuration fragments, place the file in the
396 <filename>cfg</filename> directory.</para></listitem>
397 <listitem><para>If your file contains
398 only source-code fixes, place the file in the
399 <filename>patches</filename> directory.</para></listitem>
400 <listitem><para>If your file encapsulates
401 a major feature, often combining sources and configurations,
402 place the file in <filename>features</filename> directory.
403 </para></listitem>
404 <listitem><para>If your file aggregates
405 non-hardware configuration and patches in order to define a
406 base kernel policy or major kernel type to be reused across
407 multiple BSPs, place the file in <filename>ktypes</filename>
408 directory.
409 </para></listitem>
410 </itemizedlist>
411 </para>
412
413 <para>
414 These distinctions can easily become blurred - especially as
415 out-of-tree features slowly merge upstream over time.
416 Also, remember that how the description files are placed is
417 a purely logical organization and has no impact on the functionality
418 of the kernel Metadata.
419 There is no impact because all of <filename>cfg</filename>,
420 <filename>features</filename>, <filename>patches</filename>, and
421 <filename>ktypes</filename>, contain "features" as far as the kernel
422 tools are concerned.
423 </para>
424
425 <para>
426 Paths used in kernel Metadata files are relative to
427 <filename>&lt;base&gt;</filename>, which is either
428 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
429 if you are creating Metadata in
430 <link linkend='recipe-space-metadata'>recipe-space</link>,
431 or <filename>meta/cfg/kernel-cache/</filename> if you are creating
432 Metadata <link linkend='in-tree-metadata'>in-tree</link>.
433 </para>
434
435 <section id='configuration'>
436 <title>Configuration</title>
437
438 <para>
439 The simplest unit of kernel Metadata is the configuration-only
440 feature.
441 This feature consists of one or more Linux kernel configuration
442 parameters in a configuration fragment file
443 (<filename>.cfg</filename>) and an <filename>.scc</filename> file
444 that describes the fragment.
445 </para>
446
447 <para>
448 The Symmetric Multi-Processing (SMP) fragment included in the
449 <filename>linux-yocto-3.4</filename> Git repository
450 consists of the following two files:
451 <literallayout class='monospaced'>
452 cfg/smp.scc:
453 define KFEATURE_DESCRIPTION "Enable SMP"
454 kconf hardware smp.cfg
455
456 cfg/smp.cfg:
457 CONFIG_SMP=y
458 CONFIG_SCHED_SMT=y
459 </literallayout>
460 You can find information on configuration fragment files in the
461 "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-config-fragments'>Creating Configuration Fragments</ulink>"
462 section of the Yocto Project Development Manual and in
463 the "<link linkend='generating-configuration-files'>Generating Configuration Files</link>"
464 section earlier in this manual.
465 </para>
466
467 <para>
468 <ulink url='&YOCTO_DOCS_REF_URL;#var-KFEATURE_DESCRIPTION'><filename>KFEATURE_DESCRIPTION</filename></ulink>
469 provides a short description of the fragment.
470 Higher level kernel tools use this description.
471 </para>
472
473 <para>
474 The <filename>kconf</filename> command is used to include the
475 actual configuration fragment in an <filename>.scc</filename>
476 file, and the "hardware" keyword identifies the fragment as
477 being hardware enabling, as opposed to general policy,
478 which would use the "non-hardware" keyword.
479 The distinction is made for the benefit of the configuration
480 validation tools, which warn you if a hardware fragment
481 overrides a policy set by a non-hardware fragment.
482 <note>
483 The description file can include multiple
484 <filename>kconf</filename> statements, one per fragment.
485 </note>
486 </para>
487
488 <para>
489 As described in the
490 "<link linkend='generating-configuration-files'>Generating Configuration Files</link>"
491 section, you can use the following BitBake command to audit your
492 configuration:
493 <literallayout class='monospaced'>
494 $ bitbake linux-yocto -c kernel_configcheck -f
495 </literallayout>
496 </para>
497 </section>
498
499 <section id='patches'>
500 <title>Patches</title>
501
502 <para>
503 Patch descriptions are very similar to configuration fragment
504 descriptions, which are described in the previous section.
505 However, instead of a <filename>.cfg</filename> file, these
506 descriptions work with source patches.
507 </para>
508
509 <para>
510 A typical patch includes a description file and the patch itself:
511 <literallayout class='monospaced'>
512 patches/mypatch.scc:
513 patch mypatch.patch
514
515 patches/mypatch.patch:
516 &lt;typical-patch&gt;
517 </literallayout>
518 You can create the typical <filename>.patch</filename>
519 file using <filename>diff -Nurp</filename> or
520 <filename>git format-patch</filename>.
521 </para>
522
523 <para>
524 The description file can include multiple patch statements,
525 one per patch.
526 </para>
527 </section>
528
529 <section id='features'>
530 <title>Features</title>
531
532 <para>
533 Features are complex kernel Metadata types that consist
534 of configuration fragments (<filename>kconf</filename>), patches
535 (<filename>patch</filename>), and possibly other feature
536 description files (<filename>include</filename>).
537 </para>
538
539 <para>
540 Here is an example that shows a feature description file:
541 <literallayout class='monospaced'>
542 features/myfeature.scc
543 define KFEATURE_DESCRIPTION "Enable myfeature"
544
545 patch 0001-myfeature-core.patch
546 patch 0002-myfeature-interface.patch
547
548 include cfg/myfeature_dependency.scc
549 kconf non-hardware myfeature.cfg
550 </literallayout>
551 This example shows how the <filename>patch</filename> and
552 <filename>kconf</filename> commands are used as well as
553 how an additional feature description file is included.
554 </para>
555
556 <para>
557 Typically, features are less granular than configuration
558 fragments and are more likely than configuration fragments
559 and patches to be the types of things you want to specify
560 in the <filename>KERNEL_FEATURES</filename> variable of the
561 Linux kernel recipe.
562 See the "<link linkend='using-kernel-metadata-in-a-recipe'>Using Kernel Metadata in a Recipe</link>"
563 section earlier in the manual.
564 </para>
565 </section>
566
567 <section id='kernel-types'>
568 <title>Kernel Types</title>
569
570 <para>
571 A kernel type defines a high-level kernel policy by
572 aggregating non-hardware configuration fragments with
573 patches you want to use when building a Linux kernels of a
574 specific type.
575 Syntactically, kernel types are no different than features
576 as described in the "<link linkend='features'>Features</link>"
577 section.
578 The <filename>LINUX_KERNEL_TYPE</filename> variable in the kernel
579 recipe selects the kernel type.
580 See the "<link linkend='using-kernel-metadata-in-a-recipe'>Using Kernel Metadata in a Recipe</link>"
581 section for more information.
582 </para>
583
584 <para>
585 As an example, the <filename>linux-yocto-3.4</filename>
586 tree defines three kernel types: "standard",
587 "tiny", and "preempt-rt":
588 <itemizedlist>
589 <listitem><para>"standard":
590 Includes the generic Linux kernel policy of the Yocto
591 Project linux-yocto kernel recipes.
592 This policy includes, among other things, which file
593 systems, networking options, core kernel features, and
594 debugging and tracing options are supported.
595 </para></listitem>
596 <listitem><para>"preempt-rt":
597 Applies the <filename>PREEMPT_RT</filename>
598 patches and the configuration options required to
599 build a real-time Linux kernel.
600 This kernel type inherits from the "standard" kernel type.
601 </para></listitem>
602 <listitem><para>"tiny":
603 Defines a bare minimum configuration meant to serve as a
604 base for very small Linux kernels.
605 The "tiny" kernel type is independent from the "standard"
606 configuration.
607 Although the "tiny" kernel type does not currently include
608 any source changes, it might in the future.
609 </para></listitem>
610 </itemizedlist>
611 </para>
612
613 <para>
614 The "standard" kernel type is defined by
615 <filename>standard.scc</filename>:
616 <literallayout class='monospaced'>
617 # Include this kernel type fragment to get the standard features and
618 # configuration values.
619
620 # Include all standard features
621 include standard-nocfg.scc
622
623 kconf non-hardware standard.cfg
624
625 # individual cfg block section
626 include cfg/fs/devtmpfs.scc
627 include cfg/fs/debugfs.scc
628 include cfg/fs/btrfs.scc
629 include cfg/fs/ext2.scc
630 include cfg/fs/ext3.scc
631 include cfg/fs/ext4.scc
632
633 include cfg/net/ipv6.scc
634 include cfg/net/ip_nf.scc
635 include cfg/net/ip6_nf.scc
636 include cfg/net/bridge.scc
637 </literallayout>
638 </para>
639
640 <para>
641 As with any <filename>.scc</filename> file, a
642 kernel type definition can aggregate other
643 <filename>.scc</filename> files with
644 <filename>include</filename> commands.
645 These definitions can also directly pull in
646 configuration fragments and patches with the
647 <filename>kconf</filename> and <filename>patch</filename>
648 commands, respectively.
649 </para>
650
651 <note>
652 It is not strictly necessary to create a kernel type
653 <filename>.scc</filename> file.
654 The Board Support Package (BSP) file can implicitly define
655 the kernel type using a <filename>define
656 <ulink url='&YOCTO_DOCS_REF_URL;#var-KTYPE'>KTYPE</ulink> myktype</filename>
657 line.
658 See the "<link linkend='bsp-descriptions'>BSP Descriptions</link>"
659 section for more information.
660 </note>
661 </section>
662
663 <section id='bsp-descriptions'>
664 <title>BSP Descriptions</title>
665
666 <para>
667 BSP descriptions combine kernel types with hardware-specific
668 features.
669 The hardware-specific portion is typically defined
670 independently, and then aggregated with each supported kernel
671 type.
672 Consider this simple BSP description that supports the "mybsp"
673 machine:
674 <literallayout class='monospaced'>
675 mybsp.scc:
676 define KMACHINE mybsp
677 define KTYPE standard
678 define KARCH i386
679
680 kconf mybsp.cfg
681 </literallayout>
682 Every BSP description should define the
683 <ulink url='&YOCTO_DOCS_REF_URL;#var-KMACHINE'><filename>KMACHINE</filename></ulink>,
684 <ulink url='&YOCTO_DOCS_REF_URL;#var-KTYPE'><filename>KTYPE</filename></ulink>,
685 and <ulink url='&YOCTO_DOCS_REF_URL;#var-KARCH'><filename>KARCH</filename></ulink>
686 variables.
687 These variables allow the OpenEmbedded build system to identify
688 the description as meeting the criteria set by the recipe being
689 built.
690 This simple example supports the "mybsp" machine for the "standard"
691 kernel and the "i386" architecture.
692 </para>
693
694 <para>
695 Be aware that a hard link between the
696 <filename>KTYPE</filename> variable and a kernel type
697 description file does not exist.
698 Thus, if you do not have kernel types defined in your kernel
699 Metadata, you only need to ensure that the kernel recipe's
700 <ulink url='&YOCTO_DOCS_REF_URL;#var-LINUX_KERNEL_TYPE'><filename>LINUX_KERNEL_TYPE</filename></ulink>
701 variable and the <filename>KTYPE</filename> variable in the
702 BSP description file match.
703 <note>
704 Future versions of the tooling make the specification of
705 <filename>KTYPE</filename> in the BSP optional.
706 </note>
707 </para>
708
709 <para>
710 If you did want to separate your kernel policy from your
711 hardware configuration, you could do so by specifying a kernel
712 type, such as "standard" and including that description file
713 in the BSP description file.
714 See the "<link linkend='kernel-types'>Kernel Types</link>" section
715 for more information.
716 </para>
717
718 <para>
719 You might also have multiple hardware configurations that you
720 aggregate into a single hardware description file that you
721 could include in the BSP description file, rather than referencing
722 a single <filename>.cfg</filename> file.
723 Consider the following:
724 <literallayout class='monospaced'>
725 mybsp.scc:
726 define KMACHINE mybsp
727 define KTYPE standard
728 define KARCH i386
729
730 include standard.scc
731 include mybsp-hw.scc
732 </literallayout>
733 </para>
734
735 <para>
736 In the above example, <filename>standard.scc</filename>
737 aggregates all the configuration fragments, patches, and
738 features that make up your standard kernel policy whereas
739 <filename>mybsp-hw.scc</filename> aggregates all those necessary
740 to support the hardware available on the "mybsp" machine.
741 For information on how to break a complete
742 <filename>.config</filename> file into the various
743 configuration fragments, see the
744 "<link linkend='generating-configuration-files'>Generating Configuration Files</link>"
745 section.
746 </para>
747
748 <para>
749 Many real-world examples are more complex.
750 Like any other <filename>.scc</filename> file, BSP
751 descriptions can aggregate features.
752 Consider the Fish River Island 2 (fri2)
753 BSP definition from the <filename>linux-yocto-3.4</filename>
754 Git repository:
755 <literallayout class='monospaced'>
756 fri2.scc:
757 kconf hardware fri2.cfg
758
759 include cfg/x86.scc
760 include features/eg20t/eg20t.scc
761 include cfg/dmaengine.scc
762 include features/ericsson-3g/f5521gw.scc
763 include features/power/intel.scc
764 include cfg/efi.scc
765 include features/usb/ehci-hcd.scc
766 include features/usb/ohci-hcd.scc
767 include features/iwlwifi/iwlwifi.scc
768 </literallayout>
769 </para>
770
771 <para>
772 The <filename>fri2.scc</filename> description file includes
773 a hardware configuration fragment
774 (<filename>fri2.cfg</filename>) specific to the Fish River
775 Island 2 BSP as well as several more general configuration
776 fragments and features enabling hardware found on the
777 machine.
778 This description file is then included in each of the three
779 "fri2" description files for the supported kernel types
780 (i.e. "standard", "preempt-rt", and "tiny").
781 Consider the "fri2" description for the "standard" kernel
782 type:
783 <literallayout class='monospaced'>
784 fri2-standard.scc:
785 define KMACHINE fri2
786 define KTYPE standard
787 define KARCH i386
788
789 include ktypes/standard/standard.scc
790 branch fri2
791
792 git merge emgd-1.14
793
794 include fri2.scc
795
796 # Extra fri2 configs above the minimal defined in fri2.scc
797 include cfg/efi-ext.scc
798 include features/drm-emgd/drm-emgd.scc
799 include cfg/vesafb.scc
800
801 # default policy for standard kernels
802 include cfg/usb-mass-storage.scc
803 </literallayout>
804 The <filename>include</filename> command midway through the file
805 includes the <filename>fri2.scc</filename> description that
806 defines all hardware enablements for the BSP that is common to all
807 kernel types.
808 Using this command significantly reduces duplication.
809 </para>
810
811 <para>
812 This "fri2" standard description introduces a few more variables
813 and commands that are worth further discussion.
814 Notice the <filename>branch fri2</filename> command, which creates
815 a machine-specific branch into which source changes are applied.
816 With this branch set up, the <filename>git merge</filename> command
817 uses Git to merge in a feature branch named "emgd-1.14".
818 You could also handle this with the <filename>patch</filename>
819 command.
820 However, for commonly used features such as this, feature branches
821 are a convenient mechanism.
822 See the "<link linkend='feature-branches'>Feature Branches</link>"
823 section for more information.
824 </para>
825
826 <para>
827 Now consider the "fri2" description for the "tiny" kernel type:
828 <literallayout class='monospaced'>
829 fri2-tiny.scc:
830 define KMACHINE fri2
831 define KTYPE tiny
832 define KARCH i386
833
834 include ktypes/tiny/tiny.scc
835 branch fri2
836
837 include fri2.scc
838 </literallayout>
839 As you might expect, the "tiny" description includes quite a
840 bit less.
841 In fact, it includes only the minimal policy defined by the
842 "tiny" kernel type and the hardware-specific configuration required
843 for booting the machine along with the most basic functionality of
844 the system as defined in the base "fri2" description file.
845 </para>
846
847 <para>
848 Notice again the three critical variables:
849 <filename>KMACHINE</filename>, <filename>KTYPE</filename>,
850 and <filename>KARCH</filename>.
851 Of these variables, only the <filename>KTYPE</filename> has changed.
852 It is now set to "tiny".
853 </para>
854 </section>
855</section>
856
857<section id='organizing-your-source'>
858 <title>Organizing Your Source</title>
859
860 <para>
861 Many recipes based on the <filename>linux-yocto-custom.bb</filename>
862 recipe use Linux kernel sources that have only a single
863 branch - "master".
864 This type of repository structure is fine for linear development
865 supporting a single machine and architecture.
866 However, if you work with multiple boards and architectures,
867 a kernel source repository with multiple branches is more
868 efficient.
869 For example, suppose you need a series of patches for one board to boot.
870 Sometimes, these patches are works-in-progress or fundamentally wrong,
871 yet they are still necessary for specific boards.
872 In these situations, you most likely do not want to include these
873 patches in every kernel you build (i.e. have the patches as part of
874 the lone "master" branch).
875 It is situations like these that give rise to multiple branches used
876 within a Linux kernel sources Git repository.
877 </para>
878
879 <para>
880 Repository organization strategies exist that maximize source reuse,
881 remove redundancy, and logically order your changes.
882 This section presents strategies for the following cases:
883 <itemizedlist>
884 <listitem><para>Encapsulating patches in a feature description
885 and only including the patches in the BSP descriptions of
886 the applicable boards.</para></listitem>
887 <listitem><para>Creating a machine branch in your
888 kernel source repository and applying the patches on that
889 branch only.</para></listitem>
890 <listitem><para>Creating a feature branch in your
891 kernel source repository and merging that branch into your
892 BSP when needed.</para></listitem>
893 </itemizedlist>
894 </para>
895
896 <para>
897 The approach you take is entirely up to you
898 and depends on what works best for your development model.
899 </para>
900
901 <section id='encapsulating-patches'>
902 <title>Encapsulating Patches</title>
903
904 <para>
905 if you are reusing patches from an external tree and are not
906 working on the patches, you might find the encapsulated feature
907 to be appropriate.
908 Given this scenario, you do not need to create any branches in the
909 source repository.
910 Rather, you just take the static patches you need and encapsulate
911 them within a feature description.
912 Once you have the feature description, you simply include that into
913 the BSP description as described in the
914 "<link linkend='bsp-descriptions'>BSP Descriptions</link>"
915 section.
916 </para>
917
918 <para>
919 You can find information on how to create patches and BSP
920 descriptions in the "<link linkend='patches'>Patches</link>" and
921 "<link linkend='bsp-descriptions'>BSP Descriptions</link>"
922 sections.
923 </para>
924 </section>
925
926 <section id='machine-branches'>
927 <title>Machine Branches</title>
928
929 <para>
930 When you have multiple machines and architectures to support,
931 or you are actively working on board support, it is more
932 efficient to create branches in the repository based on
933 individual machines.
934 Having machine branches allows common source to remain in the
935 "master" branch with any features specific to a machine stored
936 in the appropriate machine branch.
937 This organization method frees you from continually reintegrating
938 your patches into a feature.
939 </para>
940
941 <para>
942 Once you have a new branch, you can set up your kernel Metadata
943 to use the branch a couple different ways.
944 In the recipe, you can specify the new branch as the
945 <filename>KBRANCH</filename> to use for the board as
946 follows:
947 <literallayout class='monospaced'>
948 KBRANCH = "mynewbranch"
949 </literallayout>
950 Another method is to use the <filename>branch</filename> command
951 in the BSP description:
952 <literallayout class='monospaced'>
953 mybsp.scc:
954 define KMACHINE mybsp
955 define KTYPE standard
956 define KARCH i386
957 include standard.scc
958
959 branch mynewbranch
960
961 include mybsp-hw.scc
962 </literallayout>
963 </para>
964
965 <para>
966 If you find
967 yourself with numerous branches, you might consider using a
968 hierarchical branching system similar to what the linux-yocto Linux
969 kernel repositories use:
970 <literallayout class='monospaced'>
971 &lt;common&gt;/&lt;kernel_type&gt;/&lt;machine&gt;
972 </literallayout>
973 </para>
974
975 <para>
976 If you had two kernel types, "standard" and "small" for
977 instance, and three machines, the branches in your
978 Git repository might look like this:
979 <literallayout class='monospaced'>
980 common/base
981 common/standard/base
982 common/standard/machine_a
983 common/standard/machine_b
984 common/standard/machine_c
985 common/small/base
986 common/small/machine_a
987 </literallayout>
988 </para>
989
990 <para>
991 This organization can help clarify the branch relationships.
992 In this case, <filename>common/standard/machine_a</filename>
993 includes everything in <filename>common/base</filename> and
994 <filename>common/standard/base</filename>.
995 The "standard" and "small" branches add sources specific to those
996 kernel types that for whatever reason are not appropriate for the
997 other branches.
998 <note>The "base" branches are an artifact of the way Git manages
999 its data internally on the filesystem: Git will not allow you
1000 to use <filename>common/standard</filename> and
1001 <filename>common/standard/machine_a</filename> because it
1002 would have to create a file and a directory named "standard".
1003 </note>
1004 </para>
1005 </section>
1006
1007 <section id='feature-branches'>
1008 <title>Feature Branches</title>
1009
1010 <para>
1011 When you are actively developing new features, it can be more
1012 efficient to work with that feature as a branch, rather than
1013 as a set of patches that have to be regularly updated.
1014 The Yocto Project Linux kernel tools provide for this with
1015 the <filename>git merge</filename> command.
1016 </para>
1017
1018 <para>
1019 To merge a feature branch into a BSP, insert the
1020 <filename>git merge</filename> command after any
1021 <filename>branch</filename> commands:
1022 <literallayout class='monospaced'>
1023 mybsp.scc:
1024 define KMACHINE mybsp
1025 define KTYPE standard
1026 define KARCH i386
1027 include standard.scc
1028
1029 branch mynewbranch
1030 git merge myfeature
1031
1032 include mybsp-hw.scc
1033 </literallayout>
1034 </para>
1035 </section>
1036</section>
1037
1038<section id='scc-reference'>
1039 <title>SCC Description File Reference</title>
1040
1041 <para>
1042 This section provides a brief reference for the commands you can use
1043 within an SCC description file (<filename>.scc</filename>):
1044 <itemizedlist>
1045 <listitem><para><filename>branch [ref]</filename>:
1046 Creates a new branch relative to the current branch
1047 (typically <filename>${KTYPE}</filename>) using
1048 the currently checked-out branch, or "ref" if specified.
1049 </para></listitem>
1050 <listitem><para><filename>define</filename>:
1051 Defines variables, such as <filename>KMACHINE</filename>,
1052 <filename>KTYPE</filename>, <filename>KARCH</filename>,
1053 and <filename>KFEATURE_DESCRIPTION</filename>.</para></listitem>
1054 <listitem><para><filename>include SCC_FILE</filename>:
1055 Includes an SCC file in the current file.
1056 The file is parsed as if you had inserted it inline.
1057 </para></listitem>
1058 <listitem><para><filename>kconf [hardware|non-hardware] CFG_FILE</filename>:
1059 Queues a configuration fragment for merging into the final
1060 Linux <filename>.config</filename> file.</para></listitem>
1061 <listitem><para><filename>git merge GIT_BRANCH</filename>:
1062 Merges the feature branch into the current branch.
1063 </para></listitem>
1064 <listitem><para><filename>patch PATCH_FILE</filename>:
1065 Applies the patch to the current Git branch.</para></listitem>
1066 </itemizedlist>
1067 </para>
1068</section>
1069
1070</chapter>
1071<!--
1072vim: expandtab tw=80 ts=4
1073-->
diff --git a/documentation/kernel-dev/kernel-dev-common.xml b/documentation/kernel-dev/kernel-dev-common.xml
new file mode 100644
index 0000000000..ef1d0dbc5b
--- /dev/null
+++ b/documentation/kernel-dev/kernel-dev-common.xml
@@ -0,0 +1,858 @@
1<!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='kernel-dev-common'>
6
7<title>Common Tasks</title>
8
9<para>
10 This chapter presents several common tasks you perform when you
11 work with the Yocto Project Linux kernel.
12 These tasks include preparing a layer, modifying an existing recipe,
13 iterative development, working with your own sources, and incorporating
14 out-of-tree modules.
15 <note>
16 The examples presented in this chapter work with the Yocto Project
17 1.2.2 Release and forward.
18 </note>
19</para>
20
21 <section id='creating-and-preparing-a-layer'>
22 <title>Creating and Preparing a Layer</title>
23
24 <para>
25 If you are going to be modifying kernel recipes, it is recommended
26 that you create and prepare your own layer in which to do your
27 work.
28 Your layer contains its own
29 <ulink url='&YOCTO_DOCS_DEV_URL;#bitbake-term'>BitBake</ulink>
30 append files
31 (<filename>.bbappend</filename>) and provides a convenient
32 mechanism to create your own recipe files
33 (<filename>.bb</filename>).
34 For details on how to create and work with layers, see the following
35 sections in the Yocto Project Development Manual:
36 <itemizedlist>
37 <listitem><para>"<ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>Understanding and Creating Layers</ulink>" for
38 general information on layers and how to create layers.</para></listitem>
39 <listitem><para>"<ulink url='&YOCTO_DOCS_DEV_URL;#set-up-your-layer-for-the-build'>Set Up Your Layer for the Build</ulink>" for
40 specific instructions on setting up a layer for kernel
41 development.</para></listitem>
42 </itemizedlist>
43 </para>
44 </section>
45
46 <section id='modifying-an-existing-recipe'>
47 <title>Modifying an Existing Recipe</title>
48
49 <para>
50 In many cases, you can customize an existing linux-yocto recipe to
51 meet the needs of your project.
52 Each release of the Yocto Project provides a few Linux
53 kernel recipes from which you can choose.
54 These are located in the
55 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
56 in <filename>meta/recipes-kernel/linux</filename>.
57 </para>
58
59 <para>
60 Modifying an existing recipe can consist of the following:
61 <itemizedlist>
62 <listitem><para>Creating the append file</para></listitem>
63 <listitem><para>Applying patches</para></listitem>
64 <listitem><para>Changing the configuration</para></listitem>
65 </itemizedlist>
66 </para>
67
68 <para>
69 Before modifying an existing recipe, be sure that you have created
70 a minimal, custom layer from which you can work.
71 See the "<link linkend='creating-and-preparing-a-layer'>Creating and Preparing a Layer</link>"
72 section for some general resources.
73 You can also see the
74 "<ulink url='&YOCTO_DOCS_DEV_URL;#set-up-your-layer-for-the-build'>Set Up Your Layer for the Build</ulink>" section
75 of the Yocto Project Development Manual for a detailed
76 example.
77 </para>
78
79 <section id='creating-the-append-file'>
80 <title>Creating the Append File</title>
81
82 <para>
83 You create this file in your custom layer.
84 You also name it accordingly based on the linux-yocto recipe
85 you are using.
86 For example, if you are modifying the
87 <filename>meta/recipes-kernel/linux/linux-yocto_3.4.bb</filename>
88 recipe, the append file will typical be located as follows
89 within your custom layer:
90 <literallayout class='monospaced'>
91 &lt;your-layer&gt;/recipes-kernel/linux/linux-yocto_3.4.bbappend
92 </literallayout>
93 The append file should initially extend the
94 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESPATH'><filename>FILESPATH</filename></ulink>
95 search path by prepending the directory that contains your
96 files to the
97 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
98 variable as follows:
99 <literallayout class='monospaced'>
100 FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
101 </literallayout>
102 The path <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>
103 expands to "linux-yocto" in the current directory for this
104 example.
105 If you add any new files that modify the kernel recipe and you
106 have extended <filename>FILESPATH</filename> as
107 described above, you must place the files in your layer in the
108 following area:
109 <literallayout class='monospaced'>
110 &lt;your-layer&gt;/recipes-kernel/linux/linux-yocto/
111 </literallayout>
112 <note>If you are working on a new machine Board Support Package
113 (BSP), be sure to refer to the
114 <ulink url='&YOCTO_DOCS_BSP_URL;'>Yocto Project Board Support Package (BSP) Developer's Guide</ulink>.
115 </note>
116 </para>
117 </section>
118
119 <section id='applying-patches'>
120 <title>Applying Patches</title>
121
122 <para>
123 If you have a single patch or a small series of patches
124 that you want to apply to the Linux kernel source, you
125 can do so just as you would with any other recipe.
126 You first copy the patches to the path added to
127 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
128 in your <filename>.bbappend</filename> file as described in
129 the previous section, and then reference them in
130 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
131 statements.
132 </para>
133
134 <para>
135 For example, you can apply a three-patch series by adding the
136 following lines to your linux-yocto <filename>.bbappend</filename>
137 file in your layer:
138 <literallayout class='monospaced'>
139 SRC_URI += "file://0001-first-change.patch"
140 SRC_URI += "file://0002-first-change.patch"
141 SRC_URI += "file://0003-first-change.patch"
142 </literallayout>
143 The next time you run BitBake to build the Linux kernel, BitBake
144 detects the change in the recipe and fetches and applies the patches
145 before building the kernel.
146 </para>
147
148 <para>
149 For a detailed example showing how to patch the kernel, see the
150 "<ulink url='&YOCTO_DOCS_DEV_URL;#patching-the-kernel'>Patching the Kernel</ulink>"
151 section in the Yocto Project Development Manual.
152 </para>
153 </section>
154
155 <section id='changing-the-configuration'>
156 <title>Changing the Configuration</title>
157
158 <para>
159 You can make wholesale or incremental changes to the Linux
160 kernel <filename>.config</filename> file by including a
161 <filename>defconfig</filename> and by specifying
162 configuration fragments in the
163 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>.
164 </para>
165
166 <para>
167 If you have a final Linux kernel <filename>.config</filename>
168 file you want to use, copy it to a directory named
169 <filename>files</filename>, which must be in
170 your layer's <filename>recipes-kernel/linux</filename>
171 directory, and name the file "defconfig".
172 Then, add the following lines to your linux-yocto
173 <filename>.bbappend</filename> file in your layer:
174 <literallayout class='monospaced'>
175 FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
176 SRC_URI += "file://defconfig"
177 </literallayout>
178 The <filename>SRC_URI</filename> tells the build system how to
179 search for the file, while the
180 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
181 extends the
182 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESPATH'><filename>FILESPATH</filename></ulink>
183 variable (search directories) to include the
184 <filename>files</filename> directory you created for the
185 configuration changes.
186 </para>
187
188 <note>
189 The build system applies the configurations from the
190 <filename>.config</filename> file before applying any
191 subsequent configuration fragments.
192 The final kernel configuration is a combination of the
193 configurations in the <filename>.config</filename> file and
194 any configuration fragments you provide.
195 You need to realize that if you have any configuration
196 fragments, the build system applies these on top of and
197 after applying the existing <filename>.config</filename>
198 file configurations.
199 </note>
200
201 <para>
202 Generally speaking, the preferred approach is to determine the
203 incremental change you want to make and add that as a
204 configuration fragment.
205 For example, if you want to add support for a basic serial
206 console, create a file named <filename>8250.cfg</filename> in
207 the <filename>files</filename> directory with the following
208 content (without indentation):
209 <literallayout class='monospaced'>
210 CONFIG_SERIAL_8250=y
211 CONFIG_SERIAL_8250_CONSOLE=y
212 CONFIG_SERIAL_8250_PCI=y
213 CONFIG_SERIAL_8250_NR_UARTS=4
214 CONFIG_SERIAL_8250_RUNTIME_UARTS=4
215 CONFIG_SERIAL_CORE=y
216 CONFIG_SERIAL_CORE_CONSOLE=y
217 </literallayout>
218 Next, include this configuration fragment and extend the
219 <filename>FILESPATH</filename> variable in your
220 <filename>.bbappend</filename> file:
221 <literallayout class='monospaced'>
222 FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
223 SRC_URI += "file://8250.cfg"
224 </literallayout>
225 The next time you run BitBake to build the Linux kernel, BitBake
226 detects the change in the recipe and fetches and applies the
227 new configuration before building the kernel.
228 </para>
229
230 <para>
231 For a detailed example showing how to configure the kernel,
232 see the
233 "<ulink url='&YOCTO_DOCS_DEV_URL;#configuring-the-kernel'>Configuring the Kernel</ulink>"
234 section in the Yocto Project Development Manual.
235 </para>
236 </section>
237 </section>
238
239 <section id='using-an-iterative-development-process'>
240 <title>Using an Iterative Development Process</title>
241
242 <para>
243 If you do not have existing patches or configuration files,
244 you can iteratively generate them from within the BitBake build
245 environment as described within this section.
246 During an iterative workflow, running a previously completed BitBake
247 task causes BitBake to invalidate the tasks that follow the
248 completed task in the build sequence.
249 Invalidated tasks rebuild the next time you run the build using
250 BitBake.
251 </para>
252
253 <para>
254 As you read this section, be sure to substitute the name
255 of your Linux kernel recipe for the term
256 "linux-yocto".
257 </para>
258
259 <section id='tip-dirty-string'>
260 <title>"-dirty" String</title>
261
262<!--
263 <para>
264 <emphasis>AR - Darrren Hart:</emphasis> This section
265 originated from the old Yocto Project Kernel Architecture
266 and Use Manual.
267 It was decided we need to put it in this section here.
268 Darren needs to figure out where we want it and what part
269 of it we want (all, revision???)
270 </para>
271-->
272
273 <para>
274 If kernel images are being built with "-dirty" on the
275 end of the version string, this simply means that
276 modifications in the source directory have not been committed.
277 <literallayout class='monospaced'>
278 $ git status
279 </literallayout>
280 </para>
281
282 <para>
283 You can use the above Git command to report modified,
284 removed, or added files.
285 You should commit those changes to the tree regardless of
286 whether they will be saved, exported, or used.
287 Once you commit the changes, you need to rebuild the kernel.
288 </para>
289
290 <para>
291 To force a pickup and commit of all such pending changes,
292 enter the following:
293 <literallayout class='monospaced'>
294 $ git add .
295 $ git commit -s -a -m "getting rid of -dirty"
296 </literallayout>
297 </para>
298
299 <para>
300 Next, rebuild the kernel.
301 </para>
302 </section>
303
304 <section id='generating-configuration-files'>
305 <title>Generating Configuration Files</title>
306
307 <para>
308 You can manipulate the <filename>.config</filename> file
309 used to build a linux-yocto recipe with the
310 <filename>menuconfig</filename> command as follows:
311 <literallayout class='monospaced'>
312 $ bitbake linux-yocto -c menuconfig
313 </literallayout>
314 This command starts the Linux kernel configuration tool,
315 which allows you to prepare a new
316 <filename>.config</filename> file for the build.
317 When you exit the tool, be sure to save your changes
318 at the prompt.
319 </para>
320
321 <para>
322 The resulting <filename>.config</filename> file is
323 located in
324 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink><filename>}</filename> under the
325 <filename>linux-${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink><filename>}-${<ulink url='&YOCTO_DOCS_REF_URL;#var-KTYPE'><filename>KTYPE</filename></ulink>}-build</filename> directory.
326 You can use the entire <filename>.config</filename> file as the
327 <filename>defconfig</filename> file as described in the
328 "<link linkend='changing-the-configuration'>Changing the Configuration</link>" section.
329 </para>
330
331 <para>
332 A better method is to create a configuration fragment using the
333 differences between two configuration files: one previously
334 created and saved, and one freshly created using the
335 <filename>menuconfig</filename> tool.
336 </para>
337
338 <para>
339 To create a configuration fragment using this method, follow
340 these steps:
341 <orderedlist>
342 <listitem><para>Complete a build at least through the kernel
343 configuration task as follows:
344 <literallayout class='monospaced'>
345 $ bitbake linux-yocto -c kernel_configme -f
346 </literallayout></para></listitem>
347 <listitem><para>Run the <filename>menuconfig</filename>
348 command:
349 <literallayout class='monospaced'>
350 $ bitbake linux-yocto -c menuconfig
351 </literallayout></para></listitem>
352 <listitem><para>Run the <filename>diffconfig</filename>
353 command to prepare a configuration fragment.
354 The resulting file <filename>fragment.cfg</filename>
355 will be placed in the
356 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink><filename>}</filename> directory:
357 <literallayout class='monospaced'>
358 $ bitbake linux-yocto -c diffconfig
359 </literallayout></para></listitem>
360 </orderedlist>
361 </para>
362
363 <para>
364 The <filename>diffconfig</filename> command creates a file that is a
365 list of Linux kernel <filename>CONFIG_</filename> assignments.
366 See the "<link linkend='changing-the-configuration'>Changing the Configuration</link>"
367 section for information on how to use the output as a
368 configuration fragment.
369 <note>
370 You can also use this method to create configuration
371 fragments for a BSP.
372 See the "<link linkend='bsp-descriptions'>BSP Descriptions</link>"
373 section for more information.
374 </note>
375 </para>
376
377 <para>
378 The kernel tools also provide configuration validation.
379 You can use these tools to produce warnings for when a
380 requested configuration does not appear in the final
381 <filename>.config</filename> file or when you override a
382 policy configuration in a hardware configuration fragment.
383 Here is an example with some sample output of the command
384 that runs these tools:
385 <literallayout class='monospaced'>
386 $ bitbake linux-yocto -c kernel_configcheck -f
387
388 ...
389
390 NOTE: validating kernel configuration
391 This BSP sets 3 invalid/obsolete kernel options.
392 These config options are not offered anywhere within this kernel.
393 The full list can be found in your kernel src dir at:
394 meta/cfg/standard/mybsp/invalid.cfg
395
396 This BSP sets 21 kernel options that are possibly non-hardware related.
397 The full list can be found in your kernel src dir at:
398 meta/cfg/standard/mybsp/specified_non_hdw.cfg
399
400 WARNING: There were 2 hardware options requested that do not
401 have a corresponding value present in the final ".config" file.
402 This probably means you are not't getting the config you wanted.
403 The full list can be found in your kernel src dir at:
404 meta/cfg/standard/mybsp/mismatch.cfg
405 </literallayout>
406 </para>
407
408 <para>
409 The output describes the various problems that you can
410 encounter along with where to find the offending configuration
411 items.
412 You can use the information in the logs to adjust your
413 configuration files and then repeat the
414 <filename>kernel_configme</filename> and
415 <filename>kernel_configcheck</filename> commands until
416 they produce no warnings.
417 </para>
418
419 <para>
420 For more information on how to use the
421 <filename>menuconfig</filename> tool, see the
422 "<ulink url='&YOCTO_DOCS_DEV_URL;#using-menuconfig'>Using <filename>menuconfig</filename></ulink>"
423 section in the Yocto Project Development Manual.
424 </para>
425 </section>
426
427 <section id='modifying-source-code'>
428 <title>Modifying Source Code</title>
429
430 <para>
431 You can experiment with source code changes and create a
432 simple patch without leaving the BitBake environment.
433 To get started, be sure to complete a build at
434 least through the kernel configuration task:
435 <literallayout class='monospaced'>
436 $ bitbake linux-yocto -c kernel_configme -f
437 </literallayout>
438 Taking this step ensures you have the sources prepared
439 and the configuration completed.
440 You can find the sources in the
441 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink><filename>}/linux</filename> directory.
442 </para>
443
444 <para>
445 You can edit the sources as you would any other Linux source
446 tree.
447 However, keep in mind that you will lose changes if you
448 trigger the <filename>fetch</filename> task for the recipe.
449 You can avoid triggering this task by not issuing BitBake's
450 <filename>cleanall</filename>, <filename>cleansstate</filename>,
451 or forced <filename>fetch</filename> commands.
452 Also, do not modify the recipe itself while working
453 with temporary changes or BitBake might run the
454 <filename>fetch</filename> command depending on the
455 changes to the recipe.
456 </para>
457
458 <para>
459 To test your temporary changes, instruct BitBake to run the
460 <filename>compile</filename> again.
461 The <filename>-f</filename> option forces the command to run
462 even though BitBake might think it has already done so:
463 <literallayout class='monospaced'>
464 $ bitbake linux-yocto -c compile -f
465 </literallayout>
466 If the compile fails, you can update the sources and repeat
467 the <filename>compile</filename>.
468 Once compilation is successful, you can inspect and test
469 the resulting build (i.e. kernel, modules, and so forth) from
470 the <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>:
471 <literallayout class='monospaced'>
472 ${WORKDIR}/linux-${MACHINE}-${KTYPE}-build
473 </literallayout>
474 Alternatively, you can run the <filename>deploy</filename>
475 command to place the kernel image in the
476 <filename>tmp/deploy/images</filename> directory:
477 <literallayout class='monospaced'>
478 $ bitbake linux-yocto -c deploy
479 </literallayout>
480 And, of course, you can perform the remaining installation and
481 packaging steps by issuing:
482 <literallayout class='monospaced'>
483 $ bitbake linux-yocto
484 </literallayout>
485 </para>
486
487 <para>
488 For rapid iterative development, the edit-compile-repeat loop
489 described in this section is preferable to rebuilding the
490 entire recipe because the installation and packaging tasks
491 are very time consuming.
492 </para>
493
494 <para>
495 Once you are satisfied with your source code modifications,
496 you can make them permanent by generating patches and
497 applying them to the
498 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
499 statement as described in section
500 "<link linkend='applying-patches'>Applying Patches</link>" section.
501 If you are not familiar with generating patches, refer to the
502 "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-the-patch'>Creating the Patch</ulink>"
503 section in the Yocto Project Development Manual.
504 </para>
505 </section>
506 </section>
507
508 <section id='working-with-your-own-sources'>
509 <title>Working With Your Own Sources</title>
510
511 <para>
512 If you cannot work with one of the Linux kernel
513 versions supported by existing linux-yocto recipes, you can
514 still make use of the Yocto Project Linux kernel tooling by
515 working with your own sources.
516 When you use your own sources, you will not be able to
517 leverage the existing kernel
518 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink> and
519 stabilization work of the linux-yocto sources.
520 However, you will be able to manage your own Metadata in the same
521 format as the linux-yocto sources.
522 Maintaining format compatibility facilitates converging with
523 linux-yocto on a future, mutually-supported kernel version.
524 </para>
525
526 <para>
527 To help you use your own sources, the Yocto Project provides a
528 linux-yocto custom recipe
529 (<filename>linux-yocto-custom.bb</filename>) that uses
530 <filename>kernel.org</filename> sources
531 and the Yocto Project Linux kernel tools for managing
532 kernel Metadata.
533 You can find this recipe in the
534 <filename>poky</filename> Git repository of the
535 Yocto Project <ulink url='&YOCTO_GIT_URL;'>Source Repository</ulink>
536 at:
537 <literallayout class="monospaced">
538 poky/meta-skeleton/recipes-kernel/linux/linux-yocto-custom.bb
539 </literallayout>
540 </para>
541
542 <para>
543 Here are some basic steps you can use to work with your own sources:
544 <orderedlist>
545 <listitem><para>Copy the <filename>linux-yocto-custom.bb</filename>
546 recipe to your layer and give it a meaningful name.
547 The name should include the version of the Linux kernel you
548 are using (e.g. <filename>linux-yocto-myproject_3.5.bb</filename>,
549 where "3.5" is the base version of the Linux kernel
550 with which you would be working).</para></listitem>
551 <listitem><para>In the same directory inside your layer,
552 create a matching directory
553 to store your patches and configuration files (e.g.
554 <filename>linux-yocto-myproject</filename>).
555 </para></listitem>
556 <listitem><para>Edit the following variables in your recipe
557 as appropriate for your project:
558 <itemizedlist>
559 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>:
560 The <filename>SRC_URI</filename> should be a Git
561 repository that uses one of the supported Git fetcher
562 protocols (i.e. <filename>file</filename>,
563 <filename>git</filename>, <filename>http</filename>,
564 and so forth).
565 The skeleton recipe provides an example
566 <filename>SRC_URI</filename> as a syntax reference.
567 </para></listitem>
568 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-LINUX_VERSION'><filename>LINUX_VERSION</filename></ulink>:
569 The Linux kernel version you are using (e.g.
570 "3.4").</para></listitem>
571 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-LINUX_VERSION_EXTENSION'><filename>LINUX_VERSION_EXTENSION</filename></ulink>:
572 The Linux kernel <filename>CONFIG_LOCALVERSION</filename>
573 that is compiled into the resulting kernel and visible
574 through the <filename>uname</filename> command.
575 </para></listitem>
576 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-SRCREV'><filename>SRCREV</filename></ulink>:
577 The commit ID from which you want to build.
578 </para></listitem>
579 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink>:
580 Treat this variable the same as you would in any other
581 recipe.
582 Increment the variable to indicate to the OpenEmbedded
583 build system that the recipe has changed.
584 </para></listitem>
585 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>:
586 The default <filename>PV</filename> assignment is
587 typically adequate.
588 It combines the <filename>LINUX_VERSION</filename>
589 with the Source Control Manager (SCM) revision
590 as derived from the
591 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRCPV'><filename>SRCPV</filename></ulink>
592 variable.
593 The combined results are a string with
594 the following form:
595 <literallayout class='monospaced'>
596 3.4.11+git1+68a635bf8dfb64b02263c1ac80c948647cc76d5f_1+218bd8d2022b9852c60d32f0d770931e3cf343e2
597 </literallayout>
598 While lengthy, the extra verbosity in <filename>PV</filename>
599 helps ensure you are using the exact
600 sources from which you intend to build.
601 </para></listitem>
602 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-COMPATIBLE_MACHINE'><filename>COMPATIBLE_MACHINE</filename></ulink>:
603 A list of the machines supported by your new recipe.
604 This variable in the example recipe is set
605 by default to a regular expression that matches
606 only the empty string, "(^$)".
607 This default setting triggers an explicit build
608 failure.
609 You must change it to match a list of the machines
610 that your new recipe supports.
611 For example, to support the <filename>qemux86</filename>
612 and <filename>qemux86-64</filename> machines, use
613 the following form:
614 <literallayout class='monospaced'>
615 COMPATIBLE_MACHINE = "qemux86|qemux86-64"
616 </literallayout></para></listitem>
617 </itemizedlist></para></listitem>
618 <listitem><para>Provide further customizations to your recipe
619 as needed just as you would customize an existing
620 linux-yocto recipe.
621 See the "<link linkend='modifying-an-existing-recipe'>Modifying
622 an Existing Recipe</link>" section for information.
623 </para></listitem>
624 </orderedlist>
625 </para>
626 </section>
627
628 <section id='incorporating-out-of-tree-modules'>
629 <title>Incorporating Out-of-Tree Modules</title>
630
631 <para>
632 While it is always preferable to work with sources integrated
633 into the Linux kernel sources, if you need an external kernel
634 module, the <filename>hello-mod.bb</filename> recipe is available
635 as a template from which you can create your own out-of-tree
636 Linux kernel module recipe.
637 </para>
638
639 <para>
640 This template recipe is located in the
641 <filename>poky</filename> Git repository of the
642 Yocto Project <ulink url='&YOCTO_GIT_URL;'>Source Repository</ulink>
643 at:
644 <literallayout class="monospaced">
645 poky/meta-skeleton/recipes-kernel/hello-mod/hello-mod_0.1.bb
646 </literallayout>
647 </para>
648
649 <para>
650 To get started, copy this recipe to your layer and give it a
651 meaningful name (e.g. <filename>mymodule_1.0.bb</filename>).
652 In the same directory, create a directory named
653 <filename>files</filename> where you can store any source files,
654 patches, or other files necessary for building
655 the module that do not come with the sources.
656 Finally, update the recipe as appropriate for the module.
657 Typically you will need to set the following variables:
658 <itemizedlist>
659 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-DESCRIPTION'><filename>DESCRIPTION</filename></ulink>
660 </para></listitem>
661 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-LICENSE'><filename>LICENSE*</filename></ulink>
662 </para></listitem>
663 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
664 </para></listitem>
665 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>
666 </para></listitem>
667 </itemizedlist>
668 </para>
669
670 <para>
671 Depending on the build system used by the module sources, you might
672 need to make some adjustments.
673 For example, a typical module <filename>Makefile</filename> looks
674 much like the one provided with the <filename>hello-mod</filename>
675 template:
676 <literallayout class='monospaced'>
677 obj-m := hello.o
678
679 SRC := $(shell pwd)
680
681 all:
682 $(MAKE) -C $(KERNEL_SRC) M=$(SRC)
683
684 modules_install:
685 $(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules_install
686 ...
687 </literallayout>
688 </para>
689
690 <para>
691 The important point to note here is the
692 <ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_SRC'><filename>KERNEL_SRC</filename></ulink>
693 variable.
694 The class <filename>module.bbclass</filename> sets this variable,
695 as well as the
696 <ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_PATH'><filename>KERNEL_PATH</filename></ulink>
697 variable to
698 <filename>${<ulink url='&YOCTO_DOCS_REF_URL;#var-STAGING_KERNEL_DIR'><filename>STAGING_KERNEL_DIR</filename></ulink>}</filename>
699 with the necessary Linux kernel build information to build modules.
700 If your module <filename>Makefile</filename> uses a different
701 variable, you might want to override the
702 <filename>do_compile()</filename> step, or create a patch to
703 the <filename>Makefile</filename> to work with the more typical
704 <filename>KERNEL_SRC</filename> or <filename>KERNEL_PATH</filename>
705 variables.
706 </para>
707
708 <para>
709 After you have prepared your recipe, you will likely want to
710 include the module in your images.
711 To do this, see the documentation for the following variables in
712 the Yocto Project Reference Manual and set one of them as
713 appropriate in your machine configuration file:
714 <itemizedlist>
715 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_ESSENTIAL_EXTRA_RDEPENDS'><filename>MACHINE_ESSENTIAL_EXTRA_RDEPENDS</filename></ulink>
716 </para></listitem>
717 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS'><filename>MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS</filename></ulink>
718 </para></listitem>
719 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_EXTRA_RDEPENDS'><filename>MACHINE_EXTRA_RDEPENDS</filename></ulink>
720 </para></listitem>
721 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_EXTRA_RRECOMMENDS'><filename>MACHINE_EXTRA_RRECOMMENDS</filename></ulink>
722 </para></listitem>
723 </itemizedlist>
724 </para>
725
726 <para>
727 modules are often not required for boot and can be excluded from
728 certain build configurations.
729 The following allows for the most flexibility:
730 <literallayout class='monospaced'>
731 MACHINE_EXTRA_RRECOMMENDS += "kernel-module-mymodule"
732 </literallayout>
733 Where the value is derived by appending the module filename without
734 the <filename>.ko</filename> extension to the string
735 "kernel-module-".
736 </para>
737
738 <para>
739 Because the variable is
740 <ulink url='&YOCTO_DOCS_REF_URL;#var-RRECOMMENDS'><filename>RRECOMMENDS</filename></ulink>
741 and not a
742 <ulink url='&YOCTO_DOCS_REF_URL;#var-RDEPENDS'><filename>RDEPENDS</filename></ulink>
743 variable, the build will not fail if this module is not available
744 to include in the image.
745 </para>
746 </section>
747
748 <section id='inspecting-changes-and-commits'>
749 <title>Inspecting Changes and Commits</title>
750
751 <para>
752 A common question when working with a kernel is:
753 "What changes have been applied to this tree?"
754 Rather than using "grep" across directories to see what has
755 changed, you can use Git to inspect or search the kernel tree.
756 Using Git is an efficient way to see what has changed in the tree.
757 </para>
758
759 <section id='what-changed-in-a-kernel'>
760 <title>What Changed in a Kernel?</title>
761
762 <para>
763 Following are a few examples that show how to use Git
764 commands to examine changes.
765 These examples are by no means the only way to see changes.
766 <note>
767 In the following examples, unless you provide a commit
768 range, <filename>kernel.org</filename> history is blended
769 with Yocto Project kernel changes.
770 You can form ranges by using branch names from the
771 kernel tree as the upper and lower commit markers with
772 the Git commands.
773 You can see the branch names through the web interface
774 to the Yocto Project source repositories at
775 <ulink url='http://git.yoctoproject.org/cgit.cgi'></ulink>.
776 </note>
777 To see a full range of the changes, use the
778 <filename>git whatchanged</filename> command and specify a
779 commit range for the branch
780 (<filename>&lt;commit&gt;..&lt;commit&gt;</filename>).
781 </para>
782
783 <para>
784 Here is an example that looks at what has changed in the
785 <filename>emenlow</filename> branch of the
786 <filename>linux-yocto-3.4</filename> kernel.
787 The lower commit range is the commit associated with the
788 <filename>standard/base</filename> branch, while
789 the upper commit range is the commit associated with the
790 <filename>standard/emenlow</filename> branch.
791 <literallayout class='monospaced'>
792 $ git whatchanged origin/standard/base..origin/standard/emenlow
793 </literallayout>
794 </para>
795
796 <para>
797 To see short, one line summaries of changes use the
798 <filename>git log</filename> command:
799 <literallayout class='monospaced'>
800 $ git log --oneline origin/standard/base..origin/standard/emenlow
801 </literallayout>
802 </para>
803
804 <para>
805 Use this command to see code differences for the changes:
806 <literallayout class='monospaced'>
807 $ git diff origin/standard/base..origin/standard/emenlow
808 </literallayout>
809 </para>
810
811 <para>
812 Use this command to see the commit log messages and the
813 text differences:
814 <literallayout class='monospaced'>
815 $ git show origin/standard/base..origin/standard/emenlow
816 </literallayout>
817 </para>
818
819 <para>
820 Use this command to create individual patches for
821 each change.
822 Here is an example that that creates patch files for each
823 commit and places them in your <filename>Documents</filename>
824 directory:
825 <literallayout class='monospaced'>
826 $ git format-patch -o $HOME/Documents origin/standard/base..origin/standard/emenlow
827 </literallayout>
828 </para>
829 </section>
830
831 <section id='showing-a-particular-feature-or-branch-change'>
832 <title>Showing a Particular Feature or Branch Change</title>
833
834 <para>
835 Tags in the Yocto Project kernel tree divide changes for
836 significant features or branches.
837 The <filename>git show &lt;tag&gt;</filename> command shows
838 changes based on a tag.
839 Here is an example that shows <filename>systemtap</filename>
840 changes:
841 <literallayout class='monospaced'>
842 $ git show systemtap
843 </literallayout>
844 You can use the
845 <filename>git branch --contains &lt;tag&gt;</filename> command
846 to show the branches that contain a particular feature.
847 This command shows the branches that contain the
848 <filename>systemtap</filename> feature:
849 <literallayout class='monospaced'>
850 $ git branch --contains systemtap
851 </literallayout>
852 </para>
853 </section>
854 </section>
855</chapter>
856<!--
857vim: expandtab tw=80 ts=4
858-->
diff --git a/documentation/kernel-dev/kernel-dev-concepts-appx.xml b/documentation/kernel-dev/kernel-dev-concepts-appx.xml
new file mode 100644
index 0000000000..ac91749cd6
--- /dev/null
+++ b/documentation/kernel-dev/kernel-dev-concepts-appx.xml
@@ -0,0 +1,253 @@
1<!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<appendix id='kernel-dev-concepts-appx'>
6<title>Advanced Kernel Concepts</title>
7
8 <section id='kernel-big-picture'>
9 <title>Yocto Project Kernel Development and Maintenance</title>
10 <para>
11 Kernels available through the Yocto Project, like other kernels, are based off the Linux
12 kernel releases from <ulink url='http://www.kernel.org'></ulink>.
13 At the beginning of a major development cycle, the Yocto Project team
14 chooses its kernel based on factors such as release timing, the anticipated release
15 timing of final upstream <filename>kernel.org</filename> versions, and Yocto Project
16 feature requirements.
17 Typically, the kernel chosen is in the
18 final stages of development by the community.
19 In other words, the kernel is in the release
20 candidate or "rc" phase and not yet a final release.
21 But, by being in the final stages of external development, the team knows that the
22 <filename>kernel.org</filename> final release will clearly be within the early stages of
23 the Yocto Project development window.
24 </para>
25 <para>
26 This balance allows the team to deliver the most up-to-date kernel
27 possible, while still ensuring that the team has a stable official release for
28 the baseline Linux kernel version.
29 </para>
30 <para>
31 The ultimate source for kernels available through the Yocto Project are released kernels
32 from <filename>kernel.org</filename>.
33 In addition to a foundational kernel from <filename>kernel.org</filename>, the
34 kernels available contain a mix of important new mainline
35 developments, non-mainline developments (when there is no alternative),
36 Board Support Package (BSP) developments,
37 and custom features.
38 These additions result in a commercially released Yocto Project Linux kernel that caters
39 to specific embedded designer needs for targeted hardware.
40 </para>
41 <para>
42 Once a kernel is officially released, the Yocto Project team goes into
43 their next development cycle, or upward revision (uprev) cycle, while still
44 continuing maintenance on the released kernel.
45 It is important to note that the most sustainable and stable way
46 to include feature development upstream is through a kernel uprev process.
47 Back-porting hundreds of individual fixes and minor features from various
48 kernel versions is not sustainable and can easily compromise quality.
49 </para>
50 <para>
51 During the uprev cycle, the Yocto Project team uses an ongoing analysis of
52 kernel development, BSP support, and release timing to select the best
53 possible <filename>kernel.org</filename> version.
54 The team continually monitors community kernel
55 development to look for significant features of interest.
56 The team does consider back-porting large features if they have a significant advantage.
57 User or community demand can also trigger a back-port or creation of new
58 functionality in the Yocto Project baseline kernel during the uprev cycle.
59 </para>
60 <para>
61 Generally speaking, every new kernel both adds features and introduces new bugs.
62 These consequences are the basic properties of upstream kernel development and are
63 managed by the Yocto Project team's kernel strategy.
64 It is the Yocto Project team's policy to not back-port minor features to the released kernel.
65 They only consider back-porting significant technological jumps - and, that is done
66 after a complete gap analysis.
67 The reason for this policy is that back-porting any small to medium sized change
68 from an evolving kernel can easily create mismatches, incompatibilities and very
69 subtle errors.
70 </para>
71 <para>
72 These policies result in both a stable and a cutting
73 edge kernel that mixes forward ports of existing features and significant and critical
74 new functionality.
75 Forward porting functionality in the kernels available through the Yocto Project kernel
76 can be thought of as a "micro uprev."
77 The many “micro uprevs” produce a kernel version with a mix of
78 important new mainline, non-mainline, BSP developments and feature integrations.
79 This kernel gives insight into new features and allows focused
80 amounts of testing to be done on the kernel, which prevents
81 surprises when selecting the next major uprev.
82 The quality of these cutting edge kernels is evolving and the kernels are used in leading edge
83 feature and BSP development.
84 </para>
85 </section>
86
87 <section id='kernel-architecture'>
88 <title>Kernel Architecture</title>
89 <para>
90 This section describes the architecture of the kernels available through the
91 Yocto Project and provides information
92 on the mechanisms used to achieve that architecture.
93 </para>
94
95 <section id='architecture-overview'>
96 <title>Overview</title>
97 <para>
98 As mentioned earlier, a key goal of the Yocto Project is to present the
99 developer with
100 a kernel that has a clear and continuous history that is visible to the user.
101 The architecture and mechanisms used achieve that goal in a manner similar to the
102 upstream <filename>kernel.org</filename>.
103 </para>
104 <para>
105 You can think of a Yocto Project kernel as consisting of a baseline Linux kernel with
106 added features logically structured on top of the baseline.
107 The features are tagged and organized by way of a branching strategy implemented by the
108 source code manager (SCM) Git.
109 For information on Git as applied to the Yocto Project, see the
110 "<ulink url='&YOCTO_DOCS_DEV_URL;#git'>Git</ulink>" section in the
111 Yocto Project Development Manual.
112 </para>
113 <para>
114 The result is that the user has the ability to see the added features and
115 the commits that make up those features.
116 In addition to being able to see added features, the user can also view the history of what
117 made up the baseline kernel.
118 </para>
119 <para>
120 The following illustration shows the conceptual Yocto Project kernel.
121 </para>
122 <para>
123 <imagedata fileref="figures/kernel-architecture-overview.png" width="6in" depth="7in" align="center" scale="100" />
124 </para>
125 <para>
126 In the illustration, the "Kernel.org Branch Point"
127 marks the specific spot (or release) from
128 which the Yocto Project kernel is created.
129 From this point "up" in the tree, features and differences are organized and tagged.
130 </para>
131 <para>
132 The "Yocto Project Baseline Kernel" contains functionality that is common to every kernel
133 type and BSP that is organized further up the tree.
134 Placing these common features in the
135 tree this way means features do not have to be duplicated along individual branches of the
136 structure.
137 </para>
138 <para>
139 From the Yocto Project Baseline Kernel, branch points represent specific functionality
140 for individual BSPs as well as real-time kernels.
141 The illustration represents this through three BSP-specific branches and a real-time
142 kernel branch.
143 Each branch represents some unique functionality for the BSP or a real-time kernel.
144 </para>
145 <para>
146 In this example structure, the real-time kernel branch has common features for all
147 real-time kernels and contains
148 more branches for individual BSP-specific real-time kernels.
149 The illustration shows three branches as an example.
150 Each branch points the way to specific, unique features for a respective real-time
151 kernel as they apply to a given BSP.
152 </para>
153 <para>
154 The resulting tree structure presents a clear path of markers (or branches) to the
155 developer that, for all practical purposes, is the kernel needed for any given set
156 of requirements.
157 </para>
158 </section>
159
160 <section id='branching-and-workflow'>
161 <title>Branching Strategy and Workflow</title>
162 <para>
163 The Yocto Project team creates kernel branches at points where functionality is
164 no longer shared and thus, needs to be isolated.
165 For example, board-specific incompatibilities would require different functionality
166 and would require a branch to separate the features.
167 Likewise, for specific kernel features, the same branching strategy is used.
168 </para>
169 <para>
170 This branching strategy results in a tree that has features organized to be specific
171 for particular functionality, single kernel types, or a subset of kernel types.
172 This strategy also results in not having to store the same feature twice
173 internally in the tree.
174 Rather, the kernel team stores the unique differences required to apply the
175 feature onto the kernel type in question.
176 <note>
177 The Yocto Project team strives to place features in the tree such that they can be
178 shared by all boards and kernel types where possible.
179 However, during development cycles or when large features are merged,
180 the team cannot always follow this practice.
181 In those cases, the team uses isolated branches to merge features.
182 </note>
183 </para>
184 <para>
185 BSP-specific code additions are handled in a similar manner to kernel-specific additions.
186 Some BSPs only make sense given certain kernel types.
187 So, for these types, the team creates branches off the end of that kernel type for all
188 of the BSPs that are supported on that kernel type.
189 From the perspective of the tools that create the BSP branch, the BSP is really no
190 different than a feature.
191 Consequently, the same branching strategy applies to BSPs as it does to features.
192 So again, rather than store the BSP twice, the team only stores the unique
193 differences for the BSP across the supported multiple kernels.
194 </para>
195 <para>
196 While this strategy can result in a tree with a significant number of branches, it is
197 important to realize that from the developer's point of view, there is a linear
198 path that travels from the baseline <filename>kernel.org</filename>, through a select
199 group of features and ends with their BSP-specific commits.
200 In other words, the divisions of the kernel are transparent and are not relevant
201 to the developer on a day-to-day basis.
202 From the developer's perspective, this path is the "master" branch.
203 The developer does not need to be aware of the existence of any other branches at all.
204 Of course, there is value in the existence of these branches
205 in the tree, should a person decide to explore them.
206 For example, a comparison between two BSPs at either the commit level or at the line-by-line
207 code <filename>diff</filename> level is now a trivial operation.
208 </para>
209 <para>
210 Working with the kernel as a structured tree follows recognized community best practices.
211 In particular, the kernel as shipped with the product, should be
212 considered an "upstream source" and viewed as a series of
213 historical and documented modifications (commits).
214 These modifications represent the development and stabilization done
215 by the Yocto Project kernel development team.
216 </para>
217 <para>
218 Because commits only change at significant release points in the product life cycle,
219 developers can work on a branch created
220 from the last relevant commit in the shipped Yocto Project kernel.
221 As mentioned previously, the structure is transparent to the developer
222 because the kernel tree is left in this state after cloning and building the kernel.
223 </para>
224 </section>
225
226 <section id='source-code-manager-git'>
227 <title>Source Code Manager - Git</title>
228 <para>
229 The Source Code Manager (SCM) is Git.
230 This SCM is the obvious mechanism for meeting the previously mentioned goals.
231 Not only is it the SCM for <filename>kernel.org</filename> but,
232 Git continues to grow in popularity and supports many different work flows,
233 front-ends and management techniques.
234 </para>
235 <para>
236 You can find documentation on Git at <ulink url='http://git-scm.com/documentation'></ulink>.
237 You can also get an introduction to Git as it applies to the Yocto Project in the
238 "<ulink url='&YOCTO_DOCS_DEV_URL;#git'>Git</ulink>"
239 section in the Yocto Project Development Manual.
240 These referenced sections overview Git and describe a minimal set of
241 commands that allows you to be functional using Git.
242 <note>
243 You can use as much, or as little, of what Git has to offer to accomplish what
244 you need for your project.
245 You do not have to be a "Git Master" in order to use it with the Yocto Project.
246 </note>
247 </para>
248 </section>
249 </section>
250</appendix>
251<!--
252vim: expandtab tw=80 ts=4
253-->
diff --git a/documentation/kernel-dev/kernel-dev-customization.xsl b/documentation/kernel-dev/kernel-dev-customization.xsl
new file mode 100644
index 0000000000..43e9dadf21
--- /dev/null
+++ b/documentation/kernel-dev/kernel-dev-customization.xsl
@@ -0,0 +1,11 @@
1<?xml version='1.0'?>
2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
3
4 <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl" />
5
6 <xsl:param name="html.stylesheet" select="'kernel-dev-style.css'" />
7 <xsl:param name="chapter.autolabel" select="1" />
8 <xsl:param name="appendix.autolabel">A</xsl:param>
9 <xsl:param name="section.autolabel" select="1" />
10 <xsl:param name="section.label.includes.component.label" select="1" />
11</xsl:stylesheet>
diff --git a/documentation/kernel-dev/kernel-dev-eclipse-customization.xsl b/documentation/kernel-dev/kernel-dev-eclipse-customization.xsl
new file mode 100644
index 0000000000..7d1bb8dc08
--- /dev/null
+++ b/documentation/kernel-dev/kernel-dev-eclipse-customization.xsl
@@ -0,0 +1,27 @@
1<?xml version='1.0'?>
2<xsl:stylesheet
3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4 xmlns="http://www.w3.org/1999/xhtml"
5 xmlns:fo="http://www.w3.org/1999/XSL/Format"
6 version="1.0">
7
8 <xsl:import
9 href="http://docbook.sourceforge.net/release/xsl/current/eclipse/eclipse3.xsl" />
10
11 <xsl:param name="chunker.output.indent" select="'yes'"/>
12 <xsl:param name="chunk.quietly" select="1"/>
13 <xsl:param name="chunk.first.sections" select="1"/>
14 <xsl:param name="chunk.section.depth" select="10"/>
15 <xsl:param name="use.id.as.filename" select="1"/>
16 <xsl:param name="ulink.target" select="'_self'" />
17 <xsl:param name="base.dir" select="'html/kernel-dev/'"/>
18 <xsl:param name="html.stylesheet" select="'../book.css'"/>
19 <xsl:param name="eclipse.manifest" select="0"/>
20 <xsl:param name="create.plugin.xml" select="0"/>
21 <xsl:param name="suppress.navigation" select="1"/>
22 <xsl:param name="generate.index" select="0"/>
23 <xsl:param name="chapter.autolabel" select="1" />
24 <xsl:param name="appendix.autolabel">A</xsl:param>
25 <xsl:param name="section.autolabel" select="1" />
26 <xsl:param name="section.label.includes.component.label" select="1" />
27</xsl:stylesheet>
diff --git a/documentation/kernel-dev/kernel-dev-examples.xml b/documentation/kernel-dev/kernel-dev-examples.xml
new file mode 100644
index 0000000000..9d9aef6d06
--- /dev/null
+++ b/documentation/kernel-dev/kernel-dev-examples.xml
@@ -0,0 +1,918 @@
1<!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='kernel-how-to'>
6
7<title>Working with the Yocto Project Kernel</title>
8
9
10<section id='actions-org'>
11 <title>Introduction</title>
12 <para>
13 This chapter describes how to accomplish tasks involving a kernel's tree structure.
14 The information is designed to help the developer that wants to modify the Yocto
15 Project kernel and contribute changes upstream to the Yocto Project.
16 The information covers the following:
17 <itemizedlist>
18 <listitem><para>Tree construction</para></listitem>
19 <listitem><para>Build strategies</para></listitem>
20 <listitem><para>Workflow examples</para></listitem>
21 </itemizedlist>
22 </para>
23</section>
24
25 <section id='tree-construction'>
26 <title>Tree Construction</title>
27 <para>
28 This section describes construction of the Yocto Project kernel source repositories
29 as accomplished by the Yocto Project team to create kernel repositories.
30 These kernel repositories are found under the heading "Yocto Linux Kernel" at
31 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'>&YOCTO_GIT_URL;/cgit.cgi</ulink>
32 and can be shipped as part of a Yocto Project release.
33 The team creates these repositories by
34 compiling and executing the set of feature descriptions for every BSP/feature
35 in the product.
36 Those feature descriptions list all necessary patches,
37 configuration, branching, tagging and feature divisions found in a kernel.
38 Thus, the Yocto Project kernel repository (or tree) is built.
39 </para>
40 <para>
41 The existence of this tree allows you to access and clone a particular
42 Yocto Project kernel repository and use it to build images based on their configurations
43 and features.
44 </para>
45 <para>
46 You can find the files used to describe all the valid features and BSPs
47 in the Yocto Project kernel in any clone of the Yocto Project kernel source repository
48 Git tree.
49 For example, the following command clones the Yocto Project baseline kernel that
50 branched off of <filename>linux.org</filename> version 3.4:
51 <literallayout class='monospaced'>
52 $ git clone git://git.yoctoproject.org/linux-yocto-3.4
53 </literallayout>
54 For another example of how to set up a local Git repository of the Yocto Project
55 kernel files, see the
56 "<ulink url='&YOCTO_DOCS_DEV_URL;#local-kernel-files'>Yocto Project Kernel</ulink>" bulleted
57 item in the Yocto Project Development Manual.
58 </para>
59 <para>
60 Once you have cloned the kernel Git repository on your local machine, you can
61 switch to the <filename>meta</filename> branch within the repository.
62 Here is an example that assumes the local Git repository for the kernel is in
63 a top-level directory named <filename>linux-yocto-3.4</filename>:
64 <literallayout class='monospaced'>
65 $ cd ~/linux-yocto-3.4
66 $ git checkout -b meta origin/meta
67 </literallayout>
68 Once you have checked out and switched to the <filename>meta</filename> branch,
69 you can see a snapshot of all the kernel configuration and feature descriptions that are
70 used to build that particular kernel repository.
71 These descriptions are in the form of <filename>.scc</filename> files.
72 </para>
73 <para>
74 You should realize, however, that browsing your local kernel repository
75 for feature descriptions and patches is not an effective way to determine what is in a
76 particular kernel branch.
77 Instead, you should use Git directly to discover the changes in a branch.
78 Using Git is an efficient and flexible way to inspect changes to the kernel.
79 For examples showing how to use Git to inspect kernel commits, see the following sections
80 in this chapter.
81 <note>
82 Ground up reconstruction of the complete kernel tree is an action only taken by the
83 Yocto Project team during an active development cycle.
84 When you create a clone of the kernel Git repository, you are simply making it
85 efficiently available for building and development.
86 </note>
87 </para>
88 <para>
89 The following steps describe what happens when the Yocto Project Team constructs
90 the Yocto Project kernel source Git repository (or tree) found at
91 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink> given the
92 introduction of a new top-level kernel feature or BSP.
93 These are the actions that effectively create the tree
94 that includes the new feature, patch or BSP:
95 <orderedlist>
96 <listitem><para>A top-level kernel feature is passed to the kernel build subsystem.
97 Normally, this feature is a BSP for a particular kernel type.</para></listitem>
98 <listitem><para>The file that describes the top-level feature is located by searching
99 these system directories:
100 <itemizedlist>
101 <listitem><para>The in-tree kernel-cache directories, which are located
102 in <filename>meta/cfg/kernel-cache</filename></para></listitem>
103 <listitem><para>Areas pointed to by <filename>SRC_URI</filename> statements
104 found in recipes</para></listitem>
105 </itemizedlist>
106 For a typical build, the target of the search is a
107 feature description in an <filename>.scc</filename> file
108 whose name follows this format:
109 <literallayout class='monospaced'>
110 &lt;bsp_name&gt;-&lt;kernel_type&gt;.scc
111 </literallayout>
112 </para></listitem>
113 <listitem><para>Once located, the feature description is either compiled into a simple script
114 of actions, or into an existing equivalent script that is already part of the
115 shipped kernel.</para></listitem>
116 <listitem><para>Extra features are appended to the top-level feature description.
117 These features can come from the
118 <ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_FEATURES'><filename>KERNEL_FEATURES</filename></ulink>
119 variable in recipes.</para></listitem>
120 <listitem><para>Each extra feature is located, compiled and appended to the script
121 as described in step three.</para></listitem>
122 <listitem><para>The script is executed to produce a series of <filename>meta-*</filename>
123 directories.
124 These directories are descriptions of all the branches, tags, patches and configurations that
125 need to be applied to the base Git repository to completely create the
126 source (build) branch for the new BSP or feature.</para></listitem>
127 <listitem><para>The base repository is cloned, and the actions
128 listed in the <filename>meta-*</filename> directories are applied to the
129 tree.</para></listitem>
130 <listitem><para>The Git repository is left with the desired branch checked out and any
131 required branching, patching and tagging has been performed.</para></listitem>
132 </orderedlist>
133 </para>
134 <para>
135 The kernel tree is now ready for developer consumption to be locally cloned,
136 configured, and built into a Yocto Project kernel specific to some target hardware.
137 <note><para>The generated <filename>meta-*</filename> directories add to the kernel
138 as shipped with the Yocto Project release.
139 Any add-ons and configuration data are applied to the end of an existing branch.
140 The full repository generation that is found in the
141 official Yocto Project kernel repositories at
142 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'>http://git.yoctoproject.org/cgit.cgi</ulink>
143 is the combination of all supported boards and configurations.</para>
144 <para>The technique the Yocto Project team uses is flexible and allows for seamless
145 blending of an immutable history with additional patches specific to a
146 deployment.
147 Any additions to the kernel become an integrated part of the branches.</para>
148 </note>
149 </para>
150 </section>
151
152 <section id='build-strategy'>
153 <title>Build Strategy</title>
154 <para>
155 Once a local Git repository of the Yocto Project kernel exists on a development system,
156 you can consider the compilation phase of kernel development - building a kernel image.
157 Some prerequisites exist that are validated by the build process before compilation
158 starts:
159 </para>
160
161 <itemizedlist>
162 <listitem><para>The
163 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink> points
164 to the kernel Git repository.</para></listitem>
165 <listitem><para>A BSP build branch exists.
166 This branch has the following form:
167 <literallayout class='monospaced'>
168 &lt;kernel_type&gt;/&lt;bsp_name&gt;
169 </literallayout></para></listitem>
170 </itemizedlist>
171
172 <para>
173 The OpenEmbedded build system makes sure these conditions exist before attempting compilation.
174 Other means, however, do exist, such as as bootstrapping a BSP, see
175 the "<link linkend='workflow-examples'>Workflow Examples</link>".
176 </para>
177
178 <para>
179 Before building a kernel, the build process verifies the tree
180 and configures the kernel by processing all of the
181 configuration "fragments" specified by feature descriptions in the <filename>.scc</filename>
182 files.
183 As the features are compiled, associated kernel configuration fragments are noted
184 and recorded in the <filename>meta-*</filename> series of directories in their compilation order.
185 The fragments are migrated, pre-processed and passed to the Linux Kernel
186 Configuration subsystem (<filename>lkc</filename>) as raw input in the form
187 of a <filename>.config</filename> file.
188 The <filename>lkc</filename> uses its own internal dependency constraints to do the final
189 processing of that information and generates the final <filename>.config</filename> file
190 that is used during compilation.
191 </para>
192
193 <para>
194 Using the board's architecture and other relevant values from the board's template,
195 kernel compilation is started and a kernel image is produced.
196 </para>
197
198 <para>
199 The other thing that you notice once you configure a kernel is that
200 the build process generates a build tree that is separate from your kernel's local Git
201 source repository tree.
202 This build tree has a name that uses the following form, where
203 <filename>${MACHINE}</filename> is the metadata name of the machine (BSP) and "kernel_type" is one
204 of the Yocto Project supported kernel types (e.g. "standard"):
205 <literallayout class='monospaced'>
206 linux-${MACHINE}-&lt;kernel_type&gt;-build
207 </literallayout>
208 </para>
209
210 <para>
211 The existing support in the <filename>kernel.org</filename> tree achieves this
212 default functionality.
213 </para>
214
215 <para>
216 This behavior means that all the generated files for a particular machine or BSP are now in
217 the build tree directory.
218 The files include the final <filename>.config</filename> file, all the <filename>.o</filename>
219 files, the <filename>.a</filename> files, and so forth.
220 Since each machine or BSP has its own separate build directory in its own separate branch
221 of the Git repository, you can easily switch between different builds.
222 </para>
223 </section>
224
225 <section id='workflow-examples'>
226 <title>Workflow Examples</title>
227
228 <para>
229 As previously noted, the Yocto Project kernel has built-in Git integration.
230 However, these utilities are not the only way to work with the kernel repository.
231 The Yocto Project has not made changes to Git or to other tools that
232 would invalidate alternate workflows.
233 Additionally, the way the kernel repository is constructed results in using
234 only core Git functionality, thus allowing any number of tools or front ends to use the
235 resulting tree.
236 </para>
237
238 <para>
239 This section contains several workflow examples.
240 Many of the examples use Git commands.
241 You can find Git documentation at
242 <ulink url='http://git-scm.com/documentation'></ulink>.
243 You can find a simple overview of using Git with the Yocto Project in the
244 "<ulink url='&YOCTO_DOCS_DEV_URL;#git'>Git</ulink>"
245 section of the Yocto Project Development Manual.
246 </para>
247
248 <section id='change-inspection-kernel-changes-commits'>
249 <title>Change Inspection: Changes/Commits</title>
250
251 <para>
252 A common question when working with a kernel is:
253 "What changes have been applied to this tree?"
254 </para>
255
256 <para>
257 In projects that have a collection of directories that
258 contain patches to the kernel, it is possible to inspect or "grep" the contents
259 of the directories to get a general feel for the changes.
260 This sort of patch inspection is not an efficient way to determine what has been
261 done to the kernel.
262 The reason it is inefficient is because there are many optional patches that are
263 selected based on the kernel type and the feature description.
264 Additionally, patches could exist in directories that are not included in the search.
265 </para>
266
267 <para>
268 A more efficient way to determine what has changed in the branch is to use
269 Git and inspect or search the kernel tree.
270 This method gives you a full view of not only the source code modifications,
271 but also provides the reasons for the changes.
272 </para>
273
274 <section id='what-changed-in-a-kernel'>
275 <title>What Changed in a Kernel?</title>
276
277 <para>
278 Following are a few examples that show how to use Git commands to examine changes.
279 Because Git repositories in the Yocto Project do not break existing Git
280 functionality, and because there exists many permutations of these types of
281 Git commands, many methods exist by which you can discover changes.
282 <note>
283 In the following examples, unless you provide a commit range,
284 <filename>kernel.org</filename> history is blended with Yocto Project
285 kernel changes.
286 You can form ranges by using branch names from the kernel tree as the
287 upper and lower commit markers with the Git commands.
288 You can see the branch names through the web interface to the
289 Yocto Project source repositories at
290 <ulink url='http://git.yoctoproject.org/cgit.cgi'></ulink>.
291 For example, the branch names for the <filename>linux-yocto-3.4</filename>
292 kernel repository can be seen at
293 <ulink url='http://git.yoctoproject.org/cgit.cgi/linux-yocto-3.4/refs/heads'></ulink>.
294 </note>
295 To see a full range of the changes, use the
296 <filename>git whatchanged</filename> command and specify a commit range
297 for the branch (<filename>&lt;commit&gt;..&lt;commit&gt;</filename>).
298 </para>
299
300 <para>
301 Here is an example that looks at what has changed in the
302 <filename>emenlow</filename> branch of the
303 <filename>linux-yocto-3.4</filename> kernel.
304 The lower commit range is the commit associated with the
305 <filename>standard/base</filename> branch, while
306 the upper commit range is the commit associated with the
307 <filename>standard/emenlow</filename> branch.
308 <literallayout class='monospaced'>
309 $ git whatchanged origin/standard/base..origin/standard/emenlow
310 </literallayout>
311 </para>
312
313 <para>
314 To see a summary of changes use the <filename>git log</filename> command.
315 Here is an example using the same branches:
316 <literallayout class='monospaced'>
317 $ git log --oneline origin/standard/base..origin/standard/emenlow
318 </literallayout>
319 The <filename>git log</filename> output might be more useful than
320 the <filename>git whatchanged</filename> as you get
321 a short, one-line summary of each change and not the entire commit.
322 </para>
323
324 <para>
325 If you want to see code differences associated with all the changes, use
326 the <filename>git diff</filename> command.
327 Here is an example:
328 <literallayout class='monospaced'>
329 $ git diff origin/standard/base..origin/standard/emenlow
330 </literallayout>
331 </para>
332
333 <para>
334 You can see the commit log messages and the text differences using the
335 <filename>git show</filename> command:
336 Here is an example:
337 <literallayout class='monospaced'>
338 $ git show origin/standard/base..origin/standard/emenlow
339 </literallayout>
340 </para>
341
342 <para>
343 You can create individual patches for each change by using the
344 <filename>git format-patch</filename> command.
345 Here is an example that that creates patch files for each commit and
346 places them in your <filename>Documents</filename> directory:
347 <literallayout class='monospaced'>
348 $ git format-patch -o $HOME/Documents origin/standard/base..origin/standard/emenlow
349 </literallayout>
350 </para>
351 </section>
352
353 <section id='show-a-particular-feature-or-branch-change'>
354 <title>Show a Particular Feature or Branch Change</title>
355
356 <para>
357 Developers use tags in the Yocto Project kernel tree to divide changes for significant
358 features or branches.
359 Once you know a particular tag, you can use Git commands
360 to show changes associated with the tag and find the branches that contain
361 the feature.
362 <note>
363 Because BSP branch, <filename>kernel.org</filename>, and feature tags are all
364 present, there could be many tags.
365 </note>
366 The <filename>git show &lt;tag&gt;</filename> command shows changes that are tagged by
367 a feature.
368 Here is an example that shows changes tagged by the <filename>systemtap</filename>
369 feature:
370 <literallayout class='monospaced'>
371 $ git show systemtap
372 </literallayout>
373 You can use the <filename>git branch --contains &lt;tag&gt;</filename> command
374 to show the branches that contain a particular feature.
375 This command shows the branches that contain the <filename>systemtap</filename>
376 feature:
377 <literallayout class='monospaced'>
378 $ git branch --contains systemtap
379 </literallayout>
380 </para>
381
382 <para>
383 You can use many other comparisons to isolate BSP and kernel changes.
384 For example, you can compare against <filename>kernel.org</filename> tags
385 such as the <filename>v3.4</filename> tag.
386 </para>
387 </section>
388 </section>
389
390 <section id='development-saving-kernel-modifications'>
391 <title>Development: Saving Kernel Modifications</title>
392
393 <para>
394 Another common operation is to build a BSP supplied by the Yocto Project, make some
395 changes, rebuild, and then test.
396 Those local changes often need to be exported, shared or otherwise maintained.
397 </para>
398
399 <para>
400 Since the Yocto Project kernel source tree is backed by Git, this activity is
401 much easier as compared to with previous releases.
402 Because Git tracks file modifications, additions and deletions, it is easy
403 to modify the code and later realize that you need to save the changes.
404 It is also easy to determine what has changed.
405 This method also provides many tools to commit, undo and export those modifications.
406 </para>
407
408 <para>
409 This section and its sub-sections, describe general application of Git's
410 <filename>push</filename> and <filename>pull</filename> commands, which are used to
411 get your changes upstream or source your code from an upstream repository.
412 The Yocto Project provides scripts that help you work in a collaborative development
413 environment.
414 For information on these scripts, see the
415 "<ulink url='&YOCTO_DOCS_DEV_URL;#pushing-a-change-upstream'>Using Scripts to Push a Change
416 Upstream and Request a Pull</ulink>" and
417 "<ulink url='&YOCTO_DOCS_DEV_URL;#submitting-a-patch'>Using Email to Submit a Patch</ulink>"
418 sections in the Yocto Project Development Manual.
419 </para>
420
421 <para>
422 There are many ways to save kernel modifications.
423 The technique employed
424 depends on the destination for the patches:
425
426 <itemizedlist>
427 <listitem><para>Bulk storage</para></listitem>
428 <listitem><para>Internal sharing either through patches or by using Git</para></listitem>
429 <listitem><para>External submissions</para></listitem>
430 <listitem><para>Exporting for integration into another Source Code
431 Manager (SCM)</para></listitem>
432 </itemizedlist>
433 </para>
434
435 <para>
436 Because of the following list of issues, the destination of the patches also influences
437 the method for gathering them:
438
439 <itemizedlist>
440 <listitem><para>Bisectability</para></listitem>
441 <listitem><para>Commit headers</para></listitem>
442 <listitem><para>Division of subsystems for separate submission or review</para></listitem>
443 </itemizedlist>
444 </para>
445
446 <section id='bulk-export'>
447 <title>Bulk Export</title>
448
449 <para>
450 This section describes how you can "bulk" export changes that have not
451 been separated or divided.
452 This situation works well when you are simply storing patches outside of the kernel
453 source repository, either permanently or temporarily, and you are not committing
454 incremental changes during development.
455 <note>
456 This technique is not appropriate for full integration of upstream submission
457 because changes are not properly divided and do not provide an avenue for per-change
458 commit messages.
459 Therefore, this example assumes that changes have not been committed incrementally
460 during development and that you simply must gather and export them.
461 </note>
462 <literallayout class='monospaced'>
463 # bulk export of ALL modifications without separation or division
464 # of the changes
465
466 $ git add .
467 $ git commit -s -a -m &lt;msg&gt;
468 or
469 $ git commit -s -a # and interact with $EDITOR
470 </literallayout>
471 </para>
472
473 <para>
474 The previous operations capture all the local changes in the project source
475 tree in a single Git commit.
476 And, that commit is also stored in the project's source tree.
477 </para>
478
479 <para>
480 Once the changes are exported, you can restore them manually using a template
481 or through integration with the <filename>default_kernel</filename>.
482 </para>
483
484 </section>
485
486 <section id='incremental-planned-sharing'>
487 <title>Incremental/Planned Sharing</title>
488
489 <para>
490 This section describes how to save modifications when you are making incremental
491 commits or practicing planned sharing.
492 The examples in this section assume that you have incrementally committed
493 changes to the tree during development and now need to export them.
494 The sections that follow
495 describe how you can export your changes internally through either patches or by
496 using Git commands.
497 </para>
498
499 <para>
500 During development, the following commands are of interest.
501 For full Git documentation, refer to the Git documentation at
502 <ulink url='http://github.com'></ulink>.
503
504 <literallayout class='monospaced'>
505 # edit a file
506 $ vi &lt;path&gt;/file
507 # stage the change
508 $ git add &lt;path&gt;/file
509 # commit the change
510 $ git commit -s
511 # remove a file
512 $ git rm &lt;path&gt;/file
513 # commit the change
514 $ git commit -s
515
516 ... etc.
517 </literallayout>
518 </para>
519
520 <para>
521 Distributed development with Git is possible when you use a universally
522 agreed-upon unique commit identifier (set by the creator of the commit) that maps to a
523 specific change set with a specific parent.
524 This identifier is created for you when
525 you create a commit, and is re-created when you amend, alter or re-apply
526 a commit.
527 As an individual in isolation, this is of no interest.
528 However, if you
529 intend to share your tree with normal Git <filename>push</filename> and
530 <filename>pull</filename> operations for
531 distributed development, you should consider the ramifications of changing a
532 commit that you have already shared with others.
533 </para>
534
535 <para>
536 Assuming that the changes have not been pushed upstream, or pulled into
537 another repository, you can update both the commit content and commit messages
538 associated with development by using the following commands:
539
540 <literallayout class='monospaced'>
541 $ Git add &lt;path&gt;/file
542 $ Git commit --amend
543 $ Git rebase or Git rebase -i
544 </literallayout>
545 </para>
546
547 <para>
548 Again, assuming that the changes have not been pushed upstream, and that
549 no pending works-in-progress exist (use <filename>git status</filename> to check), then
550 you can revert (undo) commits by using the following commands:
551
552 <literallayout class='monospaced'>
553 # remove the commit, update working tree and remove all
554 # traces of the change
555 $ git reset --hard HEAD^
556 # remove the commit, but leave the files changed and staged for re-commit
557 $ git reset --soft HEAD^
558 # remove the commit, leave file change, but not staged for commit
559 $ git reset --mixed HEAD^
560 </literallayout>
561 </para>
562
563 <para>
564 You can create branches, "cherry-pick" changes, or perform any number of Git
565 operations until the commits are in good order for pushing upstream
566 or for pull requests.
567 After a <filename>push</filename> or <filename>pull</filename> command,
568 commits are normally considered
569 "permanent" and you should not modify them.
570 If the commits need to be changed, you can incrementally do so with new commits.
571 These practices follow standard Git workflow and the <filename>kernel.org</filename> best
572 practices, which is recommended.
573 <note>
574 It is recommended to tag or branch before adding changes to a Yocto Project
575 BSP or before creating a new one.
576 The reason for this recommendation is because the branch or tag provides a
577 reference point to facilitate locating and exporting local changes.
578 </note>
579 </para>
580
581 <section id='export-internally-via-patches'>
582 <title>Exporting Changes Internally by Using Patches</title>
583
584 <para>
585 This section describes how you can extract committed changes from a working directory
586 by exporting them as patches.
587 Once the changes have been extracted, you can use the patches for upstream submission,
588 place them in a Yocto Project template for automatic kernel patching,
589 or apply them in many other common uses.
590 </para>
591
592 <para>
593 This example shows how to create a directory with sequentially numbered patches.
594 Once the directory is created, you can apply it to a repository using the
595 <filename>git am</filename> command to reproduce the original commit and all
596 the related information such as author, date, commit log, and so forth.
597 <note>
598 The new commit identifiers (ID) will be generated upon re-application.
599 This action reflects that the commit is now applied to an underlying commit
600 with a different ID.
601 </note>
602 <literallayout class='monospaced'>
603 # &lt;first-commit&gt; can be a tag if one was created before development
604 # began. It can also be the parent branch if a branch was created
605 # before development began.
606
607 $ git format-patch -o &lt;dir&gt; &lt;first commit&gt;..&lt;last commit&gt;
608 </literallayout>
609 </para>
610
611 <para>
612 In other words:
613 <literallayout class='monospaced'>
614 # Identify commits of interest.
615
616 # If the tree was tagged before development
617 $ git format-patch -o &lt;save dir&gt; &lt;tag&gt;
618
619 # If no tags are available
620 $ git format-patch -o &lt;save dir&gt; HEAD^ # last commit
621 $ git format-patch -o &lt;save dir&gt; HEAD^^ # last 2 commits
622 $ git whatchanged # identify last commit
623 $ git format-patch -o &lt;save dir&gt; &lt;commit id&gt;
624 $ git format-patch -o &lt;save dir&gt; &lt;rev-list&gt;
625 </literallayout>
626 </para>
627 </section>
628
629 <section id='export-internally-via-git'>
630 <title>Exporting Changes Internally by Using Git</title>
631
632 <para>
633 This section describes how you can export changes from a working directory
634 by pushing the changes into a master repository or by making a pull request.
635 Once you have pushed the changes to the master repository, you can then
636 pull those same changes into a new kernel build at a later time.
637 </para>
638
639 <para>
640 Use this command form to push the changes:
641 <literallayout class='monospaced'>
642 $ git push ssh://&lt;master_server&gt;/&lt;path_to_repo&gt;
643 &lt;local_branch&gt;:&lt;remote_branch&gt;
644 </literallayout>
645 </para>
646
647 <para>
648 For example, the following command pushes the changes from your local branch
649 <filename>yocto/standard/common-pc/base</filename> to the remote branch with the same name
650 in the master repository <filename>//git.mycompany.com/pub/git/kernel-3.4</filename>.
651 <literallayout class='monospaced'>
652 $ git push ssh://git.mycompany.com/pub/git/kernel-3.4 \
653 yocto/standard/common-pc/base:yocto/standard/common-pc/base
654 </literallayout>
655 </para>
656
657 <para>
658 A pull request entails using the <filename>git request-pull</filename> command to compose
659 an email to the
660 maintainer requesting that a branch be pulled into the master repository, see
661 <ulink url='http://github.com/guides/pull-requests'></ulink> for an example.
662 <note>
663 Other commands such as <filename>git stash</filename> or branching can also be used to save
664 changes, but are not covered in this document.
665 </note>
666 </para>
667 </section>
668 </section>
669
670 <section id='export-for-external-upstream-submission'>
671 <title>Exporting Changes for External (Upstream) Submission</title>
672
673 <para>
674 This section describes how to export changes for external upstream submission.
675 If the patch series is large or the maintainer prefers to pull
676 changes, you can submit these changes by using a pull request.
677 However, it is common to send patches as an email series.
678 This method allows easy review and integration of the changes.
679 <note>
680 Before sending patches for review be sure you understand the
681 community standards for submitting and documenting changes and follow their best practices.
682 For example, kernel patches should follow standards such as:
683 <itemizedlist>
684 <listitem><para>
685 <ulink url='http://linux.yyz.us/patch-format.html'></ulink></para></listitem>
686 <listitem><para>Documentation/SubmittingPatches (in any linux
687 kernel source tree)</para></listitem>
688 </itemizedlist>
689 </note>
690 </para>
691
692 <para>
693 The messages used to commit changes are a large part of these standards.
694 Consequently, be sure that the headers for each commit have the required information.
695 For information on how to follow the Yocto Project commit message standards, see the
696 "<ulink url='&YOCTO_DOCS_DEV_URL;#how-to-submit-a-change'>How to Submit a
697 Change</ulink>" section in the Yocto Project Development Manual.
698 </para>
699
700 <para>
701 If the initial commits were not properly documented or do not meet those standards,
702 you can re-base by using the <filename>git rebase -i</filename> command to
703 manipulate the commits and
704 get them into the required format.
705 Other techniques such as branching and cherry-picking commits are also viable options.
706 </para>
707
708 <para>
709 Once you complete the commits, you can generate the email that sends the patches
710 to the maintainer(s) or lists that review and integrate changes.
711 The command <filename>git send-email</filename> is commonly used to ensure
712 that patches are properly
713 formatted for easy application and avoid mailer-induced patch damage.
714 </para>
715
716 <para>
717 The following is an example of dumping patches for external submission:
718 <literallayout class='monospaced'>
719 # dump the last 4 commits
720 $ git format-patch --thread -n -o ~/rr/ HEAD^^^^
721 $ git send-email --compose --subject '[RFC 0/N] &lt;patch series summary&gt;' \
722 --to foo@yoctoproject.org --to bar@yoctoproject.org \
723 --cc list@yoctoproject.org ~/rr
724 # the editor is invoked for the 0/N patch, and when complete the entire
725 # series is sent via email for review
726 </literallayout>
727 </para>
728 </section>
729
730 <section id='export-for-import-into-other-scm'>
731 <title>Exporting Changes for Import into Another SCM</title>
732
733 <para>
734 When you want to export changes for import into another
735 Source Code Manager (SCM), you can use any of the previously discussed
736 techniques.
737 However, if the patches are manually applied to a secondary tree and then
738 that tree is checked into the SCM, you can lose change information such as
739 commit logs.
740 This process is not recommended.
741 </para>
742
743 <para>
744 Many SCMs can directly import Git commits, or can translate Git patches so that
745 information is not lost.
746 Those facilities are SCM-dependent and you should use them whenever possible.
747 </para>
748 </section>
749 </section>
750
751 <section id='scm-working-with-the-yocto-project-kernel-in-another-scm'>
752 <title>Working with the Yocto Project Kernel in Another SCM</title>
753
754 <para>
755 This section describes kernel development in an SCM other than Git,
756 which is not the same as exporting changes to another SCM described earlier.
757 For this scenario, you use the OpenEmbedded build system to
758 develop the kernel in a different SCM.
759 The following must be true for you to accomplish this:
760 <itemizedlist>
761 <listitem><para>The delivered Yocto Project kernel must be exported into the second
762 SCM.</para></listitem>
763 <listitem><para>Development must be exported from that secondary SCM into a
764 format that can be used by the OpenEmbedded build system.</para></listitem>
765 </itemizedlist>
766 </para>
767
768 <section id='exporting-delivered-kernel-to-scm'>
769 <title>Exporting the Delivered Kernel to the SCM</title>
770
771 <para>
772 Depending on the SCM, it might be possible to export the entire Yocto Project
773 kernel Git repository, branches and all, into a new environment.
774 This method is preferred because it has the most flexibility and potential to maintain
775 the meta data associated with each commit.
776 </para>
777
778 <para>
779 When a direct import mechanism is not available, it is still possible to
780 export a branch (or series of branches) and check them into a new repository.
781 </para>
782
783 <para>
784 The following commands illustrate some of the steps you could use to
785 import the <filename>yocto/standard/common-pc/base</filename>
786 kernel into a secondary SCM:
787 <literallayout class='monospaced'>
788 $ git checkout yocto/standard/common-pc/base
789 $ cd .. ; echo linux/.git &gt; .cvsignore
790 $ cvs import -m "initial import" linux MY_COMPANY start
791 </literallayout>
792 </para>
793
794 <para>
795 You could now relocate the CVS repository and use it in a centralized manner.
796 </para>
797
798 <para>
799 The following commands illustrate how you can condense and merge two BSPs into a
800 second SCM:
801 <literallayout class='monospaced'>
802 $ git checkout yocto/standard/common-pc/base
803 $ git merge yocto/standard/common-pc-64/base
804 # resolve any conflicts and commit them
805 $ cd .. ; echo linux/.git &gt; .cvsignore
806 $ cvs import -m "initial import" linux MY_COMPANY start
807 </literallayout>
808 </para>
809 </section>
810
811 <section id='importing-changes-for-build'>
812 <title>Importing Changes for the Build</title>
813
814 <para>
815 Once development has reached a suitable point in the second development
816 environment, you need to export the changes as patches.
817 To export them, place the changes in a recipe and
818 automatically apply them to the kernel during patching.
819 </para>
820 </section>
821 </section>
822
823 <section id='bsp-creating'>
824 <title>Creating a BSP Based on an Existing Similar BSP</title>
825
826 <para>
827 This section overviews the process of creating a BSP based on an
828 existing similar BSP.
829 The information is introductory in nature and does not provide step-by-step examples.
830 For detailed information on how to create a new BSP, see
831 the "<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>" section in the
832 Yocto Project Board Support Package (BSP) Developer's Guide, or see the
833 <ulink url='&YOCTO_WIKI_URL;/wiki/Transcript:_creating_one_generic_Atom_BSP_from_another'>Transcript:_creating_one_generic_Atom_BSP_from_another</ulink>
834 wiki page.
835 </para>
836
837 <para>
838 The basic steps you need to follow are:
839 <orderedlist>
840 <listitem><para><emphasis>Make sure you have set up a local Source Directory:</emphasis>
841 You must create a local
842 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
843 by either creating a Git repository (recommended) or
844 extracting a Yocto Project release tarball.</para></listitem>
845 <listitem><para><emphasis>Choose an existing BSP available with the Yocto Project:</emphasis>
846 Try to map your board features as closely to the features of a BSP that is
847 already supported and exists in the Yocto Project.
848 Starting with something as close as possible to your board makes developing
849 your BSP easier.
850 You can find all the BSPs that are supported and ship with the Yocto Project
851 on the Yocto Project's Download page at
852 <ulink url='&YOCTO_HOME_URL;/download'></ulink>.</para></listitem>
853 <listitem><para><emphasis>Be sure you have the Base BSP:</emphasis>
854 You need to either have a local Git repository of the base BSP set up or
855 have downloaded and extracted the files from a release BSP tarball.
856 Either method gives you access to the BSP source files.</para></listitem>
857 <listitem><para><emphasis>Make a copy of the existing BSP, thus isolating your new
858 BSP work:</emphasis>
859 Copying the existing BSP file structure gives you a new area in which to work.</para></listitem>
860 <listitem><para><emphasis>Make configuration and recipe changes to your new BSP:</emphasis>
861 Configuration changes involve the files in the BSP's <filename>conf</filename>
862 directory.
863 Changes include creating a machine-specific configuration file and editing the
864 <filename>layer.conf</filename> file.
865 The configuration changes identify the kernel you will be using.
866 Recipe changes include removing, modifying, or adding new recipe files that
867 instruct the build process on what features to include in the image.</para></listitem>
868 <listitem><para><emphasis>Prepare for the build:</emphasis>
869 Before you actually initiate the build, you need to set up the build environment
870 by sourcing the environment initialization script.
871 After setting up the environment, you need to make some build configuration
872 changes to the <filename>local.conf</filename> and <filename>bblayers.conf</filename>
873 files.</para></listitem>
874 <listitem><para><emphasis>Build the image:</emphasis>
875 The OpenEmbedded build system uses BitBake to create the image.
876 You need to decide on the type of image you are going to build (e.g. minimal, base,
877 core, sato, and so forth) and then start the build using the <filename>bitbake</filename>
878 command.</para></listitem>
879 </orderedlist>
880 </para>
881 </section>
882
883 <section id='tip-dirty-string'>
884 <title>"-dirty" String</title>
885
886 <para>
887 If kernel images are being built with "-dirty" on the end of the version
888 string, this simply means that modifications in the source
889 directory have not been committed.
890 <literallayout class='monospaced'>
891 $ git status
892 </literallayout>
893 </para>
894
895 <para>
896 You can use the above Git command to report modified, removed, or added files.
897 You should commit those changes to the tree regardless of whether they will be saved,
898 exported, or used.
899 Once you commit the changes you need to rebuild the kernel.
900 </para>
901
902 <para>
903 To brute force pickup and commit all such pending changes, enter the following:
904 <literallayout class='monospaced'>
905 $ git add .
906 $ git commit -s -a -m "getting rid of -dirty"
907 </literallayout>
908 </para>
909
910 <para>
911 Next, rebuild the kernel.
912 </para>
913 </section>
914 </section>
915</chapter>
916<!--
917vim: expandtab tw=80 ts=4
918-->
diff --git a/documentation/kernel-dev/kernel-dev-faq.xml b/documentation/kernel-dev/kernel-dev-faq.xml
new file mode 100644
index 0000000000..7389c9c9c5
--- /dev/null
+++ b/documentation/kernel-dev/kernel-dev-faq.xml
@@ -0,0 +1,131 @@
1<!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<appendix id='kernel-dev-faq'>
6<title>Kernel Development FAQ</title>
7<qandaset>
8 <qandaentry>
9 <question>
10 <para>
11 How do I use my own Linux kernel <filename>.config</filename>
12 file?
13 </para>
14 </question>
15 <answer>
16 <para>
17 Refer to the "<link linkend='changing-the-configuration'>Changing the Configuration</link>"
18 section for information.
19 </para>
20 </answer>
21 </qandaentry>
22
23 <qandaentry>
24 <question>
25 <para>
26 How do I create configuration fragments?
27 </para>
28 </question>
29 <answer>
30 <para>
31 Refer to the "<link linkend='generating-configuration-files'>Generating Configuration Files</link>"
32 section for information.
33 </para>
34 </answer>
35 </qandaentry>
36
37 <qandaentry>
38 <question>
39 <para>
40 How do I use my own Linux kernel sources?
41 </para>
42 </question>
43 <answer>
44 <para>
45 Refer to the "<link linkend='working-with-your-own-sources'>Working With Your Own Sources</link>"
46 section for information.
47 </para>
48 </answer>
49 </qandaentry>
50
51 <qandaentry>
52 <question>
53 <para>
54 How do I install/not-install the kernel image on the rootfs?
55 </para>
56 </question>
57 <answer>
58 <para>
59 The kernel image (e.g. <filename>vmlinuz</filename>) is provided
60 by the <filename>kernel-image</filename> package.
61 Image recipes depend on <filename>kernel-base</filename>.
62 To specify whether or not the kernel
63 image is installed in the generated root filesystem, override
64 <filename>RDEPENDS_kernel-base</filename> to include or not
65 include "kernel-image".</para>
66 <para>See the
67 "<ulink url='&YOCTO_DOCS_DEV_URL;#using-bbappend-files'>Using .bbappend Files</ulink>"
68 section in the Yocto Project Development Manual for information on
69 how to use an append file to override metadata.
70 </para>
71 </answer>
72 </qandaentry>
73
74 <qandaentry>
75 <question>
76 <para>
77 How do I install a specific kernel module?
78 </para>
79 </question>
80 <answer>
81 <para>
82 Linux kernel modules are packaged individually.
83 To ensure a specific kernel module is included in an image,
84 include it in the appropriate machine
85 <ulink url='&YOCTO_DOCS_REF_URL;#var-RRECOMMENDS'><filename>RRECOMMENDS</filename></ulink>
86 variable.</para>
87 <para>These other variables are useful for installing specific
88 modules:
89 <literallayout class='monospaced'>
90 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_ESSENTIAL_EXTRA_RDEPENDS'><filename>MACHINE_ESSENTIAL_EXTRA_RDEPENDS</filename></ulink>
91 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS'><filename>MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS</filename></ulink>
92 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_EXTRA_RDEPENDS'><filename>MACHINE_EXTRA_RDEPENDS</filename></ulink>
93 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_EXTRA_RRECOMMENDS'><filename>MACHINE_EXTRA_RRECOMMENDS</filename></ulink>
94 </literallayout>
95 For example, set the following in the <filename>qemux86.conf</filename>
96 file to include the <filename>ab123</filename> kernel modules
97 with images built for the <filename>qemux86</filename> machine:
98 <literallayout class='monospaced'>
99 MACHINE_EXTRA_RRECOMMENDS += "kernel-module-ab123"
100 </literallayout>
101 For more information, see the
102 "<link linkend='incorporating-out-of-tree-modules'>Incorporating Out-of-Tree Modules</link>"
103 section.
104 </para>
105 </answer>
106 </qandaentry>
107
108 <qandaentry>
109 <question>
110 <para>
111 How do I change the Linux kernel command line?
112 </para>
113 </question>
114 <answer>
115 <para>
116 The Linux kernel command line is typically specified in
117 the machine config using the <filename>APPEND</filename> variable.
118 For example, you can add some helpful debug information doing
119 the following:
120 <literallayout class='monospaced'>
121 APPEND += "printk.time=y initcall_debug debug"
122 </literallayout>
123 </para>
124 </answer>
125 </qandaentry>
126
127</qandaset>
128</appendix>
129<!--
130vim: expandtab tw=80 ts=4
131-->
diff --git a/documentation/kernel-dev/kernel-dev-intro.xml b/documentation/kernel-dev/kernel-dev-intro.xml
new file mode 100644
index 0000000000..297696c965
--- /dev/null
+++ b/documentation/kernel-dev/kernel-dev-intro.xml
@@ -0,0 +1,147 @@
1<!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='kernel-dev-intro'>
6<title>Introduction</title>
7
8<!--
9<para>
10 <emphasis>AR - Darrren Hart:</emphasis> See if the concepts in these
11 three bullets are adequately covered in somewhere in this manual:
12 <itemizedlist>
13 <listitem><para>Do we convey that our kernel Git repositories
14 have a clear and continuous history, similar to the way the
15 kernel Git repositories for <filename>kernel.org</filename>
16 do.
17 </para></listitem>
18 <listitem><para>Does the manual note that Yocto Project delivers
19 a key set of supported kernel types, where
20 each type is tailored to meet a specific use (e.g. networking,
21 consumer, devices, and so forth).</para></listitem>
22 <listitem><para>Do we convey that the Yocto Project uses a
23 Git branching strategy that, from a
24 developer's point of view, results in a linear path from the
25 baseline kernel.org, through a select group of features and
26 ends with their BSP-specific commits.</para></listitem>
27 </itemizedlist>
28</para>
29-->
30
31 <section id='kernel-dev-overview'>
32 <title>Overview</title>
33
34 <para>
35 Regardless of how you intend to make use of the Yocto Project,
36 chances are you will work with the Linux kernel.
37 This manual provides background information on the Yocto Linux kernel
38 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>,
39 describes common tasks you can perform using the kernel tools,
40 and shows you how to use the kernel Metadata needed to work with
41 the kernel inside the Yocto Project.
42 </para>
43
44 <para>
45 Each Yocto Project release has a set of linux-yocto recipes, whose
46 Git repositories you can view in the Yocto
47 <ulink url='&YOCTO_GIT_URL;'>Source Repositories</ulink> under
48 the "Yocto Linux Kernel" heading.
49 New recipes for the release track the latest upstream developments
50 and introduce newly supported platforms.
51 Previous recipes in the release are refreshed and supported for at
52 least one additional release.
53 As they align, these previous releases are updated to include the
54 latest from the Long Term Support Initiative (LTSI) project.
55 Also included is a linux-yocto development recipe
56 (<filename>linux-yocto-dev.bb</filename>) should you want to work
57 with the very latest in upstream Linux kernel development and
58 kernel Metadata development.
59 </para>
60
61 <para>
62 The Yocto Project also provides a powerful set of kernel
63 tools for managing Linux kernel sources and configuration data.
64 You can use these tools to make a single configuration change,
65 apply multiple patches, or work with your own kernel sources.
66 </para>
67
68 <para>
69 In particular, the kernel tools allow you to generate configuration
70 fragments that specify only what you must, and nothing more.
71 Configuration fragments only need to contain the highest level
72 visible <filename>CONFIG</filename> options as presented by the Linux
73 kernel <filename>menuconfig</filename> system.
74 Contrast this against a complete Linux kernel
75 <filename>.config</filename>, which includes all the automatically
76 selected <filename>CONFIG</filename> options.
77 This efficiency reduces your maintenance effort and allows you
78 to further separate your configuration in ways that make sense for
79 your project.
80 A common split separates policy and hardware.
81 For example, all your kernels might support
82 the <filename>proc</filename> and <filename>sys</filename> filesystems,
83 but only specific boards require sound, USB, or specific drivers.
84 Specifying these configurations individually allows you to aggregate
85 them together as needed, but maintains them in only one place.
86 Similar logic applies to separating source changes.
87 </para>
88
89 <para>
90 If you do not maintain your own kernel sources and need to make
91 only minimal changes to the sources, the released recipes provide a
92 vetted base upon which to layer your changes.
93 Doing so allows you to benefit from the continual kernel
94 integration and testing performed during development of the
95 Yocto Project.
96 </para>
97
98 <para>
99 If, instead, you have a very specific Linux kernel source tree
100 and are unable to align with one of the official linux-yocto
101 recipes, an alternative exists by which you can use the Yocto
102 Project Linux kernel tools with your own kernel sources.
103 </para>
104 </section>
105
106 <section id='kernel-dev-other-resources'>
107 <title>Other Resources</title>
108
109 <para>
110 The sections that follow provide instructions for completing
111 specific Linux kernel development tasks.
112 These instructions assume you are comfortable working with
113 <ulink url='http://developer.berlios.de/projects/bitbake/'>BitBake</ulink>
114 recipes and basic open-source development tools.
115 Understanding these concepts will facilitate the process of working
116 with the kernel recipes.
117 If you find you need some additional background, please be sure to
118 review and understand the following documentation:
119 <itemizedlist>
120 <listitem><para><ulink url='&YOCTO_DOCS_QS_URL;'>Yocto Project Quick Start</ulink>
121 </para></listitem>
122 <listitem><para>The "<ulink url='&YOCTO_DOCS_DEV_URL;#modifying-temporary-source-code'>Modifying Temporary Source Code</ulink>"
123 section in the Yocto Project Development Manual
124 </para></listitem>
125 <listitem><para>The "<ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>Understanding and Creating Layers</ulink>" section
126 in the Yocto Project Development Manual</para></listitem>
127 <listitem><para>The "<ulink url='&YOCTO_DOCS_DEV_URL;#modifying-the-kernel'>Modifying the Kernel</ulink>" section
128 in the Yocto Project Development Manual.</para></listitem>
129 </itemizedlist>
130 </para>
131
132 <para>
133 Finally, while this document focuses on the manual creation of
134 recipes, patches, and configuration files, the Yocto Project
135 Board Support Package (BSP) tools are available to automate
136 this process with existing content and work well to create the
137 initial framework and boilerplate code.
138 For details on these tools, see the
139 "<ulink url='&YOCTO_DOCS_BSP_URL;#using-the-yocto-projects-bsp-tools'>Using the Yocto Project's BSP Tools</ulink>"
140 section in the Yocto Project Board Support Package (BSP) Developer's
141 Guide.
142 </para>
143 </section>
144</chapter>
145<!--
146vim: expandtab tw=80 ts=4
147-->
diff --git a/documentation/kernel-dev/kernel-dev-maint-appx.xml b/documentation/kernel-dev/kernel-dev-maint-appx.xml
new file mode 100644
index 0000000000..a7c144ff75
--- /dev/null
+++ b/documentation/kernel-dev/kernel-dev-maint-appx.xml
@@ -0,0 +1,220 @@
1<!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<appendix id='kernel-dev-maint-appx'>
6<title>Kernel Maintenance</title>
7
8 <section id='tree-construction'>
9 <title>Tree Construction</title>
10 <para>
11 This section describes construction of the Yocto Project kernel source repositories
12 as accomplished by the Yocto Project team to create kernel repositories.
13 These kernel repositories are found under the heading "Yocto Linux Kernel" at
14 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'>&YOCTO_GIT_URL;/cgit.cgi</ulink>
15 and can be shipped as part of a Yocto Project release.
16 The team creates these repositories by
17 compiling and executing the set of feature descriptions for every BSP
18 and feature in the product.
19 Those feature descriptions list all necessary patches,
20 configuration, branching, tagging and feature divisions found in a kernel.
21 Thus, the Yocto Project kernel repository (or tree) is built.
22 </para>
23 <para>
24 The existence of this tree allows you to access and clone a particular
25 Yocto Project kernel repository and use it to build images based on their configurations
26 and features.
27 </para>
28 <para>
29 You can find the files used to describe all the valid features and BSPs
30 in the Yocto Project kernel in any clone of the Yocto Project kernel source repository
31 Git tree.
32 For example, the following command clones the Yocto Project baseline kernel that
33 branched off of <filename>linux.org</filename> version 3.4:
34 <literallayout class='monospaced'>
35 $ git clone git://git.yoctoproject.org/linux-yocto-3.4
36 </literallayout>
37 For another example of how to set up a local Git repository of the Yocto Project
38 kernel files, see the
39 "<ulink url='&YOCTO_DOCS_DEV_URL;#local-kernel-files'>Yocto Project Kernel</ulink>" bulleted
40 item in the Yocto Project Development Manual.
41 </para>
42 <para>
43 Once you have cloned the kernel Git repository on your local machine, you can
44 switch to the <filename>meta</filename> branch within the repository.
45 Here is an example that assumes the local Git repository for the kernel is in
46 a top-level directory named <filename>linux-yocto-3.4</filename>:
47 <literallayout class='monospaced'>
48 $ cd linux-yocto-3.4
49 $ git checkout -b meta origin/meta
50 </literallayout>
51 Once you have checked out and switched to the <filename>meta</filename> branch,
52 you can see a snapshot of all the kernel configuration and feature descriptions that are
53 used to build that particular kernel repository.
54 These descriptions are in the form of <filename>.scc</filename> files.
55 </para>
56 <para>
57 You should realize, however, that browsing your local kernel repository
58 for feature descriptions and patches is not an effective way to determine what is in a
59 particular kernel branch.
60 Instead, you should use Git directly to discover the changes in a branch.
61 Using Git is an efficient and flexible way to inspect changes to the kernel.
62 <note>
63 Ground up reconstruction of the complete kernel tree is an action only taken by the
64 Yocto Project team during an active development cycle.
65 When you create a clone of the kernel Git repository, you are simply making it
66 efficiently available for building and development.
67 </note>
68 </para>
69 <para>
70 The following steps describe what happens when the Yocto Project Team constructs
71 the Yocto Project kernel source Git repository (or tree) found at
72 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink> given the
73 introduction of a new top-level kernel feature or BSP.
74 These are the actions that effectively create the tree
75 that includes the new feature, patch or BSP:
76 <orderedlist>
77 <listitem><para>A top-level kernel feature is passed to the kernel build subsystem.
78 Normally, this feature is a BSP for a particular kernel type.</para></listitem>
79 <listitem><para>The file that describes the top-level feature is located by searching
80 these system directories:
81 <itemizedlist>
82 <listitem><para>The in-tree kernel-cache directories, which are located
83 in <filename>meta/cfg/kernel-cache</filename></para></listitem>
84 <listitem><para>Areas pointed to by <filename>SRC_URI</filename> statements
85 found in recipes</para></listitem>
86 </itemizedlist>
87 For a typical build, the target of the search is a
88 feature description in an <filename>.scc</filename> file
89 whose name follows this format:
90 <literallayout class='monospaced'>
91 &lt;bsp_name&gt;-&lt;kernel_type&gt;.scc
92 </literallayout>
93 </para></listitem>
94 <listitem><para>Once located, the feature description is either compiled into a simple script
95 of actions, or into an existing equivalent script that is already part of the
96 shipped kernel.</para></listitem>
97 <listitem><para>Extra features are appended to the top-level feature description.
98 These features can come from the
99 <ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_FEATURES'><filename>KERNEL_FEATURES</filename></ulink>
100 variable in recipes.</para></listitem>
101 <listitem><para>Each extra feature is located, compiled and appended to the script
102 as described in step three.</para></listitem>
103 <listitem><para>The script is executed to produce a series of <filename>meta-*</filename>
104 directories.
105 These directories are descriptions of all the branches, tags, patches and configurations that
106 need to be applied to the base Git repository to completely create the
107 source (build) branch for the new BSP or feature.</para></listitem>
108 <listitem><para>The base repository is cloned, and the actions
109 listed in the <filename>meta-*</filename> directories are applied to the
110 tree.</para></listitem>
111 <listitem><para>The Git repository is left with the desired branch checked out and any
112 required branching, patching and tagging has been performed.</para></listitem>
113 </orderedlist>
114 </para>
115 <para>
116 The kernel tree is now ready for developer consumption to be locally cloned,
117 configured, and built into a Yocto Project kernel specific to some target hardware.
118 <note><para>The generated <filename>meta-*</filename> directories add to the kernel
119 as shipped with the Yocto Project release.
120 Any add-ons and configuration data are applied to the end of an existing branch.
121 The full repository generation that is found in the
122 official Yocto Project kernel repositories at
123 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'>http://git.yoctoproject.org/cgit.cgi</ulink>
124 is the combination of all supported boards and configurations.</para>
125 <para>The technique the Yocto Project team uses is flexible and allows for seamless
126 blending of an immutable history with additional patches specific to a
127 deployment.
128 Any additions to the kernel become an integrated part of the branches.</para>
129 </note>
130 </para>
131 </section>
132
133 <section id='build-strategy'>
134 <title>Build Strategy</title>
135
136<!--
137 <para>
138 <emphasis>AR - Darrren Hart:</emphasis> Some parts of this section
139 need to be in the
140 "<link linkend='using-an-iterative-development-process'>Using an Iterative Development Process</link>"
141 section.
142 Darren needs to figure out which parts and identify them.
143 </para>
144-->
145
146 <para>
147 Once a local Git repository of the Yocto Project kernel exists on a development system,
148 you can consider the compilation phase of kernel development - building a kernel image.
149 Some prerequisites exist that are validated by the build process before compilation
150 starts:
151 </para>
152
153 <itemizedlist>
154 <listitem><para>The
155 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink> points
156 to the kernel Git repository.</para></listitem>
157 <listitem><para>A BSP build branch exists.
158 This branch has the following form:
159 <literallayout class='monospaced'>
160 &lt;kernel_type&gt;/&lt;bsp_name&gt;
161 </literallayout></para></listitem>
162 </itemizedlist>
163
164 <para>
165 The OpenEmbedded build system makes sure these conditions exist before attempting compilation.
166 Other means, however, do exist, such as as bootstrapping a BSP.
167 </para>
168
169 <para>
170 Before building a kernel, the build process verifies the tree
171 and configures the kernel by processing all of the
172 configuration "fragments" specified by feature descriptions in the <filename>.scc</filename>
173 files.
174 As the features are compiled, associated kernel configuration fragments are noted
175 and recorded in the <filename>meta-*</filename> series of directories in their compilation order.
176 The fragments are migrated, pre-processed and passed to the Linux Kernel
177 Configuration subsystem (<filename>lkc</filename>) as raw input in the form
178 of a <filename>.config</filename> file.
179 The <filename>lkc</filename> uses its own internal dependency constraints to do the final
180 processing of that information and generates the final <filename>.config</filename> file
181 that is used during compilation.
182 </para>
183
184 <para>
185 Using the board's architecture and other relevant values from the board's template,
186 kernel compilation is started and a kernel image is produced.
187 </para>
188
189 <para>
190 The other thing that you notice once you configure a kernel is that
191 the build process generates a build tree that is separate from your kernel's local Git
192 source repository tree.
193 This build tree has a name that uses the following form, where
194 <filename>${MACHINE}</filename> is the metadata name of the machine (BSP) and "kernel_type" is one
195 of the Yocto Project supported kernel types (e.g. "standard"):
196 <literallayout class='monospaced'>
197 linux-${MACHINE}-&lt;kernel_type&gt;-build
198 </literallayout>
199 </para>
200
201 <para>
202 The existing support in the <filename>kernel.org</filename> tree achieves this
203 default functionality.
204 </para>
205
206 <para>
207 This behavior means that all the generated files for a particular machine or BSP are now in
208 the build tree directory.
209 The files include the final <filename>.config</filename> file, all the <filename>.o</filename>
210 files, the <filename>.a</filename> files, and so forth.
211 Since each machine or BSP has its own separate
212 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
213 in its own separate branch
214 of the Git repository, you can easily switch between different builds.
215 </para>
216 </section>
217</appendix>
218<!--
219vim: expandtab tw=80 ts=4
220-->
diff --git a/documentation/kernel-dev/kernel-dev-style.css b/documentation/kernel-dev/kernel-dev-style.css
new file mode 100644
index 0000000000..52be14388d
--- /dev/null
+++ b/documentation/kernel-dev/kernel-dev-style.css
@@ -0,0 +1,978 @@
1/*
2 Generic XHTML / DocBook XHTML CSS Stylesheet.
3
4 Browser wrangling and typographic design by
5 Oyvind Kolas / pippin@gimp.org
6
7 Customised for Poky by
8 Matthew Allum / mallum@o-hand.com
9
10 Thanks to:
11 Liam R. E. Quin
12 William Skaggs
13 Jakub Steiner
14
15 Structure
16 ---------
17
18 The stylesheet is divided into the following sections:
19
20 Positioning
21 Margins, paddings, width, font-size, clearing.
22 Decorations
23 Borders, style
24 Colors
25 Colors
26 Graphics
27 Graphical backgrounds
28 Nasty IE tweaks
29 Workarounds needed to make it work in internet explorer,
30 currently makes the stylesheet non validating, but up until
31 this point it is validating.
32 Mozilla extensions
33 Transparency for footer
34 Rounded corners on boxes
35
36*/
37
38
39 /*************** /
40 / Positioning /
41/ ***************/
42
43body {
44 font-family: Verdana, Sans, sans-serif;
45
46 min-width: 640px;
47 width: 80%;
48 margin: 0em auto;
49 padding: 2em 5em 5em 5em;
50 color: #333;
51}
52
53h1,h2,h3,h4,h5,h6,h7 {
54 font-family: Arial, Sans;
55 color: #00557D;
56 clear: both;
57}
58
59h1 {
60 font-size: 2em;
61 text-align: left;
62 padding: 0em 0em 0em 0em;
63 margin: 2em 0em 0em 0em;
64}
65
66h2.subtitle {
67 margin: 0.10em 0em 3.0em 0em;
68 padding: 0em 0em 0em 0em;
69 font-size: 1.8em;
70 padding-left: 20%;
71 font-weight: normal;
72 font-style: italic;
73}
74
75h2 {
76 margin: 2em 0em 0.66em 0em;
77 padding: 0.5em 0em 0em 0em;
78 font-size: 1.5em;
79 font-weight: bold;
80}
81
82h3.subtitle {
83 margin: 0em 0em 1em 0em;
84 padding: 0em 0em 0em 0em;
85 font-size: 142.14%;
86 text-align: right;
87}
88
89h3 {
90 margin: 1em 0em 0.5em 0em;
91 padding: 1em 0em 0em 0em;
92 font-size: 140%;
93 font-weight: bold;
94}
95
96h4 {
97 margin: 1em 0em 0.5em 0em;
98 padding: 1em 0em 0em 0em;
99 font-size: 120%;
100 font-weight: bold;
101}
102
103h5 {
104 margin: 1em 0em 0.5em 0em;
105 padding: 1em 0em 0em 0em;
106 font-size: 110%;
107 font-weight: bold;
108}
109
110h6 {
111 margin: 1em 0em 0em 0em;
112 padding: 1em 0em 0em 0em;
113 font-size: 110%;
114 font-weight: bold;
115}
116
117.authorgroup {
118 background-color: transparent;
119 background-repeat: no-repeat;
120 padding-top: 256px;
121 background-image: url("figures/kernel-dev-title.png");
122 background-position: left top;
123 margin-top: -256px;
124 padding-right: 50px;
125 margin-left: 0px;
126 text-align: right;
127 width: 740px;
128}
129
130h3.author {
131 margin: 0em 0me 0em 0em;
132 padding: 0em 0em 0em 0em;
133 font-weight: normal;
134 font-size: 100%;
135 color: #333;
136 clear: both;
137}
138
139.author tt.email {
140 font-size: 66%;
141}
142
143.titlepage hr {
144 width: 0em;
145 clear: both;
146}
147
148.revhistory {
149 padding-top: 2em;
150 clear: both;
151}
152
153.toc,
154.list-of-tables,
155.list-of-examples,
156.list-of-figures {
157 padding: 1.33em 0em 2.5em 0em;
158 color: #00557D;
159}
160
161.toc p,
162.list-of-tables p,
163.list-of-figures p,
164.list-of-examples p {
165 padding: 0em 0em 0em 0em;
166 padding: 0em 0em 0.3em;
167 margin: 1.5em 0em 0em 0em;
168}
169
170.toc p b,
171.list-of-tables p b,
172.list-of-figures p b,
173.list-of-examples p b{
174 font-size: 100.0%;
175 font-weight: bold;
176}
177
178.toc dl,
179.list-of-tables dl,
180.list-of-figures dl,
181.list-of-examples dl {
182 margin: 0em 0em 0.5em 0em;
183 padding: 0em 0em 0em 0em;
184}
185
186.toc dt {
187 margin: 0em 0em 0em 0em;
188 padding: 0em 0em 0em 0em;
189}
190
191.toc dd {
192 margin: 0em 0em 0em 2.6em;
193 padding: 0em 0em 0em 0em;
194}
195
196div.glossary dl,
197div.variablelist dl {
198}
199
200.glossary dl dt,
201.variablelist dl dt,
202.variablelist dl dt span.term {
203 font-weight: normal;
204 width: 20em;
205 text-align: right;
206}
207
208.variablelist dl dt {
209 margin-top: 0.5em;
210}
211
212.glossary dl dd,
213.variablelist dl dd {
214 margin-top: -1em;
215 margin-left: 25.5em;
216}
217
218.glossary dd p,
219.variablelist dd p {
220 margin-top: 0em;
221 margin-bottom: 1em;
222}
223
224
225div.calloutlist table td {
226 padding: 0em 0em 0em 0em;
227 margin: 0em 0em 0em 0em;
228}
229
230div.calloutlist table td p {
231 margin-top: 0em;
232 margin-bottom: 1em;
233}
234
235div p.copyright {
236 text-align: left;
237}
238
239div.legalnotice p.legalnotice-title {
240 margin-bottom: 0em;
241}
242
243p {
244 line-height: 1.5em;
245 margin-top: 0em;
246
247}
248
249dl {
250 padding-top: 0em;
251}
252
253hr {
254 border: solid 1px;
255}
256
257
258.mediaobject,
259.mediaobjectco {
260 text-align: center;
261}
262
263img {
264 border: none;
265}
266
267ul {
268 padding: 0em 0em 0em 1.5em;
269}
270
271ul li {
272 padding: 0em 0em 0em 0em;
273}
274
275ul li p {
276 text-align: left;
277}
278
279table {
280 width :100%;
281}
282
283th {
284 padding: 0.25em;
285 text-align: left;
286 font-weight: normal;
287 vertical-align: top;
288}
289
290td {
291 padding: 0.25em;
292 vertical-align: top;
293}
294
295p a[id] {
296 margin: 0px;
297 padding: 0px;
298 display: inline;
299 background-image: none;
300}
301
302a {
303 text-decoration: underline;
304 color: #444;
305}
306
307pre {
308 overflow: auto;
309}
310
311a:hover {
312 text-decoration: underline;
313 /*font-weight: bold;*/
314}
315
316
317div.informalfigure,
318div.informalexample,
319div.informaltable,
320div.figure,
321div.table,
322div.example {
323 margin: 1em 0em;
324 padding: 1em;
325 page-break-inside: avoid;
326}
327
328
329div.informalfigure p.title b,
330div.informalexample p.title b,
331div.informaltable p.title b,
332div.figure p.title b,
333div.example p.title b,
334div.table p.title b{
335 padding-top: 0em;
336 margin-top: 0em;
337 font-size: 100%;
338 font-weight: normal;
339}
340
341.mediaobject .caption,
342.mediaobject .caption p {
343 text-align: center;
344 font-size: 80%;
345 padding-top: 0.5em;
346 padding-bottom: 0.5em;
347}
348
349.epigraph {
350 padding-left: 55%;
351 margin-bottom: 1em;
352}
353
354.epigraph p {
355 text-align: left;
356}
357
358.epigraph .quote {
359 font-style: italic;
360}
361.epigraph .attribution {
362 font-style: normal;
363 text-align: right;
364}
365
366span.application {
367 font-style: italic;
368}
369
370.programlisting {
371 font-family: monospace;
372 font-size: 80%;
373 white-space: pre;
374 margin: 1.33em 0em;
375 padding: 1.33em;
376}
377
378.tip,
379.warning,
380.caution,
381.note {
382 margin-top: 1em;
383 margin-bottom: 1em;
384
385}
386
387/* force full width of table within div */
388.tip table,
389.warning table,
390.caution table,
391.note table {
392 border: none;
393 width: 100%;
394}
395
396
397.tip table th,
398.warning table th,
399.caution table th,
400.note table th {
401 padding: 0.8em 0.0em 0.0em 0.0em;
402 margin : 0em 0em 0em 0em;
403}
404
405.tip p,
406.warning p,
407.caution p,
408.note p {
409 margin-top: 0.5em;
410 margin-bottom: 0.5em;
411 padding-right: 1em;
412 text-align: left;
413}
414
415.acronym {
416 text-transform: uppercase;
417}
418
419b.keycap,
420.keycap {
421 padding: 0.09em 0.3em;
422 margin: 0em;
423}
424
425.itemizedlist li {
426 clear: none;
427}
428
429.filename {
430 font-size: medium;
431 font-family: Courier, monospace;
432}
433
434
435div.navheader, div.heading{
436 position: absolute;
437 left: 0em;
438 top: 0em;
439 width: 100%;
440 background-color: #cdf;
441 width: 100%;
442}
443
444div.navfooter, div.footing{
445 position: fixed;
446 left: 0em;
447 bottom: 0em;
448 background-color: #eee;
449 width: 100%;
450}
451
452
453div.navheader td,
454div.navfooter td {
455 font-size: 66%;
456}
457
458div.navheader table th {
459 /*font-family: Georgia, Times, serif;*/
460 /*font-size: x-large;*/
461 font-size: 80%;
462}
463
464div.navheader table {
465 border-left: 0em;
466 border-right: 0em;
467 border-top: 0em;
468 width: 100%;
469}
470
471div.navfooter table {
472 border-left: 0em;
473 border-right: 0em;
474 border-bottom: 0em;
475 width: 100%;
476}
477
478div.navheader table td a,
479div.navfooter table td a {
480 color: #777;
481 text-decoration: none;
482}
483
484/* normal text in the footer */
485div.navfooter table td {
486 color: black;
487}
488
489div.navheader table td a:visited,
490div.navfooter table td a:visited {
491 color: #444;
492}
493
494
495/* links in header and footer */
496div.navheader table td a:hover,
497div.navfooter table td a:hover {
498 text-decoration: underline;
499 background-color: transparent;
500 color: #33a;
501}
502
503div.navheader hr,
504div.navfooter hr {
505 display: none;
506}
507
508
509.qandaset tr.question td p {
510 margin: 0em 0em 1em 0em;
511 padding: 0em 0em 0em 0em;
512}
513
514.qandaset tr.answer td p {
515 margin: 0em 0em 1em 0em;
516 padding: 0em 0em 0em 0em;
517}
518.answer td {
519 padding-bottom: 1.5em;
520}
521
522.emphasis {
523 font-weight: bold;
524}
525
526
527 /************* /
528 / decorations /
529/ *************/
530
531.titlepage {
532}
533
534.part .title {
535}
536
537.subtitle {
538 border: none;
539}
540
541/*
542h1 {
543 border: none;
544}
545
546h2 {
547 border-top: solid 0.2em;
548 border-bottom: solid 0.06em;
549}
550
551h3 {
552 border-top: 0em;
553 border-bottom: solid 0.06em;
554}
555
556h4 {
557 border: 0em;
558 border-bottom: solid 0.06em;
559}
560
561h5 {
562 border: 0em;
563}
564*/
565
566.programlisting {
567 border: solid 1px;
568}
569
570div.figure,
571div.table,
572div.informalfigure,
573div.informaltable,
574div.informalexample,
575div.example {
576 border: 1px solid;
577}
578
579
580
581.tip,
582.warning,
583.caution,
584.note {
585 border: 1px solid;
586}
587
588.tip table th,
589.warning table th,
590.caution table th,
591.note table th {
592 border-bottom: 1px solid;
593}
594
595.question td {
596 border-top: 1px solid black;
597}
598
599.answer {
600}
601
602
603b.keycap,
604.keycap {
605 border: 1px solid;
606}
607
608
609div.navheader, div.heading{
610 border-bottom: 1px solid;
611}
612
613
614div.navfooter, div.footing{
615 border-top: 1px solid;
616}
617
618 /********* /
619 / colors /
620/ *********/
621
622body {
623 color: #333;
624 background: white;
625}
626
627a {
628 background: transparent;
629}
630
631a:hover {
632 background-color: #dedede;
633}
634
635
636h1,
637h2,
638h3,
639h4,
640h5,
641h6,
642h7,
643h8 {
644 background-color: transparent;
645}
646
647hr {
648 border-color: #aaa;
649}
650
651
652.tip, .warning, .caution, .note {
653 border-color: #fff;
654}
655
656
657.tip table th,
658.warning table th,
659.caution table th,
660.note table th {
661 border-bottom-color: #fff;
662}
663
664
665.warning {
666 background-color: #f0f0f2;
667}
668
669.caution {
670 background-color: #f0f0f2;
671}
672
673.tip {
674 background-color: #f0f0f2;
675}
676
677.note {
678 background-color: #f0f0f2;
679}
680
681.glossary dl dt,
682.variablelist dl dt,
683.variablelist dl dt span.term {
684 color: #044;
685}
686
687div.figure,
688div.table,
689div.example,
690div.informalfigure,
691div.informaltable,
692div.informalexample {
693 border-color: #aaa;
694}
695
696pre.programlisting {
697 color: black;
698 background-color: #fff;
699 border-color: #aaa;
700 border-width: 2px;
701}
702
703.guimenu,
704.guilabel,
705.guimenuitem {
706 background-color: #eee;
707}
708
709
710b.keycap,
711.keycap {
712 background-color: #eee;
713 border-color: #999;
714}
715
716
717div.navheader {
718 border-color: black;
719}
720
721
722div.navfooter {
723 border-color: black;
724}
725
726
727 /*********** /
728 / graphics /
729/ ***********/
730
731/*
732body {
733 background-image: url("images/body_bg.jpg");
734 background-attachment: fixed;
735}
736
737.navheader,
738.note,
739.tip {
740 background-image: url("images/note_bg.jpg");
741 background-attachment: fixed;
742}
743
744.warning,
745.caution {
746 background-image: url("images/warning_bg.jpg");
747 background-attachment: fixed;
748}
749
750.figure,
751.informalfigure,
752.example,
753.informalexample,
754.table,
755.informaltable {
756 background-image: url("images/figure_bg.jpg");
757 background-attachment: fixed;
758}
759
760*/
761h1,
762h2,
763h3,
764h4,
765h5,
766h6,
767h7{
768}
769
770/*
771Example of how to stick an image as part of the title.
772
773div.article .titlepage .title
774{
775 background-image: url("figures/white-on-black.png");
776 background-position: center;
777 background-repeat: repeat-x;
778}
779*/
780
781div.preface .titlepage .title,
782div.colophon .title,
783div.chapter .titlepage .title,
784div.article .titlepage .title
785{
786}
787
788div.section div.section .titlepage .title,
789div.sect2 .titlepage .title {
790 background: none;
791}
792
793
794h1.title {
795 background-color: transparent;
796 background-image: url("figures/yocto-project-bw.png");
797 background-repeat: no-repeat;
798 height: 256px;
799 text-indent: -9000px;
800 overflow:hidden;
801}
802
803h2.subtitle {
804 background-color: transparent;
805 text-indent: -9000px;
806 overflow:hidden;
807 width: 0px;
808 display: none;
809}
810
811 /*************************************** /
812 / pippin.gimp.org specific alterations /
813/ ***************************************/
814
815/*
816div.heading, div.navheader {
817 color: #777;
818 font-size: 80%;
819 padding: 0;
820 margin: 0;
821 text-align: left;
822 position: absolute;
823 top: 0px;
824 left: 0px;
825 width: 100%;
826 height: 50px;
827 background: url('/gfx/heading_bg.png') transparent;
828 background-repeat: repeat-x;
829 background-attachment: fixed;
830 border: none;
831}
832
833div.heading a {
834 color: #444;
835}
836
837div.footing, div.navfooter {
838 border: none;
839 color: #ddd;
840 font-size: 80%;
841 text-align:right;
842
843 width: 100%;
844 padding-top: 10px;
845 position: absolute;
846 bottom: 0px;
847 left: 0px;
848
849 background: url('/gfx/footing_bg.png') transparent;
850}
851*/
852
853
854
855 /****************** /
856 / nasty ie tweaks /
857/ ******************/
858
859/*
860div.heading, div.navheader {
861 width:expression(document.body.clientWidth + "px");
862}
863
864div.footing, div.navfooter {
865 width:expression(document.body.clientWidth + "px");
866 margin-left:expression("-5em");
867}
868body {
869 padding:expression("4em 5em 0em 5em");
870}
871*/
872
873 /**************************************** /
874 / mozilla vendor specific css extensions /
875/ ****************************************/
876/*
877div.navfooter, div.footing{
878 -moz-opacity: 0.8em;
879}
880
881div.figure,
882div.table,
883div.informalfigure,
884div.informaltable,
885div.informalexample,
886div.example,
887.tip,
888.warning,
889.caution,
890.note {
891 -moz-border-radius: 0.5em;
892}
893
894b.keycap,
895.keycap {
896 -moz-border-radius: 0.3em;
897}
898*/
899
900table tr td table tr td {
901 display: none;
902}
903
904
905hr {
906 display: none;
907}
908
909table {
910 border: 0em;
911}
912
913 .photo {
914 float: right;
915 margin-left: 1.5em;
916 margin-bottom: 1.5em;
917 margin-top: 0em;
918 max-width: 17em;
919 border: 1px solid gray;
920 padding: 3px;
921 background: white;
922}
923 .seperator {
924 padding-top: 2em;
925 clear: both;
926 }
927
928 #validators {
929 margin-top: 5em;
930 text-align: right;
931 color: #777;
932 }
933 @media print {
934 body {
935 font-size: 8pt;
936 }
937 .noprint {
938 display: none;
939 }
940 }
941
942
943.tip,
944.note {
945 background: #f0f0f2;
946 color: #333;
947 padding: 20px;
948 margin: 20px;
949}
950
951.tip h3,
952.note h3 {
953 padding: 0em;
954 margin: 0em;
955 font-size: 2em;
956 font-weight: bold;
957 color: #333;
958}
959
960.tip a,
961.note a {
962 color: #333;
963 text-decoration: underline;
964}
965
966.footnote {
967 font-size: small;
968 color: #333;
969}
970
971/* Changes the announcement text */
972.tip h3,
973.warning h3,
974.caution h3,
975.note h3 {
976 font-size:large;
977 color: #00557D;
978}
diff --git a/documentation/kernel-dev/kernel-dev.xml b/documentation/kernel-dev/kernel-dev.xml
new file mode 100644
index 0000000000..01395e5357
--- /dev/null
+++ b/documentation/kernel-dev/kernel-dev.xml
@@ -0,0 +1,100 @@
1<!DOCTYPE book 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<book id='kernel-dev' lang='en'
6 xmlns:xi="http://www.w3.org/2003/XInclude"
7 xmlns="http://docbook.org/ns/docbook"
8 >
9 <bookinfo>
10
11 <mediaobject>
12 <imageobject>
13 <imagedata fileref='figures/kernel-dev-title.png'
14 format='SVG'
15 align='left' scalefit='1' width='100%'/>
16 </imageobject>
17 </mediaobject>
18
19 <title>
20 Yocto Project Linux Kernel Development Manual
21 </title>
22
23 <authorgroup>
24 <author>
25 <firstname>Darren</firstname> <surname>Hart</surname>
26 <affiliation>
27 <orgname>Intel Corporation</orgname>
28 </affiliation>
29 <email>darren.hart@intel.com</email>
30 </author>
31 </authorgroup>
32
33 <revhistory>
34 <revision>
35 <revnumber>1.4</revnumber>
36 <date>April 2013</date>
37 <revremark>Released with the Yocto Project 1.4 Release.</revremark>
38 </revision>
39 <revision>
40 <revnumber>1.5</revnumber>
41 <date>October 2013</date>
42 <revremark>Released with the Yocto Project 1.5 Release.</revremark>
43 </revision>
44 <revision>
45 <revnumber>1.5.1</revnumber>
46 <date>January 2014</date>
47 <revremark>Released with the Yocto Project 1.5.1 Release.</revremark>
48 </revision>
49 <revision>
50 <revnumber>1.6</revnumber>
51 <date>April 2014</date>
52 <revremark>Released with the Yocto Project 1.6 Release.</revremark>
53 </revision>
54 </revhistory>
55
56 <copyright>
57 <year>&COPYRIGHT_YEAR;</year>
58 <holder>Linux Foundation</holder>
59 </copyright>
60
61 <legalnotice>
62 <para>
63 Permission is granted to copy, distribute and/or modify this document under
64 the terms of the <ulink type="http" url="http://creativecommons.org/licenses/by-sa/2.0/uk/">Creative Commons Attribution-Share Alike 2.0 UK: England &amp; Wales</ulink> as published by Creative Commons.
65 </para>
66 <note>
67 For the latest version of this manual associated with this
68 Yocto Project release, see the
69 <ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;'>Yocto Project Linux Kernel Development Manual</ulink>
70 from the Yocto Project website.
71 </note>
72 </legalnotice>
73
74 </bookinfo>
75
76 <xi:include href="kernel-dev-intro.xml"/>
77
78 <xi:include href="kernel-dev-common.xml"/>
79
80 <xi:include href="kernel-dev-advanced.xml"/>
81
82 <xi:include href="kernel-dev-concepts-appx.xml"/>
83
84 <xi:include href="kernel-dev-maint-appx.xml"/>
85
86<!--
87 <xi:include href="kernel-dev-examples.xml"/>
88-->
89
90 <xi:include href="kernel-dev-faq.xml"/>
91
92<!-- <index id='index'>
93 <title>Index</title>
94 </index>
95-->
96
97</book>
98<!--
99vim: expandtab tw=80 ts=4
100-->
diff --git a/documentation/mega-manual/figures/adt-title.png b/documentation/mega-manual/figures/adt-title.png
new file mode 100644
index 0000000000..6e71e41f1a
--- /dev/null
+++ b/documentation/mega-manual/figures/adt-title.png
Binary files differ
diff --git a/documentation/mega-manual/figures/analysis-for-package-splitting.png b/documentation/mega-manual/figures/analysis-for-package-splitting.png
new file mode 100644
index 0000000000..04f2794ea9
--- /dev/null
+++ b/documentation/mega-manual/figures/analysis-for-package-splitting.png
Binary files differ
diff --git a/documentation/mega-manual/figures/app-dev-flow.png b/documentation/mega-manual/figures/app-dev-flow.png
new file mode 100644
index 0000000000..4927b93d67
--- /dev/null
+++ b/documentation/mega-manual/figures/app-dev-flow.png
Binary files differ
diff --git a/documentation/mega-manual/figures/bsp-dev-flow.png b/documentation/mega-manual/figures/bsp-dev-flow.png
new file mode 100644
index 0000000000..540b0abb9f
--- /dev/null
+++ b/documentation/mega-manual/figures/bsp-dev-flow.png
Binary files differ
diff --git a/documentation/mega-manual/figures/bsp-title.png b/documentation/mega-manual/figures/bsp-title.png
new file mode 100644
index 0000000000..f624dd4f94
--- /dev/null
+++ b/documentation/mega-manual/figures/bsp-title.png
Binary files differ
diff --git a/documentation/mega-manual/figures/buildhistory-web.png b/documentation/mega-manual/figures/buildhistory-web.png
new file mode 100644
index 0000000000..f6db86c977
--- /dev/null
+++ b/documentation/mega-manual/figures/buildhistory-web.png
Binary files differ
diff --git a/documentation/mega-manual/figures/buildhistory.png b/documentation/mega-manual/figures/buildhistory.png
new file mode 100644
index 0000000000..edf98d95cf
--- /dev/null
+++ b/documentation/mega-manual/figures/buildhistory.png
Binary files differ
diff --git a/documentation/mega-manual/figures/building-an-image.png b/documentation/mega-manual/figures/building-an-image.png
new file mode 100755
index 0000000000..1fbea5ab00
--- /dev/null
+++ b/documentation/mega-manual/figures/building-an-image.png
Binary files differ
diff --git a/documentation/mega-manual/figures/configuration-compile-autoreconf.png b/documentation/mega-manual/figures/configuration-compile-autoreconf.png
new file mode 100644
index 0000000000..a07464f04c
--- /dev/null
+++ b/documentation/mega-manual/figures/configuration-compile-autoreconf.png
Binary files differ
diff --git a/documentation/mega-manual/figures/cross-development-toolchains.png b/documentation/mega-manual/figures/cross-development-toolchains.png
new file mode 100644
index 0000000000..d36670a198
--- /dev/null
+++ b/documentation/mega-manual/figures/cross-development-toolchains.png
Binary files differ
diff --git a/documentation/mega-manual/figures/dev-title.png b/documentation/mega-manual/figures/dev-title.png
new file mode 100644
index 0000000000..d3cac4a7e5
--- /dev/null
+++ b/documentation/mega-manual/figures/dev-title.png
Binary files differ
diff --git a/documentation/mega-manual/figures/git-workflow.png b/documentation/mega-manual/figures/git-workflow.png
new file mode 100644
index 0000000000..e401330a12
--- /dev/null
+++ b/documentation/mega-manual/figures/git-workflow.png
Binary files differ
diff --git a/documentation/mega-manual/figures/image-generation.png b/documentation/mega-manual/figures/image-generation.png
new file mode 100644
index 0000000000..ab962580c3
--- /dev/null
+++ b/documentation/mega-manual/figures/image-generation.png
Binary files differ
diff --git a/documentation/mega-manual/figures/images.png b/documentation/mega-manual/figures/images.png
new file mode 100644
index 0000000000..d99eac1fbf
--- /dev/null
+++ b/documentation/mega-manual/figures/images.png
Binary files differ
diff --git a/documentation/mega-manual/figures/index-downloads.png b/documentation/mega-manual/figures/index-downloads.png
new file mode 100644
index 0000000000..c907997db2
--- /dev/null
+++ b/documentation/mega-manual/figures/index-downloads.png
Binary files differ
diff --git a/documentation/mega-manual/figures/kernel-architecture-overview.png b/documentation/mega-manual/figures/kernel-architecture-overview.png
new file mode 100755
index 0000000000..2aad172db3
--- /dev/null
+++ b/documentation/mega-manual/figures/kernel-architecture-overview.png
Binary files differ
diff --git a/documentation/mega-manual/figures/kernel-dev-flow.png b/documentation/mega-manual/figures/kernel-dev-flow.png
new file mode 100644
index 0000000000..009105d122
--- /dev/null
+++ b/documentation/mega-manual/figures/kernel-dev-flow.png
Binary files differ
diff --git a/documentation/mega-manual/figures/kernel-dev-title.png b/documentation/mega-manual/figures/kernel-dev-title.png
new file mode 100644
index 0000000000..7a8dd54372
--- /dev/null
+++ b/documentation/mega-manual/figures/kernel-dev-title.png
Binary files differ
diff --git a/documentation/mega-manual/figures/kernel-overview-1.png b/documentation/mega-manual/figures/kernel-overview-1.png
new file mode 100644
index 0000000000..116c0b9bd4
--- /dev/null
+++ b/documentation/mega-manual/figures/kernel-overview-1.png
Binary files differ
diff --git a/documentation/mega-manual/figures/kernel-overview-2-generic.png b/documentation/mega-manual/figures/kernel-overview-2-generic.png
new file mode 100644
index 0000000000..889ff1bf0d
--- /dev/null
+++ b/documentation/mega-manual/figures/kernel-overview-2-generic.png
Binary files differ
diff --git a/documentation/mega-manual/figures/kernel-title.png b/documentation/mega-manual/figures/kernel-title.png
new file mode 100644
index 0000000000..59d86c00dc
--- /dev/null
+++ b/documentation/mega-manual/figures/kernel-title.png
Binary files differ
diff --git a/documentation/mega-manual/figures/kernelshark-all.png b/documentation/mega-manual/figures/kernelshark-all.png
new file mode 100644
index 0000000000..99b40bafe5
--- /dev/null
+++ b/documentation/mega-manual/figures/kernelshark-all.png
Binary files differ
diff --git a/documentation/mega-manual/figures/kernelshark-choose-events.png b/documentation/mega-manual/figures/kernelshark-choose-events.png
new file mode 100644
index 0000000000..e8dd62a571
--- /dev/null
+++ b/documentation/mega-manual/figures/kernelshark-choose-events.png
Binary files differ
diff --git a/documentation/mega-manual/figures/kernelshark-i915-display.png b/documentation/mega-manual/figures/kernelshark-i915-display.png
new file mode 100644
index 0000000000..bb0edfb7fd
--- /dev/null
+++ b/documentation/mega-manual/figures/kernelshark-i915-display.png
Binary files differ
diff --git a/documentation/mega-manual/figures/kernelshark-output-display.png b/documentation/mega-manual/figures/kernelshark-output-display.png
new file mode 100644
index 0000000000..ae2d0e5730
--- /dev/null
+++ b/documentation/mega-manual/figures/kernelshark-output-display.png
Binary files differ
diff --git a/documentation/mega-manual/figures/layer-input.png b/documentation/mega-manual/figures/layer-input.png
new file mode 100644
index 0000000000..0a4f2e74f3
--- /dev/null
+++ b/documentation/mega-manual/figures/layer-input.png
Binary files differ
diff --git a/documentation/mega-manual/figures/lttngmain0.png b/documentation/mega-manual/figures/lttngmain0.png
new file mode 100644
index 0000000000..5f60113cc3
--- /dev/null
+++ b/documentation/mega-manual/figures/lttngmain0.png
Binary files differ
diff --git a/documentation/mega-manual/figures/oprofileui-busybox.png b/documentation/mega-manual/figures/oprofileui-busybox.png
new file mode 100644
index 0000000000..a8275c65d2
--- /dev/null
+++ b/documentation/mega-manual/figures/oprofileui-busybox.png
Binary files differ
diff --git a/documentation/mega-manual/figures/oprofileui-copy-to-user.png b/documentation/mega-manual/figures/oprofileui-copy-to-user.png
new file mode 100644
index 0000000000..deb6470204
--- /dev/null
+++ b/documentation/mega-manual/figures/oprofileui-copy-to-user.png
Binary files differ
diff --git a/documentation/mega-manual/figures/oprofileui-downloading.png b/documentation/mega-manual/figures/oprofileui-downloading.png
new file mode 100644
index 0000000000..57742d6723
--- /dev/null
+++ b/documentation/mega-manual/figures/oprofileui-downloading.png
Binary files differ
diff --git a/documentation/mega-manual/figures/oprofileui-processes.png b/documentation/mega-manual/figures/oprofileui-processes.png
new file mode 100644
index 0000000000..ae547028f4
--- /dev/null
+++ b/documentation/mega-manual/figures/oprofileui-processes.png
Binary files differ
diff --git a/documentation/mega-manual/figures/package-feeds.png b/documentation/mega-manual/figures/package-feeds.png
new file mode 100644
index 0000000000..4bc311f3d6
--- /dev/null
+++ b/documentation/mega-manual/figures/package-feeds.png
Binary files differ
diff --git a/documentation/mega-manual/figures/patching.png b/documentation/mega-manual/figures/patching.png
new file mode 100644
index 0000000000..8ecd018502
--- /dev/null
+++ b/documentation/mega-manual/figures/patching.png
Binary files differ
diff --git a/documentation/mega-manual/figures/perf-probe-do_fork-profile.png b/documentation/mega-manual/figures/perf-probe-do_fork-profile.png
new file mode 100644
index 0000000000..1a1070deb8
--- /dev/null
+++ b/documentation/mega-manual/figures/perf-probe-do_fork-profile.png
Binary files differ
diff --git a/documentation/mega-manual/figures/perf-report-cycles-u.png b/documentation/mega-manual/figures/perf-report-cycles-u.png
new file mode 100644
index 0000000000..68ec6af80b
--- /dev/null
+++ b/documentation/mega-manual/figures/perf-report-cycles-u.png
Binary files differ
diff --git a/documentation/mega-manual/figures/perf-systemwide-libc.png b/documentation/mega-manual/figures/perf-systemwide-libc.png
new file mode 100644
index 0000000000..2b72869c77
--- /dev/null
+++ b/documentation/mega-manual/figures/perf-systemwide-libc.png
Binary files differ
diff --git a/documentation/mega-manual/figures/perf-systemwide.png b/documentation/mega-manual/figures/perf-systemwide.png
new file mode 100644
index 0000000000..12ce2444ae
--- /dev/null
+++ b/documentation/mega-manual/figures/perf-systemwide.png
Binary files differ
diff --git a/documentation/mega-manual/figures/perf-wget-busybox-annotate-menu.png b/documentation/mega-manual/figures/perf-wget-busybox-annotate-menu.png
new file mode 100644
index 0000000000..ceb34eaead
--- /dev/null
+++ b/documentation/mega-manual/figures/perf-wget-busybox-annotate-menu.png
Binary files differ
diff --git a/documentation/mega-manual/figures/perf-wget-busybox-annotate-udhcpc.png b/documentation/mega-manual/figures/perf-wget-busybox-annotate-udhcpc.png
new file mode 100644
index 0000000000..3581e9daa6
--- /dev/null
+++ b/documentation/mega-manual/figures/perf-wget-busybox-annotate-udhcpc.png
Binary files differ
diff --git a/documentation/mega-manual/figures/perf-wget-busybox-debuginfo.png b/documentation/mega-manual/figures/perf-wget-busybox-debuginfo.png
new file mode 100644
index 0000000000..c317b49a4e
--- /dev/null
+++ b/documentation/mega-manual/figures/perf-wget-busybox-debuginfo.png
Binary files differ
diff --git a/documentation/mega-manual/figures/perf-wget-busybox-dso-zoom-menu.png b/documentation/mega-manual/figures/perf-wget-busybox-dso-zoom-menu.png
new file mode 100644
index 0000000000..1913c867d0
--- /dev/null
+++ b/documentation/mega-manual/figures/perf-wget-busybox-dso-zoom-menu.png
Binary files differ
diff --git a/documentation/mega-manual/figures/perf-wget-busybox-dso-zoom.png b/documentation/mega-manual/figures/perf-wget-busybox-dso-zoom.png
new file mode 100644
index 0000000000..a1962c437a
--- /dev/null
+++ b/documentation/mega-manual/figures/perf-wget-busybox-dso-zoom.png
Binary files differ
diff --git a/documentation/mega-manual/figures/perf-wget-busybox-expanded-stripped.png b/documentation/mega-manual/figures/perf-wget-busybox-expanded-stripped.png
new file mode 100644
index 0000000000..b642d06c8b
--- /dev/null
+++ b/documentation/mega-manual/figures/perf-wget-busybox-expanded-stripped.png
Binary files differ
diff --git a/documentation/mega-manual/figures/perf-wget-flat-stripped.png b/documentation/mega-manual/figures/perf-wget-flat-stripped.png
new file mode 100644
index 0000000000..c8f395ab53
--- /dev/null
+++ b/documentation/mega-manual/figures/perf-wget-flat-stripped.png
Binary files differ
diff --git a/documentation/mega-manual/figures/perf-wget-g-copy-from-user-expanded-stripped.png b/documentation/mega-manual/figures/perf-wget-g-copy-from-user-expanded-stripped.png
new file mode 100644
index 0000000000..bb7c764ce0
--- /dev/null
+++ b/documentation/mega-manual/figures/perf-wget-g-copy-from-user-expanded-stripped.png
Binary files differ
diff --git a/documentation/mega-manual/figures/perf-wget-g-copy-to-user-expanded-debuginfo.png b/documentation/mega-manual/figures/perf-wget-g-copy-to-user-expanded-debuginfo.png
new file mode 100644
index 0000000000..a799af5127
--- /dev/null
+++ b/documentation/mega-manual/figures/perf-wget-g-copy-to-user-expanded-debuginfo.png
Binary files differ
diff --git a/documentation/mega-manual/figures/perf-wget-g-copy-to-user-expanded-stripped-unresolved-hidden.png b/documentation/mega-manual/figures/perf-wget-g-copy-to-user-expanded-stripped-unresolved-hidden.png
new file mode 100644
index 0000000000..e91808ae40
--- /dev/null
+++ b/documentation/mega-manual/figures/perf-wget-g-copy-to-user-expanded-stripped-unresolved-hidden.png
Binary files differ
diff --git a/documentation/mega-manual/figures/perf-wget-g-copy-to-user-expanded-stripped.png b/documentation/mega-manual/figures/perf-wget-g-copy-to-user-expanded-stripped.png
new file mode 100644
index 0000000000..812302d0a8
--- /dev/null
+++ b/documentation/mega-manual/figures/perf-wget-g-copy-to-user-expanded-stripped.png
Binary files differ
diff --git a/documentation/mega-manual/figures/poky-title.png b/documentation/mega-manual/figures/poky-title.png
new file mode 100644
index 0000000000..2893d84620
--- /dev/null
+++ b/documentation/mega-manual/figures/poky-title.png
Binary files differ
diff --git a/documentation/mega-manual/figures/profile-title.png b/documentation/mega-manual/figures/profile-title.png
new file mode 100644
index 0000000000..ce5c682b58
--- /dev/null
+++ b/documentation/mega-manual/figures/profile-title.png
Binary files differ
diff --git a/documentation/mega-manual/figures/pybootchartgui-linux-yocto.png b/documentation/mega-manual/figures/pybootchartgui-linux-yocto.png
new file mode 100644
index 0000000000..2b6bfdacf9
--- /dev/null
+++ b/documentation/mega-manual/figures/pybootchartgui-linux-yocto.png
Binary files differ
diff --git a/documentation/mega-manual/figures/pychart-linux-yocto-rpm-nostrip.png b/documentation/mega-manual/figures/pychart-linux-yocto-rpm-nostrip.png
new file mode 100644
index 0000000000..444675c543
--- /dev/null
+++ b/documentation/mega-manual/figures/pychart-linux-yocto-rpm-nostrip.png
Binary files differ
diff --git a/documentation/mega-manual/figures/pychart-linux-yocto-rpm.png b/documentation/mega-manual/figures/pychart-linux-yocto-rpm.png
new file mode 100644
index 0000000000..8ee35352d8
--- /dev/null
+++ b/documentation/mega-manual/figures/pychart-linux-yocto-rpm.png
Binary files differ
diff --git a/documentation/mega-manual/figures/recipe-workflow.png b/documentation/mega-manual/figures/recipe-workflow.png
new file mode 100644
index 0000000000..c0e960b13b
--- /dev/null
+++ b/documentation/mega-manual/figures/recipe-workflow.png
Binary files differ
diff --git a/documentation/mega-manual/figures/sched-wakeup-profile.png b/documentation/mega-manual/figures/sched-wakeup-profile.png
new file mode 100644
index 0000000000..2f25811889
--- /dev/null
+++ b/documentation/mega-manual/figures/sched-wakeup-profile.png
Binary files differ
diff --git a/documentation/mega-manual/figures/sdk-generation.png b/documentation/mega-manual/figures/sdk-generation.png
new file mode 100644
index 0000000000..c37e2748ca
--- /dev/null
+++ b/documentation/mega-manual/figures/sdk-generation.png
Binary files differ
diff --git a/documentation/mega-manual/figures/sdk.png b/documentation/mega-manual/figures/sdk.png
new file mode 100644
index 0000000000..a539cc52f0
--- /dev/null
+++ b/documentation/mega-manual/figures/sdk.png
Binary files differ
diff --git a/documentation/mega-manual/figures/source-fetching.png b/documentation/mega-manual/figures/source-fetching.png
new file mode 100644
index 0000000000..26aefb50c2
--- /dev/null
+++ b/documentation/mega-manual/figures/source-fetching.png
Binary files differ
diff --git a/documentation/mega-manual/figures/source-input.png b/documentation/mega-manual/figures/source-input.png
new file mode 100644
index 0000000000..f7515058ef
--- /dev/null
+++ b/documentation/mega-manual/figures/source-input.png
Binary files differ
diff --git a/documentation/mega-manual/figures/source-repos.png b/documentation/mega-manual/figures/source-repos.png
new file mode 100644
index 0000000000..65c5f29a43
--- /dev/null
+++ b/documentation/mega-manual/figures/source-repos.png
Binary files differ
diff --git a/documentation/mega-manual/figures/sysprof-callers.png b/documentation/mega-manual/figures/sysprof-callers.png
new file mode 100644
index 0000000000..640c8d9140
--- /dev/null
+++ b/documentation/mega-manual/figures/sysprof-callers.png
Binary files differ
diff --git a/documentation/mega-manual/figures/sysprof-copy-from-user.png b/documentation/mega-manual/figures/sysprof-copy-from-user.png
new file mode 100644
index 0000000000..8d31427824
--- /dev/null
+++ b/documentation/mega-manual/figures/sysprof-copy-from-user.png
Binary files differ
diff --git a/documentation/mega-manual/figures/sysprof-copy-to-user.png b/documentation/mega-manual/figures/sysprof-copy-to-user.png
new file mode 100644
index 0000000000..7a5bab7991
--- /dev/null
+++ b/documentation/mega-manual/figures/sysprof-copy-to-user.png
Binary files differ
diff --git a/documentation/mega-manual/figures/user-configuration.png b/documentation/mega-manual/figures/user-configuration.png
new file mode 100644
index 0000000000..f2b3f8e7fe
--- /dev/null
+++ b/documentation/mega-manual/figures/user-configuration.png
Binary files differ
diff --git a/documentation/mega-manual/figures/using-a-pre-built-image.png b/documentation/mega-manual/figures/using-a-pre-built-image.png
new file mode 100644
index 0000000000..b03130d123
--- /dev/null
+++ b/documentation/mega-manual/figures/using-a-pre-built-image.png
Binary files differ
diff --git a/documentation/mega-manual/figures/yocto-environment-ref.png b/documentation/mega-manual/figures/yocto-environment-ref.png
new file mode 100644
index 0000000000..650c6c8030
--- /dev/null
+++ b/documentation/mega-manual/figures/yocto-environment-ref.png
Binary files differ
diff --git a/documentation/mega-manual/figures/yocto-environment.png b/documentation/mega-manual/figures/yocto-environment.png
new file mode 100644
index 0000000000..82b7a55a35
--- /dev/null
+++ b/documentation/mega-manual/figures/yocto-environment.png
Binary files differ
diff --git a/documentation/mega-manual/figures/yocto-project-transp.png b/documentation/mega-manual/figures/yocto-project-transp.png
new file mode 100755
index 0000000000..31d2b147fd
--- /dev/null
+++ b/documentation/mega-manual/figures/yocto-project-transp.png
Binary files differ
diff --git a/documentation/mega-manual/figures/yp-download.png b/documentation/mega-manual/figures/yp-download.png
new file mode 100644
index 0000000000..7f1e5ca118
--- /dev/null
+++ b/documentation/mega-manual/figures/yp-download.png
Binary files differ
diff --git a/documentation/mega-manual/mega-manual-customization.xsl b/documentation/mega-manual/mega-manual-customization.xsl
new file mode 100644
index 0000000000..3be182d6c2
--- /dev/null
+++ b/documentation/mega-manual/mega-manual-customization.xsl
@@ -0,0 +1,8 @@
1<?xml version='1.0'?>
2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
3
4 <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl" />
5
6 <xsl:param name="generate.toc" select="'chapter toc'"></xsl:param>
7
8</xsl:stylesheet>
diff --git a/documentation/mega-manual/mega-manual.xml b/documentation/mega-manual/mega-manual.xml
new file mode 100644
index 0000000000..01af789aed
--- /dev/null
+++ b/documentation/mega-manual/mega-manual.xml
@@ -0,0 +1,53 @@
1<!DOCTYPE book 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
6<book id='mega-manual' lang='en'
7 xmlns:xi="http://www.w3.org/2003/XInclude"
8 xmlns="http://docbook.org/ns/docbook"
9 >
10
11 <xi:include
12 xmlns:xi="http://www.w3.org/2003/XInclude" href="../yocto-project-qs/yocto-project-qs.xml"/>
13
14<para><imagedata fileref="figures/dev-title.png" width="100%" align="left" scalefit="1" /></para>
15
16 <xi:include
17 xmlns:xi="http://www.w3.org/2003/XInclude" href="../dev-manual/dev-manual.xml"/>
18
19<para><imagedata fileref="figures/adt-title.png" width="100%" align="left" scalefit="1" /></para>
20
21 <xi:include
22 xmlns:xi="http://www.w3.org/2003/XInclude" href="../adt-manual/adt-manual.xml"/>
23
24<para><imagedata fileref="figures/bsp-title.png" width="100%" align="left" scalefit="1" /></para>
25
26 <xi:include
27 xmlns:xi="http://www.w3.org/2003/XInclude" href="../bsp-guide/bsp-guide.xml"/>
28
29<para><imagedata fileref="figures/kernel-dev-title.png" width="100%" align="left" scalefit="1" /></para>
30
31 <xi:include
32 xmlns:xi="http://www.w3.org/2003/XInclude" href="../kernel-dev/kernel-dev.xml"/>
33
34<para><imagedata fileref="figures/profile-title.png" width="100%" align="left" scalefit="1" /></para>
35
36 <xi:include
37 xmlns:xi="http://www.w3.org/2003/XInclude" href="../profile-manual/profile-manual.xml"/>
38
39<para><imagedata fileref="figures/poky-title.png" width="100%" align="left" scalefit="1" /></para>
40
41 <xi:include
42 xmlns:xi="http://www.w3.org/2003/XInclude" href="../ref-manual/ref-manual.xml"/>
43
44<!-- <index id='index'>
45 <title>Index</title>
46 </index>
47-->
48
49</book>
50
51<!--
52vim: expandtab tw=80 ts=4
53-->
diff --git a/documentation/mega-manual/mega-style.css b/documentation/mega-manual/mega-style.css
new file mode 100644
index 0000000000..a97d691836
--- /dev/null
+++ b/documentation/mega-manual/mega-style.css
@@ -0,0 +1,979 @@
1/*
2 Generic XHTML / DocBook XHTML CSS Stylesheet.
3
4 Browser wrangling and typographic design by
5 Oyvind Kolas / pippin@gimp.org
6
7 Customised for Poky by
8 Matthew Allum / mallum@o-hand.com
9
10 Thanks to:
11 Liam R. E. Quin
12 William Skaggs
13 Jakub Steiner
14
15 Structure
16 ---------
17
18 The stylesheet is divided into the following sections:
19
20 Positioning
21 Margins, paddings, width, font-size, clearing.
22 Decorations
23 Borders, style
24 Colors
25 Colors
26 Graphics
27 Graphical backgrounds
28 Nasty IE tweaks
29 Workarounds needed to make it work in internet explorer,
30 currently makes the stylesheet non validating, but up until
31 this point it is validating.
32 Mozilla extensions
33 Transparency for footer
34 Rounded corners on boxes
35
36*/
37
38
39 /*************** /
40 / Positioning /
41/ ***************/
42
43body {
44 font-family: Verdana, Sans, sans-serif;
45
46 min-width: 640px;
47 width: 80%;
48 margin: 0em auto;
49 padding: 2em 5em 5em 5em;
50 color: #333;
51}
52
53h1,h2,h3,h4,h5,h6,h7 {
54 font-family: Arial, Sans;
55 color: #00557D;
56 clear: both;
57}
58
59h1 {
60 font-size: 2em;
61 text-align: left;
62 padding: 0em 0em 0em 0em;
63 margin: 2em 0em 0em 0em;
64}
65
66h2.subtitle {
67 margin: 0.10em 0em 3.0em 0em;
68 padding: 0em 0em 0em 0em;
69 font-size: 1.8em;
70 padding-left: 20%;
71 font-weight: normal;
72 font-style: italic;
73}
74
75h2 {
76 margin: 2em 0em 0.66em 0em;
77 padding: 0.5em 0em 0em 0em;
78 font-size: 1.5em;
79 font-weight: bold;
80}
81
82h3.subtitle {
83 margin: 0em 0em 1em 0em;
84 padding: 0em 0em 0em 0em;
85 font-size: 142.14%;
86 text-align: right;
87}
88
89h3 {
90 margin: 1em 0em 0.5em 0em;
91 padding: 1em 0em 0em 0em;
92 font-size: 140%;
93 font-weight: bold;
94}
95
96h4 {
97 margin: 1em 0em 0.5em 0em;
98 padding: 1em 0em 0em 0em;
99 font-size: 120%;
100 font-weight: bold;
101}
102
103h5 {
104 margin: 1em 0em 0.5em 0em;
105 padding: 1em 0em 0em 0em;
106 font-size: 110%;
107 font-weight: bold;
108}
109
110h6 {
111 margin: 1em 0em 0em 0em;
112 padding: 1em 0em 0em 0em;
113 font-size: 110%;
114 font-weight: bold;
115}
116
117.authorgroup {
118 background-color: transparent;
119 background-repeat: no-repeat;
120 padding-top: 256px;
121 background-image: url("../figures/yocto-project-bw.png");
122 background-position: top;
123 margin-top: -256px;
124 padding-right: 50px;
125 margin-left: 50px;
126 text-align: center;
127 width: 600px;
128}
129
130h3.author {
131 margin: 0em 0em 0em 0em;
132 padding: 0em 0em 0em 0em;
133 font-weight: normal;
134 font-size: 100%;
135 color: #333;
136 clear: both;
137}
138
139.author tt.email {
140 font-size: 66%;
141}
142
143.titlepage hr {
144 width: 0em;
145 clear: both;
146}
147
148.revhistory {
149 padding-top: 2em;
150 clear: both;
151}
152
153.toc,
154.list-of-tables,
155.list-of-examples,
156.list-of-figures {
157 padding: 1.33em 0em 2.5em 0em;
158 color: #00557D;
159}
160
161.toc p,
162.list-of-tables p,
163.list-of-figures p,
164.list-of-examples p {
165 padding: 0em 0em 0em 0em;
166 padding: 0em 0em 0.3em;
167 margin: 1.5em 0em 0em 0em;
168}
169
170.toc p b,
171.list-of-tables p b,
172.list-of-figures p b,
173.list-of-examples p b{
174 font-size: 100.0%;
175 font-weight: bold;
176}
177
178.toc dl,
179.list-of-tables dl,
180.list-of-figures dl,
181.list-of-examples dl {
182 margin: 0em 0em 0.5em 0em;
183 padding: 0em 0em 0em 0em;
184}
185
186.toc dt {
187 margin: 0em 0em 0em 0em;
188 padding: 0em 0em 0em 0em;
189}
190
191.toc dd {
192 margin: 0em 0em 0em 2.6em;
193 padding: 0em 0em 0em 0em;
194}
195
196div.glossary dl,
197div.variablelist dl {
198}
199
200.glossary dl dt,
201.variablelist dl dt,
202.variablelist dl dt span.term {
203 font-weight: normal;
204 width: 20em;
205 text-align: right;
206}
207
208.variablelist dl dt {
209 margin-top: 0.5em;
210}
211
212.glossary dl dd,
213.variablelist dl dd {
214 margin-top: -1em;
215 margin-left: 25.5em;
216}
217
218.glossary dd p,
219.variablelist dd p {
220 margin-top: 0em;
221 margin-bottom: 1em;
222}
223
224
225div.calloutlist table td {
226 padding: 0em 0em 0em 0em;
227 margin: 0em 0em 0em 0em;
228}
229
230div.calloutlist table td p {
231 margin-top: 0em;
232 margin-bottom: 1em;
233}
234
235div p.copyright {
236 text-align: left;
237}
238
239div.legalnotice p.legalnotice-title {
240 margin-bottom: 0em;
241}
242
243p {
244 line-height: 1.5em;
245 margin-top: 0em;
246
247}
248
249dl {
250 padding-top: 0em;
251}
252
253hr {
254 border: solid 1px;
255}
256
257
258.mediaobject,
259.mediaobjectco {
260 text-align: center;
261}
262
263img {
264 border: none;
265}
266
267ul {
268 padding: 0em 0em 0em 1.5em;
269}
270
271ul li {
272 padding: 0em 0em 0em 0em;
273}
274
275ul li p {
276 text-align: left;
277}
278
279table {
280 width :100%;
281}
282
283th {
284 padding: 0.25em;
285 text-align: left;
286 font-weight: normal;
287 vertical-align: top;
288}
289
290td {
291 padding: 0.25em;
292 vertical-align: top;
293}
294
295p a[id] {
296 margin: 0px;
297 padding: 0px;
298 display: inline;
299 background-image: none;
300}
301
302a {
303 text-decoration: underline;
304 color: #444;
305}
306
307pre {
308 overflow: auto;
309}
310
311a:hover {
312 text-decoration: underline;
313 /*font-weight: bold;*/
314}
315
316
317div.informalfigure,
318div.informalexample,
319div.informaltable,
320div.figure,
321div.table,
322div.example {
323 margin: 1em 0em;
324 padding: 1em;
325 page-break-inside: avoid;
326}
327
328
329div.informalfigure p.title b,
330div.informalexample p.title b,
331div.informaltable p.title b,
332div.figure p.title b,
333div.example p.title b,
334div.table p.title b{
335 padding-top: 0em;
336 margin-top: 0em;
337 font-size: 100%;
338 font-weight: normal;
339}
340
341.mediaobject .caption,
342.mediaobject .caption p {
343 text-align: center;
344 font-size: 80%;
345 padding-top: 0.5em;
346 padding-bottom: 0.5em;
347}
348
349.epigraph {
350 padding-left: 55%;
351 margin-bottom: 1em;
352}
353
354.epigraph p {
355 text-align: left;
356}
357
358.epigraph .quote {
359 font-style: italic;
360}
361.epigraph .attribution {
362 font-style: normal;
363 text-align: right;
364}
365
366span.application {
367 font-style: italic;
368}
369
370.programlisting {
371 font-family: monospace;
372 font-size: 80%;
373 white-space: pre;
374 margin: 1.33em 0em;
375 padding: 1.33em;
376}
377
378.tip,
379.warning,
380.caution,
381.note {
382 margin-top: 1em;
383 margin-bottom: 1em;
384
385}
386
387/* force full width of table within div */
388.tip table,
389.warning table,
390.caution table,
391.note table {
392 border: none;
393 width: 100%;
394}
395
396
397.tip table th,
398.warning table th,
399.caution table th,
400.note table th {
401 padding: 0.8em 0.0em 0.0em 0.0em;
402 margin : 0em 0em 0em 0em;
403}
404
405.tip p,
406.warning p,
407.caution p,
408.note p {
409 margin-top: 0.5em;
410 margin-bottom: 0.5em;
411 padding-right: 1em;
412 text-align: left;
413}
414
415.acronym {
416 text-transform: uppercase;
417}
418
419b.keycap,
420.keycap {
421 padding: 0.09em 0.3em;
422 margin: 0em;
423}
424
425.itemizedlist li {
426 clear: none;
427}
428
429.filename {
430 font-size: medium;
431 font-family: Courier, monospace;
432}
433
434
435div.navheader, div.heading{
436 position: absolute;
437 left: 0em;
438 top: 0em;
439 width: 100%;
440 background-color: #cdf;
441 width: 100%;
442}
443
444div.navfooter, div.footing{
445 position: fixed;
446 left: 0em;
447 bottom: 0em;
448 background-color: #eee;
449 width: 100%;
450}
451
452
453div.navheader td,
454div.navfooter td {
455 font-size: 66%;
456}
457
458div.navheader table th {
459 /*font-family: Georgia, Times, serif;*/
460 /*font-size: x-large;*/
461 font-size: 80%;
462}
463
464div.navheader table {
465 border-left: 0em;
466 border-right: 0em;
467 border-top: 0em;
468 width: 100%;
469}
470
471div.navfooter table {
472 border-left: 0em;
473 border-right: 0em;
474 border-bottom: 0em;
475 width: 100%;
476}
477
478div.navheader table td a,
479div.navfooter table td a {
480 color: #777;
481 text-decoration: none;
482}
483
484/* normal text in the footer */
485div.navfooter table td {
486 color: black;
487}
488
489div.navheader table td a:visited,
490div.navfooter table td a:visited {
491 color: #444;
492}
493
494
495/* links in header and footer */
496div.navheader table td a:hover,
497div.navfooter table td a:hover {
498 text-decoration: underline;
499 background-color: transparent;
500 color: #33a;
501}
502
503div.navheader hr,
504div.navfooter hr {
505 display: none;
506}
507
508
509.qandaset tr.question td p {
510 margin: 0em 0em 1em 0em;
511 padding: 0em 0em 0em 0em;
512}
513
514.qandaset tr.answer td p {
515 margin: 0em 0em 1em 0em;
516 padding: 0em 0em 0em 0em;
517}
518.answer td {
519 padding-bottom: 1.5em;
520}
521
522.emphasis {
523 font-weight: bold;
524}
525
526
527 /************* /
528 / decorations /
529/ *************/
530
531.titlepage {
532}
533
534.part .title {
535}
536
537.subtitle {
538 border: none;
539}
540
541/*
542h1 {
543 border: none;
544}
545
546h2 {
547 border-top: solid 0.2em;
548 border-bottom: solid 0.06em;
549}
550
551h3 {
552 border-top: 0em;
553 border-bottom: solid 0.06em;
554}
555
556h4 {
557 border: 0em;
558 border-bottom: solid 0.06em;
559}
560
561h5 {
562 border: 0em;
563}
564*/
565
566.programlisting {
567 border: solid 1px;
568}
569
570div.figure,
571div.table,
572div.informalfigure,
573div.informaltable,
574div.informalexample,
575div.example {
576 border: 1px solid;
577}
578
579
580
581.tip,
582.warning,
583.caution,
584.note {
585 border: 1px solid;
586}
587
588.tip table th,
589.warning table th,
590.caution table th,
591.note table th {
592 border-bottom: 1px solid;
593}
594
595.question td {
596 border-top: 1px solid black;
597}
598
599.answer {
600}
601
602
603b.keycap,
604.keycap {
605 border: 1px solid;
606}
607
608
609div.navheader, div.heading{
610 border-bottom: 1px solid;
611}
612
613
614div.navfooter, div.footing{
615 border-top: 1px solid;
616}
617
618 /********* /
619 / colors /
620/ *********/
621
622body {
623 color: #333;
624 background: white;
625}
626
627a {
628 background: transparent;
629}
630
631a:hover {
632 background-color: #dedede;
633}
634
635
636h1,
637h2,
638h3,
639h4,
640h5,
641h6,
642h7,
643h8 {
644 background-color: transparent;
645}
646
647hr {
648 border-color: #aaa;
649}
650
651
652.tip, .warning, .caution, .note {
653 border-color: #fff;
654}
655
656
657.tip table th,
658.warning table th,
659.caution table th,
660.note table th {
661 border-bottom-color: #fff;
662}
663
664
665.warning {
666 background-color: #f0f0f2;
667}
668
669.caution {
670 background-color: #f0f0f2;
671}
672
673.tip {
674 background-color: #f0f0f2;
675}
676
677.note {
678 background-color: #f0f0f2;
679}
680
681.glossary dl dt,
682.variablelist dl dt,
683.variablelist dl dt span.term {
684 color: #044;
685}
686
687div.figure,
688div.table,
689div.example,
690div.informalfigure,
691div.informaltable,
692div.informalexample {
693 border-color: #aaa;
694}
695
696pre.programlisting {
697 color: black;
698 background-color: #fff;
699 border-color: #aaa;
700 border-width: 2px;
701}
702
703.guimenu,
704.guilabel,
705.guimenuitem {
706 background-color: #eee;
707}
708
709
710b.keycap,
711.keycap {
712 background-color: #eee;
713 border-color: #999;
714}
715
716
717div.navheader {
718 border-color: black;
719}
720
721
722div.navfooter {
723 border-color: black;
724}
725
726
727 /*********** /
728 / graphics /
729/ ***********/
730
731/*
732body {
733 background-image: url("images/body_bg.jpg");
734 background-attachment: fixed;
735}
736
737.navheader,
738.note,
739.tip {
740 background-image: url("images/note_bg.jpg");
741 background-attachment: fixed;
742}
743
744.warning,
745.caution {
746 background-image: url("images/warning_bg.jpg");
747 background-attachment: fixed;
748}
749
750.figure,
751.informalfigure,
752.example,
753.informalexample,
754.table,
755.informaltable {
756 background-image: url("images/figure_bg.jpg");
757 background-attachment: fixed;
758}
759
760*/
761h1,
762h2,
763h3,
764h4,
765h5,
766h6,
767h7{
768}
769
770/*
771Example of how to stick an image as part of the title.
772
773div.article .titlepage .title
774{
775 background-image: url("figures/white-on-black.png");
776 background-position: center;
777 background-repeat: repeat-x;
778}
779*/
780
781div.preface .titlepage .title,
782div.colophon .title,
783div.chapter .titlepage .title,
784div.article .titlepage .title
785{
786}
787
788div.section div.section .titlepage .title,
789div.sect2 .titlepage .title {
790 background: none;
791}
792
793
794h1.title {
795 background-color: transparent;
796 background-image: url("figures/yocto-project-bw.png");
797 background-repeat: no-repeat;
798 height: 256px;
799 text-indent: -9000px;
800 overflow:hidden;
801}
802
803h2.subtitle {
804 background-color: transparent;
805 text-indent: -9000px;
806 overflow:hidden;
807 width: 0px;
808 display: none;
809}
810
811 /*************************************** /
812 / pippin.gimp.org specific alterations /
813/ ***************************************/
814
815/*
816div.heading, div.navheader {
817 color: #777;
818 font-size: 80%;
819 padding: 0;
820 margin: 0;
821 text-align: left;
822 position: absolute;
823 top: 0px;
824 left: 0px;
825 width: 100%;
826 height: 50px;
827 background: url('/gfx/heading_bg.png') transparent;
828 background-repeat: repeat-x;
829 background-attachment: fixed;
830 border: none;
831}
832
833div.heading a {
834 color: #444;
835}
836
837div.footing, div.navfooter {
838 border: none;
839 color: #ddd;
840 font-size: 80%;
841 text-align:right;
842
843 width: 100%;
844 padding-top: 10px;
845 position: absolute;
846 bottom: 0px;
847 left: 0px;
848
849 background: url('/gfx/footing_bg.png') transparent;
850}
851*/
852
853
854
855 /****************** /
856 / nasty ie tweaks /
857/ ******************/
858
859/*
860div.heading, div.navheader {
861 width:expression(document.body.clientWidth + "px");
862}
863
864div.footing, div.navfooter {
865 width:expression(document.body.clientWidth + "px");
866 margin-left:expression("-5em");
867}
868body {
869 padding:expression("4em 5em 0em 5em");
870}
871*/
872
873 /**************************************** /
874 / mozilla vendor specific css extensions /
875/ ****************************************/
876/*
877div.navfooter, div.footing{
878 -moz-opacity: 0.8em;
879}
880
881div.figure,
882div.table,
883div.informalfigure,
884div.informaltable,
885div.informalexample,
886div.example,
887.tip,
888.warning,
889.caution,
890.note {
891 -moz-border-radius: 0.5em;
892}
893
894b.keycap,
895.keycap {
896 -moz-border-radius: 0.3em;
897}
898*/
899
900table tr td table tr td {
901 display: none;
902}
903
904
905hr {
906 display: none;
907}
908
909table {
910 border: 0em;
911}
912
913 .photo {
914 float: right;
915 margin-left: 1.5em;
916 margin-bottom: 1.5em;
917 margin-top: 0em;
918 max-width: 17em;
919 border: 1px solid gray;
920 padding: 3px;
921 background: white;
922}
923 .seperator {
924 padding-top: 2em;
925 clear: both;
926 }
927
928 #validators {
929 margin-top: 5em;
930 text-align: right;
931 color: #777;
932 }
933 @media print {
934 body {
935 font-size: 8pt;
936 }
937 .noprint {
938 display: none;
939 }
940 }
941
942
943.tip,
944.note {
945 background: #f0f0f2;
946 color: #333;
947 padding: 20px;
948 margin: 20px;
949}
950
951.tip h3,
952.note h3 {
953 padding: 0em;
954 margin: 0em;
955 font-size: 2em;
956 font-weight: bold;
957 color: #333;
958}
959
960.tip a,
961.note a {
962 color: #333;
963 text-decoration: underline;
964}
965
966.footnote {
967 font-size: small;
968 color: #333;
969}
970
971/* Changes the announcement text */
972.tip h3,
973.warning h3,
974.caution h3,
975.note h3 {
976 font-size:large;
977 color: #00557D;
978}
979
diff --git a/documentation/poky.ent b/documentation/poky.ent
new file mode 100644
index 0000000000..4635f64249
--- /dev/null
+++ b/documentation/poky.ent
@@ -0,0 +1,66 @@
1<!ENTITY DISTRO "1.6">
2<!ENTITY DISTRO_COMPRESSED "16">
3<!ENTITY DISTRO_NAME "daisy">
4<!ENTITY YOCTO_DOC_VERSION "1.6">
5<!ENTITY POKYVERSION "11.0.0">
6<!ENTITY POKYVERSION_COMPRESSED "1100">
7<!ENTITY YOCTO_POKY "poky-&DISTRO_NAME;-&POKYVERSION;">
8<!ENTITY COPYRIGHT_YEAR "2010-2014">
9<!ENTITY YOCTO_DL_URL "http://downloads.yoctoproject.org">
10<!ENTITY YOCTO_HOME_URL "http://www.yoctoproject.org">
11<!ENTITY YOCTO_LISTS_URL "http://lists.yoctoproject.org">
12<!ENTITY YOCTO_BUGZILLA_URL "http://bugzilla.yoctoproject.org">
13<!ENTITY YOCTO_WIKI_URL "https://wiki.yoctoproject.org">
14<!ENTITY YOCTO_AB_URL "http://autobuilder.yoctoproject.org">
15<!ENTITY YOCTO_GIT_URL "http://git.yoctoproject.org">
16<!ENTITY YOCTO_ADTREPO_URL "http://adtrepo.yoctoproject.org">
17<!ENTITY YOCTO_RELEASE_NOTES "&YOCTO_HOME_URL;/download/yocto-project-&DISTRO_COMPRESSED;-poky-&POKYVERSION_COMPRESSED;">
18<!ENTITY OE_HOME_URL "http://www.openembedded.org">
19<!ENTITY OE_LISTS_URL "http://lists.openembedded.org/mailman">
20<!ENTITY OE_DOCS_URL "http://docs.openembedded.org">
21<!ENTITY OH_HOME_URL "http://o-hand.com">
22<!ENTITY BITBAKE_HOME_URL "http://developer.berlios.de/projects/bitbake/">
23<!ENTITY ECLIPSE_MAIN_URL "http://www.eclipse.org/downloads">
24<!ENTITY ECLIPSE_DL_URL "http://download.eclipse.org">
25<!ENTITY ECLIPSE_DL_PLUGIN_URL "&YOCTO_DL_URL;/releases/eclipse-plugin/&DISTRO;">
26<!ENTITY ECLIPSE_UPDATES_URL "&ECLIPSE_DL_URL;/tm/updates/3.3">
27<!ENTITY ECLIPSE_INDIGO_URL "&ECLIPSE_DL_URL;/releases/indigo">
28<!ENTITY ECLIPSE_JUNO_URL "&ECLIPSE_DL_URL;/releases/juno">
29<!ENTITY ECLIPSE_KEPLER_URL "&ECLIPSE_DL_URL;/releases/kepler">
30<!ENTITY ECLIPSE_INDIGO_CDT_URL "&ECLIPSE_DL_URL;tools/cdt/releases/indigo">
31<!ENTITY YOCTO_DOCS_URL "&YOCTO_HOME_URL;/docs">
32<!ENTITY YOCTO_SOURCES_URL "&YOCTO_HOME_URL;/sources/">
33<!ENTITY YOCTO_AB_PORT_URL "&YOCTO_AB_URL;:8010">
34<!ENTITY YOCTO_AB_NIGHTLY_URL "&YOCTO_AB_URL;/nightly/">
35<!ENTITY YOCTO_POKY_URL "&YOCTO_DL_URL;/releases/poky/">
36<!ENTITY YOCTO_RELEASE_DL_URL "&YOCTO_DL_URL;/releases/yocto/yocto-&DISTRO;">
37<!ENTITY YOCTO_TOOLCHAIN_DL_URL "&YOCTO_RELEASE_DL_URL;/toolchain/">
38<!ENTITY YOCTO_ECLIPSE_DL_URL "&YOCTO_RELEASE_DL_URL;/eclipse-plugin/indigo;">
39<!ENTITY YOCTO_ADTINSTALLER_DL_URL "&YOCTO_RELEASE_DL_URL;/adt-installer">
40<!ENTITY YOCTO_POKY_DL_URL "&YOCTO_RELEASE_DL_URL;/&YOCTO_POKY;.tar.bz2">
41<!ENTITY YOCTO_MACHINES_DL_URL "&YOCTO_RELEASE_DL_URL;/machines">
42<!ENTITY YOCTO_QEMU_DL_URL "&YOCTO_MACHINES_DL_URL;/qemu">
43<!ENTITY YOCTO_PYTHON-i686_DL_URL "&YOCTO_DL_URL;/releases/miscsupport/python-nativesdk-standalone-i686.tar.bz2">
44<!ENTITY YOCTO_PYTHON-x86_64_DL_URL "&YOCTO_DL_URL;/releases/miscsupport/python-nativesdk-standalone-x86_64.tar.bz2">
45<!ENTITY YOCTO_DOCS_QS_URL "&YOCTO_DOCS_URL;/&YOCTO_DOC_VERSION;/yocto-project-qs/yocto-project-qs.html">
46<!ENTITY YOCTO_DOCS_ADT_URL "&YOCTO_DOCS_URL;/&YOCTO_DOC_VERSION;/adt-manual/adt-manual.html">
47<!ENTITY YOCTO_DOCS_REF_URL "&YOCTO_DOCS_URL;/&YOCTO_DOC_VERSION;/ref-manual/ref-manual.html">
48<!ENTITY YOCTO_DOCS_BSP_URL "&YOCTO_DOCS_URL;/&YOCTO_DOC_VERSION;/bsp-guide/bsp-guide.html">
49<!ENTITY YOCTO_DOCS_DEV_URL "&YOCTO_DOCS_URL;/&YOCTO_DOC_VERSION;/dev-manual/dev-manual.html">
50<!ENTITY YOCTO_DOCS_KERNEL_URL "&YOCTO_DOCS_URL;/&YOCTO_DOC_VERSION;/kernel-manual/kernel-manual.html">
51<!ENTITY YOCTO_DOCS_KERNEL_DEV_URL "&YOCTO_DOCS_URL;/&YOCTO_DOC_VERSION;/kernel-dev/kernel-dev.html">
52<!ENTITY YOCTO_DOCS_PROF_URL "&YOCTO_DOCS_URL;/&YOCTO_DOC_VERSION;/profile-manual/profile-manual.html">
53<!ENTITY YOCTO_DOCS_BB_URL "&YOCTO_DOCS_URL;/&YOCTO_DOC_VERSION;/bitbake-user-manual/bitbake-user-manual.html">
54<!ENTITY YOCTO_ADTPATH_DIR "/opt/poky/&DISTRO;">
55<!ENTITY YOCTO_POKY_TARBALL "&YOCTO_POKY;.tar.bz2">
56<!ENTITY OE_INIT_PATH "&YOCTO_POKY;/oe-init-build-env">
57<!ENTITY OE_INIT_FILE "oe-init-build-env">
58<!ENTITY UBUNTU_HOST_PACKAGES_ESSENTIAL "gawk wget git-core diffstat unzip texinfo gcc-multilib \
59 build-essential chrpath">
60<!ENTITY FEDORA_HOST_PACKAGES_ESSENTIAL "gawk make wget tar bzip2 gzip python unzip perl patch \
61 diffutils diffstat git cpp gcc gcc-c++ glibc-devel texinfo chrpath \
62 ccache perl-Data-Dumper perl-Text-ParseWords perl-Thread-Queue">
63<!ENTITY OPENSUSE_HOST_PACKAGES_ESSENTIAL "python gcc gcc-c++ git chrpath make wget python-xml \
64 diffstat texinfo python-curses patch">
65<!ENTITY CENTOS_HOST_PACKAGES_ESSENTIAL "gawk make wget tar bzip2 gzip python unzip perl patch \
66 diffutils diffstat git cpp gcc gcc-c++ glibc-devel texinfo chrpath">
diff --git a/documentation/profile-manual/figures/kernelshark-all.png b/documentation/profile-manual/figures/kernelshark-all.png
new file mode 100644
index 0000000000..99b40bafe5
--- /dev/null
+++ b/documentation/profile-manual/figures/kernelshark-all.png
Binary files differ
diff --git a/documentation/profile-manual/figures/kernelshark-choose-events.png b/documentation/profile-manual/figures/kernelshark-choose-events.png
new file mode 100644
index 0000000000..e8dd62a571
--- /dev/null
+++ b/documentation/profile-manual/figures/kernelshark-choose-events.png
Binary files differ
diff --git a/documentation/profile-manual/figures/kernelshark-i915-display.png b/documentation/profile-manual/figures/kernelshark-i915-display.png
new file mode 100644
index 0000000000..bb0edfb7fd
--- /dev/null
+++ b/documentation/profile-manual/figures/kernelshark-i915-display.png
Binary files differ
diff --git a/documentation/profile-manual/figures/kernelshark-output-display.png b/documentation/profile-manual/figures/kernelshark-output-display.png
new file mode 100644
index 0000000000..ae2d0e5730
--- /dev/null
+++ b/documentation/profile-manual/figures/kernelshark-output-display.png
Binary files differ
diff --git a/documentation/profile-manual/figures/lttngmain0.png b/documentation/profile-manual/figures/lttngmain0.png
new file mode 100644
index 0000000000..5f60113cc3
--- /dev/null
+++ b/documentation/profile-manual/figures/lttngmain0.png
Binary files differ
diff --git a/documentation/profile-manual/figures/oprofileui-busybox.png b/documentation/profile-manual/figures/oprofileui-busybox.png
new file mode 100644
index 0000000000..a8275c65d2
--- /dev/null
+++ b/documentation/profile-manual/figures/oprofileui-busybox.png
Binary files differ
diff --git a/documentation/profile-manual/figures/oprofileui-copy-to-user.png b/documentation/profile-manual/figures/oprofileui-copy-to-user.png
new file mode 100644
index 0000000000..deb6470204
--- /dev/null
+++ b/documentation/profile-manual/figures/oprofileui-copy-to-user.png
Binary files differ
diff --git a/documentation/profile-manual/figures/oprofileui-downloading.png b/documentation/profile-manual/figures/oprofileui-downloading.png
new file mode 100644
index 0000000000..57742d6723
--- /dev/null
+++ b/documentation/profile-manual/figures/oprofileui-downloading.png
Binary files differ
diff --git a/documentation/profile-manual/figures/oprofileui-processes.png b/documentation/profile-manual/figures/oprofileui-processes.png
new file mode 100644
index 0000000000..ae547028f4
--- /dev/null
+++ b/documentation/profile-manual/figures/oprofileui-processes.png
Binary files differ
diff --git a/documentation/profile-manual/figures/perf-probe-do_fork-profile.png b/documentation/profile-manual/figures/perf-probe-do_fork-profile.png
new file mode 100644
index 0000000000..1a1070deb8
--- /dev/null
+++ b/documentation/profile-manual/figures/perf-probe-do_fork-profile.png
Binary files differ
diff --git a/documentation/profile-manual/figures/perf-report-cycles-u.png b/documentation/profile-manual/figures/perf-report-cycles-u.png
new file mode 100644
index 0000000000..68ec6af80b
--- /dev/null
+++ b/documentation/profile-manual/figures/perf-report-cycles-u.png
Binary files differ
diff --git a/documentation/profile-manual/figures/perf-systemwide-libc.png b/documentation/profile-manual/figures/perf-systemwide-libc.png
new file mode 100644
index 0000000000..2b72869c77
--- /dev/null
+++ b/documentation/profile-manual/figures/perf-systemwide-libc.png
Binary files differ
diff --git a/documentation/profile-manual/figures/perf-systemwide.png b/documentation/profile-manual/figures/perf-systemwide.png
new file mode 100644
index 0000000000..12ce2444ae
--- /dev/null
+++ b/documentation/profile-manual/figures/perf-systemwide.png
Binary files differ
diff --git a/documentation/profile-manual/figures/perf-wget-busybox-annotate-menu.png b/documentation/profile-manual/figures/perf-wget-busybox-annotate-menu.png
new file mode 100644
index 0000000000..ceb34eaead
--- /dev/null
+++ b/documentation/profile-manual/figures/perf-wget-busybox-annotate-menu.png
Binary files differ
diff --git a/documentation/profile-manual/figures/perf-wget-busybox-annotate-udhcpc.png b/documentation/profile-manual/figures/perf-wget-busybox-annotate-udhcpc.png
new file mode 100644
index 0000000000..3581e9daa6
--- /dev/null
+++ b/documentation/profile-manual/figures/perf-wget-busybox-annotate-udhcpc.png
Binary files differ
diff --git a/documentation/profile-manual/figures/perf-wget-busybox-debuginfo.png b/documentation/profile-manual/figures/perf-wget-busybox-debuginfo.png
new file mode 100644
index 0000000000..c317b49a4e
--- /dev/null
+++ b/documentation/profile-manual/figures/perf-wget-busybox-debuginfo.png
Binary files differ
diff --git a/documentation/profile-manual/figures/perf-wget-busybox-dso-zoom-menu.png b/documentation/profile-manual/figures/perf-wget-busybox-dso-zoom-menu.png
new file mode 100644
index 0000000000..1913c867d0
--- /dev/null
+++ b/documentation/profile-manual/figures/perf-wget-busybox-dso-zoom-menu.png
Binary files differ
diff --git a/documentation/profile-manual/figures/perf-wget-busybox-dso-zoom.png b/documentation/profile-manual/figures/perf-wget-busybox-dso-zoom.png
new file mode 100644
index 0000000000..a1962c437a
--- /dev/null
+++ b/documentation/profile-manual/figures/perf-wget-busybox-dso-zoom.png
Binary files differ
diff --git a/documentation/profile-manual/figures/perf-wget-busybox-expanded-stripped.png b/documentation/profile-manual/figures/perf-wget-busybox-expanded-stripped.png
new file mode 100644
index 0000000000..b642d06c8b
--- /dev/null
+++ b/documentation/profile-manual/figures/perf-wget-busybox-expanded-stripped.png
Binary files differ
diff --git a/documentation/profile-manual/figures/perf-wget-flat-stripped.png b/documentation/profile-manual/figures/perf-wget-flat-stripped.png
new file mode 100644
index 0000000000..c8f395ab53
--- /dev/null
+++ b/documentation/profile-manual/figures/perf-wget-flat-stripped.png
Binary files differ
diff --git a/documentation/profile-manual/figures/perf-wget-g-copy-from-user-expanded-stripped.png b/documentation/profile-manual/figures/perf-wget-g-copy-from-user-expanded-stripped.png
new file mode 100644
index 0000000000..bb7c764ce0
--- /dev/null
+++ b/documentation/profile-manual/figures/perf-wget-g-copy-from-user-expanded-stripped.png
Binary files differ
diff --git a/documentation/profile-manual/figures/perf-wget-g-copy-to-user-expanded-debuginfo.png b/documentation/profile-manual/figures/perf-wget-g-copy-to-user-expanded-debuginfo.png
new file mode 100644
index 0000000000..a799af5127
--- /dev/null
+++ b/documentation/profile-manual/figures/perf-wget-g-copy-to-user-expanded-debuginfo.png
Binary files differ
diff --git a/documentation/profile-manual/figures/perf-wget-g-copy-to-user-expanded-stripped-unresolved-hidden.png b/documentation/profile-manual/figures/perf-wget-g-copy-to-user-expanded-stripped-unresolved-hidden.png
new file mode 100644
index 0000000000..e91808ae40
--- /dev/null
+++ b/documentation/profile-manual/figures/perf-wget-g-copy-to-user-expanded-stripped-unresolved-hidden.png
Binary files differ
diff --git a/documentation/profile-manual/figures/perf-wget-g-copy-to-user-expanded-stripped.png b/documentation/profile-manual/figures/perf-wget-g-copy-to-user-expanded-stripped.png
new file mode 100644
index 0000000000..812302d0a8
--- /dev/null
+++ b/documentation/profile-manual/figures/perf-wget-g-copy-to-user-expanded-stripped.png
Binary files differ
diff --git a/documentation/profile-manual/figures/profile-title.png b/documentation/profile-manual/figures/profile-title.png
new file mode 100644
index 0000000000..ce5c682b58
--- /dev/null
+++ b/documentation/profile-manual/figures/profile-title.png
Binary files differ
diff --git a/documentation/profile-manual/figures/pybootchartgui-linux-yocto.png b/documentation/profile-manual/figures/pybootchartgui-linux-yocto.png
new file mode 100644
index 0000000000..2b6bfdacf9
--- /dev/null
+++ b/documentation/profile-manual/figures/pybootchartgui-linux-yocto.png
Binary files differ
diff --git a/documentation/profile-manual/figures/pychart-linux-yocto-rpm-nostrip.png b/documentation/profile-manual/figures/pychart-linux-yocto-rpm-nostrip.png
new file mode 100644
index 0000000000..444675c543
--- /dev/null
+++ b/documentation/profile-manual/figures/pychart-linux-yocto-rpm-nostrip.png
Binary files differ
diff --git a/documentation/profile-manual/figures/pychart-linux-yocto-rpm.png b/documentation/profile-manual/figures/pychart-linux-yocto-rpm.png
new file mode 100644
index 0000000000..8ee35352d8
--- /dev/null
+++ b/documentation/profile-manual/figures/pychart-linux-yocto-rpm.png
Binary files differ
diff --git a/documentation/profile-manual/figures/sched-wakeup-profile.png b/documentation/profile-manual/figures/sched-wakeup-profile.png
new file mode 100644
index 0000000000..2f25811889
--- /dev/null
+++ b/documentation/profile-manual/figures/sched-wakeup-profile.png
Binary files differ
diff --git a/documentation/profile-manual/figures/sysprof-callers.png b/documentation/profile-manual/figures/sysprof-callers.png
new file mode 100644
index 0000000000..640c8d9140
--- /dev/null
+++ b/documentation/profile-manual/figures/sysprof-callers.png
Binary files differ
diff --git a/documentation/profile-manual/figures/sysprof-copy-from-user.png b/documentation/profile-manual/figures/sysprof-copy-from-user.png
new file mode 100644
index 0000000000..8d31427824
--- /dev/null
+++ b/documentation/profile-manual/figures/sysprof-copy-from-user.png
Binary files differ
diff --git a/documentation/profile-manual/figures/sysprof-copy-to-user.png b/documentation/profile-manual/figures/sysprof-copy-to-user.png
new file mode 100644
index 0000000000..7a5bab7991
--- /dev/null
+++ b/documentation/profile-manual/figures/sysprof-copy-to-user.png
Binary files differ
diff --git a/documentation/profile-manual/profile-manual-arch.xml b/documentation/profile-manual/profile-manual-arch.xml
new file mode 100644
index 0000000000..19d1155229
--- /dev/null
+++ b/documentation/profile-manual/profile-manual-arch.xml
@@ -0,0 +1,45 @@
1<!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='profile-manual-arch'>
6
7<title>Overall Architecture of the Linux Tracing and Profiling Tools</title>
8
9<section id='architecture-of-the-tracing-and-profiling-tools'>
10 <title>Architecture of the Tracing and Profiling Tools</title>
11
12 <para>
13 It may seem surprising to see a section covering an 'overall architecture'
14 for what seems to be a random collection of tracing tools that together
15 make up the Linux tracing and profiling space.
16 The fact is, however, that in recent years this seemingly disparate
17 set of tools has started to converge on a 'core' set of underlying
18 mechanisms:
19 </para>
20
21 <para>
22 <itemizedlist>
23 <listitem>static tracepoints</listitem>
24 <listitem>dynamic tracepoints
25 <itemizedlist>
26 <listitem>kprobes</listitem>
27 <listitem>uprobes</listitem>
28 </itemizedlist>
29 </listitem>
30 <listitem>the perf_events subsystem</listitem>
31 <listitem>debugfs</listitem>
32 </itemizedlist>
33 </para>
34
35 <informalexample>
36 <emphasis>Tying it Together:</emphasis> Rather than enumerating here how each tool makes use of
37 these common mechanisms, textboxes like this will make note of the
38 specific usages in each tool as they come up in the course
39 of the text.
40 </informalexample>
41</section>
42</chapter>
43<!--
44vim: expandtab tw=80 ts=4
45-->
diff --git a/documentation/profile-manual/profile-manual-customization.xsl b/documentation/profile-manual/profile-manual-customization.xsl
new file mode 100644
index 0000000000..ead52ee7ac
--- /dev/null
+++ b/documentation/profile-manual/profile-manual-customization.xsl
@@ -0,0 +1,11 @@
1<?xml version='1.0'?>
2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
3
4 <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl" />
5
6 <xsl:param name="html.stylesheet" select="'profile-manual-style.css'" />
7 <xsl:param name="chapter.autolabel" select="1" />
8 <xsl:param name="appendix.autolabel">A</xsl:param>
9 <xsl:param name="section.autolabel" select="1" />
10 <xsl:param name="section.label.includes.component.label" select="1" />
11</xsl:stylesheet>
diff --git a/documentation/profile-manual/profile-manual-eclipse-customization.xsl b/documentation/profile-manual/profile-manual-eclipse-customization.xsl
new file mode 100644
index 0000000000..e4ff6e99ab
--- /dev/null
+++ b/documentation/profile-manual/profile-manual-eclipse-customization.xsl
@@ -0,0 +1,27 @@
1<?xml version='1.0'?>
2<xsl:stylesheet
3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4 xmlns="http://www.w3.org/1999/xhtml"
5 xmlns:fo="http://www.w3.org/1999/XSL/Format"
6 version="1.0">
7
8 <xsl:import
9 href="http://docbook.sourceforge.net/release/xsl/current/eclipse/eclipse3.xsl" />
10
11 <xsl:param name="chunker.output.indent" select="'yes'"/>
12 <xsl:param name="chunk.quietly" select="1"/>
13 <xsl:param name="chunk.first.sections" select="1"/>
14 <xsl:param name="chunk.section.depth" select="10"/>
15 <xsl:param name="use.id.as.filename" select="1"/>
16 <xsl:param name="ulink.target" select="'_self'" />
17 <xsl:param name="base.dir" select="'html/profile-manual/'"/>
18 <xsl:param name="html.stylesheet" select="'../book.css'"/>
19 <xsl:param name="eclipse.manifest" select="0"/>
20 <xsl:param name="create.plugin.xml" select="0"/>
21 <xsl:param name="suppress.navigation" select="1"/>
22 <xsl:param name="generate.index" select="0"/>
23 <xsl:param name="chapter.autolabel" select="1" />
24 <xsl:param name="appendix.autolabel">A</xsl:param>
25 <xsl:param name="section.autolabel" select="1" />
26 <xsl:param name="section.label.includes.component.label" select="1" />
27</xsl:stylesheet>
diff --git a/documentation/profile-manual/profile-manual-examples.xml b/documentation/profile-manual/profile-manual-examples.xml
new file mode 100644
index 0000000000..9630c6c307
--- /dev/null
+++ b/documentation/profile-manual/profile-manual-examples.xml
@@ -0,0 +1,39 @@
1<!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='profile-manual-examples'>
6
7<title>Real-World Examples</title>
8
9<para>
10 This chapter contains real-world examples.
11</para>
12
13<section id='slow-write-speed-on-live-images'>
14 <title>Slow Write Speed on Live Images</title>
15
16 <para>
17 In one of our previous releases (denzil), users noticed that booting
18 off of a live image and writing to disk was noticeably slower.
19 This included the boot itself, especially the first one, since first
20 boots tend to do a significant amount of writing due to certain
21 post-install scripts.
22 </para>
23
24 <para>
25 The problem (and solution) was discovered by using the Yocto tracing
26 tools, in this case 'perf stat', 'perf script', 'perf record'
27 and 'perf report'.
28 </para>
29
30 <para>
31 See all the unvarnished details of how this bug was diagnosed and
32 solved here: Yocto Bug #3049
33 </para>
34</section>
35
36</chapter>
37<!--
38vim: expandtab tw=80 ts=4
39-->
diff --git a/documentation/profile-manual/profile-manual-intro.xml b/documentation/profile-manual/profile-manual-intro.xml
new file mode 100644
index 0000000000..96f819c4d9
--- /dev/null
+++ b/documentation/profile-manual/profile-manual-intro.xml
@@ -0,0 +1,102 @@
1<!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='profile-manual-intro'>
6
7<title>Yocto Project Tracing and Profiling Manual</title>
8 <section id='intro'>
9 <title>Introduction</title>
10
11 <para>
12 Yocto bundles a number of tracing and profiling tools - this 'HOWTO'
13 describes their basic usage and shows by example how to make use
14 of them to examine application and system behavior.
15 </para>
16
17 <para>
18 The tools presented are for the most part completely open-ended and
19 have quite good and/or extensive documentation of their own which
20 can be used to solve just about any problem you might come across
21 in Linux.
22 Each section that describes a particular tool has links to that
23 tool's documentation and website.
24 </para>
25
26 <para>
27 The purpose of this 'HOWTO' is to present a set of common and
28 generally useful tracing and profiling idioms along with their
29 application (as appropriate) to each tool, in the context of a
30 general-purpose 'drill-down' methodology that can be applied
31 to solving a large number (90%?) of problems.
32 For help with more advanced usages and problems, please see
33 the documentation and/or websites listed for each tool.
34 </para>
35
36 <para>
37 The final section of this 'HOWTO' is a collection of real-world
38 examples which we'll be continually adding to as we solve more
39 problems using the tools - feel free to add your own examples
40 to the list!
41 </para>
42 </section>
43
44 <section id='profile-manual-general-setup'>
45 <title>General Setup</title>
46
47 <para>
48 Most of the tools are available only in 'sdk' images or in images
49 built after adding 'tools-profile' to your local.conf.
50 So, in order to be able to access all of the tools described here,
51 please first build and boot an 'sdk' image e.g.
52 <literallayout class='monospaced'>
53 $ bitbake core-image-sato-sdk
54 </literallayout>
55 or alternatively by adding 'tools-profile' to the
56 EXTRA_IMAGE_FEATURES line in your local.conf:
57 <literallayout class='monospaced'>
58 EXTRA_IMAGE_FEATURES = "debug-tweaks tools-profile"
59 </literallayout>
60 If you use the 'tools-profile' method, you don't need to build an
61 sdk image - the tracing and profiling tools will be included in
62 non-sdk images as well e.g.:
63 <literallayout class='monospaced'>
64 $ bitbake core-image-sato
65 </literallayout>
66 <note><para>
67 By default, the Yocto build system strips symbols from the
68 binaries it packages, which makes it difficult to use some
69 of the tools.
70 </para><para>You can prevent that by putting the following
71 in your local.conf when you build the image:
72 </para>
73 </note>
74 <literallayout class='monospaced'>
75 INHIBIT_PACKAGE_STRIP = "1"
76 </literallayout>
77 The above setting will noticeably increase the size of your image.
78 </para>
79
80 <para>
81 If you've already built a stripped image, you can generate
82 debug packages (xxx-dbg) which you can manually install as
83 needed.
84 </para>
85
86 <para>
87 To generate debug info for packages, you can add dbg-pkgs to
88 EXTRA_IMAGE_FEATURES in local.conf. For example:
89 <literallayout class='monospaced'>
90 EXTRA_IMAGE_FEATURES = "debug-tweaks tools-profile dbg-pkgs"
91 </literallayout>
92 Additionally, in order to generate the right type of
93 debuginfo, we also need to add the following to local.conf:
94 <literallayout class='monospaced'>
95 PACKAGE_DEBUG_SPLIT_STYLE = 'debug-file-directory'
96 </literallayout>
97 </para>
98 </section>
99</chapter>
100<!--
101vim: expandtab tw=80 ts=4
102-->
diff --git a/documentation/profile-manual/profile-manual-style.css b/documentation/profile-manual/profile-manual-style.css
new file mode 100644
index 0000000000..7b1b342087
--- /dev/null
+++ b/documentation/profile-manual/profile-manual-style.css
@@ -0,0 +1,978 @@
1/*
2 Generic XHTML / DocBook XHTML CSS Stylesheet.
3
4 Browser wrangling and typographic design by
5 Oyvind Kolas / pippin@gimp.org
6
7 Customised for Poky by
8 Matthew Allum / mallum@o-hand.com
9
10 Thanks to:
11 Liam R. E. Quin
12 William Skaggs
13 Jakub Steiner
14
15 Structure
16 ---------
17
18 The stylesheet is divided into the following sections:
19
20 Positioning
21 Margins, paddings, width, font-size, clearing.
22 Decorations
23 Borders, style
24 Colors
25 Colors
26 Graphics
27 Graphical backgrounds
28 Nasty IE tweaks
29 Workarounds needed to make it work in internet explorer,
30 currently makes the stylesheet non validating, but up until
31 this point it is validating.
32 Mozilla extensions
33 Transparency for footer
34 Rounded corners on boxes
35
36*/
37
38
39 /*************** /
40 / Positioning /
41/ ***************/
42
43body {
44 font-family: Verdana, Sans, sans-serif;
45
46 min-width: 640px;
47 width: 80%;
48 margin: 0em auto;
49 padding: 2em 5em 5em 5em;
50 color: #333;
51}
52
53h1,h2,h3,h4,h5,h6,h7 {
54 font-family: Arial, Sans;
55 color: #00557D;
56 clear: both;
57}
58
59h1 {
60 font-size: 2em;
61 text-align: left;
62 padding: 0em 0em 0em 0em;
63 margin: 2em 0em 0em 0em;
64}
65
66h2.subtitle {
67 margin: 0.10em 0em 3.0em 0em;
68 padding: 0em 0em 0em 0em;
69 font-size: 1.8em;
70 padding-left: 20%;
71 font-weight: normal;
72 font-style: italic;
73}
74
75h2 {
76 margin: 2em 0em 0.66em 0em;
77 padding: 0.5em 0em 0em 0em;
78 font-size: 1.5em;
79 font-weight: bold;
80}
81
82h3.subtitle {
83 margin: 0em 0em 1em 0em;
84 padding: 0em 0em 0em 0em;
85 font-size: 142.14%;
86 text-align: right;
87}
88
89h3 {
90 margin: 1em 0em 0.5em 0em;
91 padding: 1em 0em 0em 0em;
92 font-size: 140%;
93 font-weight: bold;
94}
95
96h4 {
97 margin: 1em 0em 0.5em 0em;
98 padding: 1em 0em 0em 0em;
99 font-size: 120%;
100 font-weight: bold;
101}
102
103h5 {
104 margin: 1em 0em 0.5em 0em;
105 padding: 1em 0em 0em 0em;
106 font-size: 110%;
107 font-weight: bold;
108}
109
110h6 {
111 margin: 1em 0em 0em 0em;
112 padding: 1em 0em 0em 0em;
113 font-size: 110%;
114 font-weight: bold;
115}
116
117.authorgroup {
118 background-color: transparent;
119 background-repeat: no-repeat;
120 padding-top: 256px;
121 background-image: url("figures/profile-title.png");
122 background-position: left top;
123 margin-top: -256px;
124 padding-right: 50px;
125 margin-left: 0px;
126 text-align: right;
127 width: 740px;
128}
129
130h3.author {
131 margin: 0em 0me 0em 0em;
132 padding: 0em 0em 0em 0em;
133 font-weight: normal;
134 font-size: 100%;
135 color: #333;
136 clear: both;
137}
138
139.author tt.email {
140 font-size: 66%;
141}
142
143.titlepage hr {
144 width: 0em;
145 clear: both;
146}
147
148.revhistory {
149 padding-top: 2em;
150 clear: both;
151}
152
153.toc,
154.list-of-tables,
155.list-of-examples,
156.list-of-figures {
157 padding: 1.33em 0em 2.5em 0em;
158 color: #00557D;
159}
160
161.toc p,
162.list-of-tables p,
163.list-of-figures p,
164.list-of-examples p {
165 padding: 0em 0em 0em 0em;
166 padding: 0em 0em 0.3em;
167 margin: 1.5em 0em 0em 0em;
168}
169
170.toc p b,
171.list-of-tables p b,
172.list-of-figures p b,
173.list-of-examples p b{
174 font-size: 100.0%;
175 font-weight: bold;
176}
177
178.toc dl,
179.list-of-tables dl,
180.list-of-figures dl,
181.list-of-examples dl {
182 margin: 0em 0em 0.5em 0em;
183 padding: 0em 0em 0em 0em;
184}
185
186.toc dt {
187 margin: 0em 0em 0em 0em;
188 padding: 0em 0em 0em 0em;
189}
190
191.toc dd {
192 margin: 0em 0em 0em 2.6em;
193 padding: 0em 0em 0em 0em;
194}
195
196div.glossary dl,
197div.variablelist dl {
198}
199
200.glossary dl dt,
201.variablelist dl dt,
202.variablelist dl dt span.term {
203 font-weight: normal;
204 width: 20em;
205 text-align: right;
206}
207
208.variablelist dl dt {
209 margin-top: 0.5em;
210}
211
212.glossary dl dd,
213.variablelist dl dd {
214 margin-top: -1em;
215 margin-left: 25.5em;
216}
217
218.glossary dd p,
219.variablelist dd p {
220 margin-top: 0em;
221 margin-bottom: 1em;
222}
223
224
225div.calloutlist table td {
226 padding: 0em 0em 0em 0em;
227 margin: 0em 0em 0em 0em;
228}
229
230div.calloutlist table td p {
231 margin-top: 0em;
232 margin-bottom: 1em;
233}
234
235div p.copyright {
236 text-align: left;
237}
238
239div.legalnotice p.legalnotice-title {
240 margin-bottom: 0em;
241}
242
243p {
244 line-height: 1.5em;
245 margin-top: 0em;
246
247}
248
249dl {
250 padding-top: 0em;
251}
252
253hr {
254 border: solid 1px;
255}
256
257
258.mediaobject,
259.mediaobjectco {
260 text-align: center;
261}
262
263img {
264 border: none;
265}
266
267ul {
268 padding: 0em 0em 0em 1.5em;
269}
270
271ul li {
272 padding: 0em 0em 0em 0em;
273}
274
275ul li p {
276 text-align: left;
277}
278
279table {
280 width :100%;
281}
282
283th {
284 padding: 0.25em;
285 text-align: left;
286 font-weight: normal;
287 vertical-align: top;
288}
289
290td {
291 padding: 0.25em;
292 vertical-align: top;
293}
294
295p a[id] {
296 margin: 0px;
297 padding: 0px;
298 display: inline;
299 background-image: none;
300}
301
302a {
303 text-decoration: underline;
304 color: #444;
305}
306
307pre {
308 overflow: auto;
309}
310
311a:hover {
312 text-decoration: underline;
313 /*font-weight: bold;*/
314}
315
316
317div.informalfigure,
318div.informalexample,
319div.informaltable,
320div.figure,
321div.table,
322div.example {
323 margin: 1em 0em;
324 padding: 1em;
325 page-break-inside: avoid;
326}
327
328
329div.informalfigure p.title b,
330div.informalexample p.title b,
331div.informaltable p.title b,
332div.figure p.title b,
333div.example p.title b,
334div.table p.title b{
335 padding-top: 0em;
336 margin-top: 0em;
337 font-size: 100%;
338 font-weight: normal;
339}
340
341.mediaobject .caption,
342.mediaobject .caption p {
343 text-align: center;
344 font-size: 80%;
345 padding-top: 0.5em;
346 padding-bottom: 0.5em;
347}
348
349.epigraph {
350 padding-left: 55%;
351 margin-bottom: 1em;
352}
353
354.epigraph p {
355 text-align: left;
356}
357
358.epigraph .quote {
359 font-style: italic;
360}
361.epigraph .attribution {
362 font-style: normal;
363 text-align: right;
364}
365
366span.application {
367 font-style: italic;
368}
369
370.programlisting {
371 font-family: monospace;
372 font-size: 80%;
373 white-space: pre;
374 margin: 1.33em 0em;
375 padding: 1.33em;
376}
377
378.tip,
379.warning,
380.caution,
381.note {
382 margin-top: 1em;
383 margin-bottom: 1em;
384
385}
386
387/* force full width of table within div */
388.tip table,
389.warning table,
390.caution table,
391.note table {
392 border: none;
393 width: 100%;
394}
395
396
397.tip table th,
398.warning table th,
399.caution table th,
400.note table th {
401 padding: 0.8em 0.0em 0.0em 0.0em;
402 margin : 0em 0em 0em 0em;
403}
404
405.tip p,
406.warning p,
407.caution p,
408.note p {
409 margin-top: 0.5em;
410 margin-bottom: 0.5em;
411 padding-right: 1em;
412 text-align: left;
413}
414
415.acronym {
416 text-transform: uppercase;
417}
418
419b.keycap,
420.keycap {
421 padding: 0.09em 0.3em;
422 margin: 0em;
423}
424
425.itemizedlist li {
426 clear: none;
427}
428
429.filename {
430 font-size: medium;
431 font-family: Courier, monospace;
432}
433
434
435div.navheader, div.heading{
436 position: absolute;
437 left: 0em;
438 top: 0em;
439 width: 100%;
440 background-color: #cdf;
441 width: 100%;
442}
443
444div.navfooter, div.footing{
445 position: fixed;
446 left: 0em;
447 bottom: 0em;
448 background-color: #eee;
449 width: 100%;
450}
451
452
453div.navheader td,
454div.navfooter td {
455 font-size: 66%;
456}
457
458div.navheader table th {
459 /*font-family: Georgia, Times, serif;*/
460 /*font-size: x-large;*/
461 font-size: 80%;
462}
463
464div.navheader table {
465 border-left: 0em;
466 border-right: 0em;
467 border-top: 0em;
468 width: 100%;
469}
470
471div.navfooter table {
472 border-left: 0em;
473 border-right: 0em;
474 border-bottom: 0em;
475 width: 100%;
476}
477
478div.navheader table td a,
479div.navfooter table td a {
480 color: #777;
481 text-decoration: none;
482}
483
484/* normal text in the footer */
485div.navfooter table td {
486 color: black;
487}
488
489div.navheader table td a:visited,
490div.navfooter table td a:visited {
491 color: #444;
492}
493
494
495/* links in header and footer */
496div.navheader table td a:hover,
497div.navfooter table td a:hover {
498 text-decoration: underline;
499 background-color: transparent;
500 color: #33a;
501}
502
503div.navheader hr,
504div.navfooter hr {
505 display: none;
506}
507
508
509.qandaset tr.question td p {
510 margin: 0em 0em 1em 0em;
511 padding: 0em 0em 0em 0em;
512}
513
514.qandaset tr.answer td p {
515 margin: 0em 0em 1em 0em;
516 padding: 0em 0em 0em 0em;
517}
518.answer td {
519 padding-bottom: 1.5em;
520}
521
522.emphasis {
523 font-weight: bold;
524}
525
526
527 /************* /
528 / decorations /
529/ *************/
530
531.titlepage {
532}
533
534.part .title {
535}
536
537.subtitle {
538 border: none;
539}
540
541/*
542h1 {
543 border: none;
544}
545
546h2 {
547 border-top: solid 0.2em;
548 border-bottom: solid 0.06em;
549}
550
551h3 {
552 border-top: 0em;
553 border-bottom: solid 0.06em;
554}
555
556h4 {
557 border: 0em;
558 border-bottom: solid 0.06em;
559}
560
561h5 {
562 border: 0em;
563}
564*/
565
566.programlisting {
567 border: solid 1px;
568}
569
570div.figure,
571div.table,
572div.informalfigure,
573div.informaltable,
574div.informalexample,
575div.example {
576 border: 1px solid;
577}
578
579
580
581.tip,
582.warning,
583.caution,
584.note {
585 border: 1px solid;
586}
587
588.tip table th,
589.warning table th,
590.caution table th,
591.note table th {
592 border-bottom: 1px solid;
593}
594
595.question td {
596 border-top: 1px solid black;
597}
598
599.answer {
600}
601
602
603b.keycap,
604.keycap {
605 border: 1px solid;
606}
607
608
609div.navheader, div.heading{
610 border-bottom: 1px solid;
611}
612
613
614div.navfooter, div.footing{
615 border-top: 1px solid;
616}
617
618 /********* /
619 / colors /
620/ *********/
621
622body {
623 color: #333;
624 background: white;
625}
626
627a {
628 background: transparent;
629}
630
631a:hover {
632 background-color: #dedede;
633}
634
635
636h1,
637h2,
638h3,
639h4,
640h5,
641h6,
642h7,
643h8 {
644 background-color: transparent;
645}
646
647hr {
648 border-color: #aaa;
649}
650
651
652.tip, .warning, .caution, .note {
653 border-color: #fff;
654}
655
656
657.tip table th,
658.warning table th,
659.caution table th,
660.note table th {
661 border-bottom-color: #fff;
662}
663
664
665.warning {
666 background-color: #f0f0f2;
667}
668
669.caution {
670 background-color: #f0f0f2;
671}
672
673.tip {
674 background-color: #f0f0f2;
675}
676
677.note {
678 background-color: #f0f0f2;
679}
680
681.glossary dl dt,
682.variablelist dl dt,
683.variablelist dl dt span.term {
684 color: #044;
685}
686
687div.figure,
688div.table,
689div.example,
690div.informalfigure,
691div.informaltable,
692div.informalexample {
693 border-color: #aaa;
694}
695
696pre.programlisting {
697 color: black;
698 background-color: #fff;
699 border-color: #aaa;
700 border-width: 2px;
701}
702
703.guimenu,
704.guilabel,
705.guimenuitem {
706 background-color: #eee;
707}
708
709
710b.keycap,
711.keycap {
712 background-color: #eee;
713 border-color: #999;
714}
715
716
717div.navheader {
718 border-color: black;
719}
720
721
722div.navfooter {
723 border-color: black;
724}
725
726
727 /*********** /
728 / graphics /
729/ ***********/
730
731/*
732body {
733 background-image: url("images/body_bg.jpg");
734 background-attachment: fixed;
735}
736
737.navheader,
738.note,
739.tip {
740 background-image: url("images/note_bg.jpg");
741 background-attachment: fixed;
742}
743
744.warning,
745.caution {
746 background-image: url("images/warning_bg.jpg");
747 background-attachment: fixed;
748}
749
750.figure,
751.informalfigure,
752.example,
753.informalexample,
754.table,
755.informaltable {
756 background-image: url("images/figure_bg.jpg");
757 background-attachment: fixed;
758}
759
760*/
761h1,
762h2,
763h3,
764h4,
765h5,
766h6,
767h7{
768}
769
770/*
771Example of how to stick an image as part of the title.
772
773div.article .titlepage .title
774{
775 background-image: url("figures/white-on-black.png");
776 background-position: center;
777 background-repeat: repeat-x;
778}
779*/
780
781div.preface .titlepage .title,
782div.colophon .title,
783div.chapter .titlepage .title,
784div.article .titlepage .title
785{
786}
787
788div.section div.section .titlepage .title,
789div.sect2 .titlepage .title {
790 background: none;
791}
792
793
794h1.title {
795 background-color: transparent;
796 background-image: url("figures/yocto-project-bw.png");
797 background-repeat: no-repeat;
798 height: 256px;
799 text-indent: -9000px;
800 overflow:hidden;
801}
802
803h2.subtitle {
804 background-color: transparent;
805 text-indent: -9000px;
806 overflow:hidden;
807 width: 0px;
808 display: none;
809}
810
811 /*************************************** /
812 / pippin.gimp.org specific alterations /
813/ ***************************************/
814
815/*
816div.heading, div.navheader {
817 color: #777;
818 font-size: 80%;
819 padding: 0;
820 margin: 0;
821 text-align: left;
822 position: absolute;
823 top: 0px;
824 left: 0px;
825 width: 100%;
826 height: 50px;
827 background: url('/gfx/heading_bg.png') transparent;
828 background-repeat: repeat-x;
829 background-attachment: fixed;
830 border: none;
831}
832
833div.heading a {
834 color: #444;
835}
836
837div.footing, div.navfooter {
838 border: none;
839 color: #ddd;
840 font-size: 80%;
841 text-align:right;
842
843 width: 100%;
844 padding-top: 10px;
845 position: absolute;
846 bottom: 0px;
847 left: 0px;
848
849 background: url('/gfx/footing_bg.png') transparent;
850}
851*/
852
853
854
855 /****************** /
856 / nasty ie tweaks /
857/ ******************/
858
859/*
860div.heading, div.navheader {
861 width:expression(document.body.clientWidth + "px");
862}
863
864div.footing, div.navfooter {
865 width:expression(document.body.clientWidth + "px");
866 margin-left:expression("-5em");
867}
868body {
869 padding:expression("4em 5em 0em 5em");
870}
871*/
872
873 /**************************************** /
874 / mozilla vendor specific css extensions /
875/ ****************************************/
876/*
877div.navfooter, div.footing{
878 -moz-opacity: 0.8em;
879}
880
881div.figure,
882div.table,
883div.informalfigure,
884div.informaltable,
885div.informalexample,
886div.example,
887.tip,
888.warning,
889.caution,
890.note {
891 -moz-border-radius: 0.5em;
892}
893
894b.keycap,
895.keycap {
896 -moz-border-radius: 0.3em;
897}
898*/
899
900table tr td table tr td {
901 display: none;
902}
903
904
905hr {
906 display: none;
907}
908
909table {
910 border: 0em;
911}
912
913 .photo {
914 float: right;
915 margin-left: 1.5em;
916 margin-bottom: 1.5em;
917 margin-top: 0em;
918 max-width: 17em;
919 border: 1px solid gray;
920 padding: 3px;
921 background: white;
922}
923 .seperator {
924 padding-top: 2em;
925 clear: both;
926 }
927
928 #validators {
929 margin-top: 5em;
930 text-align: right;
931 color: #777;
932 }
933 @media print {
934 body {
935 font-size: 8pt;
936 }
937 .noprint {
938 display: none;
939 }
940 }
941
942
943.tip,
944.note {
945 background: #f0f0f2;
946 color: #333;
947 padding: 20px;
948 margin: 20px;
949}
950
951.tip h3,
952.note h3 {
953 padding: 0em;
954 margin: 0em;
955 font-size: 2em;
956 font-weight: bold;
957 color: #333;
958}
959
960.tip a,
961.note a {
962 color: #333;
963 text-decoration: underline;
964}
965
966.footnote {
967 font-size: small;
968 color: #333;
969}
970
971/* Changes the announcement text */
972.tip h3,
973.warning h3,
974.caution h3,
975.note h3 {
976 font-size:large;
977 color: #00557D;
978}
diff --git a/documentation/profile-manual/profile-manual-usage.xml b/documentation/profile-manual/profile-manual-usage.xml
new file mode 100644
index 0000000000..5577b1b001
--- /dev/null
+++ b/documentation/profile-manual/profile-manual-usage.xml
@@ -0,0 +1,3685 @@
1<!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='profile-manual-usage'>
6
7<title>Basic Usage (with examples) for each of the Yocto Tracing Tools</title>
8
9<para>
10 This chapter presents basic usage examples for each of the tracing
11 tools.
12</para>
13
14<section id='profile-manual-perf'>
15 <title>perf</title>
16
17 <para>
18 The 'perf' tool is the profiling and tracing tool that comes
19 bundled with the Linux kernel.
20 </para>
21
22 <para>
23 Don't let the fact that it's part of the kernel fool you into thinking
24 that it's only for tracing and profiling the kernel - you can indeed
25 use it to trace and profile just the kernel, but you can also use it
26 to profile specific applications separately (with or without kernel
27 context), and you can also use it to trace and profile the kernel
28 and all applications on the system simultaneously to gain a system-wide
29 view of what's going on.
30 </para>
31
32 <para>
33 In many ways, perf aims to be a superset of all the tracing and profiling
34 tools available in Linux today, including all the other tools covered
35 in this HOWTO. The past couple of years have seen perf subsume a lot
36 of the functionality of those other tools and, at the same time, those
37 other tools have removed large portions of their previous functionality
38 and replaced it with calls to the equivalent functionality now
39 implemented by the perf subsystem. Extrapolation suggests that at
40 some point those other tools will simply become completely redundant
41 and go away; until then, we'll cover those other tools in these pages
42 and in many cases show how the same things can be accomplished in
43 perf and the other tools when it seems useful to do so.
44 </para>
45
46 <para>
47 The coverage below details some of the most common ways you'll likely
48 want to apply the tool; full documentation can be found either within
49 the tool itself or in the man pages at
50 <ulink url='http://linux.die.net/man/1/perf'>perf(1)</ulink>.
51 </para>
52
53 <section id='perf-setup'>
54 <title>Setup</title>
55
56 <para>
57 For this section, we'll assume you've already performed the basic
58 setup outlined in the General Setup section.
59 </para>
60
61 <para>
62 In particular, you'll get the most mileage out of perf if you
63 profile an image built with INHIBIT_PACKAGE_STRIP = "1" in your
64 local.conf.
65 </para>
66
67 <para>
68 perf runs on the target system for the most part. You can archive
69 profile data and copy it to the host for analysis, but for the
70 rest of this document we assume you've ssh'ed to the host and
71 will be running the perf commands on the target.
72 </para>
73 </section>
74
75 <section id='perf-basic-usage'>
76 <title>Basic Usage</title>
77
78 <para>
79 The perf tool is pretty much self-documenting. To remind yourself
80 of the available commands, simply type 'perf', which will show you
81 basic usage along with the available perf subcommands:
82 <literallayout class='monospaced'>
83 root@crownbay:~# perf
84
85 usage: perf [--version] [--help] COMMAND [ARGS]
86
87 The most commonly used perf commands are:
88 annotate Read perf.data (created by perf record) and display annotated code
89 archive Create archive with object files with build-ids found in perf.data file
90 bench General framework for benchmark suites
91 buildid-cache Manage build-id cache.
92 buildid-list List the buildids in a perf.data file
93 diff Read two perf.data files and display the differential profile
94 evlist List the event names in a perf.data file
95 inject Filter to augment the events stream with additional information
96 kmem Tool to trace/measure kernel memory(slab) properties
97 kvm Tool to trace/measure kvm guest os
98 list List all symbolic event types
99 lock Analyze lock events
100 probe Define new dynamic tracepoints
101 record Run a command and record its profile into perf.data
102 report Read perf.data (created by perf record) and display the profile
103 sched Tool to trace/measure scheduler properties (latencies)
104 script Read perf.data (created by perf record) and display trace output
105 stat Run a command and gather performance counter statistics
106 test Runs sanity tests.
107 timechart Tool to visualize total system behavior during a workload
108 top System profiling tool.
109
110 See 'perf help COMMAND' for more information on a specific command.
111 </literallayout>
112 </para>
113
114 <section id='using-perf-to-do-basic-profiling'>
115 <title>Using perf to do Basic Profiling</title>
116
117 <para>
118 As a simple test case, we'll profile the 'wget' of a fairly large
119 file, which is a minimally interesting case because it has both
120 file and network I/O aspects, and at least in the case of standard
121 Yocto images, it's implemented as part of busybox, so the methods
122 we use to analyze it can be used in a very similar way to the whole
123 host of supported busybox applets in Yocto.
124 <literallayout class='monospaced'>
125 root@crownbay:~# rm linux-2.6.19.2.tar.bz2; \
126 wget <ulink url='http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2'>http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2</ulink>
127 </literallayout>
128 The quickest and easiest way to get some basic overall data about
129 what's going on for a particular workload is to profile it using
130 'perf stat'. 'perf stat' basically profiles using a few default
131 counters and displays the summed counts at the end of the run:
132 <literallayout class='monospaced'>
133 root@crownbay:~# perf stat wget <ulink url='http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2'>http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2</ulink>
134 Connecting to downloads.yoctoproject.org (140.211.169.59:80)
135 linux-2.6.19.2.tar.b 100% |***************************************************| 41727k 0:00:00 ETA
136
137 Performance counter stats for 'wget <ulink url='http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2'>http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2</ulink>':
138
139 4597.223902 task-clock # 0.077 CPUs utilized
140 23568 context-switches # 0.005 M/sec
141 68 CPU-migrations # 0.015 K/sec
142 241 page-faults # 0.052 K/sec
143 3045817293 cycles # 0.663 GHz
144 &lt;not supported&gt; stalled-cycles-frontend
145 &lt;not supported&gt; stalled-cycles-backend
146 858909167 instructions # 0.28 insns per cycle
147 165441165 branches # 35.987 M/sec
148 19550329 branch-misses # 11.82% of all branches
149
150 59.836627620 seconds time elapsed
151 </literallayout>
152 Many times such a simple-minded test doesn't yield much of
153 interest, but sometimes it does (see Real-world Yocto bug
154 (slow loop-mounted write speed)).
155 </para>
156
157 <para>
158 Also, note that 'perf stat' isn't restricted to a fixed set of
159 counters - basically any event listed in the output of 'perf list'
160 can be tallied by 'perf stat'. For example, suppose we wanted to
161 see a summary of all the events related to kernel memory
162 allocation/freeing along with cache hits and misses:
163 <literallayout class='monospaced'>
164 root@crownbay:~# perf stat -e kmem:* -e cache-references -e cache-misses wget <ulink url='http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2'>http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2</ulink>
165 Connecting to downloads.yoctoproject.org (140.211.169.59:80)
166 linux-2.6.19.2.tar.b 100% |***************************************************| 41727k 0:00:00 ETA
167
168 Performance counter stats for 'wget <ulink url='http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2'>http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2</ulink>':
169
170 5566 kmem:kmalloc
171 125517 kmem:kmem_cache_alloc
172 0 kmem:kmalloc_node
173 0 kmem:kmem_cache_alloc_node
174 34401 kmem:kfree
175 69920 kmem:kmem_cache_free
176 133 kmem:mm_page_free
177 41 kmem:mm_page_free_batched
178 11502 kmem:mm_page_alloc
179 11375 kmem:mm_page_alloc_zone_locked
180 0 kmem:mm_page_pcpu_drain
181 0 kmem:mm_page_alloc_extfrag
182 66848602 cache-references
183 2917740 cache-misses # 4.365 % of all cache refs
184
185 44.831023415 seconds time elapsed
186 </literallayout>
187 So 'perf stat' gives us a nice easy way to get a quick overview of
188 what might be happening for a set of events, but normally we'd
189 need a little more detail in order to understand what's going on
190 in a way that we can act on in a useful way.
191 </para>
192
193 <para>
194 To dive down into a next level of detail, we can use 'perf
195 record'/'perf report' which will collect profiling data and
196 present it to use using an interactive text-based UI (or
197 simply as text if we specify --stdio to 'perf report').
198 </para>
199
200 <para>
201 As our first attempt at profiling this workload, we'll simply
202 run 'perf record', handing it the workload we want to profile
203 (everything after 'perf record' and any perf options we hand
204 it - here none - will be executed in a new shell). perf collects
205 samples until the process exits and records them in a file named
206 'perf.data' in the current working directory.
207 <literallayout class='monospaced'>
208 root@crownbay:~# perf record wget <ulink url='http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2'>http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2</ulink>
209
210 Connecting to downloads.yoctoproject.org (140.211.169.59:80)
211 linux-2.6.19.2.tar.b 100% |************************************************| 41727k 0:00:00 ETA
212 [ perf record: Woken up 1 times to write data ]
213 [ perf record: Captured and wrote 0.176 MB perf.data (~7700 samples) ]
214 </literallayout>
215 To see the results in a 'text-based UI' (tui), simply run
216 'perf report', which will read the perf.data file in the current
217 working directory and display the results in an interactive UI:
218 <literallayout class='monospaced'>
219 root@crownbay:~# perf report
220 </literallayout>
221 </para>
222
223 <para>
224 <imagedata fileref="figures/perf-wget-flat-stripped.png" width="6in" depth="7in" align="center" scalefit="1" />
225 </para>
226
227 <para>
228 The above screenshot displays a 'flat' profile, one entry for
229 each 'bucket' corresponding to the functions that were profiled
230 during the profiling run, ordered from the most popular to the
231 least (perf has options to sort in various orders and keys as
232 well as display entries only above a certain threshold and so
233 on - see the perf documentation for details). Note that this
234 includes both userspace functions (entries containing a [.]) and
235 kernel functions accounted to the process (entries containing
236 a [k]). (perf has command-line modifiers that can be used to
237 restrict the profiling to kernel or userspace, among others).
238 </para>
239
240 <para>
241 Notice also that the above report shows an entry for 'busybox',
242 which is the executable that implements 'wget' in Yocto, but that
243 instead of a useful function name in that entry, it displays
244 a not-so-friendly hex value instead. The steps below will show
245 how to fix that problem.
246 </para>
247
248 <para>
249 Before we do that, however, let's try running a different profile,
250 one which shows something a little more interesting. The only
251 difference between the new profile and the previous one is that
252 we'll add the -g option, which will record not just the address
253 of a sampled function, but the entire callchain to the sampled
254 function as well:
255 <literallayout class='monospaced'>
256 root@crownbay:~# perf record -g wget <ulink url='http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2'>http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2</ulink>
257 Connecting to downloads.yoctoproject.org (140.211.169.59:80)
258 linux-2.6.19.2.tar.b 100% |************************************************| 41727k 0:00:00 ETA
259 [ perf record: Woken up 3 times to write data ]
260 [ perf record: Captured and wrote 0.652 MB perf.data (~28476 samples) ]
261
262
263 root@crownbay:~# perf report
264 </literallayout>
265 </para>
266
267 <para>
268 <imagedata fileref="figures/perf-wget-g-copy-to-user-expanded-stripped.png" width="6in" depth="7in" align="center" scalefit="1" />
269 </para>
270
271 <para>
272 Using the callgraph view, we can actually see not only which
273 functions took the most time, but we can also see a summary of
274 how those functions were called and learn something about how the
275 program interacts with the kernel in the process.
276 </para>
277
278 <para>
279 Notice that each entry in the above screenshot now contains a '+'
280 on the left-hand side. This means that we can expand the entry and
281 drill down into the callchains that feed into that entry.
282 Pressing 'enter' on any one of them will expand the callchain
283 (you can also press 'E' to expand them all at the same time or 'C'
284 to collapse them all).
285 </para>
286
287 <para>
288 In the screenshot above, we've toggled the __copy_to_user_ll()
289 entry and several subnodes all the way down. This lets us see
290 which callchains contributed to the profiled __copy_to_user_ll()
291 function which contributed 1.77% to the total profile.
292 </para>
293
294 <para>
295 As a bit of background explanation for these callchains, think
296 about what happens at a high level when you run wget to get a file
297 out on the network. Basically what happens is that the data comes
298 into the kernel via the network connection (socket) and is passed
299 to the userspace program 'wget' (which is actually a part of
300 busybox, but that's not important for now), which takes the buffers
301 the kernel passes to it and writes it to a disk file to save it.
302 </para>
303
304 <para>
305 The part of this process that we're looking at in the above call
306 stacks is the part where the kernel passes the data it's read from
307 the socket down to wget i.e. a copy-to-user.
308 </para>
309
310 <para>
311 Notice also that here there's also a case where the hex value
312 is displayed in the callstack, here in the expanded
313 sys_clock_gettime() function. Later we'll see it resolve to a
314 userspace function call in busybox.
315 </para>
316
317 <para>
318 <imagedata fileref="figures/perf-wget-g-copy-from-user-expanded-stripped.png" width="6in" depth="7in" align="center" scalefit="1" />
319 </para>
320
321 <para>
322 The above screenshot shows the other half of the journey for the
323 data - from the wget program's userspace buffers to disk. To get
324 the buffers to disk, the wget program issues a write(2), which
325 does a copy-from-user to the kernel, which then takes care via
326 some circuitous path (probably also present somewhere in the
327 profile data), to get it safely to disk.
328 </para>
329
330 <para>
331 Now that we've seen the basic layout of the profile data and the
332 basics of how to extract useful information out of it, let's get
333 back to the task at hand and see if we can get some basic idea
334 about where the time is spent in the program we're profiling,
335 wget. Remember that wget is actually implemented as an applet
336 in busybox, so while the process name is 'wget', the executable
337 we're actually interested in is busybox. So let's expand the
338 first entry containing busybox:
339 </para>
340
341 <para>
342 <imagedata fileref="figures/perf-wget-busybox-expanded-stripped.png" width="6in" depth="7in" align="center" scalefit="1" />
343 </para>
344
345 <para>
346 Again, before we expanded we saw that the function was labeled
347 with a hex value instead of a symbol as with most of the kernel
348 entries. Expanding the busybox entry doesn't make it any better.
349 </para>
350
351 <para>
352 The problem is that perf can't find the symbol information for the
353 busybox binary, which is actually stripped out by the Yocto build
354 system.
355 </para>
356
357 <para>
358 One way around that is to put the following in your local.conf
359 when you build the image:
360 <literallayout class='monospaced'>
361 INHIBIT_PACKAGE_STRIP = "1"
362 </literallayout>
363 However, we already have an image with the binaries stripped,
364 so what can we do to get perf to resolve the symbols? Basically
365 we need to install the debuginfo for the busybox package.
366 </para>
367
368 <para>
369 To generate the debug info for the packages in the image, we can
370 add dbg-pkgs to EXTRA_IMAGE_FEATURES in local.conf. For example:
371 <literallayout class='monospaced'>
372 EXTRA_IMAGE_FEATURES = "debug-tweaks tools-profile dbg-pkgs"
373 </literallayout>
374 Additionally, in order to generate the type of debuginfo that
375 perf understands, we also need to add the following to local.conf:
376 <literallayout class='monospaced'>
377 PACKAGE_DEBUG_SPLIT_STYLE = 'debug-file-directory'
378 </literallayout>
379 Once we've done that, we can install the debuginfo for busybox.
380 The debug packages once built can be found in
381 build/tmp/deploy/rpm/* on the host system. Find the
382 busybox-dbg-...rpm file and copy it to the target. For example:
383 <literallayout class='monospaced'>
384 [trz@empanada core2]$ scp /home/trz/yocto/crownbay-tracing-dbg/build/tmp/deploy/rpm/core2_32/busybox-dbg-1.20.2-r2.core2_32.rpm root@192.168.1.31:
385 root@192.168.1.31's password:
386 busybox-dbg-1.20.2-r2.core2_32.rpm 100% 1826KB 1.8MB/s 00:01
387 </literallayout>
388 Now install the debug rpm on the target:
389 <literallayout class='monospaced'>
390 root@crownbay:~# rpm -i busybox-dbg-1.20.2-r2.core2_32.rpm
391 </literallayout>
392 Now that the debuginfo is installed, we see that the busybox
393 entries now display their functions symbolically:
394 </para>
395
396 <para>
397 <imagedata fileref="figures/perf-wget-busybox-debuginfo.png" width="6in" depth="7in" align="center" scalefit="1" />
398 </para>
399
400 <para>
401 If we expand one of the entries and press 'enter' on a leaf node,
402 we're presented with a menu of actions we can take to get more
403 information related to that entry:
404 </para>
405
406 <para>
407 <imagedata fileref="figures/perf-wget-busybox-dso-zoom-menu.png" width="6in" depth="2in" align="center" scalefit="1" />
408 </para>
409
410 <para>
411 One of these actions allows us to show a view that displays a
412 busybox-centric view of the profiled functions (in this case we've
413 also expanded all the nodes using the 'E' key):
414 </para>
415
416 <para>
417 <imagedata fileref="figures/perf-wget-busybox-dso-zoom.png" width="6in" depth="7in" align="center" scalefit="1" />
418 </para>
419
420 <para>
421 Finally, we can see that now that the busybox debuginfo is
422 installed, the previously unresolved symbol in the
423 sys_clock_gettime() entry mentioned previously is now resolved,
424 and shows that the sys_clock_gettime system call that was the
425 source of 6.75% of the copy-to-user overhead was initiated by
426 the handle_input() busybox function:
427 </para>
428
429 <para>
430 <imagedata fileref="figures/perf-wget-g-copy-to-user-expanded-debuginfo.png" width="6in" depth="7in" align="center" scalefit="1" />
431 </para>
432
433 <para>
434 At the lowest level of detail, we can dive down to the assembly
435 level and see which instructions caused the most overhead in a
436 function. Pressing 'enter' on the 'udhcpc_main' function, we're
437 again presented with a menu:
438 </para>
439
440 <para>
441 <imagedata fileref="figures/perf-wget-busybox-annotate-menu.png" width="6in" depth="2in" align="center" scalefit="1" />
442 </para>
443
444 <para>
445 Selecting 'Annotate udhcpc_main', we get a detailed listing of
446 percentages by instruction for the udhcpc_main function. From the
447 display, we can see that over 50% of the time spent in this
448 function is taken up by a couple tests and the move of a
449 constant (1) to a register:
450 </para>
451
452 <para>
453 <imagedata fileref="figures/perf-wget-busybox-annotate-udhcpc.png" width="6in" depth="7in" align="center" scalefit="1" />
454 </para>
455
456 <para>
457 As a segue into tracing, let's try another profile using a
458 different counter, something other than the default 'cycles'.
459 </para>
460
461 <para>
462 The tracing and profiling infrastructure in Linux has become
463 unified in a way that allows us to use the same tool with a
464 completely different set of counters, not just the standard
465 hardware counters that traditional tools have had to restrict
466 themselves to (of course the traditional tools can also make use
467 of the expanded possibilities now available to them, and in some
468 cases have, as mentioned previously).
469 </para>
470
471 <para>
472 We can get a list of the available events that can be used to
473 profile a workload via 'perf list':
474 <literallayout class='monospaced'>
475 root@crownbay:~# perf list
476
477 List of pre-defined events (to be used in -e):
478 cpu-cycles OR cycles [Hardware event]
479 stalled-cycles-frontend OR idle-cycles-frontend [Hardware event]
480 stalled-cycles-backend OR idle-cycles-backend [Hardware event]
481 instructions [Hardware event]
482 cache-references [Hardware event]
483 cache-misses [Hardware event]
484 branch-instructions OR branches [Hardware event]
485 branch-misses [Hardware event]
486 bus-cycles [Hardware event]
487 ref-cycles [Hardware event]
488
489 cpu-clock [Software event]
490 task-clock [Software event]
491 page-faults OR faults [Software event]
492 minor-faults [Software event]
493 major-faults [Software event]
494 context-switches OR cs [Software event]
495 cpu-migrations OR migrations [Software event]
496 alignment-faults [Software event]
497 emulation-faults [Software event]
498
499 L1-dcache-loads [Hardware cache event]
500 L1-dcache-load-misses [Hardware cache event]
501 L1-dcache-prefetch-misses [Hardware cache event]
502 L1-icache-loads [Hardware cache event]
503 L1-icache-load-misses [Hardware cache event]
504 .
505 .
506 .
507 rNNN [Raw hardware event descriptor]
508 cpu/t1=v1[,t2=v2,t3 ...]/modifier [Raw hardware event descriptor]
509 (see 'perf list --help' on how to encode it)
510
511 mem:&lt;addr&gt;[:access] [Hardware breakpoint]
512
513 sunrpc:rpc_call_status [Tracepoint event]
514 sunrpc:rpc_bind_status [Tracepoint event]
515 sunrpc:rpc_connect_status [Tracepoint event]
516 sunrpc:rpc_task_begin [Tracepoint event]
517 skb:kfree_skb [Tracepoint event]
518 skb:consume_skb [Tracepoint event]
519 skb:skb_copy_datagram_iovec [Tracepoint event]
520 net:net_dev_xmit [Tracepoint event]
521 net:net_dev_queue [Tracepoint event]
522 net:netif_receive_skb [Tracepoint event]
523 net:netif_rx [Tracepoint event]
524 napi:napi_poll [Tracepoint event]
525 sock:sock_rcvqueue_full [Tracepoint event]
526 sock:sock_exceed_buf_limit [Tracepoint event]
527 udp:udp_fail_queue_rcv_skb [Tracepoint event]
528 hda:hda_send_cmd [Tracepoint event]
529 hda:hda_get_response [Tracepoint event]
530 hda:hda_bus_reset [Tracepoint event]
531 scsi:scsi_dispatch_cmd_start [Tracepoint event]
532 scsi:scsi_dispatch_cmd_error [Tracepoint event]
533 scsi:scsi_eh_wakeup [Tracepoint event]
534 drm:drm_vblank_event [Tracepoint event]
535 drm:drm_vblank_event_queued [Tracepoint event]
536 drm:drm_vblank_event_delivered [Tracepoint event]
537 random:mix_pool_bytes [Tracepoint event]
538 random:mix_pool_bytes_nolock [Tracepoint event]
539 random:credit_entropy_bits [Tracepoint event]
540 gpio:gpio_direction [Tracepoint event]
541 gpio:gpio_value [Tracepoint event]
542 block:block_rq_abort [Tracepoint event]
543 block:block_rq_requeue [Tracepoint event]
544 block:block_rq_issue [Tracepoint event]
545 block:block_bio_bounce [Tracepoint event]
546 block:block_bio_complete [Tracepoint event]
547 block:block_bio_backmerge [Tracepoint event]
548 .
549 .
550 writeback:writeback_wake_thread [Tracepoint event]
551 writeback:writeback_wake_forker_thread [Tracepoint event]
552 writeback:writeback_bdi_register [Tracepoint event]
553 .
554 .
555 writeback:writeback_single_inode_requeue [Tracepoint event]
556 writeback:writeback_single_inode [Tracepoint event]
557 kmem:kmalloc [Tracepoint event]
558 kmem:kmem_cache_alloc [Tracepoint event]
559 kmem:mm_page_alloc [Tracepoint event]
560 kmem:mm_page_alloc_zone_locked [Tracepoint event]
561 kmem:mm_page_pcpu_drain [Tracepoint event]
562 kmem:mm_page_alloc_extfrag [Tracepoint event]
563 vmscan:mm_vmscan_kswapd_sleep [Tracepoint event]
564 vmscan:mm_vmscan_kswapd_wake [Tracepoint event]
565 vmscan:mm_vmscan_wakeup_kswapd [Tracepoint event]
566 vmscan:mm_vmscan_direct_reclaim_begin [Tracepoint event]
567 .
568 .
569 module:module_get [Tracepoint event]
570 module:module_put [Tracepoint event]
571 module:module_request [Tracepoint event]
572 sched:sched_kthread_stop [Tracepoint event]
573 sched:sched_wakeup [Tracepoint event]
574 sched:sched_wakeup_new [Tracepoint event]
575 sched:sched_process_fork [Tracepoint event]
576 sched:sched_process_exec [Tracepoint event]
577 sched:sched_stat_runtime [Tracepoint event]
578 rcu:rcu_utilization [Tracepoint event]
579 workqueue:workqueue_queue_work [Tracepoint event]
580 workqueue:workqueue_execute_end [Tracepoint event]
581 signal:signal_generate [Tracepoint event]
582 signal:signal_deliver [Tracepoint event]
583 timer:timer_init [Tracepoint event]
584 timer:timer_start [Tracepoint event]
585 timer:hrtimer_cancel [Tracepoint event]
586 timer:itimer_state [Tracepoint event]
587 timer:itimer_expire [Tracepoint event]
588 irq:irq_handler_entry [Tracepoint event]
589 irq:irq_handler_exit [Tracepoint event]
590 irq:softirq_entry [Tracepoint event]
591 irq:softirq_exit [Tracepoint event]
592 irq:softirq_raise [Tracepoint event]
593 printk:console [Tracepoint event]
594 task:task_newtask [Tracepoint event]
595 task:task_rename [Tracepoint event]
596 syscalls:sys_enter_socketcall [Tracepoint event]
597 syscalls:sys_exit_socketcall [Tracepoint event]
598 .
599 .
600 .
601 syscalls:sys_enter_unshare [Tracepoint event]
602 syscalls:sys_exit_unshare [Tracepoint event]
603 raw_syscalls:sys_enter [Tracepoint event]
604 raw_syscalls:sys_exit [Tracepoint event]
605 </literallayout>
606 </para>
607
608 <informalexample>
609 <emphasis>Tying it Together:</emphasis> These are exactly the same set of events defined
610 by the trace event subsystem and exposed by
611 ftrace/tracecmd/kernelshark as files in
612 /sys/kernel/debug/tracing/events, by SystemTap as
613 kernel.trace("tracepoint_name") and (partially) accessed by LTTng.
614 </informalexample>
615
616 <para>
617 Only a subset of these would be of interest to us when looking at
618 this workload, so let's choose the most likely subsystems
619 (identified by the string before the colon in the Tracepoint events)
620 and do a 'perf stat' run using only those wildcarded subsystems:
621 <literallayout class='monospaced'>
622 root@crownbay:~# perf stat -e skb:* -e net:* -e napi:* -e sched:* -e workqueue:* -e irq:* -e syscalls:* wget <ulink url='http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2'>http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2</ulink>
623 Performance counter stats for 'wget <ulink url='http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2'>http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2</ulink>':
624
625 23323 skb:kfree_skb
626 0 skb:consume_skb
627 49897 skb:skb_copy_datagram_iovec
628 6217 net:net_dev_xmit
629 6217 net:net_dev_queue
630 7962 net:netif_receive_skb
631 2 net:netif_rx
632 8340 napi:napi_poll
633 0 sched:sched_kthread_stop
634 0 sched:sched_kthread_stop_ret
635 3749 sched:sched_wakeup
636 0 sched:sched_wakeup_new
637 0 sched:sched_switch
638 29 sched:sched_migrate_task
639 0 sched:sched_process_free
640 1 sched:sched_process_exit
641 0 sched:sched_wait_task
642 0 sched:sched_process_wait
643 0 sched:sched_process_fork
644 1 sched:sched_process_exec
645 0 sched:sched_stat_wait
646 2106519415641 sched:sched_stat_sleep
647 0 sched:sched_stat_iowait
648 147453613 sched:sched_stat_blocked
649 12903026955 sched:sched_stat_runtime
650 0 sched:sched_pi_setprio
651 3574 workqueue:workqueue_queue_work
652 3574 workqueue:workqueue_activate_work
653 0 workqueue:workqueue_execute_start
654 0 workqueue:workqueue_execute_end
655 16631 irq:irq_handler_entry
656 16631 irq:irq_handler_exit
657 28521 irq:softirq_entry
658 28521 irq:softirq_exit
659 28728 irq:softirq_raise
660 1 syscalls:sys_enter_sendmmsg
661 1 syscalls:sys_exit_sendmmsg
662 0 syscalls:sys_enter_recvmmsg
663 0 syscalls:sys_exit_recvmmsg
664 14 syscalls:sys_enter_socketcall
665 14 syscalls:sys_exit_socketcall
666 .
667 .
668 .
669 16965 syscalls:sys_enter_read
670 16965 syscalls:sys_exit_read
671 12854 syscalls:sys_enter_write
672 12854 syscalls:sys_exit_write
673 .
674 .
675 .
676
677 58.029710972 seconds time elapsed
678 </literallayout>
679 Let's pick one of these tracepoints and tell perf to do a profile
680 using it as the sampling event:
681 <literallayout class='monospaced'>
682 root@crownbay:~# perf record -g -e sched:sched_wakeup wget <ulink url='http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2'>http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2</ulink>
683 </literallayout>
684 </para>
685
686 <para>
687 <imagedata fileref="figures/sched-wakeup-profile.png" width="6in" depth="7in" align="center" scalefit="1" />
688 </para>
689
690 <para>
691 The screenshot above shows the results of running a profile using
692 sched:sched_switch tracepoint, which shows the relative costs of
693 various paths to sched_wakeup (note that sched_wakeup is the
694 name of the tracepoint - it's actually defined just inside
695 ttwu_do_wakeup(), which accounts for the function name actually
696 displayed in the profile:
697 <literallayout class='monospaced'>
698 /*
699 * Mark the task runnable and perform wakeup-preemption.
700 */
701 static void
702 ttwu_do_wakeup(struct rq *rq, struct task_struct *p, int wake_flags)
703 {
704 trace_sched_wakeup(p, true);
705 .
706 .
707 .
708 }
709 </literallayout>
710 A couple of the more interesting callchains are expanded and
711 displayed above, basically some network receive paths that
712 presumably end up waking up wget (busybox) when network data is
713 ready.
714 </para>
715
716 <para>
717 Note that because tracepoints are normally used for tracing,
718 the default sampling period for tracepoints is 1 i.e. for
719 tracepoints perf will sample on every event occurrence (this
720 can be changed using the -c option). This is in contrast to
721 hardware counters such as for example the default 'cycles'
722 hardware counter used for normal profiling, where sampling
723 periods are much higher (in the thousands) because profiling should
724 have as low an overhead as possible and sampling on every cycle
725 would be prohibitively expensive.
726 </para>
727 </section>
728
729 <section id='using-perf-to-do-basic-tracing'>
730 <title>Using perf to do Basic Tracing</title>
731
732 <para>
733 Profiling is a great tool for solving many problems or for
734 getting a high-level view of what's going on with a workload or
735 across the system. It is however by definition an approximation,
736 as suggested by the most prominent word associated with it,
737 'sampling'. On the one hand, it allows a representative picture of
738 what's going on in the system to be cheaply taken, but on the other
739 hand, that cheapness limits its utility when that data suggests a
740 need to 'dive down' more deeply to discover what's really going
741 on. In such cases, the only way to see what's really going on is
742 to be able to look at (or summarize more intelligently) the
743 individual steps that go into the higher-level behavior exposed
744 by the coarse-grained profiling data.
745 </para>
746
747 <para>
748 As a concrete example, we can trace all the events we think might
749 be applicable to our workload:
750 <literallayout class='monospaced'>
751 root@crownbay:~# perf record -g -e skb:* -e net:* -e napi:* -e sched:sched_switch -e sched:sched_wakeup -e irq:*
752 -e syscalls:sys_enter_read -e syscalls:sys_exit_read -e syscalls:sys_enter_write -e syscalls:sys_exit_write
753 wget <ulink url='http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2'>http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2</ulink>
754 </literallayout>
755 We can look at the raw trace output using 'perf script' with no
756 arguments:
757 <literallayout class='monospaced'>
758 root@crownbay:~# perf script
759
760 perf 1262 [000] 11624.857082: sys_exit_read: 0x0
761 perf 1262 [000] 11624.857193: sched_wakeup: comm=migration/0 pid=6 prio=0 success=1 target_cpu=000
762 wget 1262 [001] 11624.858021: softirq_raise: vec=1 [action=TIMER]
763 wget 1262 [001] 11624.858074: softirq_entry: vec=1 [action=TIMER]
764 wget 1262 [001] 11624.858081: softirq_exit: vec=1 [action=TIMER]
765 wget 1262 [001] 11624.858166: sys_enter_read: fd: 0x0003, buf: 0xbf82c940, count: 0x0200
766 wget 1262 [001] 11624.858177: sys_exit_read: 0x200
767 wget 1262 [001] 11624.858878: kfree_skb: skbaddr=0xeb248d80 protocol=0 location=0xc15a5308
768 wget 1262 [001] 11624.858945: kfree_skb: skbaddr=0xeb248000 protocol=0 location=0xc15a5308
769 wget 1262 [001] 11624.859020: softirq_raise: vec=1 [action=TIMER]
770 wget 1262 [001] 11624.859076: softirq_entry: vec=1 [action=TIMER]
771 wget 1262 [001] 11624.859083: softirq_exit: vec=1 [action=TIMER]
772 wget 1262 [001] 11624.859167: sys_enter_read: fd: 0x0003, buf: 0xb7720000, count: 0x0400
773 wget 1262 [001] 11624.859192: sys_exit_read: 0x1d7
774 wget 1262 [001] 11624.859228: sys_enter_read: fd: 0x0003, buf: 0xb7720000, count: 0x0400
775 wget 1262 [001] 11624.859233: sys_exit_read: 0x0
776 wget 1262 [001] 11624.859573: sys_enter_read: fd: 0x0003, buf: 0xbf82c580, count: 0x0200
777 wget 1262 [001] 11624.859584: sys_exit_read: 0x200
778 wget 1262 [001] 11624.859864: sys_enter_read: fd: 0x0003, buf: 0xb7720000, count: 0x0400
779 wget 1262 [001] 11624.859888: sys_exit_read: 0x400
780 wget 1262 [001] 11624.859935: sys_enter_read: fd: 0x0003, buf: 0xb7720000, count: 0x0400
781 wget 1262 [001] 11624.859944: sys_exit_read: 0x400
782 </literallayout>
783 This gives us a detailed timestamped sequence of events that
784 occurred within the workload with respect to those events.
785 </para>
786
787 <para>
788 In many ways, profiling can be viewed as a subset of tracing -
789 theoretically, if you have a set of trace events that's sufficient
790 to capture all the important aspects of a workload, you can derive
791 any of the results or views that a profiling run can.
792 </para>
793
794 <para>
795 Another aspect of traditional profiling is that while powerful in
796 many ways, it's limited by the granularity of the underlying data.
797 Profiling tools offer various ways of sorting and presenting the
798 sample data, which make it much more useful and amenable to user
799 experimentation, but in the end it can't be used in an open-ended
800 way to extract data that just isn't present as a consequence of
801 the fact that conceptually, most of it has been thrown away.
802 </para>
803
804 <para>
805 Full-blown detailed tracing data does however offer the opportunity
806 to manipulate and present the information collected during a
807 tracing run in an infinite variety of ways.
808 </para>
809
810 <para>
811 Another way to look at it is that there are only so many ways that
812 the 'primitive' counters can be used on their own to generate
813 interesting output; to get anything more complicated than simple
814 counts requires some amount of additional logic, which is typically
815 very specific to the problem at hand. For example, if we wanted to
816 make use of a 'counter' that maps to the value of the time
817 difference between when a process was scheduled to run on a
818 processor and the time it actually ran, we wouldn't expect such
819 a counter to exist on its own, but we could derive one called say
820 'wakeup_latency' and use it to extract a useful view of that metric
821 from trace data. Likewise, we really can't figure out from standard
822 profiling tools how much data every process on the system reads and
823 writes, along with how many of those reads and writes fail
824 completely. If we have sufficient trace data, however, we could
825 with the right tools easily extract and present that information,
826 but we'd need something other than pre-canned profiling tools to
827 do that.
828 </para>
829
830 <para>
831 Luckily, there is a general-purpose way to handle such needs,
832 called 'programming languages'. Making programming languages
833 easily available to apply to such problems given the specific
834 format of data is called a 'programming language binding' for
835 that data and language. Perf supports two programming language
836 bindings, one for Python and one for Perl.
837 </para>
838
839 <informalexample>
840 <emphasis>Tying it Together:</emphasis> Language bindings for manipulating and
841 aggregating trace data are of course not a new
842 idea. One of the first projects to do this was IBM's DProbes
843 dpcc compiler, an ANSI C compiler which targeted a low-level
844 assembly language running on an in-kernel interpreter on the
845 target system. This is exactly analagous to what Sun's DTrace
846 did, except that DTrace invented its own language for the purpose.
847 Systemtap, heavily inspired by DTrace, also created its own
848 one-off language, but rather than running the product on an
849 in-kernel interpreter, created an elaborate compiler-based
850 machinery to translate its language into kernel modules written
851 in C.
852 </informalexample>
853
854 <para>
855 Now that we have the trace data in perf.data, we can use
856 'perf script -g' to generate a skeleton script with handlers
857 for the read/write entry/exit events we recorded:
858 <literallayout class='monospaced'>
859 root@crownbay:~# perf script -g python
860 generated Python script: perf-script.py
861 </literallayout>
862 The skeleton script simply creates a python function for each
863 event type in the perf.data file. The body of each function simply
864 prints the event name along with its parameters. For example:
865 <literallayout class='monospaced'>
866 def net__netif_rx(event_name, context, common_cpu,
867 common_secs, common_nsecs, common_pid, common_comm,
868 skbaddr, len, name):
869 print_header(event_name, common_cpu, common_secs, common_nsecs,
870 common_pid, common_comm)
871
872 print "skbaddr=%u, len=%u, name=%s\n" % (skbaddr, len, name),
873 </literallayout>
874 We can run that script directly to print all of the events
875 contained in the perf.data file:
876 <literallayout class='monospaced'>
877 root@crownbay:~# perf script -s perf-script.py
878
879 in trace_begin
880 syscalls__sys_exit_read 0 11624.857082795 1262 perf nr=3, ret=0
881 sched__sched_wakeup 0 11624.857193498 1262 perf comm=migration/0, pid=6, prio=0, success=1, target_cpu=0
882 irq__softirq_raise 1 11624.858021635 1262 wget vec=TIMER
883 irq__softirq_entry 1 11624.858074075 1262 wget vec=TIMER
884 irq__softirq_exit 1 11624.858081389 1262 wget vec=TIMER
885 syscalls__sys_enter_read 1 11624.858166434 1262 wget nr=3, fd=3, buf=3213019456, count=512
886 syscalls__sys_exit_read 1 11624.858177924 1262 wget nr=3, ret=512
887 skb__kfree_skb 1 11624.858878188 1262 wget skbaddr=3945041280, location=3243922184, protocol=0
888 skb__kfree_skb 1 11624.858945608 1262 wget skbaddr=3945037824, location=3243922184, protocol=0
889 irq__softirq_raise 1 11624.859020942 1262 wget vec=TIMER
890 irq__softirq_entry 1 11624.859076935 1262 wget vec=TIMER
891 irq__softirq_exit 1 11624.859083469 1262 wget vec=TIMER
892 syscalls__sys_enter_read 1 11624.859167565 1262 wget nr=3, fd=3, buf=3077701632, count=1024
893 syscalls__sys_exit_read 1 11624.859192533 1262 wget nr=3, ret=471
894 syscalls__sys_enter_read 1 11624.859228072 1262 wget nr=3, fd=3, buf=3077701632, count=1024
895 syscalls__sys_exit_read 1 11624.859233707 1262 wget nr=3, ret=0
896 syscalls__sys_enter_read 1 11624.859573008 1262 wget nr=3, fd=3, buf=3213018496, count=512
897 syscalls__sys_exit_read 1 11624.859584818 1262 wget nr=3, ret=512
898 syscalls__sys_enter_read 1 11624.859864562 1262 wget nr=3, fd=3, buf=3077701632, count=1024
899 syscalls__sys_exit_read 1 11624.859888770 1262 wget nr=3, ret=1024
900 syscalls__sys_enter_read 1 11624.859935140 1262 wget nr=3, fd=3, buf=3077701632, count=1024
901 syscalls__sys_exit_read 1 11624.859944032 1262 wget nr=3, ret=1024
902 </literallayout>
903 That in itself isn't very useful; after all, we can accomplish
904 pretty much the same thing by simply running 'perf script'
905 without arguments in the same directory as the perf.data file.
906 </para>
907
908 <para>
909 We can however replace the print statements in the generated
910 function bodies with whatever we want, and thereby make it
911 infinitely more useful.
912 </para>
913
914 <para>
915 As a simple example, let's just replace the print statements in
916 the function bodies with a simple function that does nothing but
917 increment a per-event count. When the program is run against a
918 perf.data file, each time a particular event is encountered,
919 a tally is incremented for that event. For example:
920 <literallayout class='monospaced'>
921 def net__netif_rx(event_name, context, common_cpu,
922 common_secs, common_nsecs, common_pid, common_comm,
923 skbaddr, len, name):
924 inc_counts(event_name)
925 </literallayout>
926 Each event handler function in the generated code is modified
927 to do this. For convenience, we define a common function called
928 inc_counts() that each handler calls; inc_counts() simply tallies
929 a count for each event using the 'counts' hash, which is a
930 specialized hash function that does Perl-like autovivification, a
931 capability that's extremely useful for kinds of multi-level
932 aggregation commonly used in processing traces (see perf's
933 documentation on the Python language binding for details):
934 <literallayout class='monospaced'>
935 counts = autodict()
936
937 def inc_counts(event_name):
938 try:
939 counts[event_name] += 1
940 except TypeError:
941 counts[event_name] = 1
942 </literallayout>
943 Finally, at the end of the trace processing run, we want to
944 print the result of all the per-event tallies. For that, we
945 use the special 'trace_end()' function:
946 <literallayout class='monospaced'>
947 def trace_end():
948 for event_name, count in counts.iteritems():
949 print "%-40s %10s\n" % (event_name, count)
950 </literallayout>
951 The end result is a summary of all the events recorded in the
952 trace:
953 <literallayout class='monospaced'>
954 skb__skb_copy_datagram_iovec 13148
955 irq__softirq_entry 4796
956 irq__irq_handler_exit 3805
957 irq__softirq_exit 4795
958 syscalls__sys_enter_write 8990
959 net__net_dev_xmit 652
960 skb__kfree_skb 4047
961 sched__sched_wakeup 1155
962 irq__irq_handler_entry 3804
963 irq__softirq_raise 4799
964 net__net_dev_queue 652
965 syscalls__sys_enter_read 17599
966 net__netif_receive_skb 1743
967 syscalls__sys_exit_read 17598
968 net__netif_rx 2
969 napi__napi_poll 1877
970 syscalls__sys_exit_write 8990
971 </literallayout>
972 Note that this is pretty much exactly the same information we get
973 from 'perf stat', which goes a little way to support the idea
974 mentioned previously that given the right kind of trace data,
975 higher-level profiling-type summaries can be derived from it.
976 </para>
977
978 <para>
979 Documentation on using the
980 <ulink url='http://linux.die.net/man/1/perf-script-python'>'perf script' python binding</ulink>.
981 </para>
982 </section>
983
984 <section id='system-wide-tracing-and-profiling'>
985 <title>System-Wide Tracing and Profiling</title>
986
987 <para>
988 The examples so far have focused on tracing a particular program or
989 workload - in other words, every profiling run has specified the
990 program to profile in the command-line e.g. 'perf record wget ...'.
991 </para>
992
993 <para>
994 It's also possible, and more interesting in many cases, to run a
995 system-wide profile or trace while running the workload in a
996 separate shell.
997 </para>
998
999 <para>
1000 To do system-wide profiling or tracing, you typically use
1001 the -a flag to 'perf record'.
1002 </para>
1003
1004 <para>
1005 To demonstrate this, open up one window and start the profile
1006 using the -a flag (press Ctrl-C to stop tracing):
1007 <literallayout class='monospaced'>
1008 root@crownbay:~# perf record -g -a
1009 ^C[ perf record: Woken up 6 times to write data ]
1010 [ perf record: Captured and wrote 1.400 MB perf.data (~61172 samples) ]
1011 </literallayout>
1012 In another window, run the wget test:
1013 <literallayout class='monospaced'>
1014 root@crownbay:~# wget <ulink url='http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2'>http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2</ulink>
1015 Connecting to downloads.yoctoproject.org (140.211.169.59:80)
1016 linux-2.6.19.2.tar.b 100% |*******************************| 41727k 0:00:00 ETA
1017 </literallayout>
1018 Here we see entries not only for our wget load, but for other
1019 processes running on the system as well:
1020 </para>
1021
1022 <para>
1023 <imagedata fileref="figures/perf-systemwide.png" width="6in" depth="7in" align="center" scalefit="1" />
1024 </para>
1025
1026 <para>
1027 In the snapshot above, we can see callchains that originate in
1028 libc, and a callchain from Xorg that demonstrates that we're
1029 using a proprietary X driver in userspace (notice the presence
1030 of 'PVR' and some other unresolvable symbols in the expanded
1031 Xorg callchain).
1032 </para>
1033
1034 <para>
1035 Note also that we have both kernel and userspace entries in the
1036 above snapshot. We can also tell perf to focus on userspace but
1037 providing a modifier, in this case 'u', to the 'cycles' hardware
1038 counter when we record a profile:
1039 <literallayout class='monospaced'>
1040 root@crownbay:~# perf record -g -a -e cycles:u
1041 ^C[ perf record: Woken up 2 times to write data ]
1042 [ perf record: Captured and wrote 0.376 MB perf.data (~16443 samples) ]
1043 </literallayout>
1044 </para>
1045
1046 <para>
1047 <imagedata fileref="figures/perf-report-cycles-u.png" width="6in" depth="7in" align="center" scalefit="1" />
1048 </para>
1049
1050 <para>
1051 Notice in the screenshot above, we see only userspace entries ([.])
1052 </para>
1053
1054 <para>
1055 Finally, we can press 'enter' on a leaf node and select the 'Zoom
1056 into DSO' menu item to show only entries associated with a
1057 specific DSO. In the screenshot below, we've zoomed into the
1058 'libc' DSO which shows all the entries associated with the
1059 libc-xxx.so DSO.
1060 </para>
1061
1062 <para>
1063 <imagedata fileref="figures/perf-systemwide-libc.png" width="6in" depth="7in" align="center" scalefit="1" />
1064 </para>
1065
1066 <para>
1067 We can also use the system-wide -a switch to do system-wide
1068 tracing. Here we'll trace a couple of scheduler events:
1069 <literallayout class='monospaced'>
1070 root@crownbay:~# perf record -a -e sched:sched_switch -e sched:sched_wakeup
1071 ^C[ perf record: Woken up 38 times to write data ]
1072 [ perf record: Captured and wrote 9.780 MB perf.data (~427299 samples) ]
1073 </literallayout>
1074 We can look at the raw output using 'perf script' with no
1075 arguments:
1076 <literallayout class='monospaced'>
1077 root@crownbay:~# perf script
1078
1079 perf 1383 [001] 6171.460045: sched_wakeup: comm=kworker/1:1 pid=21 prio=120 success=1 target_cpu=001
1080 perf 1383 [001] 6171.460066: sched_switch: prev_comm=perf prev_pid=1383 prev_prio=120 prev_state=R+ ==> next_comm=kworker/1:1 next_pid=21 next_prio=120
1081 kworker/1:1 21 [001] 6171.460093: sched_switch: prev_comm=kworker/1:1 prev_pid=21 prev_prio=120 prev_state=S ==> next_comm=perf next_pid=1383 next_prio=120
1082 swapper 0 [000] 6171.468063: sched_wakeup: comm=kworker/0:3 pid=1209 prio=120 success=1 target_cpu=000
1083 swapper 0 [000] 6171.468107: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/0:3 next_pid=1209 next_prio=120
1084 kworker/0:3 1209 [000] 6171.468143: sched_switch: prev_comm=kworker/0:3 prev_pid=1209 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
1085 perf 1383 [001] 6171.470039: sched_wakeup: comm=kworker/1:1 pid=21 prio=120 success=1 target_cpu=001
1086 perf 1383 [001] 6171.470058: sched_switch: prev_comm=perf prev_pid=1383 prev_prio=120 prev_state=R+ ==> next_comm=kworker/1:1 next_pid=21 next_prio=120
1087 kworker/1:1 21 [001] 6171.470082: sched_switch: prev_comm=kworker/1:1 prev_pid=21 prev_prio=120 prev_state=S ==> next_comm=perf next_pid=1383 next_prio=120
1088 perf 1383 [001] 6171.480035: sched_wakeup: comm=kworker/1:1 pid=21 prio=120 success=1 target_cpu=001
1089 </literallayout>
1090 </para>
1091
1092 <section id='perf-filtering'>
1093 <title>Filtering</title>
1094
1095 <para>
1096 Notice that there are a lot of events that don't really have
1097 anything to do with what we're interested in, namely events
1098 that schedule 'perf' itself in and out or that wake perf up.
1099 We can get rid of those by using the '--filter' option -
1100 for each event we specify using -e, we can add a --filter
1101 after that to filter out trace events that contain fields
1102 with specific values:
1103 <literallayout class='monospaced'>
1104 root@crownbay:~# perf record -a -e sched:sched_switch --filter 'next_comm != perf &amp;&amp; prev_comm != perf' -e sched:sched_wakeup --filter 'comm != perf'
1105 ^C[ perf record: Woken up 38 times to write data ]
1106 [ perf record: Captured and wrote 9.688 MB perf.data (~423279 samples) ]
1107
1108
1109 root@crownbay:~# perf script
1110
1111 swapper 0 [000] 7932.162180: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/0:3 next_pid=1209 next_prio=120
1112 kworker/0:3 1209 [000] 7932.162236: sched_switch: prev_comm=kworker/0:3 prev_pid=1209 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
1113 perf 1407 [001] 7932.170048: sched_wakeup: comm=kworker/1:1 pid=21 prio=120 success=1 target_cpu=001
1114 perf 1407 [001] 7932.180044: sched_wakeup: comm=kworker/1:1 pid=21 prio=120 success=1 target_cpu=001
1115 perf 1407 [001] 7932.190038: sched_wakeup: comm=kworker/1:1 pid=21 prio=120 success=1 target_cpu=001
1116 perf 1407 [001] 7932.200044: sched_wakeup: comm=kworker/1:1 pid=21 prio=120 success=1 target_cpu=001
1117 perf 1407 [001] 7932.210044: sched_wakeup: comm=kworker/1:1 pid=21 prio=120 success=1 target_cpu=001
1118 perf 1407 [001] 7932.220044: sched_wakeup: comm=kworker/1:1 pid=21 prio=120 success=1 target_cpu=001
1119 swapper 0 [001] 7932.230111: sched_wakeup: comm=kworker/1:1 pid=21 prio=120 success=1 target_cpu=001
1120 swapper 0 [001] 7932.230146: sched_switch: prev_comm=swapper/1 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/1:1 next_pid=21 next_prio=120
1121 kworker/1:1 21 [001] 7932.230205: sched_switch: prev_comm=kworker/1:1 prev_pid=21 prev_prio=120 prev_state=S ==> next_comm=swapper/1 next_pid=0 next_prio=120
1122 swapper 0 [000] 7932.326109: sched_wakeup: comm=kworker/0:3 pid=1209 prio=120 success=1 target_cpu=000
1123 swapper 0 [000] 7932.326171: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/0:3 next_pid=1209 next_prio=120
1124 kworker/0:3 1209 [000] 7932.326214: sched_switch: prev_comm=kworker/0:3 prev_pid=1209 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
1125 </literallayout>
1126 In this case, we've filtered out all events that have 'perf'
1127 in their 'comm' or 'comm_prev' or 'comm_next' fields. Notice
1128 that there are still events recorded for perf, but notice
1129 that those events don't have values of 'perf' for the filtered
1130 fields. To completely filter out anything from perf will
1131 require a bit more work, but for the purpose of demonstrating
1132 how to use filters, it's close enough.
1133 </para>
1134
1135 <informalexample>
1136 <emphasis>Tying it Together:</emphasis> These are exactly the same set of event
1137 filters defined by the trace event subsystem. See the
1138 ftrace/tracecmd/kernelshark section for more discussion about
1139 these event filters.
1140 </informalexample>
1141
1142 <informalexample>
1143 <emphasis>Tying it Together:</emphasis> These event filters are implemented by a
1144 special-purpose pseudo-interpreter in the kernel and are an
1145 integral and indispensable part of the perf design as it
1146 relates to tracing. kernel-based event filters provide a
1147 mechanism to precisely throttle the event stream that appears
1148 in user space, where it makes sense to provide bindings to real
1149 programming languages for postprocessing the event stream.
1150 This architecture allows for the intelligent and flexible
1151 partitioning of processing between the kernel and user space.
1152 Contrast this with other tools such as SystemTap, which does
1153 all of its processing in the kernel and as such requires a
1154 special project-defined language in order to accommodate that
1155 design, or LTTng, where everything is sent to userspace and
1156 as such requires a super-efficient kernel-to-userspace
1157 transport mechanism in order to function properly. While
1158 perf certainly can benefit from for instance advances in
1159 the design of the transport, it doesn't fundamentally depend
1160 on them. Basically, if you find that your perf tracing
1161 application is causing buffer I/O overruns, it probably
1162 means that you aren't taking enough advantage of the
1163 kernel filtering engine.
1164 </informalexample>
1165 </section>
1166 </section>
1167
1168 <section id='using-dynamic-tracepoints'>
1169 <title>Using Dynamic Tracepoints</title>
1170
1171 <para>
1172 perf isn't restricted to the fixed set of static tracepoints
1173 listed by 'perf list'. Users can also add their own 'dynamic'
1174 tracepoints anywhere in the kernel. For instance, suppose we
1175 want to define our own tracepoint on do_fork(). We can do that
1176 using the 'perf probe' perf subcommand:
1177 <literallayout class='monospaced'>
1178 root@crownbay:~# perf probe do_fork
1179 Added new event:
1180 probe:do_fork (on do_fork)
1181
1182 You can now use it in all perf tools, such as:
1183
1184 perf record -e probe:do_fork -aR sleep 1
1185 </literallayout>
1186 Adding a new tracepoint via 'perf probe' results in an event
1187 with all the expected files and format in
1188 /sys/kernel/debug/tracing/events, just the same as for static
1189 tracepoints (as discussed in more detail in the trace events
1190 subsystem section:
1191 <literallayout class='monospaced'>
1192 root@crownbay:/sys/kernel/debug/tracing/events/probe/do_fork# ls -al
1193 drwxr-xr-x 2 root root 0 Oct 28 11:42 .
1194 drwxr-xr-x 3 root root 0 Oct 28 11:42 ..
1195 -rw-r--r-- 1 root root 0 Oct 28 11:42 enable
1196 -rw-r--r-- 1 root root 0 Oct 28 11:42 filter
1197 -r--r--r-- 1 root root 0 Oct 28 11:42 format
1198 -r--r--r-- 1 root root 0 Oct 28 11:42 id
1199
1200 root@crownbay:/sys/kernel/debug/tracing/events/probe/do_fork# cat format
1201 name: do_fork
1202 ID: 944
1203 format:
1204 field:unsigned short common_type; offset:0; size:2; signed:0;
1205 field:unsigned char common_flags; offset:2; size:1; signed:0;
1206 field:unsigned char common_preempt_count; offset:3; size:1; signed:0;
1207 field:int common_pid; offset:4; size:4; signed:1;
1208 field:int common_padding; offset:8; size:4; signed:1;
1209
1210 field:unsigned long __probe_ip; offset:12; size:4; signed:0;
1211
1212 print fmt: "(%lx)", REC->__probe_ip
1213 </literallayout>
1214 We can list all dynamic tracepoints currently in existence:
1215 <literallayout class='monospaced'>
1216 root@crownbay:~# perf probe -l
1217 probe:do_fork (on do_fork)
1218 probe:schedule (on schedule)
1219 </literallayout>
1220 Let's record system-wide ('sleep 30' is a trick for recording
1221 system-wide but basically do nothing and then wake up after
1222 30 seconds):
1223 <literallayout class='monospaced'>
1224 root@crownbay:~# perf record -g -a -e probe:do_fork sleep 30
1225 [ perf record: Woken up 1 times to write data ]
1226 [ perf record: Captured and wrote 0.087 MB perf.data (~3812 samples) ]
1227 </literallayout>
1228 Using 'perf script' we can see each do_fork event that fired:
1229 <literallayout class='monospaced'>
1230 root@crownbay:~# perf script
1231
1232 # ========
1233 # captured on: Sun Oct 28 11:55:18 2012
1234 # hostname : crownbay
1235 # os release : 3.4.11-yocto-standard
1236 # perf version : 3.4.11
1237 # arch : i686
1238 # nrcpus online : 2
1239 # nrcpus avail : 2
1240 # cpudesc : Intel(R) Atom(TM) CPU E660 @ 1.30GHz
1241 # cpuid : GenuineIntel,6,38,1
1242 # total memory : 1017184 kB
1243 # cmdline : /usr/bin/perf record -g -a -e probe:do_fork sleep 30
1244 # event : name = probe:do_fork, type = 2, config = 0x3b0, config1 = 0x0, config2 = 0x0, excl_usr = 0, excl_kern
1245 = 0, id = { 5, 6 }
1246 # HEADER_CPU_TOPOLOGY info available, use -I to display
1247 # ========
1248 #
1249 matchbox-deskto 1197 [001] 34211.378318: do_fork: (c1028460)
1250 matchbox-deskto 1295 [001] 34211.380388: do_fork: (c1028460)
1251 pcmanfm 1296 [000] 34211.632350: do_fork: (c1028460)
1252 pcmanfm 1296 [000] 34211.639917: do_fork: (c1028460)
1253 matchbox-deskto 1197 [001] 34217.541603: do_fork: (c1028460)
1254 matchbox-deskto 1299 [001] 34217.543584: do_fork: (c1028460)
1255 gthumb 1300 [001] 34217.697451: do_fork: (c1028460)
1256 gthumb 1300 [001] 34219.085734: do_fork: (c1028460)
1257 gthumb 1300 [000] 34219.121351: do_fork: (c1028460)
1258 gthumb 1300 [001] 34219.264551: do_fork: (c1028460)
1259 pcmanfm 1296 [000] 34219.590380: do_fork: (c1028460)
1260 matchbox-deskto 1197 [001] 34224.955965: do_fork: (c1028460)
1261 matchbox-deskto 1306 [001] 34224.957972: do_fork: (c1028460)
1262 matchbox-termin 1307 [000] 34225.038214: do_fork: (c1028460)
1263 matchbox-termin 1307 [001] 34225.044218: do_fork: (c1028460)
1264 matchbox-termin 1307 [000] 34225.046442: do_fork: (c1028460)
1265 matchbox-deskto 1197 [001] 34237.112138: do_fork: (c1028460)
1266 matchbox-deskto 1311 [001] 34237.114106: do_fork: (c1028460)
1267 gaku 1312 [000] 34237.202388: do_fork: (c1028460)
1268 </literallayout>
1269 And using 'perf report' on the same file, we can see the
1270 callgraphs from starting a few programs during those 30 seconds:
1271 </para>
1272
1273 <para>
1274 <imagedata fileref="figures/perf-probe-do_fork-profile.png" width="6in" depth="7in" align="center" scalefit="1" />
1275 </para>
1276
1277 <informalexample>
1278 <emphasis>Tying it Together:</emphasis> The trace events subsystem accomodate static
1279 and dynamic tracepoints in exactly the same way - there's no
1280 difference as far as the infrastructure is concerned. See the
1281 ftrace section for more details on the trace event subsystem.
1282 </informalexample>
1283
1284 <informalexample>
1285 <emphasis>Tying it Together:</emphasis> Dynamic tracepoints are implemented under the
1286 covers by kprobes and uprobes. kprobes and uprobes are also used
1287 by and in fact are the main focus of SystemTap.
1288 </informalexample>
1289 </section>
1290 </section>
1291
1292 <section id='perf-documentation'>
1293 <title>Documentation</title>
1294
1295 <para>
1296 Online versions of the man pages for the commands discussed in this
1297 section can be found here:
1298 <itemizedlist>
1299 <listitem><para>The <ulink url='http://linux.die.net/man/1/perf-stat'>'perf stat' manpage</ulink>.
1300 </para></listitem>
1301 <listitem><para>The <ulink url='http://linux.die.net/man/1/perf-record'>'perf record' manpage</ulink>.
1302 </para></listitem>
1303 <listitem><para>The <ulink url='http://linux.die.net/man/1/perf-report'>'perf report' manpage</ulink>.
1304 </para></listitem>
1305 <listitem><para>The <ulink url='http://linux.die.net/man/1/perf-probe'>'perf probe' manpage</ulink>.
1306 </para></listitem>
1307 <listitem><para>The <ulink url='http://linux.die.net/man/1/perf-script'>'perf script' manpage</ulink>.
1308 </para></listitem>
1309 <listitem><para>Documentation on using the
1310 <ulink url='http://linux.die.net/man/1/perf-script-python'>'perf script' python binding</ulink>.
1311 </para></listitem>
1312 <listitem><para>The top-level
1313 <ulink url='http://linux.die.net/man/1/perf'>perf(1) manpage</ulink>.
1314 </para></listitem>
1315 </itemizedlist>
1316 </para>
1317
1318 <para>
1319 Normally, you should be able to invoke the man pages via perf
1320 itself e.g. 'perf help' or 'perf help record'.
1321 </para>
1322
1323 <para>
1324 However, by default Yocto doesn't install man pages, but perf
1325 invokes the man pages for most help functionality. This is a bug
1326 and is being addressed by a Yocto bug:
1327 <ulink url='https://bugzilla.yoctoproject.org/show_bug.cgi?id=3388'>Bug 3388 - perf: enable man pages for basic 'help' functionality</ulink>.
1328 </para>
1329
1330 <para>
1331 The man pages in text form, along with some other files, such as
1332 a set of examples, can be found in the 'perf' directory of the
1333 kernel tree:
1334 <literallayout class='monospaced'>
1335 tools/perf/Documentation
1336 </literallayout>
1337 There's also a nice perf tutorial on the perf wiki that goes
1338 into more detail than we do here in certain areas:
1339 <ulink url='https://perf.wiki.kernel.org/index.php/Tutorial'>Perf Tutorial</ulink>
1340 </para>
1341 </section>
1342</section>
1343
1344<section id='profile-manual-ftrace'>
1345 <title>ftrace</title>
1346
1347 <para>
1348 'ftrace' literally refers to the 'ftrace function tracer' but in
1349 reality this encompasses a number of related tracers along with
1350 the infrastructure that they all make use of.
1351 </para>
1352
1353 <section id='ftrace-setup'>
1354 <title>Setup</title>
1355
1356 <para>
1357 For this section, we'll assume you've already performed the basic
1358 setup outlined in the General Setup section.
1359 </para>
1360
1361 <para>
1362 ftrace, trace-cmd, and kernelshark run on the target system,
1363 and are ready to go out-of-the-box - no additional setup is
1364 necessary. For the rest of this section we assume you've ssh'ed
1365 to the host and will be running ftrace on the target. kernelshark
1366 is a GUI application and if you use the '-X' option to ssh you
1367 can have the kernelshark GUI run on the target but display
1368 remotely on the host if you want.
1369 </para>
1370 </section>
1371
1372 <section id='basic-ftrace-usage'>
1373 <title>Basic ftrace usage</title>
1374
1375 <para>
1376 'ftrace' essentially refers to everything included in
1377 the /tracing directory of the mounted debugfs filesystem
1378 (Yocto follows the standard convention and mounts it
1379 at /sys/kernel/debug). Here's a listing of all the files
1380 found in /sys/kernel/debug/tracing on a Yocto system:
1381 <literallayout class='monospaced'>
1382 root@sugarbay:/sys/kernel/debug/tracing# ls
1383 README kprobe_events trace
1384 available_events kprobe_profile trace_clock
1385 available_filter_functions options trace_marker
1386 available_tracers per_cpu trace_options
1387 buffer_size_kb printk_formats trace_pipe
1388 buffer_total_size_kb saved_cmdlines tracing_cpumask
1389 current_tracer set_event tracing_enabled
1390 dyn_ftrace_total_info set_ftrace_filter tracing_on
1391 enabled_functions set_ftrace_notrace tracing_thresh
1392 events set_ftrace_pid
1393 free_buffer set_graph_function
1394 </literallayout>
1395 The files listed above are used for various purposes -
1396 some relate directly to the tracers themselves, others are
1397 used to set tracing options, and yet others actually contain
1398 the tracing output when a tracer is in effect. Some of the
1399 functions can be guessed from their names, others need
1400 explanation; in any case, we'll cover some of the files we
1401 see here below but for an explanation of the others, please
1402 see the ftrace documentation.
1403 </para>
1404
1405 <para>
1406 We'll start by looking at some of the available built-in
1407 tracers.
1408 </para>
1409
1410 <para>
1411 cat'ing the 'available_tracers' file lists the set of
1412 available tracers:
1413 <literallayout class='monospaced'>
1414 root@sugarbay:/sys/kernel/debug/tracing# cat available_tracers
1415 blk function_graph function nop
1416 </literallayout>
1417 The 'current_tracer' file contains the tracer currently in
1418 effect:
1419 <literallayout class='monospaced'>
1420 root@sugarbay:/sys/kernel/debug/tracing# cat current_tracer
1421 nop
1422 </literallayout>
1423 The above listing of current_tracer shows that
1424 the 'nop' tracer is in effect, which is just another
1425 way of saying that there's actually no tracer
1426 currently in effect.
1427 </para>
1428
1429 <para>
1430 echo'ing one of the available_tracers into current_tracer
1431 makes the specified tracer the current tracer:
1432 <literallayout class='monospaced'>
1433 root@sugarbay:/sys/kernel/debug/tracing# echo function > current_tracer
1434 root@sugarbay:/sys/kernel/debug/tracing# cat current_tracer
1435 function
1436 </literallayout>
1437 The above sets the current tracer to be the
1438 'function tracer'. This tracer traces every function
1439 call in the kernel and makes it available as the
1440 contents of the 'trace' file. Reading the 'trace' file
1441 lists the currently buffered function calls that have been
1442 traced by the function tracer:
1443 <literallayout class='monospaced'>
1444 root@sugarbay:/sys/kernel/debug/tracing# cat trace | less
1445
1446 # tracer: function
1447 #
1448 # entries-in-buffer/entries-written: 310629/766471 #P:8
1449 #
1450 # _-----=&gt; irqs-off
1451 # / _----=&gt; need-resched
1452 # | / _---=&gt; hardirq/softirq
1453 # || / _--=&gt; preempt-depth
1454 # ||| / delay
1455 # TASK-PID CPU# |||| TIMESTAMP FUNCTION
1456 # | | | |||| | |
1457 &lt;idle&gt;-0 [004] d..1 470.867169: ktime_get_real &lt;-intel_idle
1458 &lt;idle&gt;-0 [004] d..1 470.867170: getnstimeofday &lt;-ktime_get_real
1459 &lt;idle&gt;-0 [004] d..1 470.867171: ns_to_timeval &lt;-intel_idle
1460 &lt;idle&gt;-0 [004] d..1 470.867171: ns_to_timespec &lt;-ns_to_timeval
1461 &lt;idle&gt;-0 [004] d..1 470.867172: smp_apic_timer_interrupt &lt;-apic_timer_interrupt
1462 &lt;idle&gt;-0 [004] d..1 470.867172: native_apic_mem_write &lt;-smp_apic_timer_interrupt
1463 &lt;idle&gt;-0 [004] d..1 470.867172: irq_enter &lt;-smp_apic_timer_interrupt
1464 &lt;idle&gt;-0 [004] d..1 470.867172: rcu_irq_enter &lt;-irq_enter
1465 &lt;idle&gt;-0 [004] d..1 470.867173: rcu_idle_exit_common.isra.33 &lt;-rcu_irq_enter
1466 &lt;idle&gt;-0 [004] d..1 470.867173: local_bh_disable &lt;-irq_enter
1467 &lt;idle&gt;-0 [004] d..1 470.867173: add_preempt_count &lt;-local_bh_disable
1468 &lt;idle&gt;-0 [004] d.s1 470.867174: tick_check_idle &lt;-irq_enter
1469 &lt;idle&gt;-0 [004] d.s1 470.867174: tick_check_oneshot_broadcast &lt;-tick_check_idle
1470 &lt;idle&gt;-0 [004] d.s1 470.867174: ktime_get &lt;-tick_check_idle
1471 &lt;idle&gt;-0 [004] d.s1 470.867174: tick_nohz_stop_idle &lt;-tick_check_idle
1472 &lt;idle&gt;-0 [004] d.s1 470.867175: update_ts_time_stats &lt;-tick_nohz_stop_idle
1473 &lt;idle&gt;-0 [004] d.s1 470.867175: nr_iowait_cpu &lt;-update_ts_time_stats
1474 &lt;idle&gt;-0 [004] d.s1 470.867175: tick_do_update_jiffies64 &lt;-tick_check_idle
1475 &lt;idle&gt;-0 [004] d.s1 470.867175: _raw_spin_lock &lt;-tick_do_update_jiffies64
1476 &lt;idle&gt;-0 [004] d.s1 470.867176: add_preempt_count &lt;-_raw_spin_lock
1477 &lt;idle&gt;-0 [004] d.s2 470.867176: do_timer &lt;-tick_do_update_jiffies64
1478 &lt;idle&gt;-0 [004] d.s2 470.867176: _raw_spin_lock &lt;-do_timer
1479 &lt;idle&gt;-0 [004] d.s2 470.867176: add_preempt_count &lt;-_raw_spin_lock
1480 &lt;idle&gt;-0 [004] d.s3 470.867177: ntp_tick_length &lt;-do_timer
1481 &lt;idle&gt;-0 [004] d.s3 470.867177: _raw_spin_lock_irqsave &lt;-ntp_tick_length
1482 .
1483 .
1484 .
1485 </literallayout>
1486 Each line in the trace above shows what was happening in
1487 the kernel on a given cpu, to the level of detail of
1488 function calls. Each entry shows the function called,
1489 followed by its caller (after the arrow).
1490 </para>
1491
1492 <para>
1493 The function tracer gives you an extremely detailed idea
1494 of what the kernel was doing at the point in time the trace
1495 was taken, and is a great way to learn about how the kernel
1496 code works in a dynamic sense.
1497 </para>
1498
1499 <informalexample>
1500 <emphasis>Tying it Together:</emphasis> The ftrace function tracer is also
1501 available from within perf, as the ftrace:function tracepoint.
1502 </informalexample>
1503
1504 <para>
1505 It is a little more difficult to follow the call chains than
1506 it needs to be - luckily there's a variant of the function
1507 tracer that displays the callchains explicitly, called the
1508 'function_graph' tracer:
1509 <literallayout class='monospaced'>
1510 root@sugarbay:/sys/kernel/debug/tracing# echo function_graph &gt; current_tracer
1511 root@sugarbay:/sys/kernel/debug/tracing# cat trace | less
1512
1513 tracer: function_graph
1514
1515 CPU DURATION FUNCTION CALLS
1516 | | | | | | |
1517 7) 0.046 us | pick_next_task_fair();
1518 7) 0.043 us | pick_next_task_stop();
1519 7) 0.042 us | pick_next_task_rt();
1520 7) 0.032 us | pick_next_task_fair();
1521 7) 0.030 us | pick_next_task_idle();
1522 7) | _raw_spin_unlock_irq() {
1523 7) 0.033 us | sub_preempt_count();
1524 7) 0.258 us | }
1525 7) 0.032 us | sub_preempt_count();
1526 7) + 13.341 us | } /* __schedule */
1527 7) 0.095 us | } /* sub_preempt_count */
1528 7) | schedule() {
1529 7) | __schedule() {
1530 7) 0.060 us | add_preempt_count();
1531 7) 0.044 us | rcu_note_context_switch();
1532 7) | _raw_spin_lock_irq() {
1533 7) 0.033 us | add_preempt_count();
1534 7) 0.247 us | }
1535 7) | idle_balance() {
1536 7) | _raw_spin_unlock() {
1537 7) 0.031 us | sub_preempt_count();
1538 7) 0.246 us | }
1539 7) | update_shares() {
1540 7) 0.030 us | __rcu_read_lock();
1541 7) 0.029 us | __rcu_read_unlock();
1542 7) 0.484 us | }
1543 7) 0.030 us | __rcu_read_lock();
1544 7) | load_balance() {
1545 7) | find_busiest_group() {
1546 7) 0.031 us | idle_cpu();
1547 7) 0.029 us | idle_cpu();
1548 7) 0.035 us | idle_cpu();
1549 7) 0.906 us | }
1550 7) 1.141 us | }
1551 7) 0.022 us | msecs_to_jiffies();
1552 7) | load_balance() {
1553 7) | find_busiest_group() {
1554 7) 0.031 us | idle_cpu();
1555 .
1556 .
1557 .
1558 4) 0.062 us | msecs_to_jiffies();
1559 4) 0.062 us | __rcu_read_unlock();
1560 4) | _raw_spin_lock() {
1561 4) 0.073 us | add_preempt_count();
1562 4) 0.562 us | }
1563 4) + 17.452 us | }
1564 4) 0.108 us | put_prev_task_fair();
1565 4) 0.102 us | pick_next_task_fair();
1566 4) 0.084 us | pick_next_task_stop();
1567 4) 0.075 us | pick_next_task_rt();
1568 4) 0.062 us | pick_next_task_fair();
1569 4) 0.066 us | pick_next_task_idle();
1570 ------------------------------------------
1571 4) kworker-74 =&gt; &lt;idle&gt;-0
1572 ------------------------------------------
1573
1574 4) | finish_task_switch() {
1575 4) | _raw_spin_unlock_irq() {
1576 4) 0.100 us | sub_preempt_count();
1577 4) 0.582 us | }
1578 4) 1.105 us | }
1579 4) 0.088 us | sub_preempt_count();
1580 4) ! 100.066 us | }
1581 .
1582 .
1583 .
1584 3) | sys_ioctl() {
1585 3) 0.083 us | fget_light();
1586 3) | security_file_ioctl() {
1587 3) 0.066 us | cap_file_ioctl();
1588 3) 0.562 us | }
1589 3) | do_vfs_ioctl() {
1590 3) | drm_ioctl() {
1591 3) 0.075 us | drm_ut_debug_printk();
1592 3) | i915_gem_pwrite_ioctl() {
1593 3) | i915_mutex_lock_interruptible() {
1594 3) 0.070 us | mutex_lock_interruptible();
1595 3) 0.570 us | }
1596 3) | drm_gem_object_lookup() {
1597 3) | _raw_spin_lock() {
1598 3) 0.080 us | add_preempt_count();
1599 3) 0.620 us | }
1600 3) | _raw_spin_unlock() {
1601 3) 0.085 us | sub_preempt_count();
1602 3) 0.562 us | }
1603 3) 2.149 us | }
1604 3) 0.133 us | i915_gem_object_pin();
1605 3) | i915_gem_object_set_to_gtt_domain() {
1606 3) 0.065 us | i915_gem_object_flush_gpu_write_domain();
1607 3) 0.065 us | i915_gem_object_wait_rendering();
1608 3) 0.062 us | i915_gem_object_flush_cpu_write_domain();
1609 3) 1.612 us | }
1610 3) | i915_gem_object_put_fence() {
1611 3) 0.097 us | i915_gem_object_flush_fence.constprop.36();
1612 3) 0.645 us | }
1613 3) 0.070 us | add_preempt_count();
1614 3) 0.070 us | sub_preempt_count();
1615 3) 0.073 us | i915_gem_object_unpin();
1616 3) 0.068 us | mutex_unlock();
1617 3) 9.924 us | }
1618 3) + 11.236 us | }
1619 3) + 11.770 us | }
1620 3) + 13.784 us | }
1621 3) | sys_ioctl() {
1622 </literallayout>
1623 As you can see, the function_graph display is much easier to
1624 follow. Also note that in addition to the function calls and
1625 associated braces, other events such as scheduler events
1626 are displayed in context. In fact, you can freely include
1627 any tracepoint available in the trace events subsystem described
1628 in the next section by simply enabling those events, and they'll
1629 appear in context in the function graph display. Quite a
1630 powerful tool for understanding kernel dynamics.
1631 </para>
1632
1633 <para>
1634 Also notice that there are various annotations on the left
1635 hand side of the display. For example if the total time it
1636 took for a given function to execute is above a certain
1637 threshold, an exclamation point or plus sign appears on the
1638 left hand side. Please see the ftrace documentation for
1639 details on all these fields.
1640 </para>
1641 </section>
1642
1643 <section id='the-trace-events-subsystem'>
1644 <title>The 'trace events' Subsystem</title>
1645
1646 <para>
1647 One especially important directory contained within
1648 the /sys/kernel/debug/tracing directory is the 'events'
1649 subdirectory, which contains representations of every
1650 tracepoint in the system. Listing out the contents of
1651 the 'events' subdirectory, we see mainly another set of
1652 subdirectories:
1653 <literallayout class='monospaced'>
1654 root@sugarbay:/sys/kernel/debug/tracing# cd events
1655 root@sugarbay:/sys/kernel/debug/tracing/events# ls -al
1656 drwxr-xr-x 38 root root 0 Nov 14 23:19 .
1657 drwxr-xr-x 5 root root 0 Nov 14 23:19 ..
1658 drwxr-xr-x 19 root root 0 Nov 14 23:19 block
1659 drwxr-xr-x 32 root root 0 Nov 14 23:19 btrfs
1660 drwxr-xr-x 5 root root 0 Nov 14 23:19 drm
1661 -rw-r--r-- 1 root root 0 Nov 14 23:19 enable
1662 drwxr-xr-x 40 root root 0 Nov 14 23:19 ext3
1663 drwxr-xr-x 79 root root 0 Nov 14 23:19 ext4
1664 drwxr-xr-x 14 root root 0 Nov 14 23:19 ftrace
1665 drwxr-xr-x 8 root root 0 Nov 14 23:19 hda
1666 -r--r--r-- 1 root root 0 Nov 14 23:19 header_event
1667 -r--r--r-- 1 root root 0 Nov 14 23:19 header_page
1668 drwxr-xr-x 25 root root 0 Nov 14 23:19 i915
1669 drwxr-xr-x 7 root root 0 Nov 14 23:19 irq
1670 drwxr-xr-x 12 root root 0 Nov 14 23:19 jbd
1671 drwxr-xr-x 14 root root 0 Nov 14 23:19 jbd2
1672 drwxr-xr-x 14 root root 0 Nov 14 23:19 kmem
1673 drwxr-xr-x 7 root root 0 Nov 14 23:19 module
1674 drwxr-xr-x 3 root root 0 Nov 14 23:19 napi
1675 drwxr-xr-x 6 root root 0 Nov 14 23:19 net
1676 drwxr-xr-x 3 root root 0 Nov 14 23:19 oom
1677 drwxr-xr-x 12 root root 0 Nov 14 23:19 power
1678 drwxr-xr-x 3 root root 0 Nov 14 23:19 printk
1679 drwxr-xr-x 8 root root 0 Nov 14 23:19 random
1680 drwxr-xr-x 4 root root 0 Nov 14 23:19 raw_syscalls
1681 drwxr-xr-x 3 root root 0 Nov 14 23:19 rcu
1682 drwxr-xr-x 6 root root 0 Nov 14 23:19 rpm
1683 drwxr-xr-x 20 root root 0 Nov 14 23:19 sched
1684 drwxr-xr-x 7 root root 0 Nov 14 23:19 scsi
1685 drwxr-xr-x 4 root root 0 Nov 14 23:19 signal
1686 drwxr-xr-x 5 root root 0 Nov 14 23:19 skb
1687 drwxr-xr-x 4 root root 0 Nov 14 23:19 sock
1688 drwxr-xr-x 10 root root 0 Nov 14 23:19 sunrpc
1689 drwxr-xr-x 538 root root 0 Nov 14 23:19 syscalls
1690 drwxr-xr-x 4 root root 0 Nov 14 23:19 task
1691 drwxr-xr-x 14 root root 0 Nov 14 23:19 timer
1692 drwxr-xr-x 3 root root 0 Nov 14 23:19 udp
1693 drwxr-xr-x 21 root root 0 Nov 14 23:19 vmscan
1694 drwxr-xr-x 3 root root 0 Nov 14 23:19 vsyscall
1695 drwxr-xr-x 6 root root 0 Nov 14 23:19 workqueue
1696 drwxr-xr-x 26 root root 0 Nov 14 23:19 writeback
1697 </literallayout>
1698 Each one of these subdirectories corresponds to a
1699 'subsystem' and contains yet again more subdirectories,
1700 each one of those finally corresponding to a tracepoint.
1701 For example, here are the contents of the 'kmem' subsystem:
1702 <literallayout class='monospaced'>
1703 root@sugarbay:/sys/kernel/debug/tracing/events# cd kmem
1704 root@sugarbay:/sys/kernel/debug/tracing/events/kmem# ls -al
1705 drwxr-xr-x 14 root root 0 Nov 14 23:19 .
1706 drwxr-xr-x 38 root root 0 Nov 14 23:19 ..
1707 -rw-r--r-- 1 root root 0 Nov 14 23:19 enable
1708 -rw-r--r-- 1 root root 0 Nov 14 23:19 filter
1709 drwxr-xr-x 2 root root 0 Nov 14 23:19 kfree
1710 drwxr-xr-x 2 root root 0 Nov 14 23:19 kmalloc
1711 drwxr-xr-x 2 root root 0 Nov 14 23:19 kmalloc_node
1712 drwxr-xr-x 2 root root 0 Nov 14 23:19 kmem_cache_alloc
1713 drwxr-xr-x 2 root root 0 Nov 14 23:19 kmem_cache_alloc_node
1714 drwxr-xr-x 2 root root 0 Nov 14 23:19 kmem_cache_free
1715 drwxr-xr-x 2 root root 0 Nov 14 23:19 mm_page_alloc
1716 drwxr-xr-x 2 root root 0 Nov 14 23:19 mm_page_alloc_extfrag
1717 drwxr-xr-x 2 root root 0 Nov 14 23:19 mm_page_alloc_zone_locked
1718 drwxr-xr-x 2 root root 0 Nov 14 23:19 mm_page_free
1719 drwxr-xr-x 2 root root 0 Nov 14 23:19 mm_page_free_batched
1720 drwxr-xr-x 2 root root 0 Nov 14 23:19 mm_page_pcpu_drain
1721 </literallayout>
1722 Let's see what's inside the subdirectory for a specific
1723 tracepoint, in this case the one for kmalloc:
1724 <literallayout class='monospaced'>
1725 root@sugarbay:/sys/kernel/debug/tracing/events/kmem# cd kmalloc
1726 root@sugarbay:/sys/kernel/debug/tracing/events/kmem/kmalloc# ls -al
1727 drwxr-xr-x 2 root root 0 Nov 14 23:19 .
1728 drwxr-xr-x 14 root root 0 Nov 14 23:19 ..
1729 -rw-r--r-- 1 root root 0 Nov 14 23:19 enable
1730 -rw-r--r-- 1 root root 0 Nov 14 23:19 filter
1731 -r--r--r-- 1 root root 0 Nov 14 23:19 format
1732 -r--r--r-- 1 root root 0 Nov 14 23:19 id
1733 </literallayout>
1734 The 'format' file for the tracepoint describes the event
1735 in memory, which is used by the various tracing tools
1736 that now make use of these tracepoint to parse the event
1737 and make sense of it, along with a 'print fmt' field that
1738 allows tools like ftrace to display the event as text.
1739 Here's what the format of the kmalloc event looks like:
1740 <literallayout class='monospaced'>
1741 root@sugarbay:/sys/kernel/debug/tracing/events/kmem/kmalloc# cat format
1742 name: kmalloc
1743 ID: 313
1744 format:
1745 field:unsigned short common_type; offset:0; size:2; signed:0;
1746 field:unsigned char common_flags; offset:2; size:1; signed:0;
1747 field:unsigned char common_preempt_count; offset:3; size:1; signed:0;
1748 field:int common_pid; offset:4; size:4; signed:1;
1749 field:int common_padding; offset:8; size:4; signed:1;
1750
1751 field:unsigned long call_site; offset:16; size:8; signed:0;
1752 field:const void * ptr; offset:24; size:8; signed:0;
1753 field:size_t bytes_req; offset:32; size:8; signed:0;
1754 field:size_t bytes_alloc; offset:40; size:8; signed:0;
1755 field:gfp_t gfp_flags; offset:48; size:4; signed:0;
1756
1757 print fmt: "call_site=%lx ptr=%p bytes_req=%zu bytes_alloc=%zu gfp_flags=%s", REC->call_site, REC->ptr, REC->bytes_req, REC->bytes_alloc,
1758 (REC->gfp_flags) ? __print_flags(REC->gfp_flags, "|", {(unsigned long)(((( gfp_t)0x10u) | (( gfp_t)0x40u) | (( gfp_t)0x80u) | ((
1759 gfp_t)0x20000u) | (( gfp_t)0x02u) | (( gfp_t)0x08u)) | (( gfp_t)0x4000u) | (( gfp_t)0x10000u) | (( gfp_t)0x1000u) | (( gfp_t)0x200u) | ((
1760 gfp_t)0x400000u)), "GFP_TRANSHUGE"}, {(unsigned long)((( gfp_t)0x10u) | (( gfp_t)0x40u) | (( gfp_t)0x80u) | (( gfp_t)0x20000u) | ((
1761 gfp_t)0x02u) | (( gfp_t)0x08u)), "GFP_HIGHUSER_MOVABLE"}, {(unsigned long)((( gfp_t)0x10u) | (( gfp_t)0x40u) | (( gfp_t)0x80u) | ((
1762 gfp_t)0x20000u) | (( gfp_t)0x02u)), "GFP_HIGHUSER"}, {(unsigned long)((( gfp_t)0x10u) | (( gfp_t)0x40u) | (( gfp_t)0x80u) | ((
1763 gfp_t)0x20000u)), "GFP_USER"}, {(unsigned long)((( gfp_t)0x10u) | (( gfp_t)0x40u) | (( gfp_t)0x80u) | (( gfp_t)0x80000u)), GFP_TEMPORARY"},
1764 {(unsigned long)((( gfp_t)0x10u) | (( gfp_t)0x40u) | (( gfp_t)0x80u)), "GFP_KERNEL"}, {(unsigned long)((( gfp_t)0x10u) | (( gfp_t)0x40u)),
1765 "GFP_NOFS"}, {(unsigned long)((( gfp_t)0x20u)), "GFP_ATOMIC"}, {(unsigned long)((( gfp_t)0x10u)), "GFP_NOIO"}, {(unsigned long)((
1766 gfp_t)0x20u), "GFP_HIGH"}, {(unsigned long)(( gfp_t)0x10u), "GFP_WAIT"}, {(unsigned long)(( gfp_t)0x40u), "GFP_IO"}, {(unsigned long)((
1767 gfp_t)0x100u), "GFP_COLD"}, {(unsigned long)(( gfp_t)0x200u), "GFP_NOWARN"}, {(unsigned long)(( gfp_t)0x400u), "GFP_REPEAT"}, {(unsigned
1768 long)(( gfp_t)0x800u), "GFP_NOFAIL"}, {(unsigned long)(( gfp_t)0x1000u), "GFP_NORETRY"}, {(unsigned long)(( gfp_t)0x4000u), "GFP_COMP"},
1769 {(unsigned long)(( gfp_t)0x8000u), "GFP_ZERO"}, {(unsigned long)(( gfp_t)0x10000u), "GFP_NOMEMALLOC"}, {(unsigned long)(( gfp_t)0x20000u),
1770 "GFP_HARDWALL"}, {(unsigned long)(( gfp_t)0x40000u), "GFP_THISNODE"}, {(unsigned long)(( gfp_t)0x80000u), "GFP_RECLAIMABLE"}, {(unsigned
1771 long)(( gfp_t)0x08u), "GFP_MOVABLE"}, {(unsigned long)(( gfp_t)0), "GFP_NOTRACK"}, {(unsigned long)(( gfp_t)0x400000u), "GFP_NO_KSWAPD"},
1772 {(unsigned long)(( gfp_t)0x800000u), "GFP_OTHER_NODE"} ) : "GFP_NOWAIT"
1773 </literallayout>
1774 The 'enable' file in the tracepoint directory is what allows
1775 the user (or tools such as trace-cmd) to actually turn the
1776 tracepoint on and off. When enabled, the corresponding
1777 tracepoint will start appearing in the ftrace 'trace'
1778 file described previously. For example, this turns on the
1779 kmalloc tracepoint:
1780 <literallayout class='monospaced'>
1781 root@sugarbay:/sys/kernel/debug/tracing/events/kmem/kmalloc# echo 1 > enable
1782 </literallayout>
1783 At the moment, we're not interested in the function tracer or
1784 some other tracer that might be in effect, so we first turn
1785 it off, but if we do that, we still need to turn tracing on in
1786 order to see the events in the output buffer:
1787 <literallayout class='monospaced'>
1788 root@sugarbay:/sys/kernel/debug/tracing# echo nop > current_tracer
1789 root@sugarbay:/sys/kernel/debug/tracing# echo 1 > tracing_on
1790 </literallayout>
1791 Now, if we look at the the 'trace' file, we see nothing
1792 but the kmalloc events we just turned on:
1793 <literallayout class='monospaced'>
1794 root@sugarbay:/sys/kernel/debug/tracing# cat trace | less
1795 # tracer: nop
1796 #
1797 # entries-in-buffer/entries-written: 1897/1897 #P:8
1798 #
1799 # _-----=&gt; irqs-off
1800 # / _----=&gt; need-resched
1801 # | / _---=&gt; hardirq/softirq
1802 # || / _--=&gt; preempt-depth
1803 # ||| / delay
1804 # TASK-PID CPU# |||| TIMESTAMP FUNCTION
1805 # | | | |||| | |
1806 dropbear-1465 [000] ...1 18154.620753: kmalloc: call_site=ffffffff816650d4 ptr=ffff8800729c3000 bytes_req=2048 bytes_alloc=2048 gfp_flags=GFP_KERNEL
1807 &lt;idle&gt;-0 [000] ..s3 18154.621640: kmalloc: call_site=ffffffff81619b36 ptr=ffff88006d555800 bytes_req=512 bytes_alloc=512 gfp_flags=GFP_ATOMIC
1808 &lt;idle&gt;-0 [000] ..s3 18154.621656: kmalloc: call_site=ffffffff81619b36 ptr=ffff88006d555800 bytes_req=512 bytes_alloc=512 gfp_flags=GFP_ATOMIC
1809 matchbox-termin-1361 [001] ...1 18154.755472: kmalloc: call_site=ffffffff81614050 ptr=ffff88006d5f0e00 bytes_req=512 bytes_alloc=512 gfp_flags=GFP_KERNEL|GFP_REPEAT
1810 Xorg-1264 [002] ...1 18154.755581: kmalloc: call_site=ffffffff8141abe8 ptr=ffff8800734f4cc0 bytes_req=168 bytes_alloc=192 gfp_flags=GFP_KERNEL|GFP_NOWARN|GFP_NORETRY
1811 Xorg-1264 [002] ...1 18154.755583: kmalloc: call_site=ffffffff814192a3 ptr=ffff88001f822520 bytes_req=24 bytes_alloc=32 gfp_flags=GFP_KERNEL|GFP_ZERO
1812 Xorg-1264 [002] ...1 18154.755589: kmalloc: call_site=ffffffff81419edb ptr=ffff8800721a2f00 bytes_req=64 bytes_alloc=64 gfp_flags=GFP_KERNEL|GFP_ZERO
1813 matchbox-termin-1361 [001] ...1 18155.354594: kmalloc: call_site=ffffffff81614050 ptr=ffff88006db35400 bytes_req=576 bytes_alloc=1024 gfp_flags=GFP_KERNEL|GFP_REPEAT
1814 Xorg-1264 [002] ...1 18155.354703: kmalloc: call_site=ffffffff8141abe8 ptr=ffff8800734f4cc0 bytes_req=168 bytes_alloc=192 gfp_flags=GFP_KERNEL|GFP_NOWARN|GFP_NORETRY
1815 Xorg-1264 [002] ...1 18155.354705: kmalloc: call_site=ffffffff814192a3 ptr=ffff88001f822520 bytes_req=24 bytes_alloc=32 gfp_flags=GFP_KERNEL|GFP_ZERO
1816 Xorg-1264 [002] ...1 18155.354711: kmalloc: call_site=ffffffff81419edb ptr=ffff8800721a2f00 bytes_req=64 bytes_alloc=64 gfp_flags=GFP_KERNEL|GFP_ZERO
1817 &lt;idle&gt;-0 [000] ..s3 18155.673319: kmalloc: call_site=ffffffff81619b36 ptr=ffff88006d555800 bytes_req=512 bytes_alloc=512 gfp_flags=GFP_ATOMIC
1818 dropbear-1465 [000] ...1 18155.673525: kmalloc: call_site=ffffffff816650d4 ptr=ffff8800729c3000 bytes_req=2048 bytes_alloc=2048 gfp_flags=GFP_KERNEL
1819 &lt;idle&gt;-0 [000] ..s3 18155.674821: kmalloc: call_site=ffffffff81619b36 ptr=ffff88006d554800 bytes_req=512 bytes_alloc=512 gfp_flags=GFP_ATOMIC
1820 &lt;idle&gt;-0 [000] ..s3 18155.793014: kmalloc: call_site=ffffffff81619b36 ptr=ffff88006d554800 bytes_req=512 bytes_alloc=512 gfp_flags=GFP_ATOMIC
1821 dropbear-1465 [000] ...1 18155.793219: kmalloc: call_site=ffffffff816650d4 ptr=ffff8800729c3000 bytes_req=2048 bytes_alloc=2048 gfp_flags=GFP_KERNEL
1822 &lt;idle&gt;-0 [000] ..s3 18155.794147: kmalloc: call_site=ffffffff81619b36 ptr=ffff88006d555800 bytes_req=512 bytes_alloc=512 gfp_flags=GFP_ATOMIC
1823 &lt;idle&gt;-0 [000] ..s3 18155.936705: kmalloc: call_site=ffffffff81619b36 ptr=ffff88006d555800 bytes_req=512 bytes_alloc=512 gfp_flags=GFP_ATOMIC
1824 dropbear-1465 [000] ...1 18155.936910: kmalloc: call_site=ffffffff816650d4 ptr=ffff8800729c3000 bytes_req=2048 bytes_alloc=2048 gfp_flags=GFP_KERNEL
1825 &lt;idle&gt;-0 [000] ..s3 18155.937869: kmalloc: call_site=ffffffff81619b36 ptr=ffff88006d554800 bytes_req=512 bytes_alloc=512 gfp_flags=GFP_ATOMIC
1826 matchbox-termin-1361 [001] ...1 18155.953667: kmalloc: call_site=ffffffff81614050 ptr=ffff88006d5f2000 bytes_req=512 bytes_alloc=512 gfp_flags=GFP_KERNEL|GFP_REPEAT
1827 Xorg-1264 [002] ...1 18155.953775: kmalloc: call_site=ffffffff8141abe8 ptr=ffff8800734f4cc0 bytes_req=168 bytes_alloc=192 gfp_flags=GFP_KERNEL|GFP_NOWARN|GFP_NORETRY
1828 Xorg-1264 [002] ...1 18155.953777: kmalloc: call_site=ffffffff814192a3 ptr=ffff88001f822520 bytes_req=24 bytes_alloc=32 gfp_flags=GFP_KERNEL|GFP_ZERO
1829 Xorg-1264 [002] ...1 18155.953783: kmalloc: call_site=ffffffff81419edb ptr=ffff8800721a2f00 bytes_req=64 bytes_alloc=64 gfp_flags=GFP_KERNEL|GFP_ZERO
1830 &lt;idle&gt;-0 [000] ..s3 18156.176053: kmalloc: call_site=ffffffff81619b36 ptr=ffff88006d554800 bytes_req=512 bytes_alloc=512 gfp_flags=GFP_ATOMIC
1831 dropbear-1465 [000] ...1 18156.176257: kmalloc: call_site=ffffffff816650d4 ptr=ffff8800729c3000 bytes_req=2048 bytes_alloc=2048 gfp_flags=GFP_KERNEL
1832 &lt;idle&gt;-0 [000] ..s3 18156.177717: kmalloc: call_site=ffffffff81619b36 ptr=ffff88006d555800 bytes_req=512 bytes_alloc=512 gfp_flags=GFP_ATOMIC
1833 &lt;idle&gt;-0 [000] ..s3 18156.399229: kmalloc: call_site=ffffffff81619b36 ptr=ffff88006d555800 bytes_req=512 bytes_alloc=512 gfp_flags=GFP_ATOMIC
1834 dropbear-1465 [000] ...1 18156.399434: kmalloc: call_site=ffffffff816650d4 ptr=ffff8800729c3000 bytes_http://rostedt.homelinux.com/kernelshark/req=2048 bytes_alloc=2048 gfp_flags=GFP_KERNEL
1835 &lt;idle&gt;-0 [000] ..s3 18156.400660: kmalloc: call_site=ffffffff81619b36 ptr=ffff88006d554800 bytes_req=512 bytes_alloc=512 gfp_flags=GFP_ATOMIC
1836 matchbox-termin-1361 [001] ...1 18156.552800: kmalloc: call_site=ffffffff81614050 ptr=ffff88006db34800 bytes_req=576 bytes_alloc=1024 gfp_flags=GFP_KERNEL|GFP_REPEAT
1837 </literallayout>
1838 To again disable the kmalloc event, we need to send 0 to the
1839 enable file:
1840 <literallayout class='monospaced'>
1841 root@sugarbay:/sys/kernel/debug/tracing/events/kmem/kmalloc# echo 0 > enable
1842 </literallayout>
1843 You can enable any number of events or complete subsystems
1844 (by using the 'enable' file in the subsystem directory) and
1845 get an arbitrarily fine-grained idea of what's going on in the
1846 system by enabling as many of the appropriate tracepoints
1847 as applicable.
1848 </para>
1849
1850 <para>
1851 A number of the tools described in this HOWTO do just that,
1852 including trace-cmd and kernelshark in the next section.
1853 </para>
1854
1855 <informalexample>
1856 <emphasis>Tying it Together:</emphasis> These tracepoints and their representation
1857 are used not only by ftrace, but by many of the other tools
1858 covered in this document and they form a central point of
1859 integration for the various tracers available in Linux.
1860 They form a central part of the instrumentation for the
1861 following tools: perf, lttng, ftrace, blktrace and SystemTap
1862 </informalexample>
1863
1864 <informalexample>
1865 <emphasis>Tying it Together:</emphasis> Eventually all the special-purpose tracers
1866 currently available in /sys/kernel/debug/tracing will be
1867 removed and replaced with equivalent tracers based on the
1868 'trace events' subsystem.
1869 </informalexample>
1870 </section>
1871
1872 <section id='trace-cmd-kernelshark'>
1873 <title>trace-cmd/kernelshark</title>
1874
1875 <para>
1876 trace-cmd is essentially an extensive command-line 'wrapper'
1877 interface that hides the details of all the individual files
1878 in /sys/kernel/debug/tracing, allowing users to specify
1879 specific particular events within the
1880 /sys/kernel/debug/tracing/events/ subdirectory and to collect
1881 traces and avoid having to deal with those details directly.
1882 </para>
1883
1884 <para>
1885 As yet another layer on top of that, kernelshark provides a GUI
1886 that allows users to start and stop traces and specify sets
1887 of events using an intuitive interface, and view the
1888 output as both trace events and as a per-CPU graphical
1889 display. It directly uses 'trace-cmd' as the plumbing
1890 that accomplishes all that underneath the covers (and
1891 actually displays the trace-cmd command it uses, as we'll see).
1892 </para>
1893
1894 <para>
1895 To start a trace using kernelshark, first start kernelshark:
1896 <literallayout class='monospaced'>
1897 root@sugarbay:~# kernelshark
1898 </literallayout>
1899 Then bring up the 'Capture' dialog by choosing from the
1900 kernelshark menu:
1901 <literallayout class='monospaced'>
1902 Capture | Record
1903 </literallayout>
1904 That will display the following dialog, which allows you to
1905 choose one or more events (or even one or more complete
1906 subsystems) to trace:
1907 </para>
1908
1909 <para>
1910 <imagedata fileref="figures/kernelshark-choose-events.png" width="6in" depth="6in" align="center" scalefit="1" />
1911 </para>
1912
1913 <para>
1914 Note that these are exactly the same sets of events described
1915 in the previous trace events subsystem section, and in fact
1916 is where trace-cmd gets them for kernelshark.
1917 </para>
1918
1919 <para>
1920 In the above screenshot, we've decided to explore the
1921 graphics subsystem a bit and so have chosen to trace all
1922 the tracepoints contained within the 'i915' and 'drm'
1923 subsystems.
1924 </para>
1925
1926 <para>
1927 After doing that, we can start and stop the trace using
1928 the 'Run' and 'Stop' button on the lower right corner of
1929 the dialog (the same button will turn into the 'Stop'
1930 button after the trace has started):
1931 </para>
1932
1933 <para>
1934 <imagedata fileref="figures/kernelshark-output-display.png" width="6in" depth="6in" align="center" scalefit="1" />
1935 </para>
1936
1937 <para>
1938 Notice that the right-hand pane shows the exact trace-cmd
1939 command-line that's used to run the trace, along with the
1940 results of the trace-cmd run.
1941 </para>
1942
1943 <para>
1944 Once the 'Stop' button is pressed, the graphical view magically
1945 fills up with a colorful per-cpu display of the trace data,
1946 along with the detailed event listing below that:
1947 </para>
1948
1949 <para>
1950 <imagedata fileref="figures/kernelshark-i915-display.png" width="6in" depth="7in" align="center" scalefit="1" />
1951 </para>
1952
1953 <para>
1954 Here's another example, this time a display resulting
1955 from tracing 'all events':
1956 </para>
1957
1958 <para>
1959 <imagedata fileref="figures/kernelshark-all.png" width="6in" depth="7in" align="center" scalefit="1" />
1960 </para>
1961
1962 <para>
1963 The tool is pretty self-explanatory, but for more detailed
1964 information on navigating through the data, see the
1965 <ulink url='http://rostedt.homelinux.com/kernelshark/'>kernelshark website</ulink>.
1966 </para>
1967 </section>
1968
1969 <section id='ftrace-documentation'>
1970 <title>Documentation</title>
1971
1972 <para>
1973 The documentation for ftrace can be found in the kernel
1974 Documentation directory:
1975 <literallayout class='monospaced'>
1976 Documentation/trace/ftrace.txt
1977 </literallayout>
1978 The documentation for the trace event subsystem can also
1979 be found in the kernel Documentation directory:
1980 <literallayout class='monospaced'>
1981 Documentation/trace/events.txt
1982 </literallayout>
1983 There is a nice series of articles on using
1984 ftrace and trace-cmd at LWN:
1985 <itemizedlist>
1986 <listitem><para><ulink url='http://lwn.net/Articles/365835/'>Debugging the kernel using Ftrace - part 1</ulink>
1987 </para></listitem>
1988 <listitem><para><ulink url='http://lwn.net/Articles/366796/'>Debugging the kernel using Ftrace - part 2</ulink>
1989 </para></listitem>
1990 <listitem><para><ulink url='http://lwn.net/Articles/370423/'>Secrets of the Ftrace function tracer</ulink>
1991 </para></listitem>
1992 <listitem><para><ulink url='https://lwn.net/Articles/410200/'>trace-cmd: A front-end for Ftrace</ulink>
1993 </para></listitem>
1994 </itemizedlist>
1995 </para>
1996
1997 <para>
1998 There's more detailed documentation kernelshark usage here:
1999 <ulink url='http://rostedt.homelinux.com/kernelshark/'>KernelShark</ulink>
2000 </para>
2001
2002 <para>
2003 An amusing yet useful README (a tracing mini-HOWTO) can be
2004 found in /sys/kernel/debug/tracing/README.
2005 </para>
2006 </section>
2007</section>
2008
2009<section id='profile-manual-systemtap'>
2010 <title>systemtap</title>
2011
2012 <para>
2013 SystemTap is a system-wide script-based tracing and profiling tool.
2014 </para>
2015
2016 <para>
2017 SystemTap scripts are C-like programs that are executed in the
2018 kernel to gather/print/aggregate data extracted from the context
2019 they end up being invoked under.
2020 </para>
2021
2022 <para>
2023 For example, this probe from the
2024 <ulink url='http://sourceware.org/systemtap/tutorial/'>SystemTap tutorial</ulink>
2025 simply prints a line every time any process on the system open()s
2026 a file. For each line, it prints the executable name of the
2027 program that opened the file, along with its PID, and the name
2028 of the file it opened (or tried to open), which it extracts
2029 from the open syscall's argstr.
2030 <literallayout class='monospaced'>
2031 probe syscall.open
2032 {
2033 printf ("%s(%d) open (%s)\n", execname(), pid(), argstr)
2034 }
2035
2036 probe timer.ms(4000) # after 4 seconds
2037 {
2038 exit ()
2039 }
2040 </literallayout>
2041 Normally, to execute this probe, you'd simply install
2042 systemtap on the system you want to probe, and directly run
2043 the probe on that system e.g. assuming the name of the file
2044 containing the above text is trace_open.stp:
2045 <literallayout class='monospaced'>
2046 # stap trace_open.stp
2047 </literallayout>
2048 What systemtap does under the covers to run this probe is 1)
2049 parse and convert the probe to an equivalent 'C' form, 2)
2050 compile the 'C' form into a kernel module, 3) insert the
2051 module into the kernel, which arms it, and 4) collect the data
2052 generated by the probe and display it to the user.
2053 </para>
2054
2055 <para>
2056 In order to accomplish steps 1 and 2, the 'stap' program needs
2057 access to the kernel build system that produced the kernel
2058 that the probed system is running. In the case of a typical
2059 embedded system (the 'target'), the kernel build system
2060 unfortunately isn't typically part of the image running on
2061 the target. It is normally available on the 'host' system
2062 that produced the target image however; in such cases,
2063 steps 1 and 2 are executed on the host system, and steps
2064 3 and 4 are executed on the target system, using only the
2065 systemtap 'runtime'.
2066 </para>
2067
2068 <para>
2069 The systemtap support in Yocto assumes that only steps
2070 3 and 4 are run on the target; it is possible to do
2071 everything on the target, but this section assumes only
2072 the typical embedded use-case.
2073 </para>
2074
2075 <para>
2076 So basically what you need to do in order to run a systemtap
2077 script on the target is to 1) on the host system, compile the
2078 probe into a kernel module that makes sense to the target, 2)
2079 copy the module onto the target system and 3) insert the
2080 module into the target kernel, which arms it, and 4) collect
2081 the data generated by the probe and display it to the user.
2082 </para>
2083
2084 <section id='systemtap-setup'>
2085 <title>Setup</title>
2086
2087 <para>
2088 Those are a lot of steps and a lot of details, but
2089 fortunately Yocto includes a script called 'crosstap'
2090 that will take care of those details, allowing you to
2091 simply execute a systemtap script on the remote target,
2092 with arguments if necessary.
2093 </para>
2094
2095 <para>
2096 In order to do this from a remote host, however, you
2097 need to have access to the build for the image you
2098 booted. The 'crosstap' script provides details on how
2099 to do this if you run the script on the host without having
2100 done a build:
2101 <note>
2102 SystemTap, which uses 'crosstap', assumes you can establish an
2103 ssh connection to the remote target.
2104 Please refer to the crosstap wiki page for details on verifying
2105 ssh connections at
2106 <ulink url='https://wiki.yoctoproject.org/wiki/Tracing_and_Profiling#systemtap'></ulink>.
2107 Also, the ability to ssh into the target system is not enabled
2108 by default in *-minimal images.
2109 </note>
2110 <literallayout class='monospaced'>
2111 $ crosstap root@192.168.1.88 trace_open.stp
2112
2113 Error: No target kernel build found.
2114 Did you forget to create a local build of your image?
2115
2116 'crosstap' requires a local sdk build of the target system
2117 (or a build that includes 'tools-profile') in order to build
2118 kernel modules that can probe the target system.
2119
2120 Practically speaking, that means you need to do the following:
2121 - If you're running a pre-built image, download the release
2122 and/or BSP tarballs used to build the image.
2123 - If you're working from git sources, just clone the metadata
2124 and BSP layers needed to build the image you'll be booting.
2125 - Make sure you're properly set up to build a new image (see
2126 the BSP README and/or the widely available basic documentation
2127 that discusses how to build images).
2128 - Build an -sdk version of the image e.g.:
2129 $ bitbake core-image-sato-sdk
2130 OR
2131 - Build a non-sdk image but include the profiling tools:
2132 [ edit local.conf and add 'tools-profile' to the end of
2133 the EXTRA_IMAGE_FEATURES variable ]
2134 $ bitbake core-image-sato
2135
2136 Once you've build the image on the host system, you're ready to
2137 boot it (or the equivalent pre-built image) and use 'crosstap'
2138 to probe it (you need to source the environment as usual first):
2139
2140 $ source oe-init-build-env
2141 $ cd ~/my/systemtap/scripts
2142 $ crosstap root@192.168.1.xxx myscript.stp
2143 </literallayout>
2144 So essentially what you need to do is build an SDK image or
2145 image with 'tools-profile' as detailed in the
2146 "<link linkend='profile-manual-general-setup'>General Setup</link>"
2147 section of this manual, and boot the resulting target image.
2148 </para>
2149
2150 <note>
2151 If you have a build directory containing multiple machines,
2152 you need to have the MACHINE you're connecting to selected
2153 in local.conf, and the kernel in that machine's build
2154 directory must match the kernel on the booted system exactly,
2155 or you'll get the above 'crosstap' message when you try to
2156 invoke a script.
2157 </note>
2158 </section>
2159
2160 <section id='running-a-script-on-a-target'>
2161 <title>Running a Script on a Target</title>
2162
2163 <para>
2164 Once you've done that, you should be able to run a systemtap
2165 script on the target:
2166 <literallayout class='monospaced'>
2167 $ cd /path/to/yocto
2168 $ source oe-init-build-env
2169
2170 ### Shell environment set up for builds. ###
2171
2172 You can now run 'bitbake &lt;target&gt;'
2173
2174 Common targets are:
2175 core-image-minimal
2176 core-image-sato
2177 meta-toolchain
2178 adt-installer
2179 meta-ide-support
2180
2181 You can also run generated qemu images with a command like 'runqemu qemux86'
2182 </literallayout>
2183 Once you've done that, you can cd to whatever directory
2184 contains your scripts and use 'crosstap' to run the script:
2185 <literallayout class='monospaced'>
2186 $ cd /path/to/my/systemap/script
2187 $ crosstap root@192.168.7.2 trace_open.stp
2188 </literallayout>
2189 If you get an error connecting to the target e.g.:
2190 <literallayout class='monospaced'>
2191 $ crosstap root@192.168.7.2 trace_open.stp
2192 error establishing ssh connection on remote 'root@192.168.7.2'
2193 </literallayout>
2194 Try ssh'ing to the target and see what happens:
2195 <literallayout class='monospaced'>
2196 $ ssh root@192.168.7.2
2197 </literallayout>
2198 A lot of the time, connection problems are due specifying a
2199 wrong IP address or having a 'host key verification error'.
2200 </para>
2201
2202 <para>
2203 If everything worked as planned, you should see something
2204 like this (enter the password when prompted, or press enter
2205 if it's set up to use no password):
2206 <literallayout class='monospaced'>
2207 $ crosstap root@192.168.7.2 trace_open.stp
2208 root@192.168.7.2's password:
2209 matchbox-termin(1036) open ("/tmp/vte3FS2LW", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 0600)
2210 matchbox-termin(1036) open ("/tmp/vteJMC7LW", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 0600)
2211 </literallayout>
2212 </para>
2213 </section>
2214
2215 <section id='systemtap-documentation'>
2216 <title>Documentation</title>
2217
2218 <para>
2219 The SystemTap language reference can be found here:
2220 <ulink url='http://sourceware.org/systemtap/langref/'>SystemTap Language Reference</ulink>
2221 </para>
2222
2223 <para>
2224 Links to other SystemTap documents, tutorials, and examples can be
2225 found here:
2226 <ulink url='http://sourceware.org/systemtap/documentation.html'>SystemTap documentation page</ulink>
2227 </para>
2228 </section>
2229</section>
2230
2231<section id='profile-manual-oprofile'>
2232 <title>oprofile</title>
2233
2234 <para>
2235 oprofile itself is a command-line application that runs on the
2236 target system.
2237 </para>
2238
2239 <section id='oprofile-setup'>
2240 <title>Setup</title>
2241
2242 <para>
2243 For this section, we'll assume you've already performed the
2244 basic setup outlined in the
2245 "<link linkend='profile-manual-general-setup'>General Setup</link>"
2246 section.
2247 </para>
2248
2249 <para>
2250 For the section that deals with running oprofile from the command-line,
2251 we assume you've ssh'ed to the host and will be running
2252 oprofile on the target.
2253 </para>
2254
2255 <para>
2256 oprofileui (oprofile-viewer) is a GUI-based program that runs
2257 on the host and interacts remotely with the target.
2258 See the oprofileui section for the exact steps needed to
2259 install oprofileui on the host.
2260 </para>
2261 </section>
2262
2263 <section id='oprofile-basic-usage'>
2264 <title>Basic Usage</title>
2265
2266 <para>
2267 Oprofile as configured in Yocto is a system-wide profiler
2268 (i.e. the version in Yocto doesn't yet make use of the
2269 perf_events interface which would allow it to profile
2270 specific processes and workloads). It relies on hardware
2271 counter support in the hardware (but can fall back to a
2272 timer-based mode), which means that it doesn't take
2273 advantage of tracepoints or other event sources for example.
2274 </para>
2275
2276 <para>
2277 It consists of a kernel module that collects samples and a
2278 userspace daemon that writes the sample data to disk.
2279 </para>
2280
2281 <para>
2282 The 'opcontrol' shell script is used for transparently
2283 managing these components and starting and stopping
2284 profiles, and the 'opreport' command is used to
2285 display the results.
2286 </para>
2287
2288 <para>
2289 The oprofile daemon should already be running, but before
2290 you start profiling, you may need to change some settings
2291 and some of these settings may require the daemon to not
2292 be running. One of these settings is the path to the
2293 vmlinux file, which you'll want to set using the --vmlinux
2294 option if you want the kernel profiled:
2295 <literallayout class='monospaced'>
2296 root@crownbay:~# opcontrol --vmlinux=/boot/vmlinux-`uname -r`
2297 The profiling daemon is currently active, so changes to the configuration
2298 will be used the next time you restart oprofile after a --shutdown or --deinit.
2299 </literallayout>
2300 You can check if vmlinux file: is set using opcontrol --status:
2301 <literallayout class='monospaced'>
2302 root@crownbay:~# opcontrol --status
2303 Daemon paused: pid 1334
2304 Separate options: library
2305 vmlinux file: none
2306 Image filter: none
2307 Call-graph depth: 6
2308 </literallayout>
2309 If it's not, you need to shutdown the daemon, add the setting
2310 and restart the daemon:
2311 <literallayout class='monospaced'>
2312 root@crownbay:~# opcontrol --shutdown
2313 Killing daemon.
2314
2315 root@crownbay:~# opcontrol --vmlinux=/boot/vmlinux-`uname -r`
2316 root@crownbay:~# opcontrol --start-daemon
2317 Using default event: CPU_CLK_UNHALTED:100000:0:1:1
2318 Using 2.6+ OProfile kernel interface.
2319 Reading module info.
2320 Using log file /var/lib/oprofile/samples/oprofiled.log
2321 Daemon started.
2322 </literallayout>
2323 If we check the status again we now see our updated settings:
2324 <literallayout class='monospaced'>
2325 root@crownbay:~# opcontrol --status
2326 Daemon paused: pid 1649
2327 Separate options: library
2328 vmlinux file: /boot/vmlinux-3.4.11-yocto-standard
2329 Image filter: none
2330 Call-graph depth: 6
2331 </literallayout>
2332 We're now in a position to run a profile. For that we use
2333 'opcontrol --start':
2334 <literallayout class='monospaced'>
2335 root@crownbay:~# opcontrol --start
2336 Profiler running.
2337 </literallayout>
2338 In another window, run our wget workload:
2339 <literallayout class='monospaced'>
2340 root@crownbay:~# rm linux-2.6.19.2.tar.bz2; wget <ulink url='http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2'>http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2</ulink>; sync
2341 Connecting to downloads.yoctoproject.org (140.211.169.59:80)
2342 linux-2.6.19.2.tar.b 100% |*******************************| 41727k 0:00:00 ETA
2343 </literallayout>
2344 To stop the profile we use 'opcontrol --shutdown', which not
2345 only stops the profile but shuts down the daemon as well:
2346 <literallayout class='monospaced'>
2347 root@crownbay:~# opcontrol --shutdown
2348 Stopping profiling.
2349 Killing daemon.
2350 </literallayout>
2351 Oprofile writes sample data to /var/lib/oprofile/samples,
2352 which you can look at if you're interested in seeing how the
2353 samples are structured. This is also interesting because
2354 it's related to how you dive down to get further details
2355 about specific executables in OProfile.
2356 </para>
2357
2358 <para>
2359 To see the default display output for a profile, simply type
2360 'opreport', which will show the results using the data in
2361 /var/lib/oprofile/samples:
2362 <literallayout class='monospaced'>
2363 root@crownbay:~# opreport
2364
2365 WARNING! The OProfile kernel driver reports sample buffer overflows.
2366 Such overflows can result in incorrect sample attribution, invalid sample
2367 files and other symptoms. See the oprofiled.log for details.
2368 You should adjust your sampling frequency to eliminate (or at least minimize)
2369 these overflows.
2370 CPU: Intel Architectural Perfmon, speed 1.3e+06 MHz (estimated)
2371 Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000
2372 CPU_CLK_UNHALT...|
2373 samples| %|
2374 ------------------
2375 464365 79.8156 vmlinux-3.4.11-yocto-standard
2376 65108 11.1908 oprofiled
2377 CPU_CLK_UNHALT...|
2378 samples| %|
2379 ------------------
2380 64416 98.9372 oprofiled
2381 692 1.0628 libc-2.16.so
2382 36959 6.3526 no-vmlinux
2383 4378 0.7525 busybox
2384 CPU_CLK_UNHALT...|
2385 samples| %|
2386 ------------------
2387 2844 64.9612 libc-2.16.so
2388 1337 30.5391 busybox
2389 193 4.4084 ld-2.16.so
2390 2 0.0457 libnss_compat-2.16.so
2391 1 0.0228 libnsl-2.16.so
2392 1 0.0228 libnss_files-2.16.so
2393 4344 0.7467 bash
2394 CPU_CLK_UNHALT...|
2395 samples| %|
2396 ------------------
2397 2657 61.1648 bash
2398 1665 38.3287 libc-2.16.so
2399 18 0.4144 ld-2.16.so
2400 3 0.0691 libtinfo.so.5.9
2401 1 0.0230 libdl-2.16.so
2402 3118 0.5359 nf_conntrack
2403 686 0.1179 matchbox-terminal
2404 CPU_CLK_UNHALT...|
2405 samples| %|
2406 ------------------
2407 214 31.1953 libglib-2.0.so.0.3200.4
2408 114 16.6181 libc-2.16.so
2409 79 11.5160 libcairo.so.2.11200.2
2410 78 11.3703 libgdk-x11-2.0.so.0.2400.8
2411 51 7.4344 libpthread-2.16.so
2412 45 6.5598 libgobject-2.0.so.0.3200.4
2413 29 4.2274 libvte.so.9.2800.2
2414 25 3.6443 libX11.so.6.3.0
2415 19 2.7697 libxcb.so.1.1.0
2416 17 2.4781 libgtk-x11-2.0.so.0.2400.8
2417 12 1.7493 librt-2.16.so
2418 3 0.4373 libXrender.so.1.3.0
2419 671 0.1153 emgd
2420 411 0.0706 nf_conntrack_ipv4
2421 391 0.0672 iptable_nat
2422 378 0.0650 nf_nat
2423 263 0.0452 Xorg
2424 CPU_CLK_UNHALT...|
2425 samples| %|
2426 ------------------
2427 106 40.3042 Xorg
2428 53 20.1521 libc-2.16.so
2429 31 11.7871 libpixman-1.so.0.27.2
2430 26 9.8859 emgd_drv.so
2431 16 6.0837 libemgdsrv_um.so.1.5.15.3226
2432 11 4.1825 libEMGD2d.so.1.5.15.3226
2433 9 3.4221 libfb.so
2434 7 2.6616 libpthread-2.16.so
2435 1 0.3802 libudev.so.0.9.3
2436 1 0.3802 libdrm.so.2.4.0
2437 1 0.3802 libextmod.so
2438 1 0.3802 mouse_drv.so
2439 .
2440 .
2441 .
2442 9 0.0015 connmand
2443 CPU_CLK_UNHALT...|
2444 samples| %|
2445 ------------------
2446 4 44.4444 libglib-2.0.so.0.3200.4
2447 2 22.2222 libpthread-2.16.so
2448 1 11.1111 connmand
2449 1 11.1111 libc-2.16.so
2450 1 11.1111 librt-2.16.so
2451 6 0.0010 oprofile-server
2452 CPU_CLK_UNHALT...|
2453 samples| %|
2454 ------------------
2455 3 50.0000 libc-2.16.so
2456 1 16.6667 oprofile-server
2457 1 16.6667 libpthread-2.16.so
2458 1 16.6667 libglib-2.0.so.0.3200.4
2459 5 8.6e-04 gconfd-2
2460 CPU_CLK_UNHALT...|
2461 samples| %|
2462 ------------------
2463 2 40.0000 libdbus-1.so.3.7.2
2464 2 40.0000 libglib-2.0.so.0.3200.4
2465 1 20.0000 libc-2.16.so
2466 </literallayout>
2467 The output above shows the breakdown or samples by both
2468 number of samples and percentage for each executable.
2469 Within an executable, the sample counts are broken down
2470 further into executable and shared libraries (DSOs) used
2471 by the executable.
2472 </para>
2473
2474 <para>
2475 To get even more detailed breakdowns by function, we need to
2476 have the full paths to the DSOs, which we can get by
2477 using -f with opreport:
2478 <literallayout class='monospaced'>
2479 root@crownbay:~# opreport -f
2480
2481 CPU: Intel Architectural Perfmon, speed 1.3e+06 MHz (estimated)
2482 Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000
2483 CPU_CLK_UNHALT...|
2484 samples| %|
2485
2486 464365 79.8156 /boot/vmlinux-3.4.11-yocto-standard
2487 65108 11.1908 /usr/bin/oprofiled
2488 CPU_CLK_UNHALT...|
2489 samples| %|
2490 ------------------
2491 64416 98.9372 /usr/bin/oprofiled
2492 692 1.0628 /lib/libc-2.16.so
2493 36959 6.3526 /no-vmlinux
2494 4378 0.7525 /bin/busybox
2495 CPU_CLK_UNHALT...|
2496 samples| %|
2497 ------------------
2498 2844 64.9612 /lib/libc-2.16.so
2499 1337 30.5391 /bin/busybox
2500 193 4.4084 /lib/ld-2.16.so
2501 2 0.0457 /lib/libnss_compat-2.16.so
2502 1 0.0228 /lib/libnsl-2.16.so
2503 1 0.0228 /lib/libnss_files-2.16.so
2504 4344 0.7467 /bin/bash
2505 CPU_CLK_UNHALT...|
2506 samples| %|
2507 ------------------
2508 2657 61.1648 /bin/bash
2509 1665 38.3287 /lib/libc-2.16.so
2510 18 0.4144 /lib/ld-2.16.so
2511 3 0.0691 /lib/libtinfo.so.5.9
2512 1 0.0230 /lib/libdl-2.16.so
2513 .
2514 .
2515 .
2516 </literallayout>
2517 Using the paths shown in the above output and the -l option to
2518 opreport, we can see all the functions that have hits in the
2519 profile and their sample counts and percentages. Here's a
2520 portion of what we get for the kernel:
2521 <literallayout class='monospaced'>
2522 root@crownbay:~# opreport -l /boot/vmlinux-3.4.11-yocto-standard
2523
2524 CPU: Intel Architectural Perfmon, speed 1.3e+06 MHz (estimated)
2525 Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000
2526 samples % symbol name
2527 233981 50.3873 intel_idle
2528 15437 3.3243 rb_get_reader_page
2529 14503 3.1232 ring_buffer_consume
2530 14092 3.0347 mutex_spin_on_owner
2531 13024 2.8047 read_hpet
2532 8039 1.7312 sub_preempt_count
2533 7096 1.5281 ioread32
2534 6997 1.5068 add_preempt_count
2535 3985 0.8582 rb_advance_reader
2536 3488 0.7511 add_event_entry
2537 3303 0.7113 get_parent_ip
2538 3104 0.6684 rb_buffer_peek
2539 2960 0.6374 op_cpu_buffer_read_entry
2540 2614 0.5629 sync_buffer
2541 2545 0.5481 debug_smp_processor_id
2542 2456 0.5289 ohci_irq
2543 2397 0.5162 memset
2544 2349 0.5059 __copy_to_user_ll
2545 2185 0.4705 ring_buffer_event_length
2546 1918 0.4130 in_lock_functions
2547 1850 0.3984 __schedule
2548 1767 0.3805 __copy_from_user_ll_nozero
2549 1575 0.3392 rb_event_data_length
2550 1256 0.2705 memcpy
2551 1233 0.2655 system_call
2552 1213 0.2612 menu_select
2553 </literallayout>
2554 Notice that above we see an entry for the __copy_to_user_ll()
2555 function that we've looked at with other profilers as well.
2556 </para>
2557
2558 <para>
2559 Here's what we get when we do the same thing for the
2560 busybox executable:
2561 <literallayout class='monospaced'>
2562 CPU: Intel Architectural Perfmon, speed 1.3e+06 MHz (estimated)
2563 Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000
2564 samples % image name symbol name
2565 349 8.4198 busybox retrieve_file_data
2566 308 7.4306 libc-2.16.so _IO_file_xsgetn
2567 283 6.8275 libc-2.16.so __read_nocancel
2568 235 5.6695 libc-2.16.so syscall
2569 233 5.6212 libc-2.16.so clearerr
2570 215 5.1870 libc-2.16.so fread
2571 181 4.3667 libc-2.16.so __write_nocancel
2572 158 3.8118 libc-2.16.so __underflow
2573 151 3.6429 libc-2.16.so _dl_addr
2574 150 3.6188 busybox progress_meter
2575 150 3.6188 libc-2.16.so __poll_nocancel
2576 148 3.5706 libc-2.16.so _IO_file_underflow@@GLIBC_2.1
2577 137 3.3052 busybox safe_poll
2578 125 3.0157 busybox bb_progress_update
2579 122 2.9433 libc-2.16.so __x86.get_pc_thunk.bx
2580 95 2.2919 busybox full_write
2581 81 1.9542 busybox safe_write
2582 77 1.8577 busybox xwrite
2583 72 1.7370 libc-2.16.so _IO_file_read
2584 71 1.7129 libc-2.16.so _IO_sgetn
2585 67 1.6164 libc-2.16.so poll
2586 52 1.2545 libc-2.16.so _IO_switch_to_get_mode
2587 45 1.0856 libc-2.16.so read
2588 34 0.8203 libc-2.16.so write
2589 32 0.7720 busybox monotonic_sec
2590 25 0.6031 libc-2.16.so vfprintf
2591 22 0.5308 busybox get_mono
2592 14 0.3378 ld-2.16.so strcmp
2593 14 0.3378 libc-2.16.so __x86.get_pc_thunk.cx
2594 .
2595 .
2596 .
2597 </literallayout>
2598 Since we recorded the profile with a callchain depth of 6, we
2599 should be able to see our __copy_to_user_ll() callchains in
2600 the output, and indeed we can if we search around a bit in
2601 the 'opreport --callgraph' output:
2602 <literallayout class='monospaced'>
2603 root@crownbay:~# opreport --callgraph /boot/vmlinux-3.4.11-yocto-standard
2604
2605 392 6.9639 vmlinux-3.4.11-yocto-standard sock_aio_read
2606 736 13.0751 vmlinux-3.4.11-yocto-standard __generic_file_aio_write
2607 3255 57.8255 vmlinux-3.4.11-yocto-standard inet_recvmsg
2608 785 0.1690 vmlinux-3.4.11-yocto-standard tcp_recvmsg
2609 1790 31.7940 vmlinux-3.4.11-yocto-standard local_bh_enable
2610 1238 21.9893 vmlinux-3.4.11-yocto-standard __kfree_skb
2611 992 17.6199 vmlinux-3.4.11-yocto-standard lock_sock_nested
2612 785 13.9432 vmlinux-3.4.11-yocto-standard tcp_recvmsg [self]
2613 525 9.3250 vmlinux-3.4.11-yocto-standard release_sock
2614 112 1.9893 vmlinux-3.4.11-yocto-standard tcp_cleanup_rbuf
2615 72 1.2789 vmlinux-3.4.11-yocto-standard skb_copy_datagram_iovec
2616
2617 170 0.0366 vmlinux-3.4.11-yocto-standard skb_copy_datagram_iovec
2618 1491 73.3038 vmlinux-3.4.11-yocto-standard memcpy_toiovec
2619 327 16.0767 vmlinux-3.4.11-yocto-standard skb_copy_datagram_iovec
2620 170 8.3579 vmlinux-3.4.11-yocto-standard skb_copy_datagram_iovec [self]
2621 20 0.9833 vmlinux-3.4.11-yocto-standard copy_to_user
2622
2623 2588 98.2909 vmlinux-3.4.11-yocto-standard copy_to_user
2624 2349 0.5059 vmlinux-3.4.11-yocto-standard __copy_to_user_ll
2625 2349 89.2138 vmlinux-3.4.11-yocto-standard __copy_to_user_ll [self]
2626 166 6.3046 vmlinux-3.4.11-yocto-standard do_page_fault
2627 </literallayout>
2628 Remember that by default OProfile sessions are cumulative
2629 i.e. if you start and stop a profiling session, then start a
2630 new one, the new one will not erase the previous run(s) but
2631 will build on it. If you want to restart a profile from scratch,
2632 you need to reset:
2633 <literallayout class='monospaced'>
2634 root@crownbay:~# opcontrol --reset
2635 </literallayout>
2636 </para>
2637 </section>
2638
2639 <section id='oprofileui-a-gui-for-oprofile'>
2640 <title>OProfileUI - A GUI for OProfile</title>
2641
2642 <para>
2643 Yocto also supports a graphical UI for controlling and viewing
2644 OProfile traces, called OProfileUI. To use it, you first need
2645 to clone the oprofileui git repo, then configure, build, and
2646 install it:
2647 <literallayout class='monospaced'>
2648 [trz@empanada tmp]$ git clone git://git.yoctoproject.org/oprofileui
2649 [trz@empanada tmp]$ cd oprofileui
2650 [trz@empanada oprofileui]$ ./autogen.sh
2651 [trz@empanada oprofileui]$ sudo make install
2652 </literallayout>
2653 OprofileUI replaces the 'opreport' functionality with a GUI,
2654 and normally doesn't require the user to use 'opcontrol' either.
2655 If you want to profile the kernel, however, you need to either
2656 use the UI to specify a vmlinux or use 'opcontrol' to specify
2657 it on the target:
2658 </para>
2659
2660 <para>
2661 First, on the target, check if vmlinux file: is set:
2662 <literallayout class='monospaced'>
2663 root@crownbay:~# opcontrol --status
2664 </literallayout>
2665 If not:
2666 <literallayout class='monospaced'>
2667 root@crownbay:~# opcontrol --shutdown
2668 root@crownbay:~# opcontrol --vmlinux=/boot/vmlinux-`uname -r`
2669 root@crownbay:~# opcontrol --start-daemon
2670 </literallayout>
2671 Now, start the oprofile UI on the host system:
2672 <literallayout class='monospaced'>
2673 [trz@empanada oprofileui]$ oprofile-viewer
2674 </literallayout>
2675 To run a profile on the remote system, first connect to the
2676 remote system by pressing the 'Connect' button and supplying
2677 the IP address and port of the remote system (the default
2678 port is 4224).
2679 </para>
2680
2681 <para>
2682 The oprofile server should automatically be started already.
2683 If not, the connection will fail and you either typed in the
2684 wrong IP address and port (see below), or you need to start
2685 the server yourself:
2686 <literallayout class='monospaced'>
2687 root@crownbay:~# oprofile-server
2688 </literallayout>
2689 Or, to specify a specific port:
2690 <literallayout class='monospaced'>
2691 root@crownbay:~# oprofile-server --port 8888
2692 </literallayout>
2693 Once connected, press the 'Start' button and then run the
2694 wget workload on the remote system:
2695 <literallayout class='monospaced'>
2696 root@crownbay:~# rm linux-2.6.19.2.tar.bz2; wget <ulink url='http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2'>http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2</ulink>; sync
2697 Connecting to downloads.yoctoproject.org (140.211.169.59:80)
2698 linux-2.6.19.2.tar.b 100% |*******************************| 41727k 0:00:00 ETA
2699 </literallayout>
2700 Once the workload completes, press the 'Stop' button. At that
2701 point the OProfile viewer will download the profile files it's
2702 collected (this may take some time, especially if the kernel
2703 was profiled). While it downloads the files, you should see
2704 something like the following:
2705 </para>
2706
2707 <para>
2708 <imagedata fileref="figures/oprofileui-downloading.png" width="6in" depth="7in" align="center" scalefit="1" />
2709 </para>
2710
2711 <para>
2712 Once the profile files have been retrieved, you should see a
2713 list of the processes that were profiled:
2714 </para>
2715
2716 <para>
2717 <imagedata fileref="figures/oprofileui-processes.png" width="6in" depth="7in" align="center" scalefit="1" />
2718 </para>
2719
2720 <para>
2721 If you select one of them, you should see all the symbols that
2722 were hit during the profile. Selecting one of them will show a
2723 list of callers and callees of the chosen function in two
2724 panes below the top pane. For example, here's what we see
2725 when we select __copy_to_user_ll():
2726 </para>
2727
2728 <para>
2729 <imagedata fileref="figures/oprofileui-copy-to-user.png" width="6in" depth="7in" align="center" scalefit="1" />
2730 </para>
2731
2732 <para>
2733 As another example, we can look at the busybox process and see
2734 that the progress meter made a system call:
2735 </para>
2736
2737 <para>
2738 <imagedata fileref="figures/oprofileui-busybox.png" width="6in" depth="7in" align="center" scalefit="1" />
2739 </para>
2740 </section>
2741
2742 <section id='oprofile-documentation'>
2743 <title>Documentation</title>
2744
2745 <para>
2746 Yocto already has some information on setting up and using
2747 OProfile and oprofileui. As this document doesn't cover
2748 everything in detail, it may be worth taking a look at the
2749 "<ulink url='&YOCTO_DOCS_DEV_URL;#platdev-oprofile'>Profiling with OProfile</ulink>"
2750 section in the Yocto Project Development Manual
2751 </para>
2752
2753 <para>
2754 The OProfile manual can be found here:
2755 <ulink url='http://oprofile.sourceforge.net/doc/index.html'>OProfile manual</ulink>
2756 </para>
2757
2758 <para>
2759 The OProfile website contains links to the above manual and
2760 bunch of other items including an extensive set of examples:
2761 <ulink url='http://oprofile.sourceforge.net/about/'>About OProfile</ulink>
2762 </para>
2763 </section>
2764</section>
2765
2766<section id='profile-manual-sysprof'>
2767 <title>Sysprof</title>
2768
2769 <para>
2770 Sysprof is a very easy to use system-wide profiler that consists
2771 of a single window with three panes and a few buttons which allow
2772 you to start, stop, and view the profile from one place.
2773 </para>
2774
2775 <section id='sysprof-setup'>
2776 <title>Setup</title>
2777
2778 <para>
2779 For this section, we'll assume you've already performed the
2780 basic setup outlined in the General Setup section.
2781 </para>
2782
2783 <para>
2784 Sysprof is a GUI-based application that runs on the target
2785 system. For the rest of this document we assume you've
2786 ssh'ed to the host and will be running Sysprof on the
2787 target (you can use the '-X' option to ssh and have the
2788 Sysprof GUI run on the target but display remotely on the
2789 host if you want).
2790 </para>
2791 </section>
2792
2793 <section id='sysprof-basic-usage'>
2794 <title>Basic Usage</title>
2795
2796 <para>
2797 To start profiling the system, you simply press the 'Start'
2798 button. To stop profiling and to start viewing the profile data
2799 in one easy step, press the 'Profile' button.
2800 </para>
2801
2802 <para>
2803 Once you've pressed the profile button, the three panes will
2804 fill up with profiling data:
2805 </para>
2806
2807 <para>
2808 <imagedata fileref="figures/sysprof-copy-to-user.png" width="6in" depth="4in" align="center" scalefit="1" />
2809 </para>
2810
2811 <para>
2812 The left pane shows a list of functions and processes.
2813 Selecting one of those expands that function in the right
2814 pane, showing all its callees. Note that this caller-oriented
2815 display is essentially the inverse of perf's default
2816 callee-oriented callchain display.
2817 </para>
2818
2819 <para>
2820 In the screenshot above, we're focusing on __copy_to_user_ll()
2821 and looking up the callchain we can see that one of the callers
2822 of __copy_to_user_ll is sys_read() and the complete callpath
2823 between them. Notice that this is essentially a portion of the
2824 same information we saw in the perf display shown in the perf
2825 section of this page.
2826 </para>
2827
2828 <para>
2829 <imagedata fileref="figures/sysprof-copy-from-user.png" width="6in" depth="4in" align="center" scalefit="1" />
2830 </para>
2831
2832 <para>
2833 Similarly, the above is a snapshot of the Sysprof display of a
2834 copy-from-user callchain.
2835 </para>
2836
2837 <para>
2838 Finally, looking at the third Sysprof pane in the lower left,
2839 we can see a list of all the callers of a particular function
2840 selected in the top left pane. In this case, the lower pane is
2841 showing all the callers of __mark_inode_dirty:
2842 </para>
2843
2844 <para>
2845 <imagedata fileref="figures/sysprof-callers.png" width="6in" depth="4in" align="center" scalefit="1" />
2846 </para>
2847
2848 <para>
2849 Double-clicking on one of those functions will in turn change the
2850 focus to the selected function, and so on.
2851 </para>
2852
2853 <informalexample>
2854 <emphasis>Tying it Together:</emphasis> If you like sysprof's 'caller-oriented'
2855 display, you may be able to approximate it in other tools as
2856 well. For example, 'perf report' has the -g (--call-graph)
2857 option that you can experiment with; one of the options is
2858 'caller' for an inverted caller-based callgraph display.
2859 </informalexample>
2860 </section>
2861
2862 <section id='sysprof-documentation'>
2863 <title>Documentation</title>
2864
2865 <para>
2866 There doesn't seem to be any documentation for Sysprof, but
2867 maybe that's because it's pretty self-explanatory.
2868 The Sysprof website, however, is here:
2869 <ulink url='http://sysprof.com/'>Sysprof, System-wide Performance Profiler for Linux</ulink>
2870 </para>
2871 </section>
2872</section>
2873
2874<section id='lttng-linux-trace-toolkit-next-generation'>
2875 <title>LTTng (Linux Trace Toolkit, next generation)</title>
2876
2877 <section id='lttng-setup'>
2878 <title>Setup</title>
2879
2880 <para>
2881 For this section, we'll assume you've already performed the
2882 basic setup outlined in the General Setup section.
2883 </para>
2884
2885 <para>
2886 LTTng is run on the target system by ssh'ing to it.
2887 However, if you want to see the traces graphically,
2888 install Eclipse as described in section
2889 "<link linkend='manually-copying-a-trace-to-the-host-and-viewing-it-in-eclipse'>Manually copying a trace to the host and viewing it in Eclipse (i.e. using Eclipse without network support)</link>"
2890 and follow the directions to manually copy traces to the host and
2891 view them in Eclipse (i.e. using Eclipse without network support).
2892 </para>
2893
2894 <note>
2895 Be sure to download and install/run the 'SR1' or later Juno release
2896 of eclipse e.g.:
2897 <ulink url='http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/juno/SR1/eclipse-cpp-juno-SR1-linux-gtk-x86_64.tar.gz'>http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/juno/SR1/eclipse-cpp-juno-SR1-linux-gtk-x86_64.tar.gz</ulink>
2898 </note>
2899 </section>
2900
2901 <section id='collecting-and-viewing-traces'>
2902 <title>Collecting and Viewing Traces</title>
2903
2904 <para>
2905 Once you've applied the above commits and built and booted your
2906 image (you need to build the core-image-sato-sdk image or use one of the
2907 other methods described in the General Setup section), you're
2908 ready to start tracing.
2909 </para>
2910
2911 <section id='collecting-and-viewing-a-trace-on-the-target-inside-a-shell'>
2912 <title>Collecting and viewing a trace on the target (inside a shell)</title>
2913
2914 <para>
2915 First, from the host, ssh to the target:
2916 <literallayout class='monospaced'>
2917 $ ssh -l root 192.168.1.47
2918 The authenticity of host '192.168.1.47 (192.168.1.47)' can't be established.
2919 RSA key fingerprint is 23:bd:c8:b1:a8:71:52:00:ee:00:4f:64:9e:10:b9:7e.
2920 Are you sure you want to continue connecting (yes/no)? yes
2921 Warning: Permanently added '192.168.1.47' (RSA) to the list of known hosts.
2922 root@192.168.1.47's password:
2923 </literallayout>
2924 Once on the target, use these steps to create a trace:
2925 <literallayout class='monospaced'>
2926 root@crownbay:~# lttng create
2927 Spawning a session daemon
2928 Session auto-20121015-232120 created.
2929 Traces will be written in /home/root/lttng-traces/auto-20121015-232120
2930 </literallayout>
2931 Enable the events you want to trace (in this case all
2932 kernel events):
2933 <literallayout class='monospaced'>
2934 root@crownbay:~# lttng enable-event --kernel --all
2935 All kernel events are enabled in channel channel0
2936 </literallayout>
2937 Start the trace:
2938 <literallayout class='monospaced'>
2939 root@crownbay:~# lttng start
2940 Tracing started for session auto-20121015-232120
2941 </literallayout>
2942 And then stop the trace after awhile or after running
2943 a particular workload that you want to trace:
2944 <literallayout class='monospaced'>
2945 root@crownbay:~# lttng stop
2946 Tracing stopped for session auto-20121015-232120
2947 </literallayout>
2948 You can now view the trace in text form on the target:
2949 <literallayout class='monospaced'>
2950 root@crownbay:~# lttng view
2951 [23:21:56.989270399] (+?.?????????) sys_geteuid: { 1 }, { }
2952 [23:21:56.989278081] (+0.000007682) exit_syscall: { 1 }, { ret = 0 }
2953 [23:21:56.989286043] (+0.000007962) sys_pipe: { 1 }, { fildes = 0xB77B9E8C }
2954 [23:21:56.989321802] (+0.000035759) exit_syscall: { 1 }, { ret = 0 }
2955 [23:21:56.989329345] (+0.000007543) sys_mmap_pgoff: { 1 }, { addr = 0x0, len = 10485760, prot = 3, flags = 131362, fd = 4294967295, pgoff = 0 }
2956 [23:21:56.989351694] (+0.000022349) exit_syscall: { 1 }, { ret = -1247805440 }
2957 [23:21:56.989432989] (+0.000081295) sys_clone: { 1 }, { clone_flags = 0x411, newsp = 0xB5EFFFE4, parent_tid = 0xFFFFFFFF, child_tid = 0x0 }
2958 [23:21:56.989477129] (+0.000044140) sched_stat_runtime: { 1 }, { comm = "lttng-consumerd", tid = 1193, runtime = 681660, vruntime = 43367983388 }
2959 [23:21:56.989486697] (+0.000009568) sched_migrate_task: { 1 }, { comm = "lttng-consumerd", tid = 1193, prio = 20, orig_cpu = 1, dest_cpu = 1 }
2960 [23:21:56.989508418] (+0.000021721) hrtimer_init: { 1 }, { hrtimer = 3970832076, clockid = 1, mode = 1 }
2961 [23:21:56.989770462] (+0.000262044) hrtimer_cancel: { 1 }, { hrtimer = 3993865440 }
2962 [23:21:56.989771580] (+0.000001118) hrtimer_cancel: { 0 }, { hrtimer = 3993812192 }
2963 [23:21:56.989776957] (+0.000005377) hrtimer_expire_entry: { 1 }, { hrtimer = 3993865440, now = 79815980007057, function = 3238465232 }
2964 [23:21:56.989778145] (+0.000001188) hrtimer_expire_entry: { 0 }, { hrtimer = 3993812192, now = 79815980008174, function = 3238465232 }
2965 [23:21:56.989791695] (+0.000013550) softirq_raise: { 1 }, { vec = 1 }
2966 [23:21:56.989795396] (+0.000003701) softirq_raise: { 0 }, { vec = 1 }
2967 [23:21:56.989800635] (+0.000005239) softirq_raise: { 0 }, { vec = 9 }
2968 [23:21:56.989807130] (+0.000006495) sched_stat_runtime: { 1 }, { comm = "lttng-consumerd", tid = 1193, runtime = 330710, vruntime = 43368314098 }
2969 [23:21:56.989809993] (+0.000002863) sched_stat_runtime: { 0 }, { comm = "lttng-sessiond", tid = 1181, runtime = 1015313, vruntime = 36976733240 }
2970 [23:21:56.989818514] (+0.000008521) hrtimer_expire_exit: { 0 }, { hrtimer = 3993812192 }
2971 [23:21:56.989819631] (+0.000001117) hrtimer_expire_exit: { 1 }, { hrtimer = 3993865440 }
2972 [23:21:56.989821866] (+0.000002235) hrtimer_start: { 0 }, { hrtimer = 3993812192, function = 3238465232, expires = 79815981000000, softexpires = 79815981000000 }
2973 [23:21:56.989822984] (+0.000001118) hrtimer_start: { 1 }, { hrtimer = 3993865440, function = 3238465232, expires = 79815981000000, softexpires = 79815981000000 }
2974 [23:21:56.989832762] (+0.000009778) softirq_entry: { 1 }, { vec = 1 }
2975 [23:21:56.989833879] (+0.000001117) softirq_entry: { 0 }, { vec = 1 }
2976 [23:21:56.989838069] (+0.000004190) timer_cancel: { 1 }, { timer = 3993871956 }
2977 [23:21:56.989839187] (+0.000001118) timer_cancel: { 0 }, { timer = 3993818708 }
2978 [23:21:56.989841492] (+0.000002305) timer_expire_entry: { 1 }, { timer = 3993871956, now = 79515980, function = 3238277552 }
2979 [23:21:56.989842819] (+0.000001327) timer_expire_entry: { 0 }, { timer = 3993818708, now = 79515980, function = 3238277552 }
2980 [23:21:56.989854831] (+0.000012012) sched_stat_runtime: { 1 }, { comm = "lttng-consumerd", tid = 1193, runtime = 49237, vruntime = 43368363335 }
2981 [23:21:56.989855949] (+0.000001118) sched_stat_runtime: { 0 }, { comm = "lttng-sessiond", tid = 1181, runtime = 45121, vruntime = 36976778361 }
2982 [23:21:56.989861257] (+0.000005308) sched_stat_sleep: { 1 }, { comm = "kworker/1:1", tid = 21, delay = 9451318 }
2983 [23:21:56.989862374] (+0.000001117) sched_stat_sleep: { 0 }, { comm = "kworker/0:0", tid = 4, delay = 9958820 }
2984 [23:21:56.989868241] (+0.000005867) sched_wakeup: { 0 }, { comm = "kworker/0:0", tid = 4, prio = 120, success = 1, target_cpu = 0 }
2985 [23:21:56.989869358] (+0.000001117) sched_wakeup: { 1 }, { comm = "kworker/1:1", tid = 21, prio = 120, success = 1, target_cpu = 1 }
2986 [23:21:56.989877460] (+0.000008102) timer_expire_exit: { 1 }, { timer = 3993871956 }
2987 [23:21:56.989878577] (+0.000001117) timer_expire_exit: { 0 }, { timer = 3993818708 }
2988 .
2989 .
2990 .
2991 </literallayout>
2992 You can now safely destroy the trace session (note that
2993 this doesn't delete the trace - it's still there
2994 in ~/lttng-traces):
2995 <literallayout class='monospaced'>
2996 root@crownbay:~# lttng destroy
2997 Session auto-20121015-232120 destroyed at /home/root
2998 </literallayout>
2999 Note that the trace is saved in a directory of the same
3000 name as returned by 'lttng create', under the ~/lttng-traces
3001 directory (note that you can change this by supplying your
3002 own name to 'lttng create'):
3003 <literallayout class='monospaced'>
3004 root@crownbay:~# ls -al ~/lttng-traces
3005 drwxrwx--- 3 root root 1024 Oct 15 23:21 .
3006 drwxr-xr-x 5 root root 1024 Oct 15 23:57 ..
3007 drwxrwx--- 3 root root 1024 Oct 15 23:21 auto-20121015-232120
3008 </literallayout>
3009 </para>
3010 </section>
3011
3012 <section id='collecting-and-viewing-a-userspace-trace-on-the-target-inside-a-shell'>
3013 <title>Collecting and viewing a userspace trace on the target (inside a shell)</title>
3014
3015 <para>
3016 For LTTng userspace tracing, you need to have a properly
3017 instrumented userspace program. For this example, we'll use
3018 the 'hello' test program generated by the lttng-ust build.
3019 </para>
3020
3021 <para>
3022 The 'hello' test program isn't installed on the rootfs by
3023 the lttng-ust build, so we need to copy it over manually.
3024 First cd into the build directory that contains the hello
3025 executable:
3026 <literallayout class='monospaced'>
3027 $ cd build/tmp/work/core2_32-poky-linux/lttng-ust/2.0.5-r0/git/tests/hello/.libs
3028 </literallayout>
3029 Copy that over to the target machine:
3030 <literallayout class='monospaced'>
3031 $ scp hello root@192.168.1.20:
3032 </literallayout>
3033 You now have the instrumented lttng 'hello world' test
3034 program on the target, ready to test.
3035 </para>
3036
3037 <para>
3038 First, from the host, ssh to the target:
3039 <literallayout class='monospaced'>
3040 $ ssh -l root 192.168.1.47
3041 The authenticity of host '192.168.1.47 (192.168.1.47)' can't be established.
3042 RSA key fingerprint is 23:bd:c8:b1:a8:71:52:00:ee:00:4f:64:9e:10:b9:7e.
3043 Are you sure you want to continue connecting (yes/no)? yes
3044 Warning: Permanently added '192.168.1.47' (RSA) to the list of known hosts.
3045 root@192.168.1.47's password:
3046 </literallayout>
3047 Once on the target, use these steps to create a trace:
3048 <literallayout class='monospaced'>
3049 root@crownbay:~# lttng create
3050 Session auto-20190303-021943 created.
3051 Traces will be written in /home/root/lttng-traces/auto-20190303-021943
3052 </literallayout>
3053 Enable the events you want to trace (in this case all
3054 userspace events):
3055 <literallayout class='monospaced'>
3056 root@crownbay:~# lttng enable-event --userspace --all
3057 All UST events are enabled in channel channel0
3058 </literallayout>
3059 Start the trace:
3060 <literallayout class='monospaced'>
3061 root@crownbay:~# lttng start
3062 Tracing started for session auto-20190303-021943
3063 </literallayout>
3064 Run the instrumented hello world program:
3065 <literallayout class='monospaced'>
3066 root@crownbay:~# ./hello
3067 Hello, World!
3068 Tracing... done.
3069 </literallayout>
3070 And then stop the trace after awhile or after running a
3071 particular workload that you want to trace:
3072 <literallayout class='monospaced'>
3073 root@crownbay:~# lttng stop
3074 Tracing stopped for session auto-20190303-021943
3075 </literallayout>
3076 You can now view the trace in text form on the target:
3077 <literallayout class='monospaced'>
3078 root@crownbay:~# lttng view
3079 [02:31:14.906146544] (+?.?????????) hello:1424 ust_tests_hello:tptest: { cpu_id = 1 }, { intfield = 0, intfield2 = 0x0, longfield = 0, netintfield = 0, netintfieldhex = 0x0, arrfield1 = [ [0] = 1, [1] = 2, [2] = 3 ], arrfield2 = "test", _seqfield1_length = 4, seqfield1 = [ [0] = 116, [1] = 101, [2] = 115, [3] = 116 ], _seqfield2_length = 4, seqfield2 = "test", stringfield = "test", floatfield = 2222, doublefield = 2, boolfield = 1 }
3080 [02:31:14.906170360] (+0.000023816) hello:1424 ust_tests_hello:tptest: { cpu_id = 1 }, { intfield = 1, intfield2 = 0x1, longfield = 1, netintfield = 1, netintfieldhex = 0x1, arrfield1 = [ [0] = 1, [1] = 2, [2] = 3 ], arrfield2 = "test", _seqfield1_length = 4, seqfield1 = [ [0] = 116, [1] = 101, [2] = 115, [3] = 116 ], _seqfield2_length = 4, seqfield2 = "test", stringfield = "test", floatfield = 2222, doublefield = 2, boolfield = 1 }
3081 [02:31:14.906183140] (+0.000012780) hello:1424 ust_tests_hello:tptest: { cpu_id = 1 }, { intfield = 2, intfield2 = 0x2, longfield = 2, netintfield = 2, netintfieldhex = 0x2, arrfield1 = [ [0] = 1, [1] = 2, [2] = 3 ], arrfield2 = "test", _seqfield1_length = 4, seqfield1 = [ [0] = 116, [1] = 101, [2] = 115, [3] = 116 ], _seqfield2_length = 4, seqfield2 = "test", stringfield = "test", floatfield = 2222, doublefield = 2, boolfield = 1 }
3082 [02:31:14.906194385] (+0.000011245) hello:1424 ust_tests_hello:tptest: { cpu_id = 1 }, { intfield = 3, intfield2 = 0x3, longfield = 3, netintfield = 3, netintfieldhex = 0x3, arrfield1 = [ [0] = 1, [1] = 2, [2] = 3 ], arrfield2 = "test", _seqfield1_length = 4, seqfield1 = [ [0] = 116, [1] = 101, [2] = 115, [3] = 116 ], _seqfield2_length = 4, seqfield2 = "test", stringfield = "test", floatfield = 2222, doublefield = 2, boolfield = 1 }
3083 .
3084 .
3085 .
3086 </literallayout>
3087 You can now safely destroy the trace session (note that
3088 this doesn't delete the trace - it's still
3089 there in ~/lttng-traces):
3090 <literallayout class='monospaced'>
3091 root@crownbay:~# lttng destroy
3092 Session auto-20190303-021943 destroyed at /home/root
3093 </literallayout>
3094 </para>
3095 </section>
3096
3097 <section id='manually-copying-a-trace-to-the-host-and-viewing-it-in-eclipse'>
3098 <title>Manually copying a trace to the host and viewing it in Eclipse (i.e. using Eclipse without network support)</title>
3099
3100 <para>
3101 If you already have an LTTng trace on a remote target and
3102 would like to view it in Eclipse on the host, you can easily
3103 copy it from the target to the host and import it into
3104 Eclipse to view it using the LTTng Eclipse plug-in already
3105 bundled in the Eclipse (Juno SR1 or greater).
3106 </para>
3107
3108 <para>
3109 Using the trace we created in the previous section, archive
3110 it and copy it to your host system:
3111 <literallayout class='monospaced'>
3112 root@crownbay:~/lttng-traces# tar zcvf auto-20121015-232120.tar.gz auto-20121015-232120
3113 auto-20121015-232120/
3114 auto-20121015-232120/kernel/
3115 auto-20121015-232120/kernel/metadata
3116 auto-20121015-232120/kernel/channel0_1
3117 auto-20121015-232120/kernel/channel0_0
3118
3119 $ scp root@192.168.1.47:lttng-traces/auto-20121015-232120.tar.gz .
3120 root@192.168.1.47's password:
3121 auto-20121015-232120.tar.gz 100% 1566KB 1.5MB/s 00:01
3122 </literallayout>
3123 Unarchive it on the host:
3124 <literallayout class='monospaced'>
3125 $ gunzip -c auto-20121015-232120.tar.gz | tar xvf -
3126 auto-20121015-232120/
3127 auto-20121015-232120/kernel/
3128 auto-20121015-232120/kernel/metadata
3129 auto-20121015-232120/kernel/channel0_1
3130 auto-20121015-232120/kernel/channel0_0
3131 </literallayout>
3132 We can now import the trace into Eclipse and view it:
3133 <orderedlist>
3134 <listitem><para>First, start eclipse and open the
3135 'LTTng Kernel' perspective by selecting the following
3136 menu item:
3137 <literallayout class='monospaced'>
3138 Window | Open Perspective | Other...
3139 </literallayout></para></listitem>
3140 <listitem><para>In the dialog box that opens, select
3141 'LTTng Kernel' from the list.</para></listitem>
3142 <listitem><para>Back at the main menu, select the
3143 following menu item:
3144 <literallayout class='monospaced'>
3145 File | New | Project...
3146 </literallayout></para></listitem>
3147 <listitem><para>In the dialog box that opens, select
3148 the 'Tracing | Tracing Project' wizard and press
3149 'Next>'.</para></listitem>
3150 <listitem><para>Give the project a name and press
3151 'Finish'.</para></listitem>
3152 <listitem><para>In the 'Project Explorer' pane under
3153 the project you created, right click on the
3154 'Traces' item.</para></listitem>
3155 <listitem><para>Select 'Import..." and in the dialog
3156 that's displayed:</para></listitem>
3157 <listitem><para>Browse the filesystem and find the
3158 select the 'kernel' directory containing the trace
3159 you copied from the target
3160 e.g. auto-20121015-232120/kernel</para></listitem>
3161 <listitem><para>'Checkmark' the directory in the tree
3162 that's displayed for the trace</para></listitem>
3163 <listitem><para>Below that, select 'Common Trace Format:
3164 Kernel Trace' for the 'Trace Type'</para></listitem>
3165 <listitem><para>Press 'Finish' to close the dialog
3166 </para></listitem>
3167 <listitem><para>Back in the 'Project Explorer' pane,
3168 double-click on the 'kernel' item for the
3169 trace you just imported under 'Traces'
3170 </para></listitem>
3171 </orderedlist>
3172 You should now see your trace data displayed graphically
3173 in several different views in Eclipse:
3174 </para>
3175
3176 <para>
3177 <imagedata fileref="figures/lttngmain0.png" width="6in" depth="6in" align="center" scalefit="1" />
3178 </para>
3179
3180 <para>
3181 You can access extensive help information on how to use
3182 the LTTng plug-in to search and analyze captured traces via
3183 the Eclipse help system:
3184 <literallayout class='monospaced'>
3185 Help | Help Contents | LTTng Plug-in User Guide
3186 </literallayout>
3187 </para>
3188 </section>
3189
3190 <section id='collecting-and-viewing-a-trace-in-eclipse'>
3191 <title>Collecting and viewing a trace in Eclipse</title>
3192
3193 <note>
3194 This section on collecting traces remotely doesn't currently
3195 work because of Eclipse 'RSE' connectivity problems. Manually
3196 tracing on the target, copying the trace files to the host,
3197 and viewing the trace in Eclipse on the host as outlined in
3198 previous steps does work however - please use the manual
3199 steps outlined above to view traces in Eclipse.
3200 </note>
3201
3202 <para>
3203 In order to trace a remote target, you also need to add
3204 a 'tracing' group on the target and connect as a user
3205 who's part of that group e.g:
3206 <literallayout class='monospaced'>
3207 # adduser tomz
3208 # groupadd -r tracing
3209 # usermod -a -G tracing tomz
3210 </literallayout>
3211 <orderedlist>
3212 <listitem><para>First, start eclipse and open the
3213 'LTTng Kernel' perspective by selecting the following
3214 menu item:
3215 <literallayout class='monospaced'>
3216 Window | Open Perspective | Other...
3217 </literallayout></para></listitem>
3218 <listitem><para>In the dialog box that opens, select
3219 'LTTng Kernel' from the list.</para></listitem>
3220 <listitem><para>Back at the main menu, select the
3221 following menu item:
3222 <literallayout class='monospaced'>
3223 File | New | Project...
3224 </literallayout></para></listitem>
3225 <listitem><para>In the dialog box that opens, select
3226 the 'Tracing | Tracing Project' wizard and
3227 press 'Next>'.</para></listitem>
3228 <listitem><para>Give the project a name and press
3229 'Finish'. That should result in an entry in the
3230 'Project' subwindow.</para></listitem>
3231 <listitem><para>In the 'Control' subwindow just below
3232 it, press 'New Connection'.</para></listitem>
3233 <listitem><para>Add a new connection, giving it the
3234 hostname or IP address of the target system.
3235 </para></listitem>
3236 <listitem><para>Provide the username and password
3237 of a qualified user (a member of the 'tracing' group)
3238 or root account on the target system.
3239 </para></listitem>
3240 <listitem><para>Provide appropriate answers to whatever
3241 else is asked for e.g. 'secure storage password'
3242 can be anything you want.
3243 If you get an 'RSE Error' it may be due to proxies.
3244 It may be possible to get around the problem by
3245 changing the following setting:
3246 <literallayout class='monospaced'>
3247 Window | Preferences | Network Connections
3248 </literallayout>
3249 Switch 'Active Provider' to 'Direct'
3250 </para></listitem>
3251 </orderedlist>
3252 </para>
3253 </section>
3254 </section>
3255
3256 <section id='lltng-documentation'>
3257 <title>Documentation</title>
3258
3259 <para>
3260 There doesn't seem to be any current documentation covering
3261 LTTng 2.0, but maybe that's because the project is in transition.
3262 The LTTng 2.0 website, however, is here:
3263 <ulink url='http://lttng.org/lttng2.0'>LTTng Project</ulink>
3264 </para>
3265
3266 <para>
3267 You can access extensive help information on how to use the
3268 LTTng plug-in to search and analyze captured traces via the
3269 Eclipse help system:
3270 <literallayout class='monospaced'>
3271 Help | Help Contents | LTTng Plug-in User Guide
3272 </literallayout>
3273 </para>
3274 </section>
3275</section>
3276
3277<section id='profile-manual-blktrace'>
3278 <title>blktrace</title>
3279
3280 <para>
3281 blktrace is a tool for tracing and reporting low-level disk I/O.
3282 blktrace provides the tracing half of the equation; its output can
3283 be piped into the blkparse program, which renders the data in a
3284 human-readable form and does some basic analysis:
3285 </para>
3286
3287 <section id='blktrace-setup'>
3288 <title>Setup</title>
3289
3290 <para>
3291 For this section, we'll assume you've already performed the
3292 basic setup outlined in the
3293 "<link linkend='profile-manual-general-setup'>General Setup</link>"
3294 section.
3295 </para>
3296
3297 <para>
3298 blktrace is an application that runs on the target system.
3299 You can run the entire blktrace and blkparse pipeline on the
3300 target, or you can run blktrace in 'listen' mode on the target
3301 and have blktrace and blkparse collect and analyze the data on
3302 the host (see the
3303 "<link linkend='using-blktrace-remotely'>Using blktrace Remotely</link>"
3304 section below).
3305 For the rest of this section we assume you've ssh'ed to the
3306 host and will be running blkrace on the target.
3307 </para>
3308 </section>
3309
3310 <section id='blktrace-basic-usage'>
3311 <title>Basic Usage</title>
3312
3313 <para>
3314 To record a trace, simply run the 'blktrace' command, giving it
3315 the name of the block device you want to trace activity on:
3316 <literallayout class='monospaced'>
3317 root@crownbay:~# blktrace /dev/sdc
3318 </literallayout>
3319 In another shell, execute a workload you want to trace.
3320 <literallayout class='monospaced'>
3321 root@crownbay:/media/sdc# rm linux-2.6.19.2.tar.bz2; wget <ulink url='http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2'>http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2</ulink>; sync
3322 Connecting to downloads.yoctoproject.org (140.211.169.59:80)
3323 linux-2.6.19.2.tar.b 100% |*******************************| 41727k 0:00:00 ETA
3324 </literallayout>
3325 Press Ctrl-C in the blktrace shell to stop the trace. It will
3326 display how many events were logged, along with the per-cpu file
3327 sizes (blktrace records traces in per-cpu kernel buffers and
3328 simply dumps them to userspace for blkparse to merge and sort
3329 later).
3330 <literallayout class='monospaced'>
3331 ^C=== sdc ===
3332 CPU 0: 7082 events, 332 KiB data
3333 CPU 1: 1578 events, 74 KiB data
3334 Total: 8660 events (dropped 0), 406 KiB data
3335 </literallayout>
3336 If you examine the files saved to disk, you see multiple files,
3337 one per CPU and with the device name as the first part of the
3338 filename:
3339 <literallayout class='monospaced'>
3340 root@crownbay:~# ls -al
3341 drwxr-xr-x 6 root root 1024 Oct 27 22:39 .
3342 drwxr-sr-x 4 root root 1024 Oct 26 18:24 ..
3343 -rw-r--r-- 1 root root 339938 Oct 27 22:40 sdc.blktrace.0
3344 -rw-r--r-- 1 root root 75753 Oct 27 22:40 sdc.blktrace.1
3345 </literallayout>
3346 To view the trace events, simply invoke 'blkparse' in the
3347 directory containing the trace files, giving it the device name
3348 that forms the first part of the filenames:
3349 <literallayout class='monospaced'>
3350 root@crownbay:~# blkparse sdc
3351
3352 8,32 1 1 0.000000000 1225 Q WS 3417048 + 8 [jbd2/sdc-8]
3353 8,32 1 2 0.000025213 1225 G WS 3417048 + 8 [jbd2/sdc-8]
3354 8,32 1 3 0.000033384 1225 P N [jbd2/sdc-8]
3355 8,32 1 4 0.000043301 1225 I WS 3417048 + 8 [jbd2/sdc-8]
3356 8,32 1 0 0.000057270 0 m N cfq1225 insert_request
3357 8,32 1 0 0.000064813 0 m N cfq1225 add_to_rr
3358 8,32 1 5 0.000076336 1225 U N [jbd2/sdc-8] 1
3359 8,32 1 0 0.000088559 0 m N cfq workload slice:150
3360 8,32 1 0 0.000097359 0 m N cfq1225 set_active wl_prio:0 wl_type:1
3361 8,32 1 0 0.000104063 0 m N cfq1225 Not idling. st->count:1
3362 8,32 1 0 0.000112584 0 m N cfq1225 fifo= (null)
3363 8,32 1 0 0.000118730 0 m N cfq1225 dispatch_insert
3364 8,32 1 0 0.000127390 0 m N cfq1225 dispatched a request
3365 8,32 1 0 0.000133536 0 m N cfq1225 activate rq, drv=1
3366 8,32 1 6 0.000136889 1225 D WS 3417048 + 8 [jbd2/sdc-8]
3367 8,32 1 7 0.000360381 1225 Q WS 3417056 + 8 [jbd2/sdc-8]
3368 8,32 1 8 0.000377422 1225 G WS 3417056 + 8 [jbd2/sdc-8]
3369 8,32 1 9 0.000388876 1225 P N [jbd2/sdc-8]
3370 8,32 1 10 0.000397886 1225 Q WS 3417064 + 8 [jbd2/sdc-8]
3371 8,32 1 11 0.000404800 1225 M WS 3417064 + 8 [jbd2/sdc-8]
3372 8,32 1 12 0.000412343 1225 Q WS 3417072 + 8 [jbd2/sdc-8]
3373 8,32 1 13 0.000416533 1225 M WS 3417072 + 8 [jbd2/sdc-8]
3374 8,32 1 14 0.000422121 1225 Q WS 3417080 + 8 [jbd2/sdc-8]
3375 8,32 1 15 0.000425194 1225 M WS 3417080 + 8 [jbd2/sdc-8]
3376 8,32 1 16 0.000431968 1225 Q WS 3417088 + 8 [jbd2/sdc-8]
3377 8,32 1 17 0.000435251 1225 M WS 3417088 + 8 [jbd2/sdc-8]
3378 8,32 1 18 0.000440279 1225 Q WS 3417096 + 8 [jbd2/sdc-8]
3379 8,32 1 19 0.000443911 1225 M WS 3417096 + 8 [jbd2/sdc-8]
3380 8,32 1 20 0.000450336 1225 Q WS 3417104 + 8 [jbd2/sdc-8]
3381 8,32 1 21 0.000454038 1225 M WS 3417104 + 8 [jbd2/sdc-8]
3382 8,32 1 22 0.000462070 1225 Q WS 3417112 + 8 [jbd2/sdc-8]
3383 8,32 1 23 0.000465422 1225 M WS 3417112 + 8 [jbd2/sdc-8]
3384 8,32 1 24 0.000474222 1225 I WS 3417056 + 64 [jbd2/sdc-8]
3385 8,32 1 0 0.000483022 0 m N cfq1225 insert_request
3386 8,32 1 25 0.000489727 1225 U N [jbd2/sdc-8] 1
3387 8,32 1 0 0.000498457 0 m N cfq1225 Not idling. st->count:1
3388 8,32 1 0 0.000503765 0 m N cfq1225 dispatch_insert
3389 8,32 1 0 0.000512914 0 m N cfq1225 dispatched a request
3390 8,32 1 0 0.000518851 0 m N cfq1225 activate rq, drv=2
3391 .
3392 .
3393 .
3394 8,32 0 0 58.515006138 0 m N cfq3551 complete rqnoidle 1
3395 8,32 0 2024 58.516603269 3 C WS 3156992 + 16 [0]
3396 8,32 0 0 58.516626736 0 m N cfq3551 complete rqnoidle 1
3397 8,32 0 0 58.516634558 0 m N cfq3551 arm_idle: 8 group_idle: 0
3398 8,32 0 0 58.516636933 0 m N cfq schedule dispatch
3399 8,32 1 0 58.516971613 0 m N cfq3551 slice expired t=0
3400 8,32 1 0 58.516982089 0 m N cfq3551 sl_used=13 disp=6 charge=13 iops=0 sect=80
3401 8,32 1 0 58.516985511 0 m N cfq3551 del_from_rr
3402 8,32 1 0 58.516990819 0 m N cfq3551 put_queue
3403
3404 CPU0 (sdc):
3405 Reads Queued: 0, 0KiB Writes Queued: 331, 26,284KiB
3406 Read Dispatches: 0, 0KiB Write Dispatches: 485, 40,484KiB
3407 Reads Requeued: 0 Writes Requeued: 0
3408 Reads Completed: 0, 0KiB Writes Completed: 511, 41,000KiB
3409 Read Merges: 0, 0KiB Write Merges: 13, 160KiB
3410 Read depth: 0 Write depth: 2
3411 IO unplugs: 23 Timer unplugs: 0
3412 CPU1 (sdc):
3413 Reads Queued: 0, 0KiB Writes Queued: 249, 15,800KiB
3414 Read Dispatches: 0, 0KiB Write Dispatches: 42, 1,600KiB
3415 Reads Requeued: 0 Writes Requeued: 0
3416 Reads Completed: 0, 0KiB Writes Completed: 16, 1,084KiB
3417 Read Merges: 0, 0KiB Write Merges: 40, 276KiB
3418 Read depth: 0 Write depth: 2
3419 IO unplugs: 30 Timer unplugs: 1
3420
3421 Total (sdc):
3422 Reads Queued: 0, 0KiB Writes Queued: 580, 42,084KiB
3423 Read Dispatches: 0, 0KiB Write Dispatches: 527, 42,084KiB
3424 Reads Requeued: 0 Writes Requeued: 0
3425 Reads Completed: 0, 0KiB Writes Completed: 527, 42,084KiB
3426 Read Merges: 0, 0KiB Write Merges: 53, 436KiB
3427 IO unplugs: 53 Timer unplugs: 1
3428
3429 Throughput (R/W): 0KiB/s / 719KiB/s
3430 Events (sdc): 6,592 entries
3431 Skips: 0 forward (0 - 0.0%)
3432 Input file sdc.blktrace.0 added
3433 Input file sdc.blktrace.1 added
3434 </literallayout>
3435 The report shows each event that was found in the blktrace data,
3436 along with a summary of the overall block I/O traffic during
3437 the run. You can look at the
3438 <ulink url='http://linux.die.net/man/1/blkparse'>blkparse</ulink>
3439 manpage to learn the
3440 meaning of each field displayed in the trace listing.
3441 </para>
3442
3443 <section id='blktrace-live-mode'>
3444 <title>Live Mode</title>
3445
3446 <para>
3447 blktrace and blkparse are designed from the ground up to
3448 be able to operate together in a 'pipe mode' where the
3449 stdout of blktrace can be fed directly into the stdin of
3450 blkparse:
3451 <literallayout class='monospaced'>
3452 root@crownbay:~# blktrace /dev/sdc -o - | blkparse -i -
3453 </literallayout>
3454 This enables long-lived tracing sessions to run without
3455 writing anything to disk, and allows the user to look for
3456 certain conditions in the trace data in 'real-time' by
3457 viewing the trace output as it scrolls by on the screen or
3458 by passing it along to yet another program in the pipeline
3459 such as grep which can be used to identify and capture
3460 conditions of interest.
3461 </para>
3462
3463 <para>
3464 There's actually another blktrace command that implements
3465 the above pipeline as a single command, so the user doesn't
3466 have to bother typing in the above command sequence:
3467 <literallayout class='monospaced'>
3468 root@crownbay:~# btrace /dev/sdc
3469 </literallayout>
3470 </para>
3471 </section>
3472
3473 <section id='using-blktrace-remotely'>
3474 <title>Using blktrace Remotely</title>
3475
3476 <para>
3477 Because blktrace traces block I/O and at the same time
3478 normally writes its trace data to a block device, and
3479 in general because it's not really a great idea to make
3480 the device being traced the same as the device the tracer
3481 writes to, blktrace provides a way to trace without
3482 perturbing the traced device at all by providing native
3483 support for sending all trace data over the network.
3484 </para>
3485
3486 <para>
3487 To have blktrace operate in this mode, start blktrace on
3488 the target system being traced with the -l option, along with
3489 the device to trace:
3490 <literallayout class='monospaced'>
3491 root@crownbay:~# blktrace -l /dev/sdc
3492 server: waiting for connections...
3493 </literallayout>
3494 On the host system, use the -h option to connect to the
3495 target system, also passing it the device to trace:
3496 <literallayout class='monospaced'>
3497 $ blktrace -d /dev/sdc -h 192.168.1.43
3498 blktrace: connecting to 192.168.1.43
3499 blktrace: connected!
3500 </literallayout>
3501 On the target system, you should see this:
3502 <literallayout class='monospaced'>
3503 server: connection from 192.168.1.43
3504 </literallayout>
3505 In another shell, execute a workload you want to trace.
3506 <literallayout class='monospaced'>
3507 root@crownbay:/media/sdc# rm linux-2.6.19.2.tar.bz2; wget <ulink url='http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2'>http://downloads.yoctoproject.org/mirror/sources/linux-2.6.19.2.tar.bz2</ulink>; sync
3508 Connecting to downloads.yoctoproject.org (140.211.169.59:80)
3509 linux-2.6.19.2.tar.b 100% |*******************************| 41727k 0:00:00 ETA
3510 </literallayout>
3511 When it's done, do a Ctrl-C on the host system to
3512 stop the trace:
3513 <literallayout class='monospaced'>
3514 ^C=== sdc ===
3515 CPU 0: 7691 events, 361 KiB data
3516 CPU 1: 4109 events, 193 KiB data
3517 Total: 11800 events (dropped 0), 554 KiB data
3518 </literallayout>
3519 On the target system, you should also see a trace
3520 summary for the trace just ended:
3521 <literallayout class='monospaced'>
3522 server: end of run for 192.168.1.43:sdc
3523 === sdc ===
3524 CPU 0: 7691 events, 361 KiB data
3525 CPU 1: 4109 events, 193 KiB data
3526 Total: 11800 events (dropped 0), 554 KiB data
3527 </literallayout>
3528 The blktrace instance on the host will save the target
3529 output inside a hostname-timestamp directory:
3530 <literallayout class='monospaced'>
3531 $ ls -al
3532 drwxr-xr-x 10 root root 1024 Oct 28 02:40 .
3533 drwxr-sr-x 4 root root 1024 Oct 26 18:24 ..
3534 drwxr-xr-x 2 root root 1024 Oct 28 02:40 192.168.1.43-2012-10-28-02:40:56
3535 </literallayout>
3536 cd into that directory to see the output files:
3537 <literallayout class='monospaced'>
3538 $ ls -l
3539 -rw-r--r-- 1 root root 369193 Oct 28 02:44 sdc.blktrace.0
3540 -rw-r--r-- 1 root root 197278 Oct 28 02:44 sdc.blktrace.1
3541 </literallayout>
3542 And run blkparse on the host system using the device name:
3543 <literallayout class='monospaced'>
3544 $ blkparse sdc
3545
3546 8,32 1 1 0.000000000 1263 Q RM 6016 + 8 [ls]
3547 8,32 1 0 0.000036038 0 m N cfq1263 alloced
3548 8,32 1 2 0.000039390 1263 G RM 6016 + 8 [ls]
3549 8,32 1 3 0.000049168 1263 I RM 6016 + 8 [ls]
3550 8,32 1 0 0.000056152 0 m N cfq1263 insert_request
3551 8,32 1 0 0.000061600 0 m N cfq1263 add_to_rr
3552 8,32 1 0 0.000075498 0 m N cfq workload slice:300
3553 .
3554 .
3555 .
3556 8,32 0 0 177.266385696 0 m N cfq1267 arm_idle: 8 group_idle: 0
3557 8,32 0 0 177.266388140 0 m N cfq schedule dispatch
3558 8,32 1 0 177.266679239 0 m N cfq1267 slice expired t=0
3559 8,32 1 0 177.266689297 0 m N cfq1267 sl_used=9 disp=6 charge=9 iops=0 sect=56
3560 8,32 1 0 177.266692649 0 m N cfq1267 del_from_rr
3561 8,32 1 0 177.266696560 0 m N cfq1267 put_queue
3562
3563 CPU0 (sdc):
3564 Reads Queued: 0, 0KiB Writes Queued: 270, 21,708KiB
3565 Read Dispatches: 59, 2,628KiB Write Dispatches: 495, 39,964KiB
3566 Reads Requeued: 0 Writes Requeued: 0
3567 Reads Completed: 90, 2,752KiB Writes Completed: 543, 41,596KiB
3568 Read Merges: 0, 0KiB Write Merges: 9, 344KiB
3569 Read depth: 2 Write depth: 2
3570 IO unplugs: 20 Timer unplugs: 1
3571 CPU1 (sdc):
3572 Reads Queued: 688, 2,752KiB Writes Queued: 381, 20,652KiB
3573 Read Dispatches: 31, 124KiB Write Dispatches: 59, 2,396KiB
3574 Reads Requeued: 0 Writes Requeued: 0
3575 Reads Completed: 0, 0KiB Writes Completed: 11, 764KiB
3576 Read Merges: 598, 2,392KiB Write Merges: 88, 448KiB
3577 Read depth: 2 Write depth: 2
3578 IO unplugs: 52 Timer unplugs: 0
3579
3580 Total (sdc):
3581 Reads Queued: 688, 2,752KiB Writes Queued: 651, 42,360KiB
3582 Read Dispatches: 90, 2,752KiB Write Dispatches: 554, 42,360KiB
3583 Reads Requeued: 0 Writes Requeued: 0
3584 Reads Completed: 90, 2,752KiB Writes Completed: 554, 42,360KiB
3585 Read Merges: 598, 2,392KiB Write Merges: 97, 792KiB
3586 IO unplugs: 72 Timer unplugs: 1
3587
3588 Throughput (R/W): 15KiB/s / 238KiB/s
3589 Events (sdc): 9,301 entries
3590 Skips: 0 forward (0 - 0.0%)
3591 </literallayout>
3592 You should see the trace events and summary just as
3593 you would have if you'd run the same command on the target.
3594 </para>
3595 </section>
3596
3597 <section id='tracing-block-io-via-ftrace'>
3598 <title>Tracing Block I/O via 'ftrace'</title>
3599
3600 <para>
3601 It's also possible to trace block I/O using only
3602 <link linkend='the-trace-events-subsystem'>trace events subsystem</link>,
3603 which can be useful for casual tracing
3604 if you don't want to bother dealing with the userspace tools.
3605 </para>
3606
3607 <para>
3608 To enable tracing for a given device, use
3609 /sys/block/xxx/trace/enable, where xxx is the device name.
3610 This for example enables tracing for /dev/sdc:
3611 <literallayout class='monospaced'>
3612 root@crownbay:/sys/kernel/debug/tracing# echo 1 > /sys/block/sdc/trace/enable
3613 </literallayout>
3614 Once you've selected the device(s) you want to trace,
3615 selecting the 'blk' tracer will turn the blk tracer on:
3616 <literallayout class='monospaced'>
3617 root@crownbay:/sys/kernel/debug/tracing# cat available_tracers
3618 blk function_graph function nop
3619
3620 root@crownbay:/sys/kernel/debug/tracing# echo blk > current_tracer
3621 </literallayout>
3622 Execute the workload you're interested in:
3623 <literallayout class='monospaced'>
3624 root@crownbay:/sys/kernel/debug/tracing# cat /media/sdc/testfile.txt
3625 </literallayout>
3626 And look at the output (note here that we're using
3627 'trace_pipe' instead of trace to capture this trace -
3628 this allows us to wait around on the pipe for data to
3629 appear):
3630 <literallayout class='monospaced'>
3631 root@crownbay:/sys/kernel/debug/tracing# cat trace_pipe
3632 cat-3587 [001] d..1 3023.276361: 8,32 Q R 1699848 + 8 [cat]
3633 cat-3587 [001] d..1 3023.276410: 8,32 m N cfq3587 alloced
3634 cat-3587 [001] d..1 3023.276415: 8,32 G R 1699848 + 8 [cat]
3635 cat-3587 [001] d..1 3023.276424: 8,32 P N [cat]
3636 cat-3587 [001] d..2 3023.276432: 8,32 I R 1699848 + 8 [cat]
3637 cat-3587 [001] d..1 3023.276439: 8,32 m N cfq3587 insert_request
3638 cat-3587 [001] d..1 3023.276445: 8,32 m N cfq3587 add_to_rr
3639 cat-3587 [001] d..2 3023.276454: 8,32 U N [cat] 1
3640 cat-3587 [001] d..1 3023.276464: 8,32 m N cfq workload slice:150
3641 cat-3587 [001] d..1 3023.276471: 8,32 m N cfq3587 set_active wl_prio:0 wl_type:2
3642 cat-3587 [001] d..1 3023.276478: 8,32 m N cfq3587 fifo= (null)
3643 cat-3587 [001] d..1 3023.276483: 8,32 m N cfq3587 dispatch_insert
3644 cat-3587 [001] d..1 3023.276490: 8,32 m N cfq3587 dispatched a request
3645 cat-3587 [001] d..1 3023.276497: 8,32 m N cfq3587 activate rq, drv=1
3646 cat-3587 [001] d..2 3023.276500: 8,32 D R 1699848 + 8 [cat]
3647 </literallayout>
3648 And this turns off tracing for the specified device:
3649 <literallayout class='monospaced'>
3650 root@crownbay:/sys/kernel/debug/tracing# echo 0 > /sys/block/sdc/trace/enable
3651 </literallayout>
3652 </para>
3653 </section>
3654 </section>
3655
3656 <section id='blktrace-documentation'>
3657 <title>Documentation</title>
3658
3659 <para>
3660 Online versions of the man pages for the commands discussed
3661 in this section can be found here:
3662 <itemizedlist>
3663 <listitem><para><ulink url='http://linux.die.net/man/8/blktrace'>http://linux.die.net/man/8/blktrace</ulink>
3664 </para></listitem>
3665 <listitem><para><ulink url='http://linux.die.net/man/1/blkparse'>http://linux.die.net/man/1/blkparse</ulink>
3666 </para></listitem>
3667 <listitem><para><ulink url='http://linux.die.net/man/8/btrace'>http://linux.die.net/man/8/btrace</ulink>
3668 </para></listitem>
3669 </itemizedlist>
3670 </para>
3671
3672 <para>
3673 The above manpages, along with manpages for the other
3674 blktrace utilities (btt, blkiomon, etc) can be found in the
3675 /doc directory of the blktrace tools git repo:
3676 <literallayout class='monospaced'>
3677 $ git clone git://git.kernel.dk/blktrace.git
3678 </literallayout>
3679 </para>
3680 </section>
3681</section>
3682</chapter>
3683<!--
3684vim: expandtab tw=80 ts=4
3685-->
diff --git a/documentation/profile-manual/profile-manual.xml b/documentation/profile-manual/profile-manual.xml
new file mode 100644
index 0000000000..ed1176f326
--- /dev/null
+++ b/documentation/profile-manual/profile-manual.xml
@@ -0,0 +1,90 @@
1<!DOCTYPE book 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<book id='profile-manual' lang='en'
6 xmlns:xi="http://www.w3.org/2003/XInclude"
7 xmlns="http://docbook.org/ns/docbook"
8 >
9 <bookinfo>
10
11 <mediaobject>
12 <imageobject>
13 <imagedata fileref='figures/profile-title.png'
14 format='SVG'
15 align='left' scalefit='1' width='100%'/>
16 </imageobject>
17 </mediaobject>
18
19 <title>
20 Yocto Project Profiling and Tracing Manual
21 </title>
22
23 <authorgroup>
24 <author>
25 <firstname>Tom</firstname> <surname>Zanussi</surname>
26 <affiliation>
27 <orgname>Intel Corporation</orgname>
28 </affiliation>
29 <email>tom.zanussi@intel.com</email>
30 </author>
31 </authorgroup>
32
33 <revhistory>
34 <revision>
35 <revnumber>1.4</revnumber>
36 <date>April 2013</date>
37 <revremark>Released with the Yocto Project 1.4 Release.</revremark>
38 </revision>
39 <revision>
40 <revnumber>1.5</revnumber>
41 <date>October 2013</date>
42 <revremark>Released with the Yocto Project 1.5 Release.</revremark>
43 </revision>
44 <revision>
45 <revnumber>1.5.1</revnumber>
46 <date>January 2014</date>
47 <revremark>Released with the Yocto Project 1.5.1 Release.</revremark>
48 </revision>
49 <revision>
50 <revnumber>1.6</revnumber>
51 <date>April 2014</date>
52 <revremark>Released with the Yocto Project 1.6 Release.</revremark>
53 </revision>
54 </revhistory>
55
56 <copyright>
57 <year>&COPYRIGHT_YEAR;</year>
58 <holder>Linux Foundation</holder>
59 </copyright>
60
61 <legalnotice>
62 <para>
63 Permission is granted to copy, distribute and/or modify this document under
64 the terms of the <ulink type="http" url="http://creativecommons.org/licenses/by-sa/2.0/uk/">
65 Creative Commons Attribution-Share Alike 2.0 UK: England &amp; Wales</ulink> as published by
66 Creative Commons.
67 </para>
68
69 <note>
70 For the latest version of this manual associated with this
71 Yocto Project release, see the
72 <ulink url='&YOCTO_DOCS_PROF_URL;'>Yocto Project Profiling and Tracing Manual</ulink>
73 from the Yocto Project website.
74 </note>
75 </legalnotice>
76
77 </bookinfo>
78
79 <xi:include href="profile-manual-intro.xml"/>
80
81 <xi:include href="profile-manual-arch.xml"/>
82
83 <xi:include href="profile-manual-usage.xml"/>
84
85 <xi:include href="profile-manual-examples.xml"/>
86
87</book>
88<!--
89vim: expandtab tw=80 ts=4
90-->
diff --git a/documentation/ref-manual/TODO b/documentation/ref-manual/TODO
new file mode 100644
index 0000000000..ee0db977cc
--- /dev/null
+++ b/documentation/ref-manual/TODO
@@ -0,0 +1,11 @@
1Handbook Todo List:
2
3 * Document adding a new IMAGE_FEATURE to the customising images section
4 * Add instructions about using zaurus/openmoko emulation
5 * Add component overview/block diagrams
6 * Software Deevelopment intro should mention its software development for
7 intended target and could be a different arch etc and thus special case.
8 * Expand insane.bbclass documentation to cover tests
9 * Document remaining classes (see list in ref-classes)
10 * Document formfactor
11
diff --git a/documentation/ref-manual/closer-look.xml b/documentation/ref-manual/closer-look.xml
new file mode 100644
index 0000000000..c223bbb0ce
--- /dev/null
+++ b/documentation/ref-manual/closer-look.xml
@@ -0,0 +1,1270 @@
1<!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='closer-look'>
6<title>A Closer Look at the Yocto Project Development Environment</title>
7
8 <para>
9 This chapter takes a more detailed look at the Yocto Project
10 development environment.
11 The following diagram represents the development environment at a
12 high level.
13 The remainder of this chapter expands on the fundamental input, output,
14 process, and
15 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>) blocks
16 in the Yocto Project development environment.
17 </para>
18
19 <para id='general-yocto-environment-figure'>
20 <imagedata fileref="figures/yocto-environment-ref.png" align="center" width="8in" depth="4.25in" />
21 </para>
22
23 <para>
24 The generalized Yocto Project Development Environment consists of
25 several functional areas:
26 <itemizedlist>
27 <listitem><para><emphasis>User Configuration:</emphasis>
28 Metadata you can use to control the build process.
29 </para></listitem>
30 <listitem><para><emphasis>Metadata Layers:</emphasis>
31 Various layers that provide software, machine, and
32 distro Metadata.</para></listitem>
33 <listitem><para><emphasis>Source Files:</emphasis>
34 Upstream releases, local projects, and SCMs.</para></listitem>
35 <listitem><para><emphasis>Build System:</emphasis>
36 Processes under the control of
37 <ulink url='&YOCTO_DOCS_DEV_URL;#bitbake-term'>BitBake</ulink>.
38 This block expands on how BitBake fetches source, applies
39 patches, completes compilation, analyzes output for package
40 generation, creates and tests packages, generates images, and
41 generates cross-development tools.</para></listitem>
42 <listitem><para><emphasis>Package Feeds:</emphasis>
43 Directories containing output packages (RPM, DEB or IPK),
44 which are subsequently used in the construction of an image or
45 SDK, produced by the build system.
46 These feeds can also be copied and shared using a web server or
47 other means to facilitate extending or updating existing
48 images on devices at runtime if runtime package management is
49 enabled.</para></listitem>
50 <listitem><para><emphasis>Images:</emphasis>
51 Images produced by the development process.
52 </para></listitem>
53 <listitem><para><emphasis>Application Development SDK:</emphasis>
54 Cross-development tools that are produced along with an image
55 or separately with BitBake.</para></listitem>
56 </itemizedlist>
57 </para>
58
59 <section id="user-configuration">
60 <title>User Configuration</title>
61
62 <para>
63 User configuration helps define the build.
64 Through user configuration, you can tell BitBake the
65 target architecture for which you are building the image,
66 where to store downloaded source, and other build properties.
67 </para>
68
69 <para>
70 The following figure shows an expanded representation of the
71 "User Configuration" box of the
72 <link linkend='general-yocto-environment-figure'>general Yocto Project Development Environment figure</link>:
73 </para>
74
75 <para>
76 <imagedata fileref="figures/user-configuration.png" align="center" width="5.5in" depth="3.5in" />
77 </para>
78
79 <para>
80 BitBake needs some basic configuration files in order to complete
81 a build.
82 These files are <filename>*.conf</filename> files.
83 The minimally necessary ones reside as example files in the
84 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
85 For simplicity, this section refers to the Source Directory as
86 the "Poky Directory."
87 </para>
88
89 <para>
90 When you clone the <filename>poky</filename> Git repository or you
91 download and unpack a Yocto Project release, you can set up the
92 Source Directory to be named anything you want.
93 For this discussion, the cloned repository uses the default
94 name <filename>poky</filename>.
95 <note>
96 The Poky repository is primarily an aggregation of existing
97 repositories.
98 It is not a canonical upstream source.
99 </note>
100 </para>
101
102 <para>
103 The <filename>meta-yocto</filename> layer inside Poky contains
104 a <filename>conf</filename> directory that has example
105 configuration files.
106 These example files are used as a basis for creating actual
107 configuration files when you source the build environment
108 script
109 (i.e.
110 <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
111 or
112 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>).
113 </para>
114
115 <para>
116 Sourcing the build environment script creates a
117 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
118 if one does not already exist.
119 BitBake uses the Build Directory for all its work during builds.
120 The Build Directory has a <filename>conf</filename> directory that
121 contains default versions of your <filename>local.conf</filename>
122 and <filename>bblayers.conf</filename> configuration files.
123 These default configuration files are created only if versions
124 do not already exist in the Build Directory at the time you
125 source the build environment setup script.
126 </para>
127
128 <para>
129 Because the Poky repository is fundamentally an aggregation of
130 existing repositories, some users might be familiar with running
131 the <filename>&OE_INIT_FILE;</filename> or
132 <filename>oe-init-build-env-memres</filename> script in the context
133 of separate OpenEmbedded-Core and BitBake repositories rather than a
134 single Poky repository.
135 This discussion assumes the script is executed from within a cloned
136 or unpacked version of Poky.
137 </para>
138
139 <para>
140 Depending on where the script is sourced, different sub-scripts
141 are called to set up the Build Directory (Yocto or OpenEmbedded).
142 Specifically, the script
143 <filename>scripts/oe-setup-builddir</filename> inside the
144 poky directory sets up the Build Directory and seeds the directory
145 (if necessary) with configuration files appropriate for the
146 Yocto Project development environment.
147 <note>
148 The <filename>scripts/oe-setup-builddir</filename> script
149 uses the <filename>$TEMPLATECONF</filename> variable to
150 determine which sample configuration files to locate.
151 </note>
152 </para>
153
154 <para>
155 The <filename>local.conf</filename> file provides many
156 basic variables that define a build environment.
157 Here is a list of a few.
158 To see the default configurations in a <filename>local.conf</filename>
159 file created by the build environment script, see the
160 <filename>local.conf.sample</filename> in the
161 <filename>meta-yocto</filename> layer:
162 <itemizedlist>
163 <listitem><para><emphasis>Parallelism Options:</emphasis>
164 Controlled by the
165 <link linkend='var-BB_NUMBER_THREADS'><filename>BB_NUMBER_THREADS</filename></link>
166 and
167 <link linkend='var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></link>
168 variables.</para></listitem>
169 <listitem><para><emphasis>Target Machine Selection:</emphasis>
170 Controlled by the
171 <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
172 variable.</para></listitem>
173 <listitem><para><emphasis>Download Directory:</emphasis>
174 Controlled by the
175 <link linkend='var-DL_DIR'><filename>DL_DIR</filename></link>
176 variable.</para></listitem>
177 <listitem><para><emphasis>Shared State Directory:</emphasis>
178 Controlled by the
179 <link linkend='var-SSTATE_DIR'><filename>SSTATE_DIR</filename></link>
180 variable.</para></listitem>
181 <listitem><para><emphasis>Build Output:</emphasis>
182 Controlled by the
183 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
184 variable.</para></listitem>
185 </itemizedlist>
186 <note>
187 Configurations set in the <filename>conf/local.conf</filename>
188 file can also be set in the
189 <filename>conf/site.conf</filename> and
190 <filename>conf/auto.conf</filename> configuration files.
191 </note>
192 </para>
193
194 <para>
195 The <filename>bblayers.conf</filename> file tells BitBake what
196 layers you want considered during the build.
197 By default, the layers listed in this file include layers
198 minimally needed by the build system.
199 However, you must manually add any custom layers you have created.
200 You can find more information on working with the
201 <filename>bblayers.conf</filename> file in the
202 "<ulink url='&YOCTO_DOCS_DEV_URL;#enabling-your-layer'>Enabling Your Layer</ulink>"
203 section in the Yocto Project Development Manual.
204 </para>
205
206 <para>
207 The files <filename>site.conf</filename> and
208 <filename>auto.conf</filename> are not created by the environment
209 initialization script.
210 If you want these configuration files, you must create them
211 yourself:
212 <itemizedlist>
213 <listitem><para><emphasis><filename>site.conf</filename>:</emphasis>
214 You can use the <filename>conf/site.conf</filename>
215 configuration file to configure multiple build directories.
216 For example, suppose you had several build environments and
217 they shared some common features.
218 You can set these default build properties here.
219 A good example is perhaps the level of parallelism you want
220 to use through the
221 <link linkend='var-BB_NUMBER_THREADS'><filename>BB_NUMBER_THREADS</filename></link>
222 and
223 <link linkend='var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></link>
224 variables.</para>
225 <para>One useful scenario for using the
226 <filename>conf/site.conf</filename> file is to extend your
227 <link linkend='var-BBPATH'><filename>BBPATH</filename></link>
228 variable to include the path to a
229 <filename>conf/site.conf</filename>.
230 Then, when BitBake looks for Metadata using
231 <filename>BBPATH</filename>, it finds the
232 <filename>conf/site.conf</filename> file and applies your
233 common configurations found in the file.
234 To override configurations in a particular build directory,
235 alter the similar configurations within that build
236 directory's <filename>conf/local.conf</filename> file.
237 </para></listitem>
238 <listitem><para><emphasis><filename>auto.conf</filename>:</emphasis>
239 This file is not hand-created.
240 Rather, the file is usually created and written to by
241 an autobuilder.
242 The settings put into the file are typically the same as
243 you would find in the <filename>conf/local.conf</filename>
244 or the <filename>conf/site.conf</filename> files.
245 </para></listitem>
246 </itemizedlist>
247 </para>
248
249 <para>
250 You can edit all configuration files to further define
251 any particular build environment.
252 This process is represented by the "User Configuration Edits"
253 box in the figure.
254 </para>
255
256 <para>
257 When you launch your build with the
258 <filename>bitbake &lt;target&gt;</filename> command, BitBake
259 sorts out the configurations to ultimately define your build
260 environment.
261 </para>
262 </section>
263
264 <section id="metadata-machine-configuration-and-policy-configuration">
265 <title>Metadata, Machine Configuration, and Policy Configuration</title>
266
267 <para>
268 The previous section described the user configurations that
269 define BitBake's global behavior.
270 This section takes a closer look at the layers the build system
271 uses to further control the build.
272 These layers provide Metadata for the software, machine, and
273 policy.
274 </para>
275
276 <para>
277 In general, three types of layer input exist:
278 <itemizedlist>
279 <listitem><para><emphasis>Policy Configuration:</emphasis>
280 Distribution Layers provide top-level or general
281 policies for the image or SDK being built.
282 For example, this layer would dictate whether BitBake
283 produces RPM or IPK packages.</para></listitem>
284 <listitem><para><emphasis>Machine Configuration:</emphasis>
285 Board Support Package (BSP) layers provide machine
286 configurations.
287 This type of information is specific to a particular
288 target architecture.</para></listitem>
289 <listitem><para><emphasis>Metadata:</emphasis>
290 Software layers contain user-supplied recipe files,
291 patches, and append files.
292 </para></listitem>
293 </itemizedlist>
294 </para>
295
296 <para>
297 The following figure shows an expanded representation of the
298 Metadata, Machine Configuration, and Policy Configuration input
299 (layers) boxes of the
300 <link linkend='general-yocto-environment-figure'>general Yocto Project Development Environment figure</link>:
301 </para>
302
303 <para>
304 <imagedata fileref="figures/layer-input.png" align="center" width="8in" depth="7.5in" />
305 </para>
306
307 <para>
308 In general, all layers have a similar structure.
309 They all contain a licensing file
310 (e.g. <filename>COPYING</filename>) if the layer is to be
311 distributed, a <filename>README</filename> file as good practice
312 and especially if the layer is to be distributed, a
313 configuration directory, and recipe directories.
314 </para>
315
316 <para>
317 The Yocto Project has many layers that can be used.
318 You can see a web-interface listing of them on the
319 <ulink url="http://git.yoctoproject.org/">Source Repositories</ulink>
320 page.
321 The layers are shown at the bottom categorized under
322 "Yocto Metadata Layers."
323 These layers are fundamentally a subset of the
324 <ulink url="http://layers.openembedded.org/layerindex/layers/">OpenEmbedded Metadata Index</ulink>,
325 which lists all layers provided by the OpenEmbedded community.
326 <note>
327 Layers exist in the Yocto Project Source Repositories that
328 cannot be found in the OpenEmbedded Metadata Index.
329 These layers are either deprecated or experimental in nature.
330 </note>
331 </para>
332
333 <para>
334 BitBake uses the <filename>conf/bblayers.conf</filename> file,
335 which is part of the user configuration, to find what layers it
336 should be using as part of the build.
337 </para>
338
339 <para>
340 For more information on layers, see the
341 "<ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>Understanding and Creating Layers</ulink>"
342 section in the Yocto Project Development Manual.
343 </para>
344
345 <section id="distro-layer">
346 <title>Distro Layer</title>
347
348 <para>
349 The distribution layer provides policy configurations for your
350 distribution.
351 Best practices dictate that you isolate these types of
352 configurations into their own layer.
353 Settings you provide in
354 <filename>conf/distro/&lt;distro&gt;.conf</filename> override
355 similar
356 settings that BitBake finds in your
357 <filename>conf/local.conf</filename> file in the Build
358 Directory.
359 </para>
360
361 <para>
362 The following list provides some explanation and references
363 for what you typically find in the distribution layer:
364 <itemizedlist>
365 <listitem><para><emphasis>classes:</emphasis>
366 Class files (<filename>.bbclass</filename>) hold
367 common functionality that can be shared among
368 recipes in the distribution.
369 When your recipes inherit a class, they take on the
370 settings and functions for that class.
371 You can read more about class files in the
372 "<link linkend='ref-classes'>Classes</link>" section.
373 </para></listitem>
374 <listitem><para><emphasis>conf:</emphasis>
375 This area holds configuration files for the
376 layer (<filename>conf/layer.conf</filename>),
377 the distribution
378 (<filename>conf/distro/&lt;distro&gt;.conf</filename>),
379 and any distribution-wide include files.
380 </para></listitem>
381 <listitem><para><emphasis>recipes-*:</emphasis>
382 Recipes and append files that affect common
383 functionality across the distribution.
384 This area could include recipes and append files
385 to add distribution-specific configuration,
386 initialization scripts, custom image recipes,
387 and so forth.</para></listitem>
388 </itemizedlist>
389 </para>
390 </section>
391
392 <section id="bsp-layer">
393 <title>BSP Layer</title>
394
395 <para>
396 The BSP Layer provides machine configurations.
397 Everything in this layer is specific to the machine for which
398 you are building the image or the SDK.
399 A common structure or form is defined for BSP layers.
400 You can learn more about this structure in the
401 <ulink url='&YOCTO_DOCS_BSP_URL;'>Yocto Project Board Support Package (BSP) Developer's Guide</ulink>.
402 <note>
403 In order for a BSP layer to be considered compliant with the
404 Yocto Project, it must meet some structural requirements.
405 </note>
406 </para>
407
408 <para>
409 The BSP Layer's configuration directory contains
410 configuration files for the machine
411 (<filename>conf/machine/&lt;machine&gt;.conf</filename>) and,
412 of course, the layer (<filename>conf/layer.conf</filename>).
413 </para>
414
415 <para>
416 The remainder of the layer is dedicated to specific recipes
417 by function: <filename>recipes-bsp</filename>,
418 <filename>recipes-core</filename>,
419 <filename>recipes-graphics</filename>, and
420 <filename>recipes-kernel</filename>.
421 Metadata can exist for multiple formfactors, graphics
422 support systems, and so forth.
423 <note>
424 While the figure shows several <filename>recipes-*</filename>
425 directories, not all these directories appear in all
426 BSP layers.
427 </note>
428 </para>
429 </section>
430
431 <section id="software-layer">
432 <title>Software Layer</title>
433
434 <para>
435 The software layer provides the Metadata for additional
436 software packages used during the build.
437 This layer does not include Metadata that is specific to the
438 distribution or the machine, which are found in their
439 respective layers.
440 </para>
441
442 <para>
443 This layer contains any new recipes that your project needs
444 in the form of recipe files.
445 </para>
446 </section>
447 </section>
448
449 <section id="sources-dev-environment">
450 <title>Sources</title>
451
452 <para>
453 In order for the OpenEmbedded build system to create an image or
454 any target, it must be able to access source files.
455 The
456 <link linkend='general-yocto-environment-figure'>general Yocto Project Development Environment figure</link>
457 represents source files using the "Upstream Project Releases",
458 "Local Projects", and "SCMs (optional)" boxes.
459 The figure represents mirrors, which also play a role in locating
460 source files, with the "Source Mirror(s)" box.
461 </para>
462
463 <para>
464 The method by which source files are ultimately organized is
465 a function of the project.
466 For example, for released software, projects tend to use tarballs
467 or other archived files that can capture the state of a release
468 guaranteeing that it is statically represented.
469 On the other hand, for a project that is more dynamic or
470 experimental in nature, a project might keep source files in a
471 repository controlled by a Source Control Manager (SCM) such as
472 Git.
473 Pulling source from a repository allows you to control
474 the point in the repository (the revision) from which you want to
475 build software.
476 Finally, a combination of the two might exist, which would give the
477 consumer a choice when deciding where to get source files.
478 </para>
479
480 <para>
481 BitBake uses the
482 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
483 variable to point to source files regardless of their location.
484 Each recipe must have a <filename>SRC_URI</filename> variable
485 that points to the source.
486 </para>
487
488 <para>
489 Another area that plays a significant role in where source files
490 come from is pointed to by the
491 <link linkend='var-DL_DIR'><filename>DL_DIR</filename></link>
492 variable.
493 This area is a cache that can hold previously downloaded source.
494 You can also instruct the OpenEmbedded build system to create
495 tarballs from Git repositories, which is not the default behavior,
496 and store them in the <filename>DL_DIR</filename> by using the
497 <link linkend='var-BB_GENERATE_MIRROR_TARBALLS'><filename>BB_GENERATE_MIRROR_TARBALLS</filename></link>
498 variable.
499 </para>
500
501 <para>
502 Judicious use of a <filename>DL_DIR</filename> directory can
503 save the build system a trip across the Internet when looking
504 for files.
505 A good method for using a download directory is to have
506 <filename>DL_DIR</filename> point to an area outside of your
507 Build Directory.
508 Doing so allows you to safely delete the Build Directory
509 if needed without fear of removing any downloaded source file.
510 </para>
511
512 <para>
513 The remainder of this section provides a deeper look into the
514 source files and the mirrors.
515 Here is a more detailed look at the source file area of the
516 base figure:
517 <imagedata fileref="figures/source-input.png" align="center" width="7in" depth="7.5in" />
518 </para>
519
520 <section id='upstream-project-releases'>
521 <title>Upstream Project Releases</title>
522
523 <para>
524 Upstream project releases exist anywhere in the form of an
525 archived file (e.g. tarball or zip file).
526 These files correspond to individual recipes.
527 For example, the figure uses specific releases each for
528 BusyBox, Qt, and Dbus.
529 An archive file can be for any released product that can be
530 built using a recipe.
531 </para>
532 </section>
533
534 <section id='local-projects'>
535 <title>Local Projects</title>
536
537 <para>
538 Local projects are custom bits of software the user provides.
539 These bits reside somewhere local to a project - perhaps
540 a directory into which the user checks in items (e.g.
541 a local directory containing a development source tree
542 used by the group).
543 </para>
544
545 <para>
546 The canonical method through which to include a local project
547 is to use the
548 <link linkend='ref-classes-externalsrc'><filename>externalsrc</filename></link>
549 class to include that local project.
550 You use either the <filename>local.conf</filename> or a
551 recipe's append file to override or set the
552 recipe to point to the local directory on your disk to pull
553 in the whole source tree.
554 </para>
555
556 <para>
557 For information on how to use the
558 <filename>externalsrc</filename> class, see the
559 "<link linkend='ref-classes-externalsrc'><filename>externalsrc.bbclass</filename></link>"
560 section.
561 </para>
562 </section>
563
564 <section id='scms'>
565 <title>Source Control Managers (Optional)</title>
566
567 <para>
568 Another place the build system can get source files from is
569 through an SCM such as Git or Subversion.
570 In this case, a repository is cloned or checked out.
571 The <filename>do_fetch</filename> task inside BitBake uses
572 the <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
573 variable and the argument's prefix to determine the correct
574 fetcher module.
575 </para>
576
577 <note>
578 For information on how to have the OpenEmbedded build system
579 generate tarballs for Git repositories and place them in the
580 <link linkend='var-DL_DIR'><filename>DL_DIR</filename></link>
581 directory, see the
582 <link linkend='var-BB_GENERATE_MIRROR_TARBALLS'><filename>BB_GENERATE_MIRROR_TARBALLS</filename></link>
583 variable.
584 </note>
585
586 <para>
587 When fetching a repository, BitBake uses the
588 <link linkend='var-SRCREV'><filename>SRCREV</filename></link>
589 variable to determine the specific revision from which to
590 build.
591 </para>
592 </section>
593
594 <section id='source-mirrors'>
595 <title>Source Mirror(s)</title>
596
597 <para>
598 Two kinds of mirrors exist: pre-mirrors and regular mirrors.
599 The <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>
600 and
601 <link linkend='var-MIRRORS'><filename>MIRRORS</filename></link>
602 variables point to these, respectively.
603 BitBake checks pre-mirrors before looking upstream for any
604 source files.
605 Pre-mirrors are appropriate when you have a shared directory
606 that is not a directory defined by the
607 <link linkend='var-DL_DIR'><filename>DL_DIR</filename></link>
608 variable.
609 A Pre-mirror typically points to a shared directory that is
610 local to your organization.
611 </para>
612
613 <para>
614 Regular mirrors can be any site across the Internet that is
615 used as an alternative location for source code should the
616 primary site not be functioning for some reason or another.
617 </para>
618 </section>
619 </section>
620
621 <section id="package-feeds-dev-environment">
622 <title>Package Feeds</title>
623
624 <para>
625 When the OpenEmbedded build system generates an image or an SDK,
626 it gets the packages from a package feed area located in the
627 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
628 The
629 <link linkend='general-yocto-environment-figure'>general Yocto Project Development Environment figure</link>
630 shows this package feeds area in the upper-right corner.
631 </para>
632
633 <para>
634 This section looks a little closer into the package feeds area used
635 by the build system.
636 Here is a more detailed look at the area:
637 <imagedata fileref="figures/package-feeds.png" align="center" width="7in" depth="6in" />
638 </para>
639
640 <para>
641 Package feeds are an intermediary step in the build process.
642 BitBake generates packages whose types are defined by the
643 <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
644 variable.
645 Before placing the packages into package feeds,
646 the build process validates them with generated output quality
647 assurance checks through the
648 <link linkend='ref-classes-insane'><filename>insane</filename></link>
649 class.
650 </para>
651
652 <para>
653 The package feed area resides in
654 <filename>tmp/deploy</filename> of the Build Directory.
655 Folders are created that correspond to the package type
656 (IPK, DEB, or RPM) created.
657 Further organization is derived through the value of the
658 <link linkend='var-PACKAGE_ARCH'><filename>PACKAGE_ARCH</filename></link>
659 variable for each package.
660 For example, packages can exist for the i586 or qemux86
661 architectures.
662 The package files themselves reside within the appropriate
663 architecture folder.
664 </para>
665
666 <para>
667 BitBake uses the <filename>do_package_write_*</filename> task to
668 place generated packages into the package holding area (e.g.
669 <filename>do_package_write_ipk</filename> for IPK packages).
670 </para>
671 </section>
672
673 <section id='bitbake-dev-environment'>
674 <title>BitBake</title>
675
676 <para>
677 The OpenEmbedded build system uses
678 <ulink url='&YOCTO_DOCS_DEV_URL;#bitbake-term'>BitBake</ulink>
679 to produce images.
680 You can see from the
681 <link linkend='general-yocto-environment-figure'>general Yocto Project Development Environment figure</link>,
682 the BitBake area consists of several functional areas.
683 This section takes a closer look at each of those areas.
684 </para>
685
686 <para>
687 Separate documentation exists for the BitBake tool.
688 See the
689 <ulink url='&YOCTO_DOCS_BB_URL;#bitbake-user-manual'>BitBake User Manual</ulink>
690 for reference material on BitBake.
691 </para>
692
693 <section id='source-fetching-dev-environment'>
694 <title>Source Fetching</title>
695
696 <para>
697 The first stages of building a recipe are to fetch and unpack
698 the source code:
699 <imagedata fileref="figures/source-fetching.png" align="center" width="6.5in" depth="5in" />
700 </para>
701
702 <para>
703 The <filename>do_fetch</filename> and
704 <filename>do_unpack</filename> tasks fetch the source files
705 and unpack them into the work directory.
706 By default, everything is accomplished in the
707 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>,
708 which has a defined structure.
709 For additional general information on the Build Directory,
710 see the
711 "<link linkend='structure-core-build'><filename>build/</filename></link>"
712 section.
713 </para>
714
715 <para>
716 Unpacked source files are pointed to by the
717 <link linkend='var-S'><filename>S</filename></link> variable.
718 Each recipe has an area in the Build Directory where the
719 unpacked source code resides.
720 The name of that directory for any given recipe is defined from
721 several different variables.
722 You can see the variables that define these directories
723 by looking at the figure:
724 <itemizedlist>
725 <listitem><para><link linkend='var-TMPDIR'><filename>TMPDIR</filename></link> -
726 The base directory where the OpenEmbedded build system
727 performs all its work during the build.
728 </para></listitem>
729 <listitem><para><link linkend='var-PACKAGE_ARCH'><filename>PACKAGE_ARCH</filename></link> -
730 The architecture of the built package or packages.
731 </para></listitem>
732 <listitem><para><link linkend='var-TARGET_OS'><filename>TARGET_OS</filename></link> -
733 The operating system of the target device.
734 </para></listitem>
735 <listitem><para><link linkend='var-PN'><filename>PN</filename></link> -
736 The name of the built package.
737 </para></listitem>
738 <listitem><para><link linkend='var-PV'><filename>PV</filename></link> -
739 The version of the recipe used to build the package.
740 </para></listitem>
741 <listitem><para><link linkend='var-PR'><filename>PR</filename></link> -
742 The revision of the recipe used to build the package.
743 </para></listitem>
744 <listitem><para><link linkend='var-WORKDIR'><filename>WORKDIR</filename></link> -
745 The location within <filename>TMPDIR</filename> where
746 a specific package is built.
747 </para></listitem>
748 <listitem><para><link linkend='var-S'><filename>S</filename></link> -
749 Contains the unpacked source files for a given recipe.
750 </para></listitem>
751 </itemizedlist>
752 </para>
753 </section>
754
755 <section id='patching-dev-environment'>
756 <title>Patching</title>
757
758 <para>
759 Once source code is fetched and unpacked, BitBake locates
760 patch files and applies them to the source files:
761 <imagedata fileref="figures/patching.png" align="center" width="6in" depth="5in" />
762 </para>
763
764 <para>
765 The <filename>do_patch</filename> task processes recipes by
766 using the
767 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
768 variable to locate applicable patch files, which by default
769 are <filename>*.patch</filename> or
770 <filename>*.diff</filename> files, or any file if
771 "apply=yes" is specified for the file in
772 <filename>SRC_URI</filename>.
773 </para>
774
775 <para>
776 BitBake finds and applies multiple patches for a single recipe
777 in the order in which it finds the patches.
778 Patches are applied to the recipe's source files located in the
779 <link linkend='var-S'><filename>S</filename></link> directory.
780 </para>
781
782 <para>
783 For more information on how the source directories are
784 created, see the
785 "<link linkend='source-fetching-dev-environment'>Source Fetching</link>"
786 section.
787 </para>
788 </section>
789
790 <section id='configuration-and-compilation-dev-environment'>
791 <title>Configuration and Compilation</title>
792
793 <para>
794 After source code is patched, BitBake executes tasks that
795 configure and compile the source code:
796 <imagedata fileref="figures/configuration-compile-autoreconf.png" align="center" width="7in" depth="5in" />
797 </para>
798
799 <para>
800 This step in the build process consists of three tasks:
801 <itemizedlist>
802 <listitem><para><emphasis><filename>do_configure</filename>:</emphasis>
803 This task configures the source by enabling and
804 disabling any build-time and configuration options for
805 the software being built.
806 Configurations can come from the recipe itself as well
807 as from an inherited class.
808 Additionally, the software itself might configure itself
809 depending on the target for which it is being built.
810 </para>
811
812 <para>The configurations handled by the
813 <filename>do_configure</filename> task are specific
814 to source code configuration for the source code
815 being built by the recipe.</para>
816
817 <para>If you are using the
818 <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
819 class,
820 you can add additional configuration options by using
821 the <link linkend='var-EXTRA_OECONF'><filename>EXTRA_OECONF</filename></link>
822 variable.
823 For information on how this variable works within
824 that class, see the
825 <filename>meta/classes/autotools.bbclass</filename> file.
826 </para></listitem>
827 <listitem><para><emphasis><filename>do_compile</filename>:</emphasis>
828 Once a configuration task has been satisfied, BitBake
829 compiles the source using the
830 <filename>do_compile</filename> task.
831 Compilation occurs in the directory pointed to by the
832 <link linkend='var-B'><filename>B</filename></link>
833 variable.
834 Realize that the <filename>B</filename> directory is, by
835 default, the same as the
836 <link linkend='var-S'><filename>S</filename></link>
837 directory.</para></listitem>
838 <listitem><para><emphasis><filename>do_install</filename>:</emphasis>
839 Once compilation is done, BitBake executes the
840 <filename>do_install</filename> task.
841 This task copies files from the <filename>B</filename>
842 directory and places them in a holding area pointed to
843 by the
844 <link linkend='var-D'><filename>D</filename></link>
845 variable.</para></listitem>
846 </itemizedlist>
847 </para>
848 </section>
849
850 <section id='package-splitting-dev-environment'>
851 <title>Package Splitting</title>
852
853 <para>
854 After source code is configured and compiled, the
855 OpenEmbedded build system analyzes
856 the results and splits the output into packages:
857 <imagedata fileref="figures/analysis-for-package-splitting.png" align="center" width="7in" depth="7in" />
858 </para>
859
860 <para>
861 The <filename>do_package</filename> and
862 <filename>do_packagedata</filename> tasks combine to analyze
863 the files found in the
864 <link linkend='var-D'><filename>D</filename></link> directory
865 and split them into subsets based on available packages and
866 files.
867 The analyzing process involves the following as well as other
868 items: splitting out debugging symbols,
869 looking at shared library dependencies between packages,
870 and looking at package relationships.
871 The <filename>do_packagedata</filename> task creates package
872 metadata based on the analysis such that the
873 OpenEmbedded build system can generate the final packages.
874 Working, staged, and intermediate results of the analysis
875 and package splitting process use these areas:
876 <itemizedlist>
877 <listitem><para><link linkend='var-PKGD'><filename>PKGD</filename></link> -
878 The destination directory for packages before they are
879 split.
880 </para></listitem>
881 <listitem><para><link linkend='var-PKGDATA_DIR'><filename>PKGDATA_DIR</filename></link> -
882 A shared, global-state directory that holds data
883 generated during the packaging process.
884 </para></listitem>
885 <listitem><para><link linkend='var-PKGDESTWORK'><filename>PKGDESTWORK</filename></link> -
886 A temporary work area used by the
887 <filename>do_package</filename> task.
888 </para></listitem>
889 <listitem><para><link linkend='var-PKGDEST'><filename>PKGDEST</filename></link> -
890 The parent directory for packages after they have
891 been split.
892 </para></listitem>
893 </itemizedlist>
894 The <link linkend='var-FILES'><filename>FILES</filename></link>
895 variable defines the files that go into each package in
896 <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>.
897 If you want details on how this is accomplished, you can
898 look at the
899 <link linkend='ref-classes-package'><filename>package</filename></link>
900 class.
901 </para>
902
903 <para>
904 Depending on the type of packages being created (RPM, DEB, or
905 IPK), the <filename>do_package_write_*</filename> task
906 creates the actual packages and places them in the
907 Package Feed area, which is
908 <filename>${TMPDIR}/deploy</filename>.
909 You can see the
910 "<link linkend='package-feeds-dev-environment'>Package Feeds</link>"
911 section for more detail on that part of the build process.
912 <note>
913 Support for creating feeds directly from the
914 <filename>deploy/*</filename> directories does not exist.
915 Creating such feeds usually requires some kind of feed
916 maintenance mechanism that would upload the new packages
917 into an official package feed (e.g. the
918 Ångström distribution).
919 This functionality is highly distribution-specific
920 and thus is not provided out of the box.
921 </note>
922 </para>
923 </section>
924
925 <section id='image-generation-dev-environment'>
926 <title>Image Generation</title>
927
928 <para>
929 Once packages are split and stored in the Package Feeds area,
930 the OpenEmbedded build system uses BitBake to generate the
931 root filesystem image:
932 <imagedata fileref="figures/image-generation.png" align="center" width="6in" depth="7in" />
933 </para>
934
935 <para>
936 The image generation process consists of several stages and
937 depends on many variables.
938 The <filename>do_rootfs</filename> task uses these key variables
939 to help create the list of packages to actually install:
940 <itemizedlist>
941 <listitem><para><link linkend='var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></link>:
942 Lists out the base set of packages to install from
943 the Package Feeds area.</para></listitem>
944 <listitem><para><link linkend='var-PACKAGE_EXCLUDE'><filename>PACKAGE_EXCLUDE</filename></link>:
945 Specifies packages that should not be installed.
946 </para></listitem>
947 <listitem><para><link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>:
948 Specifies features to include in the image.
949 Most of these features map to additional packages for
950 installation.</para></listitem>
951 <listitem><para><link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>:
952 Specifies the package backend to use and consequently
953 helps determine where to locate packages within the
954 Package Feeds area.</para></listitem>
955 <listitem><para><link linkend='var-IMAGE_LINGUAS'><filename>IMAGE_LINGUAS</filename></link>:
956 Determines the language(s) for which additional
957 language support packages are installed.
958 </para></listitem>
959 </itemizedlist>
960 </para>
961
962 <para>
963 Package installation is under control of the package manager
964 (e.g. smart/rpm, opkg, or apt/dpkg) regardless of whether or
965 not package management is enabled for the target.
966 At the end of the process, if package management is not
967 enabled for the target, the package manager's data files
968 are deleted from the root filesystem.
969 </para>
970
971 <para>
972 During image generation, the build system attempts to run
973 all post-installation scripts.
974 Any that fail to run on the build host are run on the
975 target when the target system is first booted.
976 If you are using a
977 <ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-read-only-root-filesystem'>read-only root filesystem</ulink>,
978 all the post installation scripts must succeed during the
979 package installation phase since the root filesystem is
980 read-only.
981 </para>
982
983 <para>
984 During Optimization, optimizing processes are run across
985 the image.
986 These processes include <filename>mklibs</filename> and
987 <filename>prelink</filename>.
988 The <filename>mklibs</filename> process optimizes the size
989 of the libraries.
990 A <filename>prelink</filename> process optimizes the dynamic
991 linking of shared libraries to reduce start up time of
992 executables.
993 </para>
994
995 <para>
996 Along with writing out the root filesystem image, the
997 <filename>do_rootfs</filename> task creates a manifest file
998 (<filename>.manifest</filename>) in the same directory as
999 the root filesystem image that lists out, line-by-line, the
1000 installed packages.
1001 This manifest file is useful for the
1002 <link linkend='ref-classes-testimage'><filename>testimage</filename></link>
1003 class, for example, to determine whether or not to run
1004 specific tests.
1005 See the
1006 <link linkend='var-IMAGE_MANIFEST'><filename>IMAGE_MANIFEST</filename></link>
1007 variable for additional information.
1008 </para>
1009
1010 <para>
1011 Part of the image generation process includes compressing the
1012 root filesystem image.
1013 Compression is accomplished through several optimization
1014 routines designed to reduce the overall size of the image.
1015 </para>
1016
1017 <para>
1018 After the root filesystem has been constructed, the image
1019 generation process turns everything into an image file or
1020 a set of image files.
1021 The formats used for the root filesystem depend on the
1022 <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
1023 variable.
1024 </para>
1025
1026 <note>
1027 The entire image generation process is run under Pseudo.
1028 Running under Pseudo ensures that the files in the root
1029 filesystem have correct ownership.
1030 </note>
1031 </section>
1032
1033 <section id='sdk-generation-dev-environment'>
1034 <title>SDK Generation</title>
1035
1036 <para>
1037 The OpenEmbedded build system uses BitBake to generate the
1038 Software Development Kit (SDK) installer script:
1039 <imagedata fileref="figures/sdk-generation.png" align="center" width="6in" depth="7in" />
1040 </para>
1041
1042 <note>
1043 For more information on the cross-development toolchain
1044 generation, see the
1045 "<link linkend='cross-development-toolchain-generation'>Cross-Development Toolchain Generation</link>"
1046 section.
1047 For information on advantages gained when building a
1048 cross-development toolchain using the
1049 <filename>do_populate_sdk</filename> task, see the
1050 "<ulink url='&YOCTO_DOCS_ADT_URL;#optionally-building-a-toolchain-installer'>Optionally Building a Toolchain Installer</ulink>"
1051 section in the Yocto Project Application Developer's Guide.
1052 </note>
1053
1054 <para>
1055 Like image generation, the SDK script process consists of
1056 several stages and depends on many variables.
1057 The <filename>do_populate_sdk</filename> task uses these
1058 key variables to help create the list of packages to actually
1059 install.
1060 For information on the variables listed in the figure, see the
1061 "<link linkend='sdk-dev-environment'>Application Development SDK</link>"
1062 section.
1063 </para>
1064
1065 <para>
1066 The <filename>do_populate_sdk</filename> task handles two
1067 parts: a target part and a host part.
1068 The target part is the part built for the target hardware and
1069 includes libraries and headers.
1070 The host part is the part of the SDK that runs on the
1071 <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>.
1072 </para>
1073
1074 <para>
1075 Once both parts are constructed, the
1076 <filename>do_populate_sdk</filename> task performs some cleanup
1077 on both parts.
1078 After the cleanup, the task creates a cross-development
1079 environment setup script and any configuration files that
1080 might be needed.
1081 </para>
1082
1083 <para>
1084 The final output of the task is the Cross-development
1085 toolchain installation script (<filename>.sh</filename> file),
1086 which includes the environment setup script.
1087 </para>
1088 </section>
1089 </section>
1090
1091 <section id='images-dev-environment'>
1092 <title>Images</title>
1093
1094 <para>
1095 The images produced by the OpenEmbedded build system
1096 are compressed forms of the
1097 root filesystem that are ready to boot on a target device.
1098 You can see from the
1099 <link linkend='general-yocto-environment-figure'>general Yocto Project Development Environment figure</link>
1100 that BitBake output, in part, consists of images.
1101 This section is going to look more closely at this output:
1102 <imagedata fileref="figures/images.png" align="center" width="5.5in" depth="5.5in" />
1103 </para>
1104
1105 <para>
1106 For a list of example images that the Yocto Project provides,
1107 see the
1108 "<link linkend='ref-images'>Images</link>" chapter.
1109 </para>
1110
1111 <para>
1112 Images are written out to the
1113 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
1114 inside the <filename>tmp/deploy/images/&lt;machine&gt;/</filename>
1115 folder as shown in the figure.
1116 This folder contains any files expected to be loaded on the
1117 target device.
1118 The
1119 <link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link>
1120 variable points to the <filename>deploy</filename> directory,
1121 while the
1122 <link linkend='var-DEPLOY_DIR_IMAGE'><filename>DEPLOY_DIR_IMAGE</filename></link>
1123 variable points to the appropriate directory containing images for
1124 the current configuration.
1125 <itemizedlist>
1126 <listitem><para><filename>&lt;kernel-image&gt;</filename>:
1127 A kernel binary file.
1128 The <link linkend='var-KERNEL_IMAGETYPE'><filename>KERNEL_IMAGETYPE</filename></link>
1129 variable setting determines the naming scheme for the
1130 kernel image file.
1131 Depending on that variable, the file could begin with
1132 a variety of naming strings.
1133 The <filename>deploy/images/&lt;machine&gt;</filename>
1134 directory can contain multiple image files for the
1135 machine.</para></listitem>
1136 <listitem><para><filename>&lt;root-filesystem-image&gt;</filename>:
1137 Root filesystems for the target device (e.g.
1138 <filename>*.ext3</filename> or <filename>*.bz2</filename>
1139 files).
1140 The <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
1141 variable setting determines the root filesystem image
1142 type.
1143 The <filename>deploy/images/&lt;machine&gt;</filename>
1144 directory can contain multiple root filesystems for the
1145 machine.</para></listitem>
1146 <listitem><para><filename>&lt;kernel-modules&gt;</filename>:
1147 Tarballs that contain all the modules built for the kernel.
1148 Kernel module tarballs exist for legacy purposes and
1149 can be suppressed by setting the
1150 <link linkend='var-MODULE_TARBALL_DEPLOY'><filename>MODULE_TARBALL_DEPLOY</filename></link>
1151 variable to "0".
1152 The <filename>deploy/images/&lt;machine&gt;</filename>
1153 directory can contain multiple kernel module tarballs
1154 for the machine.</para></listitem>
1155 <listitem><para><filename>&lt;bootloaders&gt;</filename>:
1156 Bootloaders supporting the image, if applicable to the
1157 target machine.
1158 The <filename>deploy/images/&lt;machine&gt;</filename>
1159 directory can contain multiple bootloaders for the
1160 machine.</para></listitem>
1161 <listitem><para><filename>&lt;symlinks&gt;</filename>:
1162 The <filename>deploy/images/&lt;machine&gt;</filename>
1163 folder contains
1164 a symbolic link that points to the most recently built file
1165 for each machine.
1166 These links might be useful for external scripts that
1167 need to obtain the latest version of each file.
1168 </para></listitem>
1169 </itemizedlist>
1170 </para>
1171 </section>
1172
1173 <section id='sdk-dev-environment'>
1174 <title>Application Development SDK</title>
1175
1176 <para>
1177 In the
1178 <link linkend='general-yocto-environment-figure'>general Yocto Project Development Environment figure</link>,
1179 the output labeled "Application Development SDK" represents an
1180 SDK.
1181 This section is going to take a closer look at this output:
1182 <imagedata fileref="figures/sdk.png" align="center" width="5in" depth="4in" />
1183 </para>
1184
1185 <para>
1186 The specific form of this output is a self-extracting
1187 SDK installer (<filename>*.sh</filename>) that, when run,
1188 installs the SDK, which consists of a cross-development
1189 toolchain, a set of libraries and headers, and an SDK
1190 environment setup script.
1191 Running this installer essentially sets up your
1192 cross-development environment.
1193 You can think of the cross-toolchain as the "host"
1194 part because it runs on the SDK machine.
1195 You can think of the libraries and headers as the "target"
1196 part because they are built for the target hardware.
1197 The setup script is added so that you can initialize the
1198 environment before using the tools.
1199 </para>
1200
1201 <note>
1202 <para>
1203 The Yocto Project supports several methods by which you can
1204 set up this cross-development environment.
1205 These methods include downloading pre-built SDK installers,
1206 building and installing your own SDK installer, or running
1207 an Application Development Toolkit (ADT) installer to
1208 install not just cross-development toolchains
1209 but also additional tools to help in this type of
1210 development.
1211 </para>
1212
1213 <para>
1214 For background information on cross-development toolchains
1215 in the Yocto Project development environment, see the
1216 "<link linkend='cross-development-toolchain-generation'>Cross-Development Toolchain Generation</link>"
1217 section.
1218 For information on setting up a cross-development
1219 environment, see the
1220 "<ulink url='&YOCTO_DOCS_ADT_URL;#installing-the-adt'>Installing the ADT and Toolchains</ulink>"
1221 section in the Yocto Project Application Developer's Guide.
1222 </para>
1223 </note>
1224
1225 <para>
1226 Once built, the SDK installers are written out to the
1227 <filename>deploy/sdk</filename> folder inside the
1228 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
1229 as shown in the figure at the beginning of this section.
1230 Several variables exist that help configure these files:
1231 <itemizedlist>
1232 <listitem><para><link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link>:
1233 Points to the <filename>deploy</filename>
1234 directory.</para></listitem>
1235 <listitem><para><link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>:
1236 Specifies the architecture of the machine
1237 on which the cross-development tools are run to
1238 create packages for the target hardware.
1239 </para></listitem>
1240 <listitem><para><link linkend='var-SDKIMAGE_FEATURES'><filename>SDKIMAGE_FEATURES</filename></link>:
1241 Lists the features to include in the "target" part
1242 of the SDK.
1243 </para></listitem>
1244 <listitem><para><link linkend='var-TOOLCHAIN_HOST_TASK'><filename>TOOLCHAIN_HOST_TASK</filename></link>:
1245 Lists packages that make up the host
1246 part of the SDK (i.e. the part that runs on
1247 the <filename>SDKMACHINE</filename>).
1248 When you use
1249 <filename>bitbake -c populate_sdk &lt;imagename&gt;</filename>
1250 to create the SDK, a set of default packages
1251 apply.
1252 This variable allows you to add more packages.
1253 </para></listitem>
1254 <listitem><para><link linkend='var-TOOLCHAIN_TARGET_TASK'><filename>TOOLCHAIN_TARGET_TASK</filename></link>:
1255 Lists packages that make up the target part
1256 of the SDK (i.e. the part built for the
1257 target hardware).
1258 </para></listitem>
1259 <listitem><para><link linkend='var-SDKPATH'><filename>SDKPATH</filename></link>:
1260 Defines the default SDK installation path offered by the
1261 installation script.
1262 </para></listitem>
1263 </itemizedlist>
1264 </para>
1265 </section>
1266
1267</chapter>
1268<!--
1269vim: expandtab tw=80 ts=4
1270-->
diff --git a/documentation/ref-manual/examples/hello-autotools/hello_2.3.bb b/documentation/ref-manual/examples/hello-autotools/hello_2.3.bb
new file mode 100644
index 0000000000..5dfb0b30cf
--- /dev/null
+++ b/documentation/ref-manual/examples/hello-autotools/hello_2.3.bb
@@ -0,0 +1,8 @@
1DESCRIPTION = "GNU Helloworld application"
2SECTION = "examples"
3LICENSE = "GPLv3"
4LIC_FILES_CHKSUM = "file://COPYING;md5=adefda309052235aa5d1e99ce7557010"
5
6SRC_URI = "${GNU_MIRROR}/hello/hello-${PV}.tar.bz2"
7
8inherit autotools
diff --git a/documentation/ref-manual/examples/hello-single/files/helloworld.c b/documentation/ref-manual/examples/hello-single/files/helloworld.c
new file mode 100644
index 0000000000..fc7169b7b8
--- /dev/null
+++ b/documentation/ref-manual/examples/hello-single/files/helloworld.c
@@ -0,0 +1,8 @@
1#include <stdio.h>
2
3int main(void)
4{
5 printf("Hello world!\n");
6
7 return 0;
8}
diff --git a/documentation/ref-manual/examples/hello-single/hello.bb b/documentation/ref-manual/examples/hello-single/hello.bb
new file mode 100644
index 0000000000..0812743e39
--- /dev/null
+++ b/documentation/ref-manual/examples/hello-single/hello.bb
@@ -0,0 +1,17 @@
1DESCRIPTION = "Simple helloworld application"
2SECTION = "examples"
3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
5
6SRC_URI = "file://helloworld.c"
7
8S = "${WORKDIR}"
9
10do_compile() {
11 ${CC} helloworld.c -o helloworld
12}
13
14do_install() {
15 install -d ${D}${bindir}
16 install -m 0755 helloworld ${D}${bindir}
17}
diff --git a/documentation/ref-manual/examples/libxpm/libxpm_3.5.6.bb b/documentation/ref-manual/examples/libxpm/libxpm_3.5.6.bb
new file mode 100644
index 0000000000..b58d4d7bd1
--- /dev/null
+++ b/documentation/ref-manual/examples/libxpm/libxpm_3.5.6.bb
@@ -0,0 +1,14 @@
1require xorg-lib-common.inc
2
3DESCRIPTION = "X11 Pixmap library"
4LICENSE = "X-BSD"
5LIC_FILES_CHKSUM = "file://COPYING;md5=3e07763d16963c3af12db271a31abaa5"
6DEPENDS += "libxext"
7PR = "r2"
8PE = "1"
9
10XORG_PN = "libXpm"
11
12PACKAGES =+ "sxpm cxpm"
13FILES_cxpm = "${bindir}/cxpm"
14FILES_sxpm = "${bindir}/sxpm"
diff --git a/documentation/ref-manual/examples/mtd-makefile/mtd-utils_1.0.0.bb b/documentation/ref-manual/examples/mtd-makefile/mtd-utils_1.0.0.bb
new file mode 100644
index 0000000000..5d05a437a4
--- /dev/null
+++ b/documentation/ref-manual/examples/mtd-makefile/mtd-utils_1.0.0.bb
@@ -0,0 +1,15 @@
1DESCRIPTION = "Tools for managing memory technology devices."
2SECTION = "base"
3DEPENDS = "zlib"
4HOMEPAGE = "http://www.linux-mtd.infradead.org/"
5LICENSE = "GPLv2"
6LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
7 file://include/common.h;beginline=1;endline=17;md5=ba05b07912a44ea2bf81ce409380049c"
8
9SRC_URI = "ftp://ftp.infradead.org/pub/mtd-utils/mtd-utils-${PV}.tar.gz"
10
11CFLAGS_prepend = "-I ${S}/include "
12
13do_install() {
14 oe_runmake install DESTDIR=${D}
15}
diff --git a/documentation/ref-manual/faq.xml b/documentation/ref-manual/faq.xml
new file mode 100644
index 0000000000..035011f342
--- /dev/null
+++ b/documentation/ref-manual/faq.xml
@@ -0,0 +1,685 @@
1<!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='faq'>
6<title>FAQ</title>
7<qandaset>
8 <qandaentry>
9 <question>
10 <para>
11 How does Poky differ from <ulink url='&OE_HOME_URL;'>OpenEmbedded</ulink>?
12 </para>
13 </question>
14 <answer>
15 <para>
16 The term "<ulink url='&YOCTO_DOCS_DEV_URL;#poky'>Poky</ulink>"
17 refers to the specific reference build system that
18 the Yocto Project provides.
19 Poky is based on <ulink url='&YOCTO_DOCS_DEV_URL;#oe-core'>OE-Core</ulink>
20 and <ulink url='&YOCTO_DOCS_DEV_URL;#bitbake-term'>BitBake</ulink>.
21 Thus, the generic term used here for the build system is
22 the "OpenEmbedded build system."
23 Development in the Yocto Project using Poky is closely tied to OpenEmbedded, with
24 changes always being merged to OE-Core or BitBake first before being pulled back
25 into Poky.
26 This practice benefits both projects immediately.
27 </para>
28 </answer>
29 </qandaentry>
30
31 <qandaentry>
32 <question>
33 <para id='faq-not-meeting-requirements'>
34 My development system does not meet the
35 required Git, tar, and Python versions.
36 In particular, I do not have Python 2.7.3 or greater, or
37 I do have Python 3.x, which is specifically not supported by
38 the Yocto Project.
39 Can I still use the Yocto Project?
40 </para>
41 </question>
42 <answer>
43 <para>
44 You can get the required tools on your host development
45 system a couple different ways (i.e. building a tarball or
46 downloading a tarball).
47 See the
48 "<link linkend='required-git-tar-and-python-versions'>Required Git, tar, and Python Versions</link>"
49 section for steps on how to update your build tools.
50 </para>
51 </answer>
52 </qandaentry>
53
54 <qandaentry>
55 <question>
56 <para>
57 How can you claim Poky / OpenEmbedded-Core is stable?
58 </para>
59 </question>
60 <answer>
61 <para>
62 There are three areas that help with stability;
63 <itemizedlist>
64 <listitem><para>The Yocto Project team keeps
65 <ulink url='&YOCTO_DOCS_DEV_URL;#oe-core'>OE-Core</ulink> small
66 and focused, containing around 830 recipes as opposed to the thousands
67 available in other OpenEmbedded community layers.
68 Keeping it small makes it easy to test and maintain.</para></listitem>
69 <listitem><para>The Yocto Project team runs manual and automated tests
70 using a small, fixed set of reference hardware as well as emulated
71 targets.</para></listitem>
72 <listitem><para>The Yocto Project uses an autobuilder,
73 which provides continuous build and integration tests.</para></listitem>
74 </itemizedlist>
75 </para>
76 </answer>
77 </qandaentry>
78
79 <qandaentry>
80 <question>
81 <para>
82 How do I get support for my board added to the Yocto Project?
83 </para>
84 </question>
85 <answer>
86 <para>
87 Support for an additional board is added by creating a
88 Board Support Package (BSP) layer for it.
89 For more information on how to create a BSP layer, see the
90 "<ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>Understanding and Creating Layers</ulink>"
91 section in the Yocto Project Development Manual and the
92 <ulink url='&YOCTO_DOCS_BSP_URL;'>Yocto Project Board Support Package (BSP) Developer's Guide</ulink>.
93 </para>
94 <para>
95 Usually, if the board is not completely exotic, adding support in
96 the Yocto Project is fairly straightforward.
97 </para>
98 </answer>
99 </qandaentry>
100
101 <qandaentry>
102 <question>
103 <para>
104 Are there any products built using the OpenEmbedded build system?
105 </para>
106 </question>
107 <answer>
108 <para>
109 The software running on the <ulink url='http://vernier.com/labquest/'>Vernier LabQuest</ulink>
110 is built using the OpenEmbedded build system.
111 See the <ulink url='http://www.vernier.com/products/interfaces/labq/'>Vernier LabQuest</ulink>
112 website for more information.
113 There are a number of pre-production devices using the OpenEmbedded build system
114 and the Yocto Project team
115 announces them as soon as they are released.
116 </para>
117 </answer>
118 </qandaentry>
119
120 <qandaentry>
121 <question>
122 <para>
123 What does the OpenEmbedded build system produce as output?
124 </para>
125 </question>
126 <answer>
127 <para>
128 Because you can use the same set of recipes to create output of
129 various formats, the output of an OpenEmbedded build depends on
130 how you start it.
131 Usually, the output is a flashable image ready for the target
132 device.
133 </para>
134 </answer>
135 </qandaentry>
136
137 <qandaentry>
138 <question>
139 <para>
140 How do I add my package to the Yocto Project?
141 </para>
142 </question>
143 <answer>
144 <para>
145 To add a package, you need to create a BitBake recipe.
146 For information on how to create a BitBake recipe, see the
147 "<ulink url='&YOCTO_DOCS_DEV_URL;#new-recipe-writing-a-new-recipe'>Writing a New Recipe</ulink>"
148 in the Yocto Project Development Manual.
149 </para>
150 </answer>
151 </qandaentry>
152
153 <qandaentry>
154 <question>
155 <para>
156 Do I have to reflash my entire board with a new Yocto Project image when recompiling
157 a package?
158 </para>
159 </question>
160 <answer>
161 <para>
162 The OpenEmbedded build system can build packages in various
163 formats such as IPK for OPKG, Debian package
164 (<filename>.deb</filename>), or RPM.
165 You can then upgrade the packages using the package tools on
166 the device, much like on a desktop distribution such as
167 Ubuntu or Fedora.
168 However, package management on the target is entirely optional.
169 </para>
170 </answer>
171 </qandaentry>
172
173 <qandaentry>
174 <question>
175 <para>
176 What is GNOME Mobile and what is the difference between GNOME Mobile and GNOME?
177 </para>
178 </question>
179 <answer>
180 <para>
181 GNOME Mobile is a subset of the <ulink url='http://www.gnome.org'>GNOME</ulink>
182 platform targeted at mobile and embedded devices.
183 The main difference between GNOME Mobile and standard GNOME is that
184 desktop-orientated libraries have been removed, along with deprecated libraries,
185 creating a much smaller footprint.
186 </para>
187 </answer>
188 </qandaentry>
189
190 <qandaentry>
191 <question>
192 <para>
193 I see the error '<filename>chmod: XXXXX new permissions are r-xrwxrwx, not r-xr-xr-x</filename>'.
194 What is wrong?
195 </para>
196 </question>
197 <answer>
198 <para>
199 You are probably running the build on an NTFS filesystem.
200 Use <filename>ext2</filename>, <filename>ext3</filename>, or <filename>ext4</filename> instead.
201 </para>
202 </answer>
203 </qandaentry>
204
205<!-- <qandaentry>
206 <question>
207 <para>
208 How do I make the Yocto Project work in RHEL/CentOS?
209 </para>
210 </question>
211 <answer>
212 <para>
213 To get the Yocto Project working under RHEL/CentOS 5.1 you need to first
214 install some required packages.
215 The standard CentOS packages needed are:
216 <itemizedlist>
217 <listitem><para>"Development tools" (selected during installation)</para></listitem>
218 <listitem><para><filename>texi2html</filename></para></listitem>
219 <listitem><para><filename>compat-gcc-34</filename></para></listitem>
220 </itemizedlist>
221 On top of these, you need the following external packages:
222 <itemizedlist>
223 <listitem><para><filename>python-sqlite2</filename> from
224 <ulink url='http://dag.wieers.com/rpm/packages/python-sqlite2/'>DAG repository</ulink>
225 </para></listitem>
226 <listitem><para><filename>help2man</filename> from
227 <ulink url='http://centos.karan.org/el4/extras/stable/x86_64/RPMS/repodata/repoview/help2man-0-1.33.1-2.html'>Karan repository</ulink></para></listitem>
228 </itemizedlist>
229 </para>
230
231 <para>
232 Once these packages are installed, the OpenEmbedded build system will be able
233 to build standard images.
234 However, there might be a problem with the QEMU emulator segfaulting.
235 You can either disable the generation of binary locales by setting
236 <filename><link linkend='var-ENABLE_BINARY_LOCALE_GENERATION'>ENABLE_BINARY_LOCALE_GENERATION</link>
237 </filename> to "0" or by removing the <filename>linux-2.6-execshield.patch</filename>
238 from the kernel and rebuilding it since that is the patch that causes the problems with QEMU.
239 </para>
240
241 <note>
242 <para>For information on distributions that the Yocto Project
243 uses during validation, see the
244 <ulink url='&YOCTO_WIKI_URL;/wiki/Distribution_Support'>Distribution Support</ulink>
245 Wiki page.</para>
246 <para>For notes about using the Yocto Project on a RHEL 4-based
247 host, see the
248 <ulink url='&YOCTO_WIKI_URL;/wiki/BuildingOnRHEL4'>Building on RHEL4</ulink>
249 Wiki page.</para>
250 </note>
251 </answer>
252 </qandaentry> -->
253
254 <qandaentry>
255 <question>
256 <para>
257 I see lots of 404 responses for files on
258 <filename>&YOCTO_HOME_URL;/sources/*</filename>. Is something wrong?
259 </para>
260 </question>
261 <answer>
262 <para>
263 Nothing is wrong.
264 The OpenEmbedded build system checks any configured source mirrors before downloading
265 from the upstream sources.
266 The build system does this searching for both source archives and
267 pre-checked out versions of SCM-managed software.
268 These checks help in large installations because it can reduce load on the SCM servers
269 themselves.
270 The address above is one of the default mirrors configured into the
271 build system.
272 Consequently, if an upstream source disappears, the team
273 can place sources there so builds continue to work.
274 </para>
275 </answer>
276 </qandaentry>
277
278 <qandaentry>
279 <question>
280 <para>
281 I have machine-specific data in a package for one machine only but the package is
282 being marked as machine-specific in all cases, how do I prevent this?
283 </para>
284 </question>
285 <answer>
286 <para>
287 Set <filename><link linkend='var-SRC_URI_OVERRIDES_PACKAGE_ARCH'>SRC_URI_OVERRIDES_PACKAGE_ARCH</link>
288 </filename> = "0" in the <filename>.bb</filename> file but make sure the package is
289 manually marked as
290 machine-specific for the case that needs it.
291 The code that handles
292 <filename>SRC_URI_OVERRIDES_PACKAGE_ARCH</filename> is in
293 the <filename>meta/classes/base.bbclass</filename> file.
294 </para>
295 </answer>
296 </qandaentry>
297
298 <qandaentry>
299 <question>
300 <para>
301 I'm behind a firewall and need to use a proxy server. How do I do that?
302 </para>
303 </question>
304 <answer>
305 <para>
306 Most source fetching by the OpenEmbedded build system is done by <filename>wget</filename>
307 and you therefore need to specify the proxy settings in a
308 <filename>.wgetrc</filename> file in your home directory.
309 Here are some example settings:
310 <literallayout class='monospaced'>
311 http_proxy = http://proxy.yoyodyne.com:18023/
312 ftp_proxy = http://proxy.yoyodyne.com:18023/
313 </literallayout>
314 The Yocto Project also includes a
315 <filename>site.conf.sample</filename> file that shows how to
316 configure CVS and Git proxy servers if needed.
317 </para>
318 </answer>
319 </qandaentry>
320
321 <qandaentry>
322 <question>
323 <para>
324 What’s the difference between <filename>foo</filename> and <filename>foo-native</filename>?
325 </para>
326 </question>
327 <answer>
328 <para>
329 The <filename>*-native</filename> targets are designed to run on the system
330 being used for the build.
331 These are usually tools that are needed to assist the build in some way such as
332 <filename>quilt-native</filename>, which is used to apply patches.
333 The non-native version is the one that runs on the target device.
334 </para>
335 </answer>
336 </qandaentry>
337
338 <qandaentry>
339 <question>
340 <para>
341 I'm seeing random build failures. Help?!
342 </para>
343 </question>
344 <answer>
345 <para>
346 If the same build is failing in totally different and random
347 ways, the most likely explanation is:
348 <itemizedlist>
349 <listitem><para>The hardware you are running the build on
350 has some problem.</para></listitem>
351 <listitem><para>You are running the build under
352 virtualization, in which case the virtualization
353 probably has bugs.</para></listitem>
354 </itemizedlist>
355 The OpenEmbedded build system processes a massive amount of
356 data that causes lots of network, disk and CPU activity and
357 is sensitive to even single-bit failures in any of these areas.
358 True random failures have always been traced back to hardware
359 or virtualization issues.
360 </para>
361 </answer>
362 </qandaentry>
363
364 <qandaentry>
365 <question>
366 <para>
367 What do we need to ship for license compliance?
368 </para>
369 </question>
370 <answer>
371 <para>
372 This is a difficult question and you need to consult your lawyer
373 for the answer for your specific case.
374 It is worth bearing in mind that for GPL compliance, there needs
375 to be enough information shipped to allow someone else to
376 rebuild and produce the same end result you are shipping.
377 This means sharing the source code, any patches applied to it,
378 and also any configuration information about how that package
379 was configured and built.
380 </para>
381
382 <para>
383 You can find more information on licensing in the
384 "<ulink url='&YOCTO_DOCS_DEV_URL;#licensing'>Licensing</ulink>"
385 and "<ulink url='&YOCTO_DOCS_DEV_URL;#maintaining-open-source-license-compliance-during-your-products-lifecycle'>Maintaining Open Source License Compliance During Your Product's Lifecycle</ulink>"
386 sections, both of which are in the Yocto Project Development
387 Manual.
388 </para>
389 </answer>
390 </qandaentry>
391
392 <qandaentry>
393 <question>
394 <para>
395 How do I disable the cursor on my touchscreen device?
396 </para>
397 </question>
398 <answer>
399 <para>
400 You need to create a form factor file as described in the
401 "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-filelayout-misc-recipes'>Miscellaneous BSP-Specific Recipe Files</ulink>"
402 section in the Yocto Project Board Support Packages (BSP)
403 Developer's Guide.
404 Set the <filename>HAVE_TOUCHSCREEN</filename> variable equal to
405 one as follows:
406 <literallayout class='monospaced'>
407 HAVE_TOUCHSCREEN=1
408 </literallayout>
409 </para>
410 </answer>
411 </qandaentry>
412
413 <qandaentry>
414 <question>
415 <para>
416 How do I make sure connected network interfaces are brought up by default?
417 </para>
418 </question>
419 <answer>
420 <para>
421 The default interfaces file provided by the netbase recipe does not
422 automatically bring up network interfaces.
423 Therefore, you will need to add a BSP-specific netbase that includes an interfaces
424 file.
425 See the "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-filelayout-misc-recipes'>Miscellaneous BSP-Specific Recipe Files</ulink>"
426 section in the Yocto Project Board Support Packages (BSP)
427 Developer's Guide for information on creating these types of
428 miscellaneous recipe files.
429 </para>
430 <para>
431 For example, add the following files to your layer:
432 <literallayout class='monospaced'>
433 meta-MACHINE/recipes-bsp/netbase/netbase/MACHINE/interfaces
434 meta-MACHINE/recipes-bsp/netbase/netbase_5.0.bbappend
435 </literallayout>
436 </para>
437 </answer>
438 </qandaentry>
439
440 <qandaentry>
441 <question>
442 <para>
443 How do I create images with more free space?
444 </para>
445 </question>
446 <answer>
447 <para>
448 By default, the OpenEmbedded build system creates images
449 that are 1.3 times the size of the populated root filesystem.
450 To affect the image size, you need to set various
451 configurations:
452 <itemizedlist>
453 <listitem><para><emphasis>Image Size:</emphasis>
454 The OpenEmbedded build system uses the
455 <link linkend='var-IMAGE_ROOTFS_SIZE'><filename>IMAGE_ROOTFS_SIZE</filename></link>
456 variable to define the size of the image in Kbytes.
457 The build system determines the size by taking into
458 account the initial root filesystem size before any
459 modifications such as requested size for the image and
460 any requested additional free disk space to be
461 added to the image.</para></listitem>
462 <listitem><para><emphasis>Overhead:</emphasis>
463 Use the
464 <link linkend='var-IMAGE_OVERHEAD_FACTOR'><filename>IMAGE_OVERHEAD_FACTOR</filename></link>
465 variable to define the multiplier that the build system
466 applies to the initial image size, which is 1.3 by
467 default.</para></listitem>
468 <listitem><para><emphasis>Additional Free Space:</emphasis>
469 Use the
470 <link linkend='var-IMAGE_ROOTFS_EXTRA_SPACE'><filename>IMAGE_ROOTFS_EXTRA_SPACE</filename></link>
471 variable to add additional free space to the image.
472 The build system adds this space to the image after
473 it determines its
474 <filename>IMAGE_ROOTFS_SIZE</filename>.
475 </para></listitem>
476 </itemizedlist>
477 </para>
478 </answer>
479 </qandaentry>
480
481 <qandaentry>
482 <question>
483 <para>
484 Why don't you support directories with spaces in the pathnames?
485 </para>
486 </question>
487 <answer>
488 <para>
489 The Yocto Project team has tried to do this before but too
490 many of the tools the OpenEmbedded build system depends on,
491 such as <filename>autoconf</filename>, break when they find
492 spaces in pathnames.
493 Until that situation changes, the team will not support spaces
494 in pathnames.
495 </para>
496 </answer>
497 </qandaentry>
498
499 <qandaentry>
500 <question>
501 <para>
502 How do I use an external toolchain?
503 </para>
504 </question>
505 <answer>
506 <para>
507 The toolchain configuration is very flexible and customizable.
508 It is primarily controlled with the
509 <filename><link linkend='var-TCMODE'>TCMODE</link></filename>
510 variable.
511 This variable controls which <filename>tcmode-*.inc</filename>
512 file to include from the
513 <filename>meta/conf/distro/include</filename> directory within
514 the
515 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
516 </para>
517
518 <para>
519 The default value of <filename>TCMODE</filename> is "default",
520 which tells the OpenEmbedded build system to use its internally
521 built toolchain (i.e. <filename>tcmode-default.inc</filename>).
522 However, other patterns are accepted.
523 In particular, "external-*" refers to external toolchains.
524 One example is the Sourcery G++ Toolchain.
525 The support for this toolchain resides in the separate
526 <filename>meta-sourcery</filename> layer at
527 <ulink url='http://github.com/MentorEmbedded/meta-sourcery/'></ulink>.
528 </para>
529
530 <para>
531 In addition to the toolchain configuration, you also need a
532 corresponding toolchain recipe file.
533 This recipe file needs to package up any pre-built objects in
534 the toolchain such as <filename>libgcc</filename>,
535 <filename>libstdcc++</filename>, any locales, and
536 <filename>libc</filename>.
537 </para>
538 </answer>
539 </qandaentry>
540
541 <qandaentry>
542 <question>
543 <para id='how-does-the-yocto-project-obtain-source-code-and-will-it-work-behind-my-firewall-or-proxy-server'>
544 How does the OpenEmbedded build system obtain source code and
545 will it work behind my firewall or proxy server?
546 </para>
547 </question>
548 <answer>
549 <para>
550 The way the build system obtains source code is highly
551 configurable.
552 You can setup the build system to get source code in most
553 environments if HTTP transport is available.
554 </para>
555 <para>
556 When the build system searches for source code, it first
557 tries the local download directory.
558 If that location fails, Poky tries
559 <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>,
560 the upstream source, and then
561 <link linkend='var-MIRRORS'><filename>MIRRORS</filename></link>
562 in that order.
563 </para>
564 <para>
565 Assuming your distribution is "poky", the OpenEmbedded build
566 system uses the Yocto Project source
567 <filename>PREMIRRORS</filename> by default for SCM-based
568 sources, upstreams for normal tarballs, and then falls back
569 to a number of other mirrors including the Yocto Project
570 source mirror if those fail.
571 </para>
572 <para>
573 As an example, you could add a specific server for the
574 build system to attempt before any others by adding something
575 like the following to the <filename>local.conf</filename>
576 configuration file:
577 <literallayout class='monospaced'>
578 PREMIRRORS_prepend = "\
579 git://.*/.* http://www.yoctoproject.org/sources/ \n \
580 ftp://.*/.* http://www.yoctoproject.org/sources/ \n \
581 http://.*/.* http://www.yoctoproject.org/sources/ \n \
582 https://.*/.* http://www.yoctoproject.org/sources/ \n"
583 </literallayout>
584 </para>
585 <para>
586 These changes cause the build system to intercept Git, FTP,
587 HTTP, and HTTPS requests and direct them to the
588 <filename>http://</filename> sources mirror.
589 You can use <filename>file://</filename> URLs to point to
590 local directories or network shares as well.
591 </para>
592 <para>
593 Aside from the previous technique, these options also exist:
594 <literallayout class='monospaced'>
595 BB_NO_NETWORK = "1"
596 </literallayout>
597 This statement tells BitBake to issue an error instead of
598 trying to access the Internet.
599 This technique is useful if you want to ensure code builds
600 only from local sources.
601 </para>
602 <para>
603 Here is another technique:
604 <literallayout class='monospaced'>
605 BB_FETCH_PREMIRRORONLY = "1"
606 </literallayout>
607 This statement limits the build system to pulling source
608 from the <filename>PREMIRRORS</filename> only.
609 Again, this technique is useful for reproducing builds.
610 </para>
611 <para>
612 Here is another technique:
613 <literallayout class='monospaced'>
614 BB_GENERATE_MIRROR_TARBALLS = "1"
615 </literallayout>
616 This statement tells the build system to generate mirror
617 tarballs.
618 This technique is useful if you want to create a mirror server.
619 If not, however, the technique can simply waste time during
620 the build.
621 </para>
622 <para>
623 Finally, consider an example where you are behind an
624 HTTP-only firewall.
625 You could make the following changes to the
626 <filename>local.conf</filename> configuration file as long as
627 the <filename>PREMIRRORS</filename> server is current:
628 <literallayout class='monospaced'>
629 PREMIRRORS_prepend = "\
630 ftp://.*/.* http://www.yoctoproject.org/sources/ \n \
631 http://.*/.* http://www.yoctoproject.org/sources/ \n \
632 https://.*/.* http://www.yoctoproject.org/sources/ \n"
633 BB_FETCH_PREMIRRORONLY = "1"
634 </literallayout>
635 These changes would cause the build system to successfully
636 fetch source over HTTP and any network accesses to anything
637 other than the <filename>PREMIRRORS</filename> would fail.
638 </para>
639 <para>
640 The build system also honors the standard shell environment
641 variables <filename>http_proxy</filename>,
642 <filename>ftp_proxy</filename>,
643 <filename>https_proxy</filename>, and
644 <filename>all_proxy</filename> to redirect requests through
645 proxy servers.
646 </para>
647 </answer>
648 </qandaentry>
649
650 <qandaentry>
651 <question>
652 <para>
653 Can I get rid of build output so I can start over?
654 </para>
655 </question>
656 <answer>
657 <para>
658 Yes - you can easily do this.
659 When you use BitBake to build an image, all the build output
660 goes into the directory created when you run the
661 build environment setup script (i.e.
662 <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
663 or
664 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>).
665 By default, this <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
666 is named <filename>build</filename> but can be named
667 anything you want.
668 </para>
669
670 <para>
671 Within the Build Directory, is the <filename>tmp</filename>
672 directory.
673 To remove all the build output yet preserve any source code or
674 downloaded files from previous builds, simply remove the
675 <filename>tmp</filename> directory.
676 </para>
677 </answer>
678 </qandaentry>
679
680
681</qandaset>
682</chapter>
683<!--
684vim: expandtab tw=80 ts=4
685-->
diff --git a/documentation/ref-manual/figures/analysis-for-package-splitting.png b/documentation/ref-manual/figures/analysis-for-package-splitting.png
new file mode 100644
index 0000000000..04f2794ea9
--- /dev/null
+++ b/documentation/ref-manual/figures/analysis-for-package-splitting.png
Binary files differ
diff --git a/documentation/ref-manual/figures/buildhistory-web.png b/documentation/ref-manual/figures/buildhistory-web.png
new file mode 100644
index 0000000000..f6db86c977
--- /dev/null
+++ b/documentation/ref-manual/figures/buildhistory-web.png
Binary files differ
diff --git a/documentation/ref-manual/figures/buildhistory.png b/documentation/ref-manual/figures/buildhistory.png
new file mode 100644
index 0000000000..edf98d95cf
--- /dev/null
+++ b/documentation/ref-manual/figures/buildhistory.png
Binary files differ
diff --git a/documentation/ref-manual/figures/configuration-compile-autoreconf.png b/documentation/ref-manual/figures/configuration-compile-autoreconf.png
new file mode 100644
index 0000000000..a07464f04c
--- /dev/null
+++ b/documentation/ref-manual/figures/configuration-compile-autoreconf.png
Binary files differ
diff --git a/documentation/ref-manual/figures/cross-development-toolchains.png b/documentation/ref-manual/figures/cross-development-toolchains.png
new file mode 100644
index 0000000000..d36670a198
--- /dev/null
+++ b/documentation/ref-manual/figures/cross-development-toolchains.png
Binary files differ
diff --git a/documentation/ref-manual/figures/image-generation.png b/documentation/ref-manual/figures/image-generation.png
new file mode 100644
index 0000000000..ab962580c3
--- /dev/null
+++ b/documentation/ref-manual/figures/image-generation.png
Binary files differ
diff --git a/documentation/ref-manual/figures/images.png b/documentation/ref-manual/figures/images.png
new file mode 100644
index 0000000000..d99eac1fbf
--- /dev/null
+++ b/documentation/ref-manual/figures/images.png
Binary files differ
diff --git a/documentation/ref-manual/figures/layer-input.png b/documentation/ref-manual/figures/layer-input.png
new file mode 100644
index 0000000000..0a4f2e74f3
--- /dev/null
+++ b/documentation/ref-manual/figures/layer-input.png
Binary files differ
diff --git a/documentation/ref-manual/figures/package-feeds.png b/documentation/ref-manual/figures/package-feeds.png
new file mode 100644
index 0000000000..4bc311f3d6
--- /dev/null
+++ b/documentation/ref-manual/figures/package-feeds.png
Binary files differ
diff --git a/documentation/ref-manual/figures/patching.png b/documentation/ref-manual/figures/patching.png
new file mode 100644
index 0000000000..8ecd018502
--- /dev/null
+++ b/documentation/ref-manual/figures/patching.png
Binary files differ
diff --git a/documentation/ref-manual/figures/poky-title.png b/documentation/ref-manual/figures/poky-title.png
new file mode 100644
index 0000000000..2893d84620
--- /dev/null
+++ b/documentation/ref-manual/figures/poky-title.png
Binary files differ
diff --git a/documentation/ref-manual/figures/sdk-generation.png b/documentation/ref-manual/figures/sdk-generation.png
new file mode 100644
index 0000000000..c37e2748ca
--- /dev/null
+++ b/documentation/ref-manual/figures/sdk-generation.png
Binary files differ
diff --git a/documentation/ref-manual/figures/sdk.png b/documentation/ref-manual/figures/sdk.png
new file mode 100644
index 0000000000..a539cc52f0
--- /dev/null
+++ b/documentation/ref-manual/figures/sdk.png
Binary files differ
diff --git a/documentation/ref-manual/figures/source-fetching.png b/documentation/ref-manual/figures/source-fetching.png
new file mode 100644
index 0000000000..26aefb50c2
--- /dev/null
+++ b/documentation/ref-manual/figures/source-fetching.png
Binary files differ
diff --git a/documentation/ref-manual/figures/source-input.png b/documentation/ref-manual/figures/source-input.png
new file mode 100644
index 0000000000..f7515058ef
--- /dev/null
+++ b/documentation/ref-manual/figures/source-input.png
Binary files differ
diff --git a/documentation/ref-manual/figures/user-configuration.png b/documentation/ref-manual/figures/user-configuration.png
new file mode 100644
index 0000000000..f2b3f8e7fe
--- /dev/null
+++ b/documentation/ref-manual/figures/user-configuration.png
Binary files differ
diff --git a/documentation/ref-manual/figures/yocto-environment-ref.png b/documentation/ref-manual/figures/yocto-environment-ref.png
new file mode 100644
index 0000000000..650c6c8030
--- /dev/null
+++ b/documentation/ref-manual/figures/yocto-environment-ref.png
Binary files differ
diff --git a/documentation/ref-manual/introduction.xml b/documentation/ref-manual/introduction.xml
new file mode 100644
index 0000000000..f48489a563
--- /dev/null
+++ b/documentation/ref-manual/introduction.xml
@@ -0,0 +1,556 @@
1<!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='intro'>
6<title>Introduction</title>
7
8<section id='intro-welcome'>
9 <title>Introduction</title>
10
11 <para>
12 This manual provides reference information for the current release of the Yocto Project.
13 The Yocto Project is an open-source collaboration project focused on embedded Linux
14 developers.
15 Amongst other things, the Yocto Project uses the OpenEmbedded build system, which
16 is based on the Poky project, to construct complete Linux images.
17 You can find complete introductory and getting started information on the Yocto Project
18 by reading the
19 <ulink url='&YOCTO_DOCS_QS_URL;'>Yocto Project Quick Start</ulink>.
20 For task-based information using the Yocto Project, see the
21 <ulink url='&YOCTO_DOCS_DEV_URL;'>Yocto Project Development Manual</ulink>
22 and the <ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;'>Yocto Project Linux Kernel Development Manual</ulink>.
23 For Board Support Package (BSP) structure information, see the
24 <ulink url='&YOCTO_DOCS_BSP_URL;'>Yocto Project Board Support Package (BSP) Developer's Guide</ulink>.
25 You can find information on tracing and profiling in the
26 <ulink url='&YOCTO_DOCS_PROF_URL;#profile-manual'>Yocto Project Profiling and Tracing Manual</ulink>.
27 For information on BitBake, which is the task execution tool the
28 OpenEmbedded build system is based on, see the
29 <ulink url='&YOCTO_DOCS_BB_URL;#bitbake-user-manual'>BitBake User Manual</ulink>.
30 Finally, you can also find lots of Yocto Project information on the
31 <ulink url="&YOCTO_HOME_URL;">Yocto Project website</ulink>.
32 </para>
33</section>
34
35<section id='intro-manualoverview'>
36 <title>Documentation Overview</title>
37 <para>
38 This reference manual consists of the following:
39 <itemizedlist>
40 <listitem><para><emphasis>
41 <link linkend='usingpoky'>Using the Yocto Project</link>:</emphasis>
42 Provides an overview of the components that make up the Yocto Project
43 followed by information about debugging images created in the Yocto Project.
44 </para></listitem>
45 <listitem><para><emphasis>
46 <link linkend='closer-look'>A Closer Look at the Yocto Project Development Environment</link>:</emphasis>
47 Provides a more detailed look at the Yocto Project development
48 environment within the context of development.
49 </para></listitem>
50 <listitem><para><emphasis>
51 <link linkend='technical-details'>Technical Details</link>:</emphasis>
52 Describes fundamental Yocto Project components as well as an explanation
53 behind how the Yocto Project uses shared state (sstate) cache to speed build time.
54 </para></listitem>
55 <listitem><para><emphasis>
56 <link linkend='migration'>Migrating to a Newer Yocto Project Release</link>:</emphasis>
57 Describes release-specific information that helps you move from
58 one Yocto Project Release to another.
59 </para></listitem>
60 <listitem><para><emphasis>
61 <link linkend='ref-structure'>Directory Structure</link>:</emphasis>
62 Describes the
63 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink> created
64 either by unpacking a released Yocto Project tarball on your host development system,
65 or by cloning the upstream
66 <ulink url='&YOCTO_DOCS_DEV_URL;#poky'>Poky</ulink> Git repository.
67 </para></listitem>
68 <listitem><para><emphasis>
69 <link linkend='ref-classes'>Classes</link>:</emphasis>
70 Describes the classes used in the Yocto Project.</para></listitem>
71 <listitem><para><emphasis>
72 <link linkend='ref-images'>Images</link>:</emphasis>
73 Describes the standard images that the Yocto Project supports.
74 </para></listitem>
75 <listitem><para><emphasis>
76 <link linkend='ref-features'>Features</link>:</emphasis>
77 Describes mechanisms for creating distribution, machine, and image
78 features during the build process using the OpenEmbedded build system.</para></listitem>
79 <listitem><para><emphasis>
80 <link linkend='ref-variables-glos'>Variables Glossary</link>:</emphasis>
81 Presents most variables used by the OpenEmbedded build system, which
82 uses BitBake.
83 Entries describe the function of the variable and how to apply them.
84 </para></listitem>
85 <listitem><para><emphasis>
86 <link linkend='ref-varlocality'>Variable Context</link>:</emphasis>
87 Provides variable locality or context.</para></listitem>
88 <listitem><para><emphasis>
89 <link linkend='faq'>FAQ</link>:</emphasis>
90 Provides answers for commonly asked questions in the Yocto Project
91 development environment.</para></listitem>
92 <listitem><para><emphasis>
93 <link linkend='resources'>Contributing to the Yocto Project</link>:</emphasis>
94 Provides guidance on how you can contribute back to the Yocto
95 Project.</para></listitem>
96 </itemizedlist>
97 </para>
98</section>
99
100
101<section id='intro-requirements'>
102<title>System Requirements</title>
103 <para>
104 For general Yocto Project system requirements, see the
105 "<ulink url='&YOCTO_DOCS_QS_URL;#yp-resources'>What You Need and How You Get It</ulink>" section
106 in the Yocto Project Quick Start.
107 The remainder of this section provides details on system requirements
108 not covered in the Yocto Project Quick Start.
109 </para>
110
111 <section id='detailed-supported-distros'>
112 <title>Supported Linux Distributions</title>
113
114 <para>
115 Currently, the Yocto Project is supported on the following
116 distributions:
117 <note>
118 <para>
119 Yocto Project releases are tested against the stable Linux
120 distributions in the following list.
121 The Yocto Project should work on other distributions but
122 validation is not performed against them.
123 </para>
124
125 <para>
126 In particular, the Yocto Project does not support
127 and currently has no plans to support
128 rolling-releases or development distributions due to their
129 constantly changing nature.
130 We welcome patches and bug reports, but keep in mind that
131 our priority is on the supported platforms listed below.
132 </para>
133
134 <para>
135 If you encounter problems, please go to
136 <ulink url='&YOCTO_BUGZILLA_URL;'>Yocto Project Bugzilla</ulink>
137 and submit a bug.
138 We are interested in hearing about your experience.
139 </para>
140 </note>
141 <itemizedlist>
142<!-- <listitem><para>Ubuntu 10.04</para></listitem>
143 <listitem><para>Ubuntu 11.10</para></listitem> -->
144 <listitem><para>Ubuntu 12.04 (LTS)</para></listitem>
145 <listitem><para>Ubuntu 13.10</para></listitem>
146 <listitem><para>Ubuntu 14.04 (LTS)</para></listitem>
147<!-- <listitem><para>Fedora 16 (Verne)</para></listitem>
148 <listitem><para>Fedora 17 (Spherical)</para></listitem> -->
149 <listitem><para>Fedora release 19 (Schrödinger's Cat)</para></listitem>
150 <listitem><para>Fedora release 20 (Heisenbug)</para></listitem>
151<!-- <listitem><para>CentOS release 5.6 (Final)</para></listitem>
152 <listitem><para>CentOS release 5.7 (Final)</para></listitem>
153 <listitem><para>CentOS release 5.8 (Final)</para></listitem>
154 <listitem><para>CentOS release 6.3 (Final)</para></listitem> -->
155 <listitem><para>CentOS release 6.4</para></listitem>
156 <listitem><para>CentOS release 6.5</para></listitem>
157<!-- <listitem><para>Debian GNU/Linux 6.0 (Squeeze)</para></listitem> -->
158 <listitem><para>Debian GNU/Linux 7.0 (Wheezy)</para></listitem>
159 <listitem><para>Debian GNU/Linux 7.1 (Wheezy)</para></listitem>
160 <listitem><para>Debian GNU/Linux 7.2 (Wheezy)</para></listitem>
161 <listitem><para>Debian GNU/Linux 7.3 (Wheezy)</para></listitem>
162 <listitem><para>Debian GNU/Linux 7.4 (Wheezy)</para></listitem>
163<!-- <listitem><para>openSUSE 11.4</para></listitem>
164 <listitem><para>openSUSE 12.1</para></listitem> -->
165 <listitem><para>openSUSE 12.2</para></listitem>
166 <listitem><para>openSUSE 12.3</para></listitem>
167 <listitem><para>openSUSE 13.1</para></listitem>
168 </itemizedlist>
169 </para>
170
171 <note>
172 While the Yocto Project Team attempts to ensure all Yocto Project
173 releases are one hundred percent compatible with each officially
174 supported Linux distribution, instances might exist where you
175 encounter a problem while using the Yocto Project on a specific
176 distribution.
177 For example, the CentOS 6.4 distribution does not include the
178 Gtk+ 2.20.0 and PyGtk 2.21.0 (or higher) packages, which are
179 required to run
180 <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/hob'>Hob</ulink>.
181 </note>
182 </section>
183
184 <section id='required-packages-for-the-host-development-system'>
185 <title>Required Packages for the Host Development System</title>
186
187 <para>
188 The list of packages you need on the host development system can
189 be large when covering all build scenarios using the Yocto Project.
190 This section provides required packages according to
191 Linux distribution and function.
192 </para>
193
194 <section id='ubuntu-packages'>
195 <title>Ubuntu and Debian</title>
196
197 <para>
198 The following list shows the required packages by function
199 given a supported Ubuntu or Debian Linux distribution:
200 <itemizedlist>
201 <listitem><para><emphasis>Essentials:</emphasis>
202 Packages needed to build an image on a headless
203 system:
204 <literallayout class='monospaced'>
205 $ sudo apt-get install &UBUNTU_HOST_PACKAGES_ESSENTIAL;
206 </literallayout></para></listitem>
207 <listitem><para><emphasis>Graphical and Eclipse Plug-In Extras:</emphasis>
208 Packages recommended if the host system has graphics
209 support or if you are going to use the Eclipse
210 IDE:
211 <literallayout class='monospaced'>
212 $ sudo apt-get install libsdl1.2-dev xterm
213 </literallayout></para></listitem>
214 <listitem><para><emphasis>Documentation:</emphasis>
215 Packages needed if you are going to build out the
216 Yocto Project documentation manuals:
217 <literallayout class='monospaced'>
218 $ sudo apt-get install make xsltproc docbook-utils fop dblatex xmlto
219 </literallayout></para></listitem>
220 <listitem><para><emphasis>ADT Installer Extras:</emphasis>
221 Packages needed if you are going to be using the
222 <ulink url='&YOCTO_DOCS_ADT_URL;#using-the-adt-installer'>Application Development Toolkit (ADT) Installer</ulink>:
223 <literallayout class='monospaced'>
224 $ sudo apt-get install autoconf automake libtool libglib2.0-dev
225 </literallayout></para></listitem>
226 </itemizedlist>
227 </para>
228 </section>
229
230 <section id='fedora-packages'>
231 <title>Fedora Packages</title>
232
233 <para>
234 The following list shows the required packages by function
235 given a supported Fedora Linux distribution:
236 <itemizedlist>
237 <listitem><para><emphasis>Essentials:</emphasis>
238 Packages needed to build an image for a headless
239 system:
240 <literallayout class='monospaced'>
241 $ sudo yum install &FEDORA_HOST_PACKAGES_ESSENTIAL;
242 </literallayout></para></listitem>
243 <listitem><para><emphasis>Graphical and Eclipse Plug-In Extras:</emphasis>
244 Packages recommended if the host system has graphics
245 support or if you are going to use the Eclipse
246 IDE:
247 <literallayout class='monospaced'>
248 $ sudo yum install SDL-devel xterm perl-Thread-Queue
249 </literallayout></para></listitem>
250 <listitem><para><emphasis>Documentation:</emphasis>
251 Packages needed if you are going to build out the
252 Yocto Project documentation manuals:
253 <literallayout class='monospaced'>
254 $ sudo yum install make docbook-style-dsssl docbook-style-xsl \
255 docbook-dtds docbook-utils fop libxslt dblatex xmlto
256 </literallayout></para></listitem>
257 <listitem><para><emphasis>ADT Installer Extras:</emphasis>
258 Packages needed if you are going to be using the
259 <ulink url='&YOCTO_DOCS_ADT_URL;#using-the-adt-installer'>Application Development Toolkit (ADT) Installer</ulink>:
260 <literallayout class='monospaced'>
261 $ sudo yum install autoconf automake libtool glib2-devel
262 </literallayout></para></listitem>
263 </itemizedlist>
264 </para>
265 </section>
266
267 <section id='opensuse-packages'>
268 <title>openSUSE Packages</title>
269
270 <para>
271 The following list shows the required packages by function
272 given a supported openSUSE Linux distribution:
273 <itemizedlist>
274 <listitem><para><emphasis>Essentials:</emphasis>
275 Packages needed to build an image for a headless
276 system:
277 <literallayout class='monospaced'>
278 $ sudo zypper install &OPENSUSE_HOST_PACKAGES_ESSENTIAL;
279 </literallayout></para></listitem>
280 <listitem><para><emphasis>Graphical and Eclipse Plug-In Extras:</emphasis>
281 Packages recommended if the host system has graphics
282 support or if you are going to use the Eclipse
283 IDE:
284 <literallayout class='monospaced'>
285 $ sudo zypper install libSDL-devel xterm
286 </literallayout></para></listitem>
287 <listitem><para><emphasis>Documentation:</emphasis>
288 Packages needed if you are going to build out the
289 Yocto Project documentation manuals:
290 <literallayout class='monospaced'>
291 $ sudo zypper install make fop xsltproc dblatex xmlto
292 </literallayout></para></listitem>
293 <listitem><para><emphasis>ADT Installer Extras:</emphasis>
294 Packages needed if you are going to be using the
295 <ulink url='&YOCTO_DOCS_ADT_URL;#using-the-adt-installer'>Application Development Toolkit (ADT) Installer</ulink>:
296 <literallayout class='monospaced'>
297 $ sudo zypper install autoconf automake libtool glib2-devel
298 </literallayout></para></listitem>
299 </itemizedlist>
300 </para>
301 </section>
302
303 <section id='centos-packages'>
304 <title>CentOS Packages</title>
305
306 <para>
307 The following list shows the required packages by function
308 given a supported CentOS Linux distribution:
309 <note>Depending on the CentOS version you are using, other requirements
310 and dependencies might exist.
311 For details, you should look at the CentOS sections on the
312 <ulink url='https://wiki.yoctoproject.org/wiki/Poky/GettingStarted/Dependencies'>Poky/GettingStarted/Dependencies</ulink>
313 wiki page.
314 </note>
315 <itemizedlist>
316 <listitem><para><emphasis>Essentials:</emphasis>
317 Packages needed to build an image for a headless
318 system:
319 <literallayout class='monospaced'>
320 $ sudo yum install &CENTOS_HOST_PACKAGES_ESSENTIAL;
321 </literallayout></para></listitem>
322 <listitem><para><emphasis>Graphical and Eclipse Plug-In Extras:</emphasis>
323 Packages recommended if the host system has graphics
324 support or if you are going to use the Eclipse
325 IDE:
326 <literallayout class='monospaced'>
327 $ sudo yum install SDL-devel xterm
328 </literallayout></para></listitem>
329 <listitem><para><emphasis>Documentation:</emphasis>
330 Packages needed if you are going to build out the
331 Yocto Project documentation manuals:
332 <literallayout class='monospaced'>
333 $ sudo yum install make docbook-style-dsssl docbook-style-xsl \
334 docbook-dtds docbook-utils fop libxslt dblatex xmlto
335 </literallayout></para></listitem>
336 <listitem><para><emphasis>ADT Installer Extras:</emphasis>
337 Packages needed if you are going to be using the
338 <ulink url='&YOCTO_DOCS_ADT_URL;#using-the-adt-installer'>Application Development Toolkit (ADT) Installer</ulink>:
339 <literallayout class='monospaced'>
340 $ sudo yum install autoconf automake libtool glib2-devel
341 </literallayout></para></listitem>
342 </itemizedlist>
343 </para>
344 </section>
345 </section>
346
347 <section id='required-git-tar-and-python-versions'>
348 <title>Required Git, tar, and Python Versions</title>
349
350 <para>
351 In order to use the build system, your host development system
352 must meet the following version requirements for Git, tar, and
353 Python:
354 <itemizedlist>
355 <listitem><para>Git 1.7.5 or greater</para></listitem>
356 <listitem><para>tar 1.24 or greater</para></listitem>
357 <listitem><para>Python 2.7.3 or greater not including
358 Python 3.x, which is not supported.</para></listitem>
359 </itemizedlist>
360 </para>
361
362 <para>
363 If your host development system does not meet all these requirements,
364 you can resolve this by installing a <filename>buildtools</filename>
365 tarball that contains these tools.
366 You can get the tarball one of two ways: download a pre-built
367 tarball or use BitBake to build the tarball.
368 </para>
369
370 <section id='downloading-a-pre-built-buildtools-tarball'>
371 <title>Downloading a Pre-Built <filename>buildtools</filename> Tarball</title>
372
373 <para>
374 Downloading and running a pre-built buildtools installer is
375 the easiest of the two methods by which you can get these tools:
376 <orderedlist>
377 <listitem><para>
378 Locate and download the <filename>*.sh</filename> at
379 <ulink url='&YOCTO_DL_URL;/releases/yocto/yocto-&DISTRO;/buildtools/'></ulink>.
380 </para></listitem>
381 <listitem><para>
382 Execute the installation script.
383 Here is an example:
384 <literallayout class='monospaced'>
385 $ sh poky-eglibc-x86_64-buildtools-tarball-x86_64-buildtools-nativesdk-standalone-&DISTRO;.sh
386 </literallayout>
387 During execution, a prompt appears that allows you to
388 choose the installation directory.
389 For example, you could choose the following:
390 <literallayout class='monospaced'>
391 /home/your-username/buildtools
392 </literallayout>
393 </para></listitem>
394 <listitem><para>
395 Source the tools environment setup script by using a
396 command like the following:
397 <literallayout class='monospaced'>
398 $ source /home/your-username/buildtools/environment-setup-i586-poky-linux
399 </literallayout>
400 Of course, you need to supply your installation directory and be
401 sure to use the right file (i.e. i585 or x86-64).
402 </para>
403 <para>
404 After you have sourced the setup script,
405 the tools are added to <filename>PATH</filename>
406 and any other environment variables required to run the
407 tools are initialized.
408 The results are working versions versions of Git, tar,
409 Python and <filename>chrpath</filename>.
410 </para></listitem>
411 </orderedlist>
412 </para>
413 </section>
414
415 <section id='building-your-own-buildtools-tarball'>
416 <title>Building Your Own <filename>buildtools</filename> Tarball</title>
417
418 <para>
419 Building and running your own buildtools installer applies
420 only when you have a build host that can already run BitBake.
421 In this case, you use that machine to build the
422 <filename>.sh</filename> file and then
423 take steps to transfer and run it on a
424 machine that does not meet the minimal Git, tar, and Python
425 requirements.
426 </para>
427
428 <para>
429 Here are the steps to take to build and run your own
430 buildtools installer:
431 <orderedlist>
432 <listitem><para>
433 On the machine that is able to run BitBake,
434 be sure you have set up your build environment with
435 the setup script
436 (<link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
437 or
438 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>).
439 </para></listitem>
440 <listitem><para>
441 Run the BitBake command to build the tarball:
442 <literallayout class='monospaced'>
443 $ bitbake buildtools-tarball
444 </literallayout>
445 <note>
446 The
447 <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>
448 variable in your <filename>local.conf</filename> file
449 determines whether you build tools for a 32-bit
450 or 64-bit system.
451 </note>
452 Once the build completes, you can find the
453 <filename>.sh</filename> file that installs
454 the tools in the <filename>tmp/deploy/sdk</filename>
455 subdirectory of the
456 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
457 The installer file has the string "buildtools"
458 in the name.
459 </para></listitem>
460 <listitem><para>
461 Transfer the <filename>.sh</filename> file from the
462 build host to the machine that does not meet the
463 Git, tar, or Python requirements.
464 </para></listitem>
465 <listitem><para>
466 On the machine that does not meet the requirements,
467 run the <filename>.sh</filename> file
468 to install the tools.
469 Here is an example:
470 <literallayout class='monospaced'>
471 $ sh poky-eglibc-x86_64-buildtools-tarball-x86_64-buildtools-nativesdk-standalone-&DISTRO;.sh
472 </literallayout>
473 During execution, a prompt appears that allows you to
474 choose the installation directory.
475 For example, you could choose the following:
476 <literallayout class='monospaced'>
477 /home/your-username/buildtools
478 </literallayout>
479 </para></listitem>
480 <listitem><para>
481 Source the tools environment setup script by using a
482 command like the following:
483 <literallayout class='monospaced'>
484 $ source /home/your-username/buildtools/environment-setup-i586-poky-linux
485 </literallayout>
486 Of course, you need to supply your installation directory and be
487 sure to use the right file (i.e. i585 or x86-64).
488 </para>
489 <para>
490 After you have sourced the setup script,
491 the tools are added to <filename>PATH</filename>
492 and any other environment variables required to run the
493 tools are initialized.
494 The results are working versions versions of Git, tar,
495 Python and <filename>chrpath</filename>.
496 </para></listitem>
497 </orderedlist>
498 </para>
499 </section>
500 </section>
501</section>
502
503<section id='intro-getit'>
504 <title>Obtaining the Yocto Project</title>
505 <para>
506 The Yocto Project development team makes the Yocto Project available through a number
507 of methods:
508 <itemizedlist>
509 <listitem><para><emphasis>Source Repositories:</emphasis>
510 Working from a copy of the upstream
511 <filename>poky</filename> repository is the
512 preferred method for obtaining and using a Yocto Project
513 release.
514 You can view the Yocto Project Source Repositories at
515 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink>.
516 In particular, you can find the
517 <filename>poky</filename> repository at
518 <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/'></ulink>.
519 </para></listitem>
520 <listitem><para><emphasis>Releases:</emphasis> Stable, tested
521 releases are available as tarballs through
522 <ulink url='&YOCTO_DL_URL;/releases/yocto/'/>.</para></listitem>
523 <listitem><para><emphasis>Nightly Builds:</emphasis> These
524 tarball releases are available at
525 <ulink url='http://autobuilder.yoctoproject.org/nightly'/>.
526 These builds include Yocto Project releases, meta-toolchain
527 tarball installation scripts, and experimental builds.
528 </para></listitem>
529 <listitem><para><emphasis>Yocto Project Website:</emphasis> You can
530 find tarball releases of the Yocto Project and supported BSPs
531 at the
532 <ulink url='&YOCTO_HOME_URL;'>Yocto Project website</ulink>.
533 Along with these downloads, you can find lots of other
534 information at this site.
535 </para></listitem>
536 </itemizedlist>
537 </para>
538</section>
539
540<section id='intro-getit-dev'>
541 <title>Development Checkouts</title>
542 <para>
543 Development using the Yocto Project requires a local
544 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
545 You can set up the Source Directory by cloning a copy of the upstream
546 <ulink url='&YOCTO_DOCS_DEV_URL;#poky'>poky</ulink> Git repository.
547 For information on how to do this, see the
548 "<ulink url='&YOCTO_DOCS_DEV_URL;#getting-setup'>Getting Set Up</ulink>"
549 section in the Yocto Project Development Manual.
550 </para>
551</section>
552
553</chapter>
554<!--
555vim: expandtab tw=80 ts=4
556-->
diff --git a/documentation/ref-manual/migration.xml b/documentation/ref-manual/migration.xml
new file mode 100644
index 0000000000..7cefa5ebf4
--- /dev/null
+++ b/documentation/ref-manual/migration.xml
@@ -0,0 +1,1616 @@
1<!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='migration'>
6<title>Migrating to a Newer Yocto Project Release</title>
7
8 <para>
9 This chapter provides information you can use to migrate work to a
10 newer Yocto Project release. You can find the same information in the
11 release notes for a given release.
12 </para>
13
14<section id='moving-to-the-yocto-project-1.3-release'>
15 <title>Moving to the Yocto Project 1.3 Release</title>
16
17 <para>
18 This section provides migration information for moving to the
19 Yocto Project 1.3 Release from the prior release.
20 </para>
21
22 <section id='1.3-local-configuration'>
23 <title>Local Configuration</title>
24
25 <para>
26 Differences include changes for
27 <link linkend='var-SSTATE_MIRRORS'><filename>SSTATE_MIRRORS</filename></link>
28 and <filename>bblayers.conf</filename>.
29 </para>
30
31 <section id='migration-1.3-sstate-mirrors'>
32 <title>SSTATE_MIRRORS</title>
33
34 <para>
35 The shared state cache (sstate-cache), as pointed to by
36 <link linkend='var-SSTATE_DIR'><filename>SSTATE_DIR</filename></link>, by default
37 now has two-character subdirectories to prevent issues arising
38 from too many files in the same directory.
39 Also, native sstate-cache packages will go into a subdirectory named using
40 the distro ID string.
41 If you copy the newly structured sstate-cache to a mirror location
42 (either local or remote) and then point to it in
43 <link linkend='var-SSTATE_MIRRORS'><filename>SSTATE_MIRRORS</filename></link>,
44 you need to append "PATH" to the end of the mirror URL so that
45 the path used by BitBake before the mirror substitution is
46 appended to the path used to access the mirror.
47 Here is an example:
48 <literallayout class='monospaced'>
49 SSTATE_MIRRORS = "file://.* http://someserver.tld/share/sstate/PATH"
50 </literallayout>
51 </para>
52 </section>
53
54 <section id='migration-1.3-bblayers-conf'>
55 <title>bblayers.conf</title>
56
57 <para>
58 The <filename>meta-yocto</filename> layer consists of two parts
59 that correspond to the Poky reference distribution and the
60 reference hardware Board Support Packages (BSPs), respectively:
61 <filename>meta-yocto</filename> and
62 <filename>meta-yocto-bsp</filename>.
63 When running BitBake or Hob for the first time after upgrading,
64 your <filename>conf/bblayers.conf</filename> file will be
65 updated to handle this change and you will be asked to
66 re-run or restart for the changes to take effect.
67 </para>
68 </section>
69 </section>
70
71 <section id='1.3-recipes'>
72 <title>Recipes</title>
73
74 <para>
75 Differences include changes for the following:
76 <itemizedlist>
77 <listitem><para>Python function whitespace</para></listitem>
78 <listitem><para><filename>proto=</filename> in <filename>SRC_URI</filename></para></listitem>
79 <listitem><para><filename>nativesdk</filename></para></listitem>
80 <listitem><para>Task recipes</para></listitem>
81 <listitem><para><filename>IMAGE_FEATURES</filename></para></listitem>
82 <listitem><para>Removed recipes</para></listitem>
83 </itemizedlist>
84 </para>
85
86 <section id='migration-1.3-python-function-whitespace'>
87 <title>Python Function Whitespace</title>
88
89 <para>
90 All Python functions must now use four spaces for indentation.
91 Previously, an inconsistent mix of spaces and tabs existed,
92 which made extending these functions using
93 <filename>_append</filename> or <filename>_prepend</filename>
94 complicated given that Python treats whitespace as
95 syntactically significant.
96 If you are defining or extending any Python functions (e.g.
97 <filename>populate_packages</filename>, <filename>do_unpack</filename>,
98 <filename>do_patch</filename> and so forth) in custom recipes
99 or classes, you need to ensure you are using consistent
100 four-space indentation.
101 </para>
102 </section>
103
104 <section id='migration-1.3-proto=-in-src-uri'>
105 <title>proto= in SRC_URI</title>
106
107 <para>
108 Any use of <filename>proto=</filename> in
109 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
110 needs to be changed to <filename>protocol=</filename>.
111 In particular, this applies to the following URIs:
112 <itemizedlist>
113 <listitem><para><filename>svn://</filename></para></listitem>
114 <listitem><para><filename>bzr://</filename></para></listitem>
115 <listitem><para><filename>hg://</filename></para></listitem>
116 <listitem><para><filename>osc://</filename></para></listitem>
117 </itemizedlist>
118 Other URIs were already using <filename>protocol=</filename>.
119 This change improves consistency.
120 </para>
121 </section>
122
123 <section id='migration-1.3-nativesdk'>
124 <title>nativesdk</title>
125
126 <para>
127 The suffix <filename>nativesdk</filename> is now implemented
128 as a prefix, which simplifies a lot of the packaging code for
129 <filename>nativesdk</filename> recipes.
130 All custom <filename>nativesdk</filename> recipes and any
131 references need to be updated to use
132 <filename>nativesdk-*</filename> instead of
133 <filename>*-nativesdk</filename>.
134 </para>
135 </section>
136
137 <section id='migration-1.3-task-recipes'>
138 <title>Task Recipes</title>
139
140 <para>
141 "Task" recipes are now known as "Package groups" and have
142 been renamed from <filename>task-*.bb</filename> to
143 <filename>packagegroup-*.bb</filename>.
144 Existing references to the previous <filename>task-*</filename>
145 names should work in most cases as there is an automatic
146 upgrade path for most packages.
147 However, you should update references in your own recipes and
148 configurations as they could be removed in future releases.
149 You should also rename any custom <filename>task-*</filename>
150 recipes to <filename>packagegroup-*</filename>, and change
151 them to inherit <filename>packagegroup</filename> instead of
152 <filename>task</filename>, as well as taking the opportunity
153 to remove anything now handled by
154 <filename>packagegroup.bbclass</filename>, such as providing
155 <filename>-dev</filename> and <filename>-dbg</filename>
156 packages, setting
157 <link linkend='var-LIC_FILES_CHKSUM'><filename>LIC_FILES_CHKSUM</filename></link>,
158 and so forth.
159 See the
160 "<link linkend='ref-classes-packagegroup'><filename>packagegroup.bbclass</filename></link>"
161 section for further details.
162 </para>
163 </section>
164
165 <section id='migration-1.3-image-features'>
166 <title>IMAGE_FEATURES</title>
167
168 <para>
169 Image recipes that previously included "apps-console-core"
170 in <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
171 should now include "splash" instead to enable the boot-up
172 splash screen.
173 Retaining "apps-console-core" will still include the splash
174 screen but generates a warning.
175 The "apps-x11-core" and "apps-x11-games"
176 <filename>IMAGE_FEATURES</filename> features have been removed.
177 </para>
178 </section>
179
180 <section id='migration-1.3-removed-recipes'>
181 <title>Removed Recipes</title>
182
183 <para>
184 The following recipes have been removed.
185 For most of them, it is unlikely that you would have any
186 references to them in your own
187 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>.
188 However, you should check your metadata against this list to be sure:
189 <itemizedlist>
190 <listitem><para><emphasis><filename>libx11-trim</filename></emphasis>:
191 Replaced by <filename>libx11</filename>, which has a negligible
192 size difference with modern Xorg.</para></listitem>
193 <listitem><para><emphasis><filename>xserver-xorg-lite</filename></emphasis>:
194 Use <filename>xserver-xorg</filename>, which has a negligible
195 size difference when DRI and GLX modules are not installed.</para></listitem>
196 <listitem><para><emphasis><filename>xserver-kdrive</filename></emphasis>:
197 Effectively unmaintained for many years.</para></listitem>
198 <listitem><para><emphasis><filename>mesa-xlib</filename></emphasis>:
199 No longer serves any purpose.</para></listitem>
200 <listitem><para><emphasis><filename>galago</filename></emphasis>:
201 Replaced by telepathy.</para></listitem>
202 <listitem><para><emphasis><filename>gail</filename></emphasis>:
203 Functionality was integrated into GTK+ 2.13.</para></listitem>
204 <listitem><para><emphasis><filename>eggdbus</filename></emphasis>:
205 No longer needed.</para></listitem>
206 <listitem><para><emphasis><filename>gcc-*-intermediate</filename></emphasis>:
207 The build has been restructured to avoid the need for
208 this step.</para></listitem>
209 <listitem><para><emphasis><filename>libgsmd</filename></emphasis>:
210 Unmaintained for many years.
211 Functionality now provided by
212 <filename>ofono</filename> instead.</para></listitem>
213 <listitem><para><emphasis>contacts, dates, tasks, eds-tools</emphasis>:
214 Largely unmaintained PIM application suite.
215 It has been moved to <filename>meta-gnome</filename>
216 in <filename>meta-openembedded</filename>.</para></listitem>
217 </itemizedlist>
218 In addition to the previously listed changes, the
219 <filename>meta-demoapps</filename> directory has also been removed
220 because the recipes in it were not being maintained and many
221 had become obsolete or broken.
222 Additionally, these recipes were not parsed in the default configuration.
223 Many of these recipes are already provided in an updated and
224 maintained form within the OpenEmbedded community layers such as
225 <filename>meta-oe</filename> and <filename>meta-gnome</filename>.
226 For the remainder, you can now find them in the
227 <filename>meta-extras</filename> repository, which is in the
228 Yocto Project
229 <ulink url='&YOCTO_DOCS_DEV_URL;#source-repositories'>Source Repositories</ulink>.
230 </para>
231 </section>
232 </section>
233
234 <section id='1.3-linux-kernel-naming'>
235 <title>Linux Kernel Naming</title>
236
237 <para>
238 The naming scheme for kernel output binaries has been changed to
239 now include
240 <link linkend='var-PE'><filename>PE</filename></link> as part of the
241 filename:
242 <literallayout class='monospaced'>
243 KERNEL_IMAGE_BASE_NAME ?= "${KERNEL_IMAGETYPE}-${PE}-${PV}-${PR}-${MACHINE}-${DATETIME}"
244 </literallayout>
245 </para>
246
247 <para>
248 Because the <filename>PE</filename> variable is not set by default,
249 these binary files could result with names that include two dash
250 characters.
251 Here is an example:
252 <literallayout class='monospaced'>
253 bzImage--3.10.9+git0+cd502a8814_7144bcc4b8-r0-qemux86-64-20130830085431.bin
254 </literallayout>
255 </para>
256 </section>
257</section>
258
259<section id='moving-to-the-yocto-project-1.4-release'>
260 <title>Moving to the Yocto Project 1.4 Release</title>
261
262 <para>
263 This section provides migration information for moving to the
264 Yocto Project 1.4 Release from the prior release.
265 </para>
266
267 <section id='migration-1.4-bitbake'>
268 <title>BitBake</title>
269
270 <para>
271 Differences include the following:
272 <itemizedlist>
273 <listitem><para><emphasis>Comment Continuation:</emphasis>
274 If a comment ends with a line continuation (\) character,
275 then the next line must also be a comment.
276 Any instance where this is not the case, now triggers
277 a warning.
278 You must either remove the continuation character, or be
279 sure the next line is a comment.
280 </para></listitem>
281 <listitem><para><emphasis>Package Name Overrides:</emphasis>
282 The runtime package specific variables
283 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>,
284 <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>,
285 <link linkend='var-RSUGGESTS'><filename>RSUGGESTS</filename></link>,
286 <link linkend='var-RPROVIDES'><filename>RPROVIDES</filename></link>,
287 <link linkend='var-RCONFLICTS'><filename>RCONFLICTS</filename></link>,
288 <link linkend='var-RREPLACES'><filename>RREPLACES</filename></link>,
289 <link linkend='var-FILES'><filename>FILES</filename></link>,
290 <link linkend='var-ALLOW_EMPTY'><filename>ALLOW_EMPTY</filename></link>,
291 and the pre, post, install, and uninstall script functions
292 <filename>pkg_preinst</filename>,
293 <filename>pkg_postinst</filename>,
294 <filename>pkg_prerm</filename>, and
295 <filename>pkg_postrm</filename> should always have a
296 package name override.
297 For example, use <filename>RDEPENDS_${PN}</filename> for
298 the main package instead of <filename>RDEPENDS</filename>.
299 BitBake uses more strict checks when it parses recipes.
300 </para></listitem>
301 </itemizedlist>
302 </para>
303 </section>
304
305 <section id='migration-1.4-build-behavior'>
306 <title>Build Behavior</title>
307
308 <para>
309 Differences include the following:
310 <itemizedlist>
311 <listitem><para><emphasis>Shared State Code:</emphasis>
312 The shared state code has been optimized to avoid running
313 unnecessary tasks.
314 For example,
315 <filename>bitbake -c rootfs some-image</filename> from
316 shared state no longer populates the target sysroot
317 since that is not necessary.
318 Instead, the system just needs to extract the output
319 package contents, re-create the packages, and construct
320 the root filesystem.
321 This change is unlikely to cause any problems unless
322 you have missing declared dependencies.
323 </para></listitem>
324 <listitem><para><emphasis>Scanning Directory Names:</emphasis>
325 When scanning for files in
326 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>,
327 the build system now uses
328 <link linkend='var-FILESOVERRIDES'><filename>FILESOVERRIDES</filename></link>
329 instead of <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>
330 for the directory names.
331 In general, the values previously in
332 <filename>OVERRIDES</filename> are now in
333 <filename>FILESOVERRIDES</filename> as well.
334 However, if you relied upon an additional value
335 you previously added to <filename>OVERRIDES</filename>,
336 you might now need to add it to
337 <filename>FILESOVERRIDES</filename> unless you are already
338 adding it through the
339 <link linkend='var-MACHINEOVERRIDES'><filename>MACHINEOVERRIDES</filename></link>
340 or <link linkend='var-DISTROOVERRIDES'><filename>DISTROOVERRIDES</filename></link>
341 variables, as appropriate.
342 For more related changes, see the
343 "<link linkend='migration-1.4-variables'>Variables</link>"
344 section.
345 </para></listitem>
346 </itemizedlist>
347 </para>
348 </section>
349
350
351 <section id='migration-1.4-proxies-and-fetching-source'>
352 <title>Proxies and Fetching Source</title>
353
354 <para>
355 A new <filename>oe-git-proxy</filename> script has been added to
356 replace previous methods of handling proxies and fetching source
357 from Git.
358 See the <filename>meta-yocto/conf/site.conf.sample</filename> file
359 for information on how to use this script.
360 </para>
361 </section>
362
363 <section id='migration-1.4-custom-interfaces-file-netbase-change'>
364 <title>Custom Interfaces File (netbase change)</title>
365
366 <para>
367 If you have created your own custom
368 <filename>etc/network/interfaces</filename> file by creating
369 an append file for the <filename>netbase</filename> recipe,
370 you now need to create an append file for the
371 <filename>init-ifupdown</filename> recipe instead, which you can
372 find in the
373 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
374 at <filename>meta/recipes-core/init-ifupdown</filename>.
375 For information on how to use append files, see the
376 "<ulink url='&YOCTO_DOCS_DEV_URL;#using-bbappend-files'>Using .bbappend Files</ulink>"
377 in the Yocto Project Development Manual.
378 </para>
379 </section>
380
381 <section id='migration-1.4-remote-debugging'>
382 <title>Remote Debugging</title>
383
384 <para>
385 Support for remote debugging with the Eclipse IDE is now
386 separated into an image feature
387 (<filename>eclipse-debug</filename>) that corresponds to the
388 <filename>packagegroup-core-eclipse-debug</filename> package group.
389 Previously, the debugging feature was included through the
390 <filename>tools-debug</filename> image feature, which corresponds
391 to the <filename>packagegroup-core-tools-debug</filename>
392 package group.
393 </para>
394 </section>
395
396 <section id='migration-1.4-variables'>
397 <title>Variables</title>
398
399 <para>
400 The following variables have changed:
401 <itemizedlist>
402 <listitem><para><emphasis><filename>SANITY_TESTED_DISTROS</filename>:</emphasis>
403 This variable now uses a distribution ID, which is composed
404 of the host distributor ID followed by the release.
405 Previously,
406 <link linkend='var-SANITY_TESTED_DISTROS'><filename>SANITY_TESTED_DISTROS</filename></link>
407 was composed of the description field.
408 For example, "Ubuntu 12.10" becomes "Ubuntu-12.10".
409 You do not need to worry about this change if you are not
410 specifically setting this variable, or if you are
411 specifically setting it to "".
412 </para></listitem>
413 <listitem><para><emphasis><filename>SRC_URI</filename>:</emphasis>
414 The <filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}</filename>,
415 <filename>${</filename><link linkend='var-PF'><filename>PF</filename></link><filename>}</filename>,
416 <filename>${</filename><link linkend='var-P'><filename>P</filename></link><filename>}</filename>,
417 and <filename>FILE_DIRNAME</filename> directories have been
418 dropped from the default value of the
419 <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>
420 variable, which is used as the search path for finding files
421 referred to in
422 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>.
423 If you have a recipe that relied upon these directories,
424 which would be unusual, then you will need to add the
425 appropriate paths within the recipe or, alternatively,
426 rearrange the files.
427 The most common locations are still covered by
428 <filename>${BP}</filename>, <filename>${BPN}</filename>,
429 and "files", which all remain in the default value of
430 <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>.
431 </para></listitem>
432 </itemizedlist>
433 </para>
434 </section>
435
436 <section id='migration-target-package-management-with-rpm'>
437 <title>Target Package Management with RPM</title>
438
439 <para>
440 If runtime package management is enabled and the RPM backend
441 is selected, Smart is now installed for package download, dependency
442 resolution, and upgrades instead of Zypper.
443 For more information on how to use Smart, run the following command
444 on the target:
445 <literallayout class='monospaced'>
446 smart --help
447 </literallayout>
448 </para>
449 </section>
450
451 <section id='migration-1.4-recipes-moved'>
452 <title>Recipes Moved</title>
453
454 <para>
455 The following recipes were moved from their previous locations
456 because they are no longer used by anything in
457 the OpenEmbedded-Core:
458 <itemizedlist>
459 <listitem><para><emphasis><filename>clutter-box2d</filename>:</emphasis>
460 Now resides in the <filename>meta-oe</filename> layer.
461 </para></listitem>
462 <listitem><para><emphasis><filename>evolution-data-server</filename>:</emphasis>
463 Now resides in the <filename>meta-gnome</filename> layer.
464 </para></listitem>
465 <listitem><para><emphasis><filename>gthumb</filename>:</emphasis>
466 Now resides in the <filename>meta-gnome</filename> layer.
467 </para></listitem>
468 <listitem><para><emphasis><filename>gtkhtml2</filename>:</emphasis>
469 Now resides in the <filename>meta-oe</filename> layer.
470 </para></listitem>
471 <listitem><para><emphasis><filename>gupnp</filename>:</emphasis>
472 Now resides in the <filename>meta-multimedia</filename> layer.
473 </para></listitem>
474 <listitem><para><emphasis><filename>gypsy</filename>:</emphasis>
475 Now resides in the <filename>meta-oe</filename> layer.
476 </para></listitem>
477 <listitem><para><emphasis><filename>libcanberra</filename>:</emphasis>
478 Now resides in the <filename>meta-gnome</filename> layer.
479 </para></listitem>
480 <listitem><para><emphasis><filename>libgdata</filename>:</emphasis>
481 Now resides in the <filename>meta-gnome</filename> layer.
482 </para></listitem>
483 <listitem><para><emphasis><filename>libmusicbrainz</filename>:</emphasis>
484 Now resides in the <filename>meta-multimedia</filename> layer.
485 </para></listitem>
486 <listitem><para><emphasis><filename>metacity</filename>:</emphasis>
487 Now resides in the <filename>meta-gnome</filename> layer.
488 </para></listitem>
489 <listitem><para><emphasis><filename>polkit</filename>:</emphasis>
490 Now resides in the <filename>meta-oe</filename> layer.
491 </para></listitem>
492 <listitem><para><emphasis><filename>zeroconf</filename>:</emphasis>
493 Now resides in the <filename>meta-networking</filename> layer.
494 </para></listitem>
495 </itemizedlist>
496 </para>
497 </section>
498
499 <section id='migration-1.4-removals-and-renames'>
500 <title>Removals and Renames</title>
501
502 <para>
503 The following list shows what has been removed or renamed:
504 <itemizedlist>
505 <listitem><para><emphasis><filename>evieext</filename>:</emphasis>
506 Removed because it has been removed from
507 <filename>xserver</filename> since 2008.
508 </para></listitem>
509 <listitem><para><emphasis>Gtk+ DirectFB:</emphasis>
510 Removed support because upstream Gtk+ no longer supports it
511 as of version 2.18.
512 </para></listitem>
513 <listitem><para><emphasis><filename>libxfontcache / xfontcacheproto</filename>:</emphasis>
514 Removed because they were removed from the Xorg server in 2008.
515 </para></listitem>
516 <listitem><para><emphasis><filename>libxp / libxprintapputil / libxprintutil / printproto</filename>:</emphasis>
517 Removed because the XPrint server was removed from
518 Xorg in 2008.
519 </para></listitem>
520 <listitem><para><emphasis><filename>libxtrap / xtrapproto</filename>:</emphasis>
521 Removed because their functionality was broken upstream.
522 </para></listitem>
523 <listitem><para><emphasis>linux-yocto 3.0 kernel:</emphasis>
524 Removed with linux-yocto 3.8 kernel being added.
525 The linux-yocto 3.2 and linux-yocto 3.4 kernels remain
526 as part of the release.
527 </para></listitem>
528 <listitem><para><emphasis><filename>lsbsetup</filename>:</emphasis>
529 Removed with functionality now provided by
530 <filename>lsbtest</filename>.
531 </para></listitem>
532 <listitem><para><emphasis><filename>matchbox-stroke</filename>:</emphasis>
533 Removed because it was never more than a proof-of-concept.
534 </para></listitem>
535 <listitem><para><emphasis><filename>matchbox-wm-2 / matchbox-theme-sato-2</filename>:</emphasis>
536 Removed because they are not maintained.
537 However, <filename>matchbox-wm</filename> and
538 <filename>matchbox-theme-sato</filename> are still
539 provided.
540 </para></listitem>
541 <listitem><para><emphasis><filename>mesa-dri</filename>:</emphasis>
542 Renamed to <filename>mesa</filename>.
543 </para></listitem>
544 <listitem><para><emphasis><filename>mesa-xlib</filename>:</emphasis>
545 Removed because it was no longer useful.
546 </para></listitem>
547 <listitem><para><emphasis><filename>mutter</filename>:</emphasis>
548 Removed because nothing ever uses it and the recipe is
549 very old.
550 </para></listitem>
551 <listitem><para><emphasis><filename>orinoco-conf</filename>:</emphasis>
552 Removed because it has become obsolete.
553 </para></listitem>
554 <listitem><para><emphasis><filename>update-modules</filename>:</emphasis>
555 Removed because it is no longer used.
556 The kernel module <filename>postinstall</filename> and
557 <filename>postrm</filename> scripts can now do the same
558 task without the use of this script.
559 </para></listitem>
560 <listitem><para><emphasis><filename>web</filename>:</emphasis>
561 Removed because it is not maintained. Superseded by
562 <filename>web-webkit</filename>.
563 </para></listitem>
564 <listitem><para><emphasis><filename>xf86bigfontproto</filename>:</emphasis>
565 Removed because upstream it has been disabled by default
566 since 2007.
567 Nothing uses <filename>xf86bigfontproto</filename>.
568 </para></listitem>
569 <listitem><para><emphasis><filename>xf86rushproto</filename>:</emphasis>
570 Removed because its dependency in
571 <filename>xserver</filename> was spurious and it was
572 removed in 2005.
573 </para></listitem>
574 <listitem><para><emphasis><filename>zypper / libzypp / sat-solver</filename>:</emphasis>
575 Removed and been functionally replaced with Smart
576 (<filename>python-smartpm</filename>) when RPM packaging
577 is used and package management is enabled on the target.
578 </para></listitem>
579 </itemizedlist>
580 </para>
581 </section>
582</section>
583
584<section id='moving-to-the-yocto-project-1.5-release'>
585 <title>Moving to the Yocto Project 1.5 Release</title>
586
587 <para>
588 This section provides migration information for moving to the
589 Yocto Project 1.5 Release from the prior release.
590 </para>
591
592 <section id='migration-1.5-host-dependency-changes'>
593 <title>Host Dependency Changes</title>
594
595 <para>
596 The OpenEmbedded build system now has some additional requirements
597 on the host system:
598 <itemizedlist>
599 <listitem><para>Python 2.7.3+</para></listitem>
600 <listitem><para>Tar 1.24+</para></listitem>
601 <listitem><para>Git 1.7.5+</para></listitem>
602 <listitem><para>Patched version of Make if you are using
603 3.82.
604 Most distributions that provide Make 3.82 use the patched
605 version.</para></listitem>
606 </itemizedlist>
607 If the Linux distribution you are using on your build host
608 does not provide packages for these, you can install and use
609 the Buildtools tarball, which provides an SDK-like environment
610 containing them.
611 </para>
612
613 <para>
614 For more information on this requirement, see the
615 "<link linkend='required-git-tar-and-python-versions'>Required Git, tar, and Python Versions</link>"
616 section.
617 </para>
618 </section>
619
620 <section id='migration-1.5-atom-pc-bsp'>
621 <title><filename>atom-pc</filename> Board Support Package (BSP)</title>
622
623 <para>
624 The <filename>atom-pc</filename> hardware reference BSP has been
625 replaced by a <filename>genericx86</filename> BSP.
626 This BSP is not necessarily guaranteed to work on all x86
627 hardware, but it will run on a wider range of systems than the
628 <filename>atom-pc</filename> did.
629 <note>
630 Additionally, a <filename>genericx86-64</filename> BSP has been
631 added for 64-bit systems.
632 </note>
633 </para>
634 </section>
635
636 <section id='migration-1.5-bitbake'>
637 <title>BitBake</title>
638
639 <para>
640 The following changes have been made that relate to BitBake:
641 <itemizedlist>
642 <listitem><para>
643 BitBake now supports a <filename>_remove</filename>
644 operator.
645 The addition of this operator means you will have to
646 rename any items in recipe space (functions, variables)
647 whose names currently contain
648 <filename>_remove_</filename> or end with
649 <filename>_remove</filename> to avoid unexpected behavior.
650 </para></listitem>
651 <listitem><para>
652 BitBake's global method pool has been removed.
653 This method is not particularly useful and led to clashes
654 between recipes containing functions that had the
655 same name.</para></listitem>
656 <listitem><para>
657 The "none" server backend has been removed.
658 The "process" server backend has been serving well as the
659 default for a long time now.</para></listitem>
660 <listitem><para>
661 The <filename>bitbake-runtask</filename> script has been
662 removed.</para></listitem>
663 <listitem><para>
664 <filename>${</filename><link linkend='var-P'><filename>P</filename></link><filename>}</filename>
665 and
666 <filename>${</filename><link linkend='var-PF'><filename>PF</filename></link><filename>}</filename>
667 are no longer added to
668 <link linkend='var-PROVIDES'><filename>PROVIDES</filename></link>
669 by default in <filename>bitbake.conf</filename>.
670 These version-specific <filename>PROVIDES</filename>
671 items were seldom used.
672 Attempting to use them could result in two versions being
673 built simultaneously rather than just one version due to
674 the way BitBake resolves dependencies.</para></listitem>
675 </itemizedlist>
676 </para>
677 </section>
678
679 <section id='migration-1.5-qa-warnings'>
680 <title>QA Warnings</title>
681
682 <para>
683 The following changes have been made to the package QA checks:
684 <itemizedlist>
685 <listitem><para>
686 If you have customized
687 <link linkend='var-ERROR_QA'><filename>ERROR_QA</filename></link>
688 or <link linkend='var-WARN_QA'><filename>WARN_QA</filename></link>
689 values in your configuration, check that they contain all of
690 the issues that you wish to be reported.
691 Previous Yocto Project versions contained a bug that meant
692 that any item not mentioned in <filename>ERROR_QA</filename>
693 or <filename>WARN_QA</filename> would be treated as a
694 warning.
695 Consequently, several important items were not already in
696 the default value of <filename>WARN_QA</filename>.
697 All of the possible QA checks are now documented in the
698 "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
699 section.</para></listitem>
700 <listitem><para>
701 An additional QA check has been added to check if
702 <filename>/usr/share/info/dir</filename> is being installed.
703 Your recipe should delete this file within
704 <filename>do_install</filename> if "make install" is
705 installing it.</para></listitem>
706 <listitem><para>
707 If you are using the buildhistory class, the check for the
708 package version going backwards is now controlled using a
709 standard QA check.
710 Thus, if you have customized your
711 <filename>ERROR_QA</filename> or
712 <filename>WARN_QA</filename> values and still wish to have
713 this check performed, you should add
714 "version-going-backwards" to your value for one or the
715 other variables depending on how you wish it to be handled.
716 See the documented QA checks in the
717 "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
718 section.
719 </para></listitem>
720 </itemizedlist>
721 </para>
722 </section>
723
724 <section id='migration-1.5-directory-layout-changes'>
725 <title>Directory Layout Changes</title>
726
727 <para>
728 The following directory changes exist:
729 <itemizedlist>
730 <listitem><para>
731 Output SDK installer files are now named to include the
732 image name and tuning architecture through the
733 <link linkend='var-SDK_NAME'><filename>SDK_NAME</filename></link>
734 variable.</para></listitem>
735 <listitem><para>
736 Images and related files are now installed into a directory
737 that is specific to the machine, instead of a parent
738 directory containing output files for multiple machines.
739 The
740 <link linkend='var-DEPLOY_DIR_IMAGE'><filename>DEPLOY_DIR_IMAGE</filename></link>
741 variable continues to point to the directory containing
742 images for the current
743 <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
744 and should be used anywhere there is a need to refer to
745 this directory.
746 The <filename>runqemu</filename> script now uses this
747 variable to find images and kernel binaries and will use
748 BitBake to determine the directory.
749 Alternatively, you can set the
750 <filename>DEPLOY_DIR_IMAGE</filename> variable in the
751 external environment.</para></listitem>
752 <listitem><para>
753 When buildhistory is enabled, its output is now written
754 under the
755 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
756 rather than
757 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>.
758 Doing so makes it easier to delete
759 <filename>TMPDIR</filename> and preserve the build history.
760 Additionally, data for produced SDKs is now split by
761 <link linkend='var-IMAGE_NAME'><filename>IMAGE_NAME</filename></link>.
762 </para></listitem>
763 <listitem><para>
764 The <filename>pkgdata</filename> directory produced as
765 part of the packaging process has been collapsed into a
766 single machine-specific directory.
767 This directory is located under
768 <filename>sysroots</filename> and uses a machine-specific
769 name (i.e.
770 <filename>tmp/sysroots/&lt;machine&gt;/pkgdata</filename>).
771 </para></listitem>
772 </itemizedlist>
773 </para>
774 </section>
775
776 <section id='migration-1.5-shortened-git-srcrev-values'>
777 <title>Shortened Git <filename>SRCREV</filename> Values</title>
778
779 <para>
780 BitBake will now shorten revisions from Git repositories from the
781 normal 40 characters down to 10 characters within
782 <link linkend='var-SRCPV'><filename>SRCPV</filename></link>
783 for improved usability in path and file names.
784 This change should be safe within contexts where these revisions
785 are used because the chances of spatially close collisions
786 is very low.
787 Distant collisions are not a major issue in the way
788 the values are used.
789 </para>
790 </section>
791
792 <section id='migration-1.5-image-features'>
793 <title><filename>IMAGE_FEATURES</filename></title>
794
795 <para>
796 The following changes have been made that relate to
797 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>:
798 <itemizedlist>
799 <listitem><para>
800 The value of
801 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
802 is now validated to ensure invalid feature items are not
803 added.
804 Some users mistakenly add package names to this variable
805 instead of using
806 <link linkend='var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></link>
807 in order to have the package added to the image, which does
808 not work.
809 This change is intended to catch those kinds of situations.
810 Valid <filename>IMAGE_FEATURES</filename> are drawn from
811 <link linkend='var-PACKAGE_GROUP'><filename>PACKAGE_GROUP</filename></link>
812 definitions,
813 <link linkend='var-COMPLEMENTARY_GLOB'><filename>COMPLEMENTARY_GLOB</filename></link>
814 and a new "validitems" varflag on
815 <filename>IMAGE_FEATURES</filename>.
816 The "validitems" varflag change allows additional features
817 to be added if they are not provided using the previous
818 two mechanisms.
819 </para></listitem>
820 <listitem><para>
821 The previously deprecated "apps-console-core"
822 <filename>IMAGE_FEATURES</filename> item is no longer
823 supported.
824 Add "splash" to <filename>IMAGE_FEATURES</filename> if you
825 wish to have the splash screen enabled, since this is
826 all that apps-console-core was doing.</para></listitem>
827 </itemizedlist>
828 </para>
829 </section>
830
831 <section id='migration-1.5-run'>
832 <title><filename>/run</filename></title>
833
834 <para>
835 The <filename>/run</filename> directory from the Filesystem
836 Hierarchy Standard 3.0 has been introduced.
837 You can find some of the implications for this change
838 <ulink url='http://cgit.openembedded.org/openembedded-core/commit/?id=0e326280a15b0f2c4ef2ef4ec441f63f55b75873'>here</ulink>.
839 The change also means that recipes that install files to
840 <filename>/var/run</filename> must be changed.
841 You can find a guide on how to make these changes
842 <ulink url='http://permalink.gmane.org/gmane.comp.handhelds.openembedded/58530'>here</ulink>.
843 </para>
844 </section>
845
846 <section id='migration-1.5-removal-of-package-manager-database-within-image-recipes'>
847 <title>Removal of Package Manager Database Within Image Recipes</title>
848
849 <para>
850 The image <filename>core-image-minimal</filename> no longer adds
851 <filename>remove_packaging_data_files</filename> to
852 <link linkend='var-ROOTFS_POSTPROCESS_COMMAND'><filename>ROOTFS_POSTPROCESS_COMMAND</filename></link>.
853 This addition is now handled automatically when "package-management"
854 is not in
855 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>.
856 If you have custom image recipes that make this addition,
857 you should remove the lines, as they are not needed and might
858 interfere with correct operation of postinstall scripts.
859 </para>
860 </section>
861
862 <section id='migration-1.5-images-now-rebuild-only-on-changes-instead-of-every-time'>
863 <title>Images Now Rebuild Only on Changes Instead of Every Time</title>
864
865 <para>
866 The <filename>do_rootfs</filename> and other related image
867 construction tasks are no longer marked as "nostamp".
868 Consequently, they will only be re-executed when their inputs have
869 changed.
870 Previous versions of the OpenEmbedded build system always rebuilt
871 the image when requested rather when necessary.
872 </para>
873 </section>
874
875 <section id='migration-1.5-task-recipes'>
876 <title>Task Recipes</title>
877
878 <para>
879 The previously deprecated <filename>task.bbclass</filename> has
880 now been dropped.
881 For recipes that previously inherited from this class, you should
882 rename them from <filename>task-*</filename> to
883 <filename>packagegroup-*</filename> and inherit packagegroup
884 instead.
885 </para>
886
887 <para>
888 For more information, see the
889 "<link linkend='ref-classes-packagegroup'><filename>packagegroup.bbclass</filename></link>"
890 section.
891 </para>
892 </section>
893
894 <section id='migration-1.5-busybox'>
895 <title>BusyBox</title>
896
897 <para>
898 By default, we now split BusyBox into two binaries:
899 one that is suid root for those components that need it, and
900 another for the rest of the components.
901 Splitting BusyBox allows for optimization that eliminates the
902 <filename>tinylogin</filename> recipe as recommended by upstream.
903 You can disable this split by setting
904 <link linkend='var-BUSYBOX_SPLIT_SUID'><filename>BUSYBOX_SPLIT_SUID</filename></link>
905 to "0".
906 </para>
907 </section>
908
909 <section id='migration-1.5-automated-image-testing'>
910 <title>Automated Image Testing</title>
911
912 <para>
913 A new automated image testing framework has been added
914 through the
915 <link linkend='ref-classes-testimage'><filename>testimage*.bbclass</filename></link>
916 class.
917 This framework replaces the older
918 <filename>imagetest-qemu</filename> framework.
919 </para>
920
921 <para>
922 You can learn more about performing automated image tests in the
923 "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
924 section.
925 </para>
926 </section>
927
928 <section id='migration-1.5-build-history'>
929 <title>Build History</title>
930
931 <para>
932 Following are changes to Build History:
933 <itemizedlist>
934 <listitem><para>
935 Installed package sizes:
936 <filename>installed-package-sizes.txt</filename> for an
937 image now records the size of the files installed by each
938 package instead of the size of each compressed package
939 archive file.</para></listitem>
940 <listitem><para>
941 The dependency graphs (<filename>depends*.dot</filename>)
942 now use the actual package names instead of replacing
943 dashes, dots and plus signs with underscores.
944 </para></listitem>
945 <listitem><para>
946 The <filename>buildhistory-diff</filename> and
947 <filename>buildhistory-collect-srcrevs</filename>
948 utilities have improved command-line handling.
949 Use the <filename>&dash;&dash;help</filename> option for
950 each utility for more information on the new syntax.
951 </para></listitem>
952 </itemizedlist>
953 For more information on Build History, see the
954 "<link linkend='maintaining-build-output-quality'>Maintaining Build Output Quality</link>"
955 section.
956 </para>
957 </section>
958
959 <section id='migration-1.5-udev'>
960 <title><filename>udev</filename></title>
961
962 <para>
963 Following are changes to <filename>udev</filename>:
964 <itemizedlist>
965 <listitem><para>
966 <filename>udev</filename> no longer brings in
967 <filename>udev-extraconf</filename> automatically
968 through
969 <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>,
970 since this was originally intended to be optional.
971 If you need the extra rules, then add
972 <filename>udev-extraconf</filename> to your image.
973 </para></listitem>
974 <listitem><para>
975 <filename>udev</filename> no longer brings in
976 <filename>pciutils-ids</filename> or
977 <filename>usbutils-ids</filename> through
978 <filename>RRECOMMENDS</filename>.
979 These are not needed by <filename>udev</filename> itself
980 and removing them saves around 350KB.
981 </para></listitem>
982 </itemizedlist>
983 </para>
984 </section>
985
986 <section id='migration-1.5-removed-renamed-recipes'>
987 <title>Removed and Renamed Recipes</title>
988
989 <itemizedlist>
990 <listitem><para>
991 The <filename>linux-yocto</filename> 3.2 kernel has been
992 removed.</para></listitem>
993 <listitem><para>
994 <filename>libtool-nativesdk</filename> has been renamed to
995 <filename>nativesdk-libtool</filename>.</para></listitem>
996 <listitem><para>
997 <filename>tinylogin</filename> has been removed.
998 It has been replaced by a suid portion of Busybox.
999 See the
1000 "<link linkend='migration-1.5-busybox'>BusyBox</link>" section
1001 for more information.</para></listitem>
1002 <listitem><para>
1003 <filename>external-python-tarball</filename> has been renamed
1004 to <filename>buildtools-tarball</filename>.
1005 </para></listitem>
1006 <listitem><para>
1007 <filename>web-webkit</filename> has been removed.
1008 It has been functionally replaced by
1009 <filename>midori</filename>.</para></listitem>
1010 <listitem><para>
1011 <filename>imake</filename> has been removed.
1012 It is no longer needed by any other recipe.
1013 </para></listitem>
1014 <listitem><para>
1015 <filename>transfig-native</filename> has been removed.
1016 It is no longer needed by any other recipe.
1017 </para></listitem>
1018 <listitem><para>
1019 <filename>anjuta-remote-run</filename> has been removed.
1020 Anjuta IDE integration has not been officially supported for
1021 several releases.</para></listitem>
1022 </itemizedlist>
1023 </section>
1024
1025 <section id='migration-1.5-other-changes'>
1026 <title>Other Changes</title>
1027
1028 <para>
1029 Following is a list of short entries describing other changes:
1030 <itemizedlist>
1031 <listitem><para>
1032 <filename>run-postinsts</filename>: Make this generic.
1033 </para></listitem>
1034 <listitem><para>
1035 <filename>base-files</filename>: Remove the unnecessary
1036 <filename>media/xxx</filename> directories.
1037 </para></listitem>
1038 <listitem><para>
1039 <filename>alsa-state</filename>: Provide an empty
1040 <filename>asound.conf</filename> by default.
1041 </para></listitem>
1042 <listitem><para>
1043 <filename>classes/image</filename>: Ensure
1044 <link linkend='var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></link>
1045 supports pre-renamed package names.</para></listitem>
1046 <listitem><para>
1047 <filename>classes/rootfs_rpm</filename>: Implement
1048 <link linkend='var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></link>
1049 for RPM.</para></listitem>
1050 <listitem><para>
1051 <filename>systemd</filename>: Remove
1052 <filename>systemd_unitdir</filename> if
1053 <filename>systemd</filename> is not in
1054 <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.
1055 </para></listitem>
1056 <listitem><para>
1057 <filename>systemd</filename>: Remove
1058 <filename>init.d</filename> dir if
1059 <filename>systemd</filename> unit file is present and
1060 <filename>sysvinit</filename> is not a distro feature.
1061 </para></listitem>
1062 <listitem><para>
1063 <filename>libpam</filename>: Deny all services for the
1064 <filename>OTHER</filename> entries.
1065 </para></listitem>
1066 <listitem><para>
1067 <filename>image.bbclass</filename>: Move
1068 <filename>runtime_mapping_rename</filename> to avoid
1069 conflict with <filename>multilib</filename>.
1070 See
1071 <ulink url='https://bugzilla.yoctoproject.org/show_bug.cgi?id=4993'><filename>YOCTO #4993</filename></ulink>
1072 in Bugzilla for more information.
1073 </para></listitem>
1074 <listitem><para>
1075 <filename>linux-dtb</filename>: Use kernel build system
1076 to generate the <filename>dtb</filename> files.
1077 </para></listitem>
1078 <listitem><para>
1079 <filename>kern-tools</filename>: Switch from guilt to
1080 new <filename>kgit-s2q</filename> tool.
1081 </para></listitem>
1082 </itemizedlist>
1083 </para>
1084 </section>
1085</section>
1086
1087<section id='moving-to-the-yocto-project-1.6-release'>
1088 <title>Moving to the Yocto Project 1.6 Release</title>
1089
1090 <para>
1091 This section provides migration information for moving to the
1092 Yocto Project 1.6 Release from the prior release.
1093 </para>
1094
1095
1096 <section id='migration-1.6-archiver-class'>
1097 <title><filename>archiver</filename> Class</title>
1098
1099 <para>
1100 The
1101 <link linkend='ref-classes-archiver'><filename>archiver</filename></link>
1102 class has been rewritten and its configuration has been simplified.
1103 For more details on the source archiver, see the
1104 "<ulink url='&YOCTO_DOCS_DEV_URL;#maintaining-open-source-license-compliance-during-your-products-lifecycle'>Maintaining Open Source License Compliance During Your Product's Lifecycle</ulink>"
1105 section in the Yocto Project Development Manual.
1106 </para>
1107 </section>
1108
1109 <section id='migration-1.6-packaging-changes'>
1110 <title>Packaging Changes</title>
1111
1112 <para>
1113 The following packaging changes have been made:
1114 <itemizedlist>
1115 <listitem><para>
1116 The <filename>binutils</filename> recipe no longer produces
1117 a <filename>binutils-symlinks</filename> package.
1118 <filename>update-alternatives</filename> is now used to
1119 handle the preferred <filename>binutils</filename>
1120 variant on the target instead.
1121 </para></listitem>
1122 <listitem><para>
1123 The tc (traffic control) utilities have been split out of
1124 the main <filename>iproute2</filename> package and put
1125 into the <filename>iproute2-tc</filename> package.
1126 </para></listitem>
1127 <listitem><para>
1128 The <filename>gtk-engines</filename> schemas have been
1129 moved to a dedicated
1130 <filename>gtk-engines-schemas</filename> package.
1131 </para></listitem>
1132 <listitem><para>
1133 The <filename>armv7a</filename> with thumb package
1134 architecture suffix has changed.
1135 The suffix for these packages with the thumb
1136 optimization enabled is "t2" as it should be.
1137 Use of this suffix was not the case in the 1.5 release.
1138 Architecture names will change within package feeds as a
1139 result.
1140 </para></listitem>
1141 </itemizedlist>
1142 </para>
1143 </section>
1144
1145 <section id='migration-1.6-bitbake'>
1146 <title>BitBake</title>
1147
1148 <para>
1149 The following changes have been made to
1150 <ulink url='&YOCTO_DOCS_DEV_URL;#bitbake-term'>BitBake</ulink>.
1151 </para>
1152
1153 <section id='migration-1.6-matching-branch-requirement-for-git-fetching'>
1154 <title>Matching Branch Requirement for Git Fetching</title>
1155
1156 <para>
1157 When fetching source from a Git repository using
1158 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>,
1159 BitBake will now validate the
1160 <link linkend='var-SRCREV'><filename>SRCREV</filename></link>
1161 value against the branch.
1162 You can specify the branch using the following form:
1163 <literallayout class='monospaced'>
1164 SRC_URI = "git://server.name/repository;branch=&lt;branchname&gt;"
1165 </literallayout>
1166 If you do not specify a branch, BitBake looks
1167 in the default "master" branch.
1168 </para>
1169
1170 <para>
1171 Alternatively, if you need to bypass this check (e.g.
1172 if you are fetching a revision corresponding to a tag that
1173 is not on any branch), you can add ";nobranch=1" to
1174 the end of the URL within <filename>SRC_URI</filename>.
1175 </para>
1176 </section>
1177
1178 <section id='migration-1.6-bitbake-deps'>
1179 <title>Python Definition substitutions</title>
1180
1181 <para>
1182 BitBake had some previously deprecated Python definitions
1183 within its <filename>bb</filename> module removed.
1184 You should use their sub-module counterparts instead:
1185 <itemizedlist>
1186 <listitem><para><filename>bb.MalformedUrl</filename>:
1187 Use <filename>bb.fetch.MalformedUrl</filename>.
1188 </para></listitem>
1189 <listitem><para><filename>bb.fetch.encodeurl</filename>:
1190 Use <filename>bb.fetch.encodeurl</filename>.
1191 </para></listitem>
1192 <listitem><para><filename>bb.decodeurl</filename>:
1193 Use <filename>bb.fetch.decodeurl</filename>
1194 </para></listitem>
1195 <listitem><para><filename>bb.mkdirhier</filename>:
1196 Use <filename>bb.utils.mkdirhier</filename>.
1197 </para></listitem>
1198 <listitem><para><filename>bb.movefile</filename>:
1199 Use <filename>bb.utils.movefile</filename>.
1200 </para></listitem>
1201 <listitem><para><filename>bb.copyfile</filename>:
1202 Use <filename>bb.utils.copyfile</filename>.
1203 </para></listitem>
1204 <listitem><para><filename>bb.which</filename>:
1205 Use <filename>bb.utils.which</filename>.
1206 </para></listitem>
1207 <listitem><para><filename>bb.vercmp_string</filename>:
1208 Use <filename>bb.utils.vercmp_string</filename>.
1209 </para></listitem>
1210 <listitem><para><filename>bb.vercmp</filename>:
1211 Use <filename>bb.utils.vercmp</filename>.
1212 </para></listitem>
1213 </itemizedlist>
1214 </para>
1215 </section>
1216
1217 <section id='migration-1.6-bitbake-fetcher'>
1218 <title>SVK Fetcher</title>
1219
1220 <para>
1221 The SVK fetcher has been removed from BitBake.
1222 </para>
1223 </section>
1224
1225 <section id='migration-1.6-bitbake-console-output'>
1226 <title>Console Output Error Redirection</title>
1227
1228 <para>
1229 The BitBake console UI will now output errors to
1230 <filename>stderr</filename> instead of
1231 <filename>stdout</filename>.
1232 Consequently, if you are piping or redirecting the output of
1233 <filename>bitbake</filename> to somewhere else, and you wish
1234 to retain the errors, you will need to add
1235 <filename>2>&amp;1</filename> (or something similar) to the
1236 end of your <filename>bitbake</filename> command line.
1237 </para>
1238 </section>
1239
1240 <section id='migration-1.6-task-taskname-overrides'>
1241 <title><filename>task-&lt;taskname&gt;</filename> Overrides</title>
1242
1243 <para>
1244 <filename>task-&lt;taskname&gt;</filename> overrides have been
1245 adjusted so that tasks whose names contain underscores have the
1246 underscores replaced by hyphens for the override so that they
1247 now function properly.
1248 For example, the task override for
1249 <filename>do_populate_sdk</filename> is
1250 <filename>task-populate-sdk</filename>.
1251 </para>
1252 </section>
1253 </section>
1254
1255 <section id='migration-1.6-variable-changes'>
1256 <title>Changes to Variables</title>
1257
1258 <para>
1259 The following variables have changed.
1260 For information on the OpenEmbedded build system variables, see the
1261 "<link linkend='ref-variables-glos'>Variables Glossary</link>" Chapter.
1262 </para>
1263
1264 <section id='migration-1.6-variable-changes-TMPDIR'>
1265 <title><filename>TMPDIR</filename></title>
1266
1267 <para>
1268 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
1269 can no longer be on an NFS mount.
1270 NFS does not offer full POSIX locking and inode consistency
1271 and can cause unexpected issues if used to store
1272 <filename>TMPDIR</filename>.
1273 </para>
1274
1275 <para>
1276 The check for this occurs on startup.
1277 If <filename>TMPDIR</filename> is detected on an NFS mount,
1278 an error occurs.
1279 </para>
1280 </section>
1281
1282 <section id='migration-1.6-variable-changes-PRINC'>
1283 <title><filename>PRINC</filename></title>
1284
1285 <para>
1286 The
1287 <link linkend='var-PRINC'><filename>PRINC</filename></link>
1288 variable has been deprecated and triggers a warning if
1289 detected during a build.
1290 For
1291 <link linkend='var-PR'><filename>PR</filename></link>
1292 increments on changes, use the PR service instead.
1293 You can find out more about this service in the
1294 "<ulink url='&YOCTO_DOCS_DEV_URL;#working-with-a-pr-service'>Working With a PR Service</ulink>"
1295 section in the Yocto Project Development Manual.
1296 </para>
1297 </section>
1298
1299 <section id='migration-1.6-variable-changes-IMAGE_TYPES'>
1300 <title><filename>IMAGE_TYPES</filename></title>
1301
1302 <para>
1303 The "sum.jffs2" option for
1304 <link linkend='var-IMAGE_TYPES'><filename>IMAGE_TYPES</filename></link>
1305 has been replaced by the "jffs2.sum" option, which fits the
1306 processing order.
1307 </para>
1308 </section>
1309
1310 <section id='migration-1.6-variable-changes-COPY_LIC_MANIFEST'>
1311 <title><filename>COPY_LIC_MANIFEST</filename></title>
1312
1313 <para>
1314 The
1315 <link linkend='var-COPY_LIC_MANIFEST'><filename>COPY_LIC_MANIFEST</filename></link>
1316 variable must
1317 now be set to "1" rather than any value in order to enable
1318 it.
1319 </para>
1320 </section>
1321
1322 <section id='migration-1.6-variable-changes-COPY_LIC_DIRS'>
1323 <title><filename>COPY_LIC_DIRS</filename></title>
1324
1325 <para>
1326 The
1327 <link linkend='var-COPY_LIC_DIRS'><filename>COPY_LIC_DIRS</filename></link>
1328 variable must
1329 now be set to "1" rather than any value in order to enable
1330 it.
1331 </para>
1332 </section>
1333
1334 <section id='migration-1.6-variable-changes-PACKAGE_GROUP'>
1335 <title><filename>PACKAGE_GROUP</filename></title>
1336
1337 <para>
1338 The
1339 <link linkend='var-PACKAGE_GROUP'><filename>PACKAGE_GROUP</filename></link>
1340 variable has been renamed to
1341 <link linkend='var-FEATURE_PACKAGES'><filename>FEATURE_PACKAGES</filename></link>
1342 to more accurately reflect its purpose.
1343 You can still use <filename>PACKAGE_GROUP</filename> but
1344 the OpenEmbedded build system produces a warning message when
1345 it encounters the variable.
1346 </para>
1347 </section>
1348 </section>
1349
1350 <section id='migration-1.6-directory-layout-changes'>
1351 <title>Directory Layout Changes</title>
1352
1353 <para>
1354 The <filename>meta-hob</filename> layer has been removed from
1355 the top-level of the
1356 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
1357 The contents of this layer are no longer needed by the Hob
1358 user interface for building images and toolchains.
1359 </para>
1360 </section>
1361
1362 <section id='migration-1.6-build-changes'>
1363 <title>Build Changes</title>
1364
1365 <para>
1366 Separate build and source directories have been enabled
1367 by default for selected recipes where it is known to work
1368 (a whitelist) and for all recipes that inherit the
1369 <link linkend='ref-classes-cmake'><filename>cmake</filename></link>
1370 class.
1371 In future releases the
1372 <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
1373 class will enable a separate build directory by default as
1374 well.
1375 Recipes building Autotools-based
1376 software that fails to build with a separate build directory
1377 should be changed to inherit from the
1378 <link linkend='ref-classes-autotools-brokensep'><filename>autotools-brokensep</filename></link>
1379 class instead of the <filename>autotools</filename> class.
1380 </para>
1381 </section>
1382
1383 <section id='migration-1.6-building-qemu-native'>
1384 <title><filename>qemu-native</filename></title>
1385
1386 <para>
1387 <filename>qemu-native</filename> now builds without
1388 SDL-based graphical output support by default.
1389 The following additional lines are needed in your
1390 <filename>local.conf</filename> to enable it:
1391 <literallayout class='monospaced'>
1392 PACKAGECONFIG_pn-qemu-native = "sdl"
1393 ASSUME_PROVIDED += "libsdl-native"
1394 </literallayout>
1395 <note>
1396 The default <filename>local.conf</filename>
1397 contains these statements.
1398 Consequently, if you are building a headless system and using
1399 a default <filename>local.conf</filename> file, you will need
1400 comment these two lines out.
1401 </note>
1402 </para>
1403 </section>
1404
1405 <section id='migration-1.6-core-image-basic'>
1406 <title><filename>core-image-basic</filename></title>
1407
1408 <para>
1409 <filename>core-image-basic</filename> has been renamed to
1410 <filename>core-image-full-cmdline</filename>.
1411 </para>
1412
1413 <para>
1414 In addition to <filename>core-image-basic</filename> being renamed,
1415 <filename>packagegroup-core-basic</filename> has been renamed to
1416 <filename>packagegroup-core-full-cmdline</filename> to match.
1417 </para>
1418 </section>
1419
1420 <section id='migration-1.6-licensing'>
1421 <title>Licensing</title>
1422
1423 <para>
1424 The top-level <filename>LICENSE</filename> file has been changed
1425 to better describe the license of the various components of
1426 OE-Core.
1427 However, the licensing itself remains unchanged.
1428 </para>
1429
1430 <para>
1431 Normally, this change would not cause any side-effects.
1432 However, some recipes point to this file within
1433 <link linkend='var-LIC_FILES_CHKSUM'><filename>LIC_FILES_CHKSUM</filename></link>
1434 (as <filename>${COREBASE}/LICENSE</filename>) and thus the
1435 accompanying checksum must be changed from
1436 3f40d7994397109285ec7b81fdeb3b58 to
1437 4d92cd373abda3937c2bc47fbc49d690.
1438 A better alternative is to have
1439 <filename>LIC_FILES_CHKSUM</filename> point to a file
1440 describing the license that is distributed with the source
1441 that the recipe is building, if possible, rather than pointing
1442 to <filename>${COREBASE}/LICENSE</filename>.
1443 </para>
1444 </section>
1445
1446 <section id='migration-1.6-cflags-options'>
1447 <title><filename>CFLAGS</filename> Options</title>
1448
1449 <para>
1450 The "-fpermissive" option has been removed from the default
1451 <link linkend='var-CFLAGS'><filename>CFLAGS</filename></link>
1452 value.
1453 You need to take action on individual recipes that fail when
1454 building with this option.
1455 You need to either patch the recipes to fix the issues reported by
1456 the compiler, or you need to add "-fpermissive" to
1457 <filename>CFLAGS</filename> in the recipes.
1458 </para>
1459 </section>
1460
1461 <section id='migration-1.6-custom-images'>
1462 <title>Custom Image Output Types</title>
1463
1464 <para>
1465 Custom image output types, as selected using
1466 <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>,
1467 must declare their dependencies on other image types (if any) using
1468 a new
1469 <link linkend='var-IMAGE_TYPEDEP'><filename>IMAGE_TYPEDEP</filename></link>
1470 variable.
1471 </para>
1472 </section>
1473
1474 <section id='migration-1.6-do-package-write-task'>
1475 <title>Tasks</title>
1476
1477 <para>
1478 The <filename>do_package_write</filename> task has been removed.
1479 The task is no longer needed.
1480 </para>
1481 </section>
1482
1483 <section id='migration-1.6-update-alternatives-provider'>
1484 <title><filename>update-alternative</filename> Provider</title>
1485
1486 <para>
1487 The default <filename>update-alternatives</filename> provider has
1488 been changed from <filename>opkg</filename> to
1489 <filename>opkg-utils</filename>.
1490 This change resolves some troublesome circular dependencies.
1491 The runtime package has also been renamed from
1492 <filename>update-alternatives-cworth</filename>
1493 to <filename>update-alternatives-opkg</filename>.
1494 </para>
1495 </section>
1496
1497 <section id='migration-1.6-virtclass-overrides'>
1498 <title><filename>virtclass</filename> Overrides</title>
1499
1500 <para>
1501 The <filename>virtclass</filename> overrides are now deprecated.
1502 Use the equivalent class overrides instead (e.g.
1503 <filename>virtclass-native</filename> becomes
1504 <filename>class-native</filename>.)
1505 </para>
1506 </section>
1507
1508 <section id='migration-1.6-removed-renamed-recipes'>
1509 <title>Removed and Renamed Recipes</title>
1510
1511 <para>
1512 The following recipes have been removed:
1513 <itemizedlist>
1514 <listitem><para><filename>packagegroup-toolset-native</filename> -
1515 This recipe is largely unused.
1516 </para></listitem>
1517 <listitem><para><filename>linux-yocto-3.8</filename> -
1518 Support for the Linux yocto 3.8 kernel has been dropped.
1519 Support for the 3.10 and 3.14 kernels have been added
1520 with the <filename>linux-yocto-3.10</filename> and
1521 <filename>linux-yocto-3.14</filename> recipes.
1522 </para></listitem>
1523 <listitem><para><filename>ocf-linux</filename> -
1524 This recipe has been functionally replaced using
1525 <filename>cryptodev-linux</filename>.
1526 </para></listitem>
1527 <listitem><para><filename>genext2fs</filename> -
1528 <filename>genext2fs</filename> is no longer used by the
1529 build system and is unmaintained upstream.
1530 </para></listitem>
1531 <listitem><para><filename>js</filename> -
1532 This provided an ancient version of Mozilla's javascript
1533 engine that is no longer needed.
1534 </para></listitem>
1535 <listitem><para><filename>zaurusd</filename> -
1536 The recipe has been moved to the
1537 <filename>meta-handheld</filename> layer.
1538 </para></listitem>
1539 <listitem><para><filename>eglibc 2.17</filename> -
1540 Replaced by the <filename>eglibc 2.19</filename>
1541 recipe.
1542 </para></listitem>
1543 <listitem><para><filename>gcc 4.7.2</filename> -
1544 Replaced by the now stable
1545 <filename>gcc 4.8.2</filename>.
1546 </para></listitem>
1547 <listitem><para><filename>external-sourcery-toolchain</filename> -
1548 this recipe is now maintained in the
1549 <filename>meta-sourcery</filename> layer.
1550 </para></listitem>
1551 <listitem><para><filename>linux-libc-headers-yocto 3.4+git</filename> -
1552 Now using version 3.10 of the
1553 <filename>linux-libc-headers</filename> by default.
1554 </para></listitem>
1555 <listitem><para><filename>meta-toolchain-gmae</filename> -
1556 This recipe is obsolete.
1557 </para></listitem>
1558 <listitem><para><filename>packagegroup-core-sdk-gmae</filename> -
1559 This recipe is obsolete.
1560 </para></listitem>
1561 <listitem><para><filename>packagegroup-core-standalone-gmae-sdk-target</filename> -
1562 This recipe is obsolete.
1563 </para></listitem>
1564 </itemizedlist>
1565 </para>
1566 </section>
1567
1568 <section id='migration-1.6-removed-classes'>
1569 <title>Removed Classes</title>
1570
1571 <para>
1572 The following classes have become obsolete and have been removed:
1573 <itemizedlist>
1574 <listitem><para><filename>module_strip</filename>
1575 </para></listitem>
1576 <listitem><para><filename>pkg_metainfo</filename>
1577 </para></listitem>
1578 <listitem><para><filename>pkg_distribute</filename>
1579 </para></listitem>
1580 <listitem><para><filename>image-empty</filename>
1581 </para></listitem>
1582 </itemizedlist>
1583 </para>
1584 </section>
1585
1586 <section id='migration-1.6-reference-bsps'>
1587 <title>Reference Board Support Packages (BSPs)</title>
1588
1589 <para>
1590 The following reference BSPs changes occurred:
1591 <itemizedlist>
1592 <listitem><para>The BeagleBoard
1593 (<filename>beagleboard</filename>) ARM reference hardware
1594 has been replaced by the BeagleBone
1595 (<filename>beaglebone</filename>) hardware.
1596 </para></listitem>
1597 <listitem><para>The RouterStation Pro
1598 (<filename>routerstationpro</filename>) MIPS reference
1599 hardware has been replaced by the EdgeRouter Lite
1600 (<filename>edgerouter</filename>) hardware.
1601 </para></listitem>
1602 </itemizedlist>
1603 The previous reference BSPs for the
1604 <filename>beagleboard</filename> and
1605 <filename>routerstationpro</filename> machines are still available
1606 in a new <filename>meta-yocto-bsp-old</filename> layer in the
1607 <ulink url='&YOCTO_GIT_URL;'>Source Repositories</ulink>
1608 at
1609 <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/meta-yocto-bsp-old/'>http://git.yoctoproject.org/cgit/cgit.cgi/meta-yocto-bsp-old/</ulink>.
1610 </para>
1611 </section>
1612</section>
1613</chapter>
1614<!--
1615vim: expandtab tw=80 ts=4
1616-->
diff --git a/documentation/ref-manual/ref-bitbake.xml b/documentation/ref-manual/ref-bitbake.xml
new file mode 100644
index 0000000000..28496dec9a
--- /dev/null
+++ b/documentation/ref-manual/ref-bitbake.xml
@@ -0,0 +1,472 @@
1<!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-bitbake'>
6
7 <title>BitBake</title>
8
9 <para>
10 BitBake is a program written in Python that interprets the
11 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink> used by
12 the OpenEmbedded build system.
13 At some point, developers wonder what actually happens when you enter:
14 <literallayout class='monospaced'>
15 $ bitbake core-image-sato
16 </literallayout>
17 </para>
18
19 <para>
20 This chapter provides an overview of what happens behind the scenes from BitBake's perspective.
21 </para>
22
23 <note>
24 BitBake strives to be a generic "task" executor that is capable of handling complex dependency relationships.
25 As such, it has no real knowledge of what the tasks being executed actually do.
26 BitBake just considers a list of tasks with dependencies and handles
27 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
28 consisting of variables in a certain format that get passed to the tasks.
29 </note>
30
31 <section id='ref-bitbake-parsing'>
32 <title>Parsing</title>
33
34 <para>
35 BitBake parses configuration files, classes, and <filename>.bb</filename> files.
36 </para>
37
38 <para>
39 The first thing BitBake does is look for the <filename>bitbake.conf</filename> file.
40 This file resides in the
41 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
42 within the <filename>meta/conf/</filename> directory.
43 BitBake finds it by examining its
44 <link linkend='var-BBPATH'><filename>BBPATH</filename></link> environment
45 variable and looking for the <filename>meta/conf/</filename>
46 directory.
47 </para>
48
49 <para>
50 The <filename>bitbake.conf</filename> file lists other configuration
51 files to include from a <filename>conf/</filename>
52 directory below the directories listed in <filename>BBPATH</filename>.
53 In general, the most important configuration file from a user's perspective
54 is <filename>local.conf</filename>, which contains a user's customized
55 settings for the OpenEmbedded build environment.
56 Other notable configuration files are the distribution
57 configuration file (set by the
58 <filename><link linkend='var-DISTRO'>DISTRO</link></filename> variable)
59 and the machine configuration file
60 (set by the
61 <filename><link linkend='var-MACHINE'>MACHINE</link></filename> variable).
62 The <filename>DISTRO</filename> and <filename>MACHINE</filename> BitBake environment
63 variables are both usually set in
64 the <filename>local.conf</filename> file.
65 Valid distribution
66 configuration files are available in the <filename>meta/conf/distro/</filename> directory
67 and valid machine configuration
68 files in the <filename>meta/conf/machine/</filename> directory.
69 Within the <filename>meta/conf/machine/include/</filename>
70 directory are various <filename>tune-*.inc</filename> configuration files that provide common
71 "tuning" settings specific to and shared between particular architectures and machines.
72 </para>
73
74 <para>
75 After the parsing of the configuration files, some standard classes are included.
76 The <filename>base.bbclass</filename> file is always included.
77 Other classes that are specified in the configuration using the
78 <filename><link linkend='var-INHERIT'>INHERIT</link></filename>
79 variable are also included.
80 Class files are searched for in a <filename>classes</filename> subdirectory
81 under the paths in <filename>BBPATH</filename> in the same way as
82 configuration files.
83 </para>
84
85 <para>
86 After classes are included, the variable
87 <filename><link linkend='var-BBFILES'>BBFILES</link></filename>
88 is set, usually in
89 <filename>local.conf</filename>, and defines the list of places to search for
90 <filename>.bb</filename> files.
91 By default, the <filename>BBFILES</filename> variable specifies the
92 <filename>meta/recipes-*/</filename> directory within Poky.
93 Adding extra content to <filename>BBFILES</filename> is best achieved through the use of
94 BitBake layers as described in the
95 "<ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>Understanding and
96 Creating Layers</ulink>" section of the Yocto Project Development Manual.
97 </para>
98
99 <para>
100 BitBake parses each <filename>.bb</filename> file in <filename>BBFILES</filename> and
101 stores the values of various variables.
102 In summary, for each <filename>.bb</filename>
103 file the configuration plus the base class of variables are set, followed
104 by the data in the <filename>.bb</filename> file
105 itself, followed by any inherit commands that
106 <filename>.bb</filename> file might contain.
107 </para>
108
109 <para>
110 Because parsing <filename>.bb</filename> files is a time
111 consuming process, a cache is kept to speed up subsequent parsing.
112 This cache is invalid if the timestamp of the <filename>.bb</filename>
113 file itself changes, or if the timestamps of any of the include,
114 configuration files or class files on which the
115 <filename>.bb</filename> file depends change.
116 </para>
117
118 <note>
119 <para>
120 You need to be aware of how BitBake parses curly braces.
121 If a recipe uses a closing curly brace within the function and
122 the character has no leading spaces, BitBake produces a parsing
123 error.
124 If you use a pair of curly brace in a shell function, the
125 closing curly brace must not be located at the start of the line
126 without leading spaces.
127 </para>
128
129 <para>
130 Here is an example that causes BitBake to produce a parsing
131 error:
132 <literallayout class='monospaced'>
133 fakeroot create_shar() {
134 cat &lt;&lt; "EOF" &gt; ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh
135 usage()
136 {
137 echo "test"
138 ###### The following "}" at the start of the line causes a parsing error ######
139 }
140 EOF
141 }
142 </literallayout>
143 Writing the recipe this way avoids the error:
144 <literallayout class='monospaced'>
145 fakeroot create_shar() {
146 cat &lt;&lt; "EOF" &gt; ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh
147 usage()
148 {
149 echo "test"
150 ######The following "}" with a leading space at the start of the line avoids the error ######
151 }
152 EOF
153 }
154 </literallayout>
155 </para>
156 </note>
157 </section>
158
159 <section id='ref-bitbake-providers'>
160 <title>Preferences and Providers</title>
161
162 <para>
163 Once all the <filename>.bb</filename> files have been
164 parsed, BitBake starts to build the target (<filename>core-image-sato</filename>
165 in the previous section's example) and looks for providers of that target.
166 Once a provider is selected, BitBake resolves all the dependencies for
167 the target.
168 In the case of <filename>core-image-sato</filename>, it would lead to
169 <filename>packagegroup-core-x11-sato</filename>,
170 which in turn leads to recipes like <filename>matchbox-terminal</filename>,
171 <filename>pcmanfm</filename> and <filename>gthumb</filename>.
172 These recipes in turn depend on <filename>eglibc</filename> and the toolchain.
173 </para>
174
175 <para>
176 Sometimes a target might have multiple providers.
177 A common example is "virtual/kernel", which is provided by each kernel package.
178 Each machine often selects the best kernel provider by using a line similar to the
179 following in the machine configuration file:
180 </para>
181
182 <literallayout class='monospaced'>
183 PREFERRED_PROVIDER_virtual/kernel = "linux-yocto"
184 </literallayout>
185
186 <para>
187 The default <filename><link linkend='var-PREFERRED_PROVIDER'>PREFERRED_PROVIDER</link></filename>
188 is the provider with the same name as the target.
189 </para>
190
191 <para>
192 Understanding how providers are chosen is made complicated by the fact
193 that multiple versions might exist.
194 BitBake defaults to the highest version of a provider.
195 Version comparisons are made using the same method as Debian.
196 You can use the
197 <filename><link linkend='var-PREFERRED_VERSION'>PREFERRED_VERSION</link></filename>
198 variable to specify a particular version (usually in the distro configuration).
199 You can influence the order by using the
200 <filename><link linkend='var-DEFAULT_PREFERENCE'>DEFAULT_PREFERENCE</link></filename>
201 variable.
202 By default, files have a preference of "0".
203 Setting the <filename>DEFAULT_PREFERENCE</filename> to "-1" makes the
204 package unlikely to be used unless it is explicitly referenced.
205 Setting the <filename>DEFAULT_PREFERENCE</filename> to "1" makes it likely the package is used.
206 <filename>PREFERRED_VERSION</filename> overrides any <filename>DEFAULT_PREFERENCE</filename> setting.
207 <filename>DEFAULT_PREFERENCE</filename> is often used to mark newer and more experimental package
208 versions until they have undergone sufficient testing to be considered stable.
209 </para>
210
211 <para>
212 In summary, BitBake has created a list of providers, which is prioritized, for each target.
213 </para>
214 </section>
215
216 <section id='ref-bitbake-dependencies'>
217 <title>Dependencies</title>
218
219 <para>
220 Each target BitBake builds consists of multiple tasks such as
221 <filename>fetch</filename>, <filename>unpack</filename>,
222 <filename>patch</filename>, <filename>configure</filename>,
223 and <filename>compile</filename>.
224 For best performance on multi-core systems, BitBake considers each task as an independent
225 entity with its own set of dependencies.
226 </para>
227
228 <para>
229 Dependencies are defined through several variables.
230 You can find information about variables BitBake uses in the BitBake documentation,
231 which is found in the <filename>bitbake/doc/manual</filename> directory within the
232 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
233 At a basic level, it is sufficient to know that BitBake uses the
234 <filename><link linkend='var-DEPENDS'>DEPENDS</link></filename> and
235 <filename><link linkend='var-RDEPENDS'>RDEPENDS</link></filename> variables when
236 calculating dependencies.
237 </para>
238 </section>
239
240 <section id='ref-bitbake-tasklist'>
241 <title>The Task List</title>
242
243 <para>
244 Based on the generated list of providers and the dependency information,
245 BitBake can now calculate exactly what tasks it needs to run and in what
246 order it needs to run them.
247 The build now starts with BitBake forking off threads up to the limit set in the
248 <filename><link linkend='var-BB_NUMBER_THREADS'>BB_NUMBER_THREADS</link></filename> variable.
249 BitBake continues to fork threads as long as there are tasks ready to run,
250 those tasks have all their dependencies met, and the thread threshold has not been
251 exceeded.
252 </para>
253
254 <para>
255 It is worth noting that you can greatly speed up the build time by properly setting
256 the <filename>BB_NUMBER_THREADS</filename> variable.
257 See the
258 "<ulink url='&YOCTO_DOCS_QS_URL;#building-image'>Building an Image</ulink>"
259 section in the Yocto Project Quick Start for more information.
260 </para>
261
262 <para>
263 As each task completes, a timestamp is written to the directory specified by the
264 <filename><link linkend='var-STAMP'>STAMP</link></filename> variable.
265 On subsequent runs, BitBake looks within the <filename>build/tmp/stamps</filename>
266 directory and does not rerun
267 tasks that are already completed unless a timestamp is found to be invalid.
268 Currently, invalid timestamps are only considered on a per
269 <filename>.bb</filename> file basis.
270 So, for example, if the configure stamp has a timestamp greater than the
271 compile timestamp for a given target, then the compile task would rerun.
272 Running the compile task again, however, has no effect on other providers
273 that depend on that target.
274 This behavior could change or become configurable in future versions of BitBake.
275 </para>
276
277 <note>
278 Some tasks are marked as "nostamp" tasks.
279 No timestamp file is created when these tasks are run.
280 Consequently, "nostamp" tasks are always rerun.
281 </note>
282 </section>
283
284 <section id='ref-bitbake-runtask'>
285 <title>Running a Task</title>
286
287 <para>
288 Tasks can either be a shell task or a Python task.
289 For shell tasks, BitBake writes a shell script to
290 <filename>${WORKDIR}/temp/run.do_taskname.pid</filename> and then executes the script.
291 The generated shell script contains all the exported variables, and the shell functions
292 with all variables expanded.
293 Output from the shell script goes to the file <filename>${WORKDIR}/temp/log.do_taskname.pid</filename>.
294 Looking at the expanded shell functions in the run file and the output in the log files
295 is a useful debugging technique.
296 </para>
297
298 <para>
299 For Python tasks, BitBake executes the task internally and logs information to the
300 controlling terminal.
301 Future versions of BitBake will write the functions to files similar to the way
302 shell tasks are handled.
303 Logging will be handled in a way similar to shell tasks as well.
304 </para>
305
306 <para>
307 Once all the tasks have been completed BitBake exits.
308 </para>
309
310 <para>
311 When running a task, BitBake tightly controls the execution environment
312 of the build tasks to make sure unwanted contamination from the build machine
313 cannot influence the build.
314 Consequently, if you do want something to get passed into the build
315 task's environment, you must take a few steps:
316 <orderedlist>
317 <listitem><para>Tell BitBake to load what you want from the environment
318 into the data store.
319 You can do so through the <filename>BB_ENV_EXTRAWHITE</filename>
320 variable.
321 For example, assume you want to prevent the build system from
322 accessing your <filename>$HOME/.ccache</filename> directory.
323 The following command tells BitBake to load
324 <filename>CCACHE_DIR</filename> from the environment into the data
325 store:
326 <literallayout class='monospaced'>
327 export BB_ENV_EXTRAWHITE="$BB_ENV_EXTRAWHITE CCACHE_DIR"
328 </literallayout></para></listitem>
329 <listitem><para>Tell BitBake to export what you have loaded into the
330 environment store to the task environment of every running task.
331 Loading something from the environment into the data store
332 (previous step) only makes it available in the datastore.
333 To export it to the task environment of every running task,
334 use a command similar to the following in your
335 <filename>local.conf</filename> or distro configuration file:
336 <literallayout class='monospaced'>
337 export CCACHE_DIR
338 </literallayout></para></listitem>
339 </orderedlist>
340 </para>
341
342 <note>
343 A side effect of the previous steps is that BitBake records the variable
344 as a dependency of the build process in things like the shared state
345 checksums.
346 If doing so results in unnecessary rebuilds of tasks, you can whitelist the
347 variable so that the shared state code ignores the dependency when it creates
348 checksums.
349 For information on this process, see the <filename>BB_HASHBASE_WHITELIST</filename>
350 example in the "<link linkend='checksums'>Checksums (Signatures)</link>" section.
351 </note>
352 </section>
353
354 <section id='ref-bitbake-commandline'>
355 <title>BitBake Command Line</title>
356
357 <para>
358 Following is the BitBake help output:
359 </para>
360
361 <screen>
362$ bitbake --help
363Usage: bitbake [options] [recipename/target ...]
364
365 Executes the specified task (default is 'build') for a given set of target recipes (.bb files).
366 It is assumed there is a conf/bblayers.conf available in cwd or in BBPATH which
367 will provide the layer, BBFILES and other configuration information.
368
369Options:
370 --version show program's version number and exit
371 -h, --help show this help message and exit
372 -b BUILDFILE, --buildfile=BUILDFILE
373 Execute tasks from a specific .bb recipe directly.
374 WARNING: Does not handle any dependencies from other
375 recipes.
376 -k, --continue Continue as much as possible after an error. While the
377 target that failed and anything depending on it cannot
378 be built, as much as possible will be built before
379 stopping.
380 -a, --tryaltconfigs Continue with builds by trying to use alternative
381 providers where possible.
382 -f, --force Force the specified targets/task to run (invalidating
383 any existing stamp file).
384 -c CMD, --cmd=CMD Specify the task to execute. The exact options
385 available depend on the metadata. Some examples might
386 be 'compile' or 'populate_sysroot' or 'listtasks' may
387 give a list of the tasks available.
388 -C INVALIDATE_STAMP, --clear-stamp=INVALIDATE_STAMP
389 Invalidate the stamp for the specified task such as
390 'compile' and then run the default task for the
391 specified target(s).
392 -r PREFILE, --read=PREFILE
393 Read the specified file before bitbake.conf.
394 -R POSTFILE, --postread=POSTFILE
395 Read the specified file after bitbake.conf.
396 -v, --verbose Output more log message data to the terminal.
397 -D, --debug Increase the debug level. You can specify this more
398 than once.
399 -n, --dry-run Don't execute, just go through the motions.
400 -S, --dump-signatures
401 Don't execute, just dump out the signature
402 construction information.
403 -p, --parse-only Quit after parsing the BB recipes.
404 -s, --show-versions Show current and preferred versions of all recipes.
405 -e, --environment Show the global or per-package environment complete
406 with information about where variables were
407 set/changed.
408 -g, --graphviz Save dependency tree information for the specified
409 targets in the dot syntax.
410 -I EXTRA_ASSUME_PROVIDED, --ignore-deps=EXTRA_ASSUME_PROVIDED
411 Assume these dependencies don't exist and are already
412 provided (equivalent to ASSUME_PROVIDED). Useful to
413 make dependency graphs more appealing
414 -l DEBUG_DOMAINS, --log-domains=DEBUG_DOMAINS
415 Show debug logging for the specified logging domains
416 -P, --profile Profile the command and save reports.
417 -u UI, --ui=UI The user interface to use (e.g. knotty, hob, depexp).
418 -t SERVERTYPE, --servertype=SERVERTYPE
419 Choose which server to use, process or xmlrpc.
420 --revisions-changed Set the exit code depending on whether upstream
421 floating revisions have changed or not.
422 --server-only Run bitbake without a UI, only starting a server
423 (cooker) process.
424 -B BIND, --bind=BIND The name/address for the bitbake server to bind to.
425 --no-setscene Do not run any setscene tasks. sstate will be ignored
426 and everything needed, built.
427 --remote-server=REMOTE_SERVER
428 Connect to the specified server.
429 -m, --kill-server Terminate the remote server.
430 --observe-only Connect to a server as an observing-only client.
431 </screen>
432 </section>
433
434 <section id='ref-bitbake-fetchers'>
435 <title>Fetchers</title>
436
437 <para>
438 BitBake also contains a set of "fetcher" modules that allow
439 retrieval of source code from various types of sources.
440 For example, BitBake can get source code from a disk with the metadata, from websites,
441 from remote shell accounts, or from Source Code Management (SCM) systems
442 like <filename>cvs/subversion/git</filename>.
443 </para>
444
445 <para>
446 Fetchers are usually triggered by entries in
447 <filename><link linkend='var-SRC_URI'>SRC_URI</link></filename>.
448 You can find information about the options and formats of entries for specific
449 fetchers in the BitBake manual located in the
450 <filename>bitbake/doc/manual</filename> directory of the
451 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
452 </para>
453
454 <para>
455 One useful feature for certain Source Code Manager (SCM) fetchers is the ability to
456 "auto-update" when the upstream SCM changes version.
457 Since this ability requires certain functionality from the SCM, not all
458 systems support it.
459 Currently Subversion, Bazaar and to a limited extent, Git support the ability to "auto-update".
460 This feature works using the <filename><link linkend='var-SRCREV'>SRCREV</link></filename>
461 variable.
462 See the
463 "<ulink url='&YOCTO_DOCS_DEV_URL;#platdev-appdev-srcrev'>Using an External SCM</ulink>" section
464 in the Yocto Project Development Manual for more information.
465 </para>
466
467 </section>
468
469</chapter>
470<!--
471vim: expandtab tw=80 ts=4 spell spelllang=en_gb
472-->
diff --git a/documentation/ref-manual/ref-classes.xml b/documentation/ref-manual/ref-classes.xml
new file mode 100644
index 0000000000..da546080a3
--- /dev/null
+++ b/documentation/ref-manual/ref-classes.xml
@@ -0,0 +1,3255 @@
1<!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-classes'>
6<title>Classes</title>
7
8<para>
9 Class files are used to abstract common functionality and share it amongst
10 multiple recipe (<filename>.bb</filename>) files.
11 To use a class file, you simply make sure the recipe inherits the class.
12 In most cases, when a recipe inherits a class it is enough to enable its
13 features.
14 There are cases, however, where in the recipe you might need to set
15 variables or override some default behavior.
16</para>
17
18<para>
19 Any <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink> usually
20 found in a recipe can also be placed in a class file.
21 Class files are identified by the extension <filename>.bbclass</filename>
22 and are usually placed in a <filename>classes/</filename> directory beneath
23 the <filename>meta*/</filename> directory found in the
24 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
25 Class files can also be pointed to by
26 <link linkend='var-BUILDDIR'><filename>BUILDDIR</filename></link>
27 (e.g. <filename>build/</filename>) in the same way as
28 <filename>.conf</filename> files in the <filename>conf</filename> directory.
29 Class files are searched for in
30 <link linkend='var-BBPATH'><filename>BBPATH</filename></link>
31 using the same method by which <filename>.conf</filename> files are
32 searched.
33</para>
34
35<para>
36 This chapter discusses only the most useful and important classes.
37 Other classes do exist within the <filename>meta/classes</filename>
38 directory in the
39 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
40 You can reference the <filename>.bbclass</filename> files directly
41 for more information.
42</para>
43
44<section id='ref-classes-allarch'>
45 <title><filename>allarch.bbclass</filename></title>
46
47 <para>
48 The <filename>allarch</filename> class is inherited
49 by recipes that do not produce architecture-specific output.
50 The class disables functionality that is normally needed for recipes
51 that produce executable binaries (such as building the cross-compiler
52 and a C library as pre-requisites, and splitting out of debug symbols
53 during packaging).
54 </para>
55
56 <para>
57 By default, all recipes inherit the
58 <link linkend='ref-classes-base'><filename>base</filename></link> and
59 <link linkend='ref-classes-package'><filename>package</filename></link>
60 classes, which enable functionality
61 needed for recipes that produce executable output.
62 If your recipe, for example, only produces packages that contain
63 configuration files, media files, or scripts (e.g. Python and Perl),
64 then it should inherit the <filename>allarch</filename> class.
65 </para>
66</section>
67
68<section id='ref-classes-archiver'>
69 <title><filename>archiver.bbclass</filename></title>
70
71 <para>
72 The <filename>archiver</filename> class supports releasing
73 source code and other materials with the binaries.
74 </para>
75
76 <para>
77 For more details on the source archiver, see the
78 "<ulink url='&YOCTO_DOCS_DEV_URL;#maintaining-open-source-license-compliance-during-your-products-lifecycle'>Maintaining Open Source License Compliance During Your Product's Lifecycle</ulink>"
79 section in the Yocto Project Development Manual.
80 </para>
81</section>
82
83<section id='ref-classes-autotools'>
84 <title><filename>autotools.bbclass</filename></title>
85
86 <para>
87 The <filename>autotools</filename> class supports Autotooled
88 packages.
89 </para>
90
91 <para>
92 The <filename>autoconf</filename>, <filename>automake</filename>,
93 and <filename>libtool</filename> bring standardization.
94 This class defines a set of tasks (configure, compile etc.) that
95 work for all Autotooled packages.
96 It should usually be enough to define a few standard variables
97 and then simply <filename>inherit autotools</filename>.
98 This class can also work with software that emulates Autotools.
99 For more information, see the
100 "<ulink url='&YOCTO_DOCS_DEV_URL;#new-recipe-autotooled-package'>Autotooled Package</ulink>"
101 section in the Yocto Project Development Manual.
102 </para>
103
104 <para>
105 It's useful to have some idea of how the tasks defined by this class work
106 and what they do behind the scenes.
107 <itemizedlist>
108 <listitem><para><filename>do_configure</filename> &dash; Regenerates the
109 configure script (using <filename>autoreconf</filename>) and then launches it
110 with a standard set of arguments used during cross-compilation.
111 You can pass additional parameters to <filename>configure</filename> through the
112 <filename><link linkend='var-EXTRA_OECONF'>EXTRA_OECONF</link></filename> variable.
113 </para></listitem>
114 <listitem><para><filename>do_compile</filename> &dash; Runs <filename>make</filename> with
115 arguments that specify the compiler and linker.
116 You can pass additional arguments through
117 the <filename><link linkend='var-EXTRA_OEMAKE'>EXTRA_OEMAKE</link></filename> variable.
118 </para></listitem>
119 <listitem><para><filename>do_install</filename> &dash; Runs <filename>make install</filename>
120 and passes in
121 <filename>${</filename><link linkend='var-D'><filename>D</filename></link><filename>}</filename>
122 as <filename>DESTDIR</filename>.
123 </para></listitem>
124 </itemizedlist>
125 </para>
126
127 <note>
128 It is planned for future Yocto Project releases that by default, the
129 <filename>autotools</filename> class supports out-of-tree builds
130 (<link linkend='var-B'><filename>B</filename></link> !=
131 <link linkend='var-S'><filename>S</filename></link>).
132 If your recipes do not support out-of-tree builds, you should
133 have them inherit the
134 <link linkend='ref-classes-autotools-brokensep'><filename>autotools-brokensep</filename></link>
135 class.
136 </note>
137</section>
138
139<section id='ref-classes-autotools-brokensep'>
140 <title><filename>autotools-brokensep.bbclass</filename></title>
141
142 <para>
143 The <filename>autotools-brokensep</filename> class behaves the same
144 as the
145 <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
146 class but builds with
147 <link linkend='var-B'><filename>B</filename></link> ==
148 <link linkend='var-S'><filename>S</filename></link>.
149 This method is useful when out-of-tree build support is either not
150 present or is broken.
151 <note>
152 It is recommended that out-of-tree support be fixed and used
153 if at all possible.
154 </note>
155 </para>
156</section>
157
158<section id='ref-classes-base'>
159 <title><filename>base.bbclass</filename></title>
160
161 <para>
162 The <filename>base</filename> class is special in that every
163 <filename>.bb</filename> file implicitly inherits the class.
164 This class contains definitions for standard basic
165 tasks such as fetching, unpacking, configuring (empty by default),
166 compiling (runs any <filename>Makefile</filename> present), installing
167 (empty by default) and packaging (empty by default).
168 These classes are often overridden or extended by other classes
169 such as the
170 <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
171 class or the
172 <link linkend='ref-classes-package'><filename>package</filename></link>
173 class.
174 The class also contains some commonly used functions such as
175 <filename>oe_runmake</filename>.
176 </para>
177</section>
178
179<section id='ref-classes-bin-package'>
180 <title><filename>bin_package.bbclass</filename></title>
181
182 <para>
183 The <filename>bin_package</filename> class is a
184 helper class for recipes that extract the contents of a binary package
185 (e.g. an RPM) and install those contents rather than building the
186 binary from source.
187 The binary package is extracted and new packages in the configured
188 output package format are created.
189 <note>
190 For RPMs and other packages that do not contain a subdirectory,
191 you should specify a "subdir" parameter.
192 Here is an example where <filename>${BP}</filename> is used so that
193 the files are extracted into the subdirectory expected by the
194 default value of
195 <link linkend='var-S'><filename>S</filename></link>:
196 <literallayout class='monospaced'>
197 SRC_URI = "http://example.com/downloads/somepackage.rpm;subdir=${BP}"
198 </literallayout>
199 </note>
200 </para>
201</section>
202
203<section id='ref-classes-binconfig'>
204 <title><filename>binconfig.bbclass</filename></title>
205
206 <para>
207 The <filename>binconfig</filename> class helps to correct paths in
208 shell scripts.
209 </para>
210
211 <para>
212 Before <filename>pkg-config</filename> had become widespread, libraries
213 shipped shell scripts to give information about the libraries and
214 include paths needed to build software (usually named
215 <filename>LIBNAME-config</filename>).
216 This class assists any recipe using such scripts.
217 </para>
218
219 <para>
220 During staging, the OpenEmbedded build system installs such scripts
221 into the <filename>sysroots/</filename> directory.
222 Inheriting this class results in all paths in these scripts being
223 changed to point into the <filename>sysroots/</filename> directory so
224 that all builds that use the script use the correct directories
225 for the cross compiling layout.
226 See the
227 <link linkend='var-BINCONFIG_GLOB'><filename>BINCONFIG_GLOB</filename></link>
228 variable for more information.
229 </para>
230</section>
231
232<section id='ref-classes-blacklist'>
233 <title><filename>blacklist.bbclass</filename></title>
234
235 <para>
236 The <filename>blacklist</filename> class prevents
237 the OpenEmbedded build system from building specific recipes
238 (blacklists them).
239 To use this class, inherit the class globally and set
240 <link linkend='var-PNBLACKLIST'><filename>PNBLACKLIST</filename></link>
241 for each recipe you wish to blacklist.
242 Specify the <link linkend='var-PN'><filename>PN</filename></link>
243 value as a variable flag (varflag) and provide a reason, which is
244 reported, if the package is requested to be built as the value.
245 For example, if you want to blacklist a recipe called "exoticware",
246 you add the following to your <filename>local.conf</filename>
247 or distribution configuration:
248 <literallayout class='monospaced'>
249 INHERIT += "blacklist"
250 PNBLACKLIST[exoticware] = "Not supported by our organization."
251 </literallayout>
252 </para>
253</section>
254
255<section id='ref-classes-boot-directdisk'>
256 <title><filename>boot-directdisk.bbclass</filename></title>
257
258 <para>
259 The <filename>boot-directdisk</filename> class
260 creates an image that can be placed directly onto a hard disk using
261 <filename>dd</filename> and then booted.
262 The image uses SYSLINUX.
263 </para>
264
265 <para>
266 The end result is a 512 boot sector populated with a
267 Master Boot Record (MBR) and partition table followed by an MSDOS
268 FAT16 partition containing SYSLINUX and a Linux kernel completed by
269 the <filename>ext2</filename> and <filename>ext3</filename>
270 root filesystems.
271 </para>
272</section>
273
274<section id='ref-classes-bootimg'>
275 <title><filename>bootimg.bbclass</filename></title>
276
277 <para>
278 The <filename>bootimg</filename> class creates a bootable
279 image using SYSLINUX, your kernel, and an optional initial RAM disk
280 (<filename>initrd</filename>).
281 </para>
282
283 <para>
284 When you use this class, two things happen:
285 <itemizedlist>
286 <listitem><para>
287 A <filename>.hddimg</filename> file is created.
288 This file is an MSDOS filesystem that contains SYSLINUX,
289 a kernel, an <filename>initrd</filename>, and a root filesystem
290 image.
291 All three of these can be written to hard drives directly and
292 also booted on a USB flash disks using <filename>dd</filename>.
293 </para></listitem>
294 <listitem><para>
295 A CD <filename>.iso</filename> image is created.
296 When this file is booted, the <filename>initrd</filename>
297 boots and processes the label selected in SYSLINUX.
298 Actions based on the label are then performed (e.g. installing
299 to a hard drive).</para></listitem>
300 </itemizedlist>
301 </para>
302
303 <para>
304 The <filename>bootimg</filename> class supports the
305 <link linkend='var-INITRD'><filename>INITRD</filename></link>,
306 <link linkend='var-NOISO'><filename>NOISO</filename></link>,
307 <link linkend='var-NOHDD'><filename>NOHDD</filename></link>, and
308 <link linkend='var-ROOTFS'><filename>ROOTFS</filename></link>
309 variables.
310 </para>
311</section>
312
313<section id='ref-classes-bugzilla'>
314 <title><filename>bugzilla.bbclass</filename></title>
315
316 <para>
317 The <filename>bugzilla</filename> class supports setting up an
318 instance of Bugzilla in which you can automatically files bug reports
319 in response to build failures.
320 For this class to work, you need to enable the XML-RPC interface in
321 the instance of Bugzilla.
322 </para>
323</section>
324
325<section id='ref-classes-buildhistory'>
326 <title><filename>buildhistory.bbclass</filename></title>
327
328 <para>
329 The <filename>buildhistory</filename> class records a
330 history of build output metadata, which can be used to detect possible
331 regressions as well as used for analysis of the build output.
332 For more information on using Build History, see the
333 "<link linkend='maintaining-build-output-quality'>Maintaining Build Output Quality</link>"
334 section.
335 </para>
336</section>
337
338<section id='ref-classes-buildstats'>
339 <title><filename>buildstats.bbclass</filename></title>
340
341 <para>
342 The <filename>buildstats</filename> class records
343 performance statistics about each task executed during the build
344 (e.g. elapsed time, CPU usage, and I/O usage).
345 </para>
346
347 <para>
348 When you use this class, the output goes into the
349 <link linkend='var-BUILDSTATS_BASE'><filename>BUILDSTATS_BASE</filename></link>
350 directory, which defaults to <filename>${TMPDIR}/buildstats/</filename>.
351 You can analyze the elapsed time using
352 <filename>scripts/pybootchartgui/pybootchartgui.py</filename>, which
353 produces a cascading chart of the entire build process and can be
354 useful for highlighting bottlenecks.
355 </para>
356
357 <para>
358 Collecting build statistics is enabled by default through the
359 <link linkend='var-USER_CLASSES'><filename>USER_CLASSES</filename></link>
360 variable from your <filename>local.conf</filename> file.
361 Consequently, you do not have to do anything to enable the class.
362 However, if you want to disable the class, simply remove "buildstats"
363 from the <filename>USER_CLASSES</filename> list.
364 </para>
365</section>
366
367<section id='ref-classes-ccache'>
368 <title><filename>ccache.bbclass</filename></title>
369
370 <para>
371 The <filename>ccache</filename> class enables the
372 <ulink url='http://ccache.samba.org/'>C/C++ Compiler Cache</ulink>
373 for the build.
374 This class is used to give a minor performance boost during the build.
375 However, using the class can lead to unexpected side-effects.
376 Thus, it is recommended that you do not use this class.
377 See <ulink url='http://ccache.samba.org/'></ulink> for information on
378 the C/C++ Compiler Cache.
379 </para>
380</section>
381
382<section id='ref-classes-chrpath'>
383 <title><filename>chrpath.bbclass</filename></title>
384
385 <para>
386 The <filename>chrpath</filename> class
387 is a wrapper around the "chrpath" utility, which is used during the
388 build process for <filename>nativesdk</filename>,
389 <filename>cross</filename>, and
390 <filename>cross-canadian</filename> recipes to change
391 <filename>RPATH</filename> records within binaries in order to make
392 them relocatable.
393 </para>
394</section>
395
396<section id='ref-classes-clutter'>
397 <title><filename>clutter.bbclass</filename></title>
398
399 <para>
400 The <filename>clutter</filename> class consolidates the
401 major and minor version naming and other common items used by Clutter
402 and related recipes.
403 <note>
404 Unlike some other classes related to specific libraries, recipes
405 building other software that uses Clutter do not need to
406 inherit this class unless they use the same recipe versioning
407 scheme that the Clutter and related recipes do.
408 </note>
409 </para>
410</section>
411
412<section id='ref-classes-cmake'>
413 <title><filename>cmake.bbclass</filename></title>
414
415 <para>
416 The <filename>cmake</filename> class allows for
417 recipes that need to build software using the CMake build system.
418 You can use the
419 <link linkend='var-EXTRA_OECMAKE'><filename>EXTRA_OECMAKE</filename></link>
420 variable to specify additional configuration options to be passed on
421 the <filename>cmake</filename> command line.
422 </para>
423</section>
424
425<section id='ref-classes-cml1'>
426 <title><filename>cml1.bbclass</filename></title>
427
428 <para>
429 The <filename>cml1</filename> class provides basic support for the
430 Linux kernel style build configuration system.
431 </para>
432</section>
433
434<section id='ref-classes-copyleft_compliance'>
435 <title><filename>copyleft_compliance.bbclass</filename></title>
436
437 <para>
438 The <filename>copyleft_compliance</filename> class
439 preserves source code for the purposes of license compliance.
440 This class is an alternative to the <filename>archiver</filename>
441 class and is still used by some users even though it has been
442 deprecated in favor of the
443 <link linkend='ref-classes-archiver'><filename>archiver</filename></link>
444 class.
445 </para>
446</section>
447
448<section id='ref-classes-core-image'>
449 <title><filename>core-image.bbclass</filename></title>
450
451 <para>
452 The <filename>core-image</filename> class
453 provides common definitions for the
454 <filename>core-image-*</filename> image recipes, such as support for
455 additional
456 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>.
457 </para>
458</section>
459
460<section id='ref-classes-cpan'>
461 <title><filename>cpan.bbclass</filename></title>
462
463 <para>
464 The <filename>cpan</filename> class supports Perl modules.
465 </para>
466
467 <para>
468 Recipes for Perl modules are simple.
469 These recipes usually only need to point to the source's archive and
470 then inherit the proper class file.
471 Building is split into two methods depending on which method the module
472 authors used.
473 <itemizedlist>
474 <listitem><para>Modules that use old
475 <filename>Makefile.PL</filename>-based build system require
476 <filename>cpan.bbclass</filename> in their recipes.
477 </para></listitem>
478 <listitem><para>Modules that use
479 <filename>Build.PL</filename>-based build system require
480 using <filename>cpan_build.bbclass</filename> in their recipes.
481 </para></listitem>
482 </itemizedlist>
483 </para>
484</section>
485
486<section id='ref-classes-cross'>
487 <title><filename>cross.bbclass</filename></title>
488
489 <para>
490 The <filename>cross</filename> class provides support for the recipes
491 that build the cross-compilation tools.
492 </para>
493</section>
494
495<section id='ref-classes-cross-canadian'>
496 <title><filename>cross-canadian.bbclass</filename></title>
497
498 <para>
499 The <filename>cross-canadian</filename> class
500 provides support for the recipes that build the Canadian
501 Cross-compilation tools for SDKs.
502 See the
503 "<link linkend='cross-development-toolchain-generation'>Cross-Development Toolchain Generation</link>"
504 section for more discussion on these cross-compilation tools.
505 </para>
506</section>
507
508<section id='ref-classes-crosssdk'>
509 <title><filename>crosssdk.bbclass</filename></title>
510
511 <para>
512 The <filename>crosssdk</filename> class
513 provides support for the recipes that build the cross-compilation
514 tools used for building SDKs.
515 See the
516 "<link linkend='cross-development-toolchain-generation'>Cross-Development Toolchain Generation</link>"
517 section for more discussion on these cross-compilation tools.
518 </para>
519</section>
520
521<section id='ref-classes-debian'>
522 <title><filename>debian.bbclass</filename></title>
523
524 <para>
525 The <filename>debian</filename> class renames output packages so that
526 they follow the Debian naming policy (i.e. <filename>eglibc</filename>
527 becomes <filename>libc6</filename> and <filename>eglibc-devel</filename>
528 becomes <filename>libc6-dev</filename>.)
529 Renaming includes the library name and version as part of the package
530 name.
531 </para>
532
533 <para>
534 If a recipe creates packages for multiple libraries
535 (shared object files of <filename>.so</filename> type), use the
536 <link linkend='var-LEAD_SONAME'><filename>LEAD_SONAME</filename></link>
537 variable in the recipe to specify the library on which to apply the
538 naming scheme.
539 </para>
540</section>
541
542<section id='ref-classes-deploy'>
543 <title><filename>deploy.bbclass</filename></title>
544
545 <para>
546 The <filename>deploy</filename> class handles deploying files
547 to the
548 <link linkend='var-DEPLOY_DIR_IMAGE'><filename>DEPLOY_DIR_IMAGE</filename></link>
549 directory.
550 The main function of this class is to allow the deploy step to be
551 accelerated by shared state.
552 Recipes that inherit this class should define their own
553 <filename>do_deploy</filename> function to copy the files to be
554 deployed to
555 <link linkend='var-DEPLOYDIR'><filename>DEPLOYDIR</filename></link>,
556 and use <filename>addtask</filename> to add the task at the appropriate
557 place, which is usually after <filename>do_compile</filename> or
558 <filename>do_install</filename>.
559 The class then takes care of staging the files from
560 <filename>DEPLOYDIR</filename> to
561 <filename>DEPLOY_DIR_IMAGE</filename>.
562 </para>
563</section>
564
565<section id='ref-classes-devshell'>
566 <title><filename>devshell.bbclass</filename></title>
567
568 <para>
569 The <filename>devshell</filename> class adds the
570 <filename>devshell</filename> task.
571 Distribution policy dictates whether to include this class.
572 See the
573 "<ulink url='&YOCTO_DOCS_DEV_URL;#platdev-appdev-devshell'>Using a Development Shell</ulink>" section
574 in the Yocto Project Development Manual for more information about
575 using <filename>devshell</filename>.
576 </para>
577</section>
578
579<section id='ref-classes-distro_features_check'>
580 <title><filename>distro_features_check.bbclass</filename></title>
581
582 <para>
583 The <filename>distro_features_check</filename> class
584 allows individual recipes to check for required and conflicting
585 <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.
586 </para>
587
588 <para>
589 This class provides support for the
590 <link linkend='var-REQUIRED_DISTRO_FEATURES'><filename>REQUIRED_DISTRO_FEATURES</filename></link>
591 and
592 <link linkend='var-CONFLICT_DISTRO_FEATURES'><filename>CONFLICT_DISTRO_FEATURES</filename></link>
593 variables.
594 If any conditions specified in the recipe using the above variables are
595 not met, the recipe will be skipped.
596 </para>
597</section>
598
599<section id='ref-classes-distrodata'>
600 <title><filename>distrodata.bbclass</filename></title>
601
602 <para>
603 The <filename>distrodata</filename> class
604 provides for automatic checking for upstream recipe updates.
605 The class creates a comma-separated value (CSV) spreadsheet that
606 contains information about the recipes.
607 The information provides the <filename>distrodata</filename> and
608 <filename>distro_check</filename> tasks, which do upstream checking
609 and also verify if a package is used in multiple major distributions.
610 </para>
611
612 <para>
613 The class is not included by default.
614 To use it, you must include the following files and set the
615 <link linkend='var-INHERIT'><filename>INHERIT</filename></link>
616 variable:
617 <literallayout class='monospaced'>
618 include conf/distro/include/distro_alias.inc
619 include conf/distro/include/recipe_color.inc
620 include conf/distro/include/maintainers.inc
621 include conf/distro/include/upstream_tracking.inc
622 include conf/distro/include/package_regex.inc
623 INHERIT+= "distrodata"
624 </literallayout>
625 </para>
626</section>
627
628<section id='ref-classes-distutils'>
629 <title><filename>distutils.bbclass</filename></title>
630
631 <para>
632 The <filename>distutils</filename> class supports recipes for Python
633 version 2.x extensions, which are simple.
634 These recipes usually only need to point to the source's archive and
635 then inherit the proper class.
636 Building is split into two methods depending on which method the
637 module authors used.
638 <itemizedlist>
639 <listitem><para>Extensions that use an Autotools-based build system
640 require Autotools and
641 <filename>distutils</filename>-based classes in their recipes.
642 </para></listitem>
643 <listitem><para>Extensions that use build systems based on
644 <filename>distutils</filename> require
645 the <filename>distutils</filename> class in their recipes.
646 </para></listitem>
647 <listitem><para>Extensions that use build systems based on
648 <filename>setuptools</filename> require the
649 <link linkend='ref-classes-setuptools'><filename>setuptools</filename></link>
650 class in their recipes.
651 </para></listitem>
652 </itemizedlist>
653 </para>
654</section>
655
656<section id='ref-classes-distutils3'>
657 <title><filename>distutils3.bbclass</filename></title>
658
659 <para>
660 The <filename>distutils3</filename> class supports recipes for Python
661 version 3.x extensions, which are simple.
662 These recipes usually only need to point to the source's archive and
663 then inherit the proper class.
664 Building is split into two methods depending on which method the
665 module authors used.
666 <itemizedlist>
667 <listitem><para>Extensions that use an Autotools-based build system
668 require Autotools and
669 <filename>distutils</filename>-based classes in their recipes.
670 </para></listitem>
671 <listitem><para>Extensions that use
672 <filename>distutils</filename>-based build systems require
673 the <filename>distutils</filename> class in their recipes.
674 </para></listitem>
675 <listitem><para>Extensions that use build systems based on
676 <filename>setuptools3</filename> require the
677 <link linkend='ref-classes-setuptools'><filename>setuptools3</filename></link>
678 class in their recipes.
679 </para></listitem>
680 </itemizedlist>
681 </para>
682</section>
683
684<section id='ref-classes-externalsrc'>
685 <title><filename>externalsrc.bbclass</filename></title>
686
687 <para>
688 The <filename>externalsrc</filename> class supports building software
689 from source code that is external to the OpenEmbedded build system.
690 Building software from an external source tree means that the build
691 system's normal fetch, unpack, and patch process is not used.
692 </para>
693
694 <para>
695 By default, the OpenEmbedded build system uses the
696 <link linkend='var-S'><filename>S</filename></link> and
697 <link linkend='var-B'><filename>B</filename></link> variables to
698 locate unpacked recipe source code and to build it, respectively.
699 When your recipe inherits the <filename>externalsrc</filename> class,
700 you use the
701 <link linkend='var-EXTERNALSRC'><filename>EXTERNALSRC</filename></link>
702 and
703 <link linkend='var-EXTERNALSRC_BUILD'><filename>EXTERNALSRC_BUILD</filename></link>
704 variables to ultimately define <filename>S</filename> and
705 <filename>B</filename>.
706 </para>
707
708 <para>
709 By default, this class expects the source code to support recipe builds
710 that use the <link linkend='var-B'><filename>B</filename></link>
711 variable to point to the directory in which the OpenEmbedded build
712 system places the generated objects built from the recipes.
713 By default, the <filename>B</filename> directory is set to the
714 following, which is separate from the source directory
715 (<filename>S</filename>):
716 <literallayout class='monospaced'>
717 ${WORKDIR}/${BPN}/{PV}/
718 </literallayout>
719 See these variables for more information:
720 <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>,
721 <link linkend='var-BPN'><filename>BPN</filename></link>, and
722 <link linkend='var-PV'><filename>PV</filename></link>,
723 </para>
724
725 <para>
726 For more information on the
727 <filename>externalsrc</filename> class, see the comments in
728 <filename>meta/classes/externalsrc.bbclass</filename> in the
729 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
730 For information on how to use the <filename>externalsrc</filename>
731 class, see the
732 "<ulink url='&YOCTO_DOCS_DEV_URL;#building-software-from-an-external-source'>Building Software from an External Source</ulink>"
733 section in the Yocto Project Development Manual.
734 </para>
735</section>
736
737<section id='ref-classes-extrausers'>
738 <title><filename>extrausers.bbclass</filename></title>
739
740 <para>
741 The <filename>extrausers</filename> class allows
742 additional user and group configuration to be applied at the image
743 level.
744 Inheriting this class either globally or from an image recipe allows
745 additional user and group operations to be performed using the
746 <link linkend='var-EXTRA_USERS_PARAMS'><filename>EXTRA_USERS_PARAMS</filename></link>
747 variable.
748 <note>
749 The user and group operations added using the
750 <filename>extrausers</filename> class are not tied to a specific
751 recipe outside of the recipe for the image.
752 Thus, the operations can be performed across the image as a whole.
753 Use the
754 <link linkend='ref-classes-useradd'><filename>useradd</filename></link>
755 class to add user and group configuration to a specific recipe.
756 </note>
757 </para>
758
759 <para>
760 Here is an example that uses this class in an image recipe:
761 <literallayout class='monospaced'>
762 inherit extrausers
763 EXTRA_USERS_PARAMS = "\
764 useradd -p '' tester; \
765 groupadd developers; \
766 userdel nobody; \
767 groupdel -g video; \
768 groupmod -g 1020 developers; \
769 usermod -s /bin/sh tester; \
770 "
771 </literallayout>
772 </para>
773</section>
774
775<section id='ref-classes-fontcache'>
776 <title><filename>fontcache.bbclass</filename></title>
777
778 <para>
779 The <filename>fontcache</filename> class generates the
780 proper post-install and post-remove (postinst and postrm)
781 scriptlets for font packages.
782 These scriptlets call <filename>fc-cache</filename> (part of
783 <filename>Fontconfig</filename>) to add the fonts to the font
784 information cache.
785 Since the cache files are architecture-specific,
786 <filename>fc-cache</filename> runs using QEMU if the postinst
787 scriptlets need to be run on the build host during image creation.
788 </para>
789
790 <para>
791 If the fonts being installed are in packages other than the main
792 package, set
793 <link linkend='var-FONT_PACKAGES'><filename>FONT_PACKAGES</filename></link>
794 to specify the packages containing the fonts.
795 </para>
796</section>
797
798<section id='ref-classes-gconf'>
799 <title><filename>gconf.bbclass</filename></title>
800
801 <para>
802 The <filename>gconf</filename> class provides common
803 functionality for recipes that need to install GConf schemas.
804 The schemas will be put into a separate package
805 (<filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}-gconf</filename>)
806 that is created automatically when this class is inherited.
807 This package uses the appropriate post-install and post-remove
808 (postinst/postrm) scriptlets to register and unregister the schemas
809 in the target image.
810 </para>
811</section>
812
813<section id='ref-classes-gettext'>
814 <title><filename>gettext.bbclass</filename></title>
815
816 <para>
817 The <filename>gettext</filename> class provides support for
818 building software that uses the GNU <filename>gettext</filename>
819 internationalization and localization system.
820 All recipes building software that use
821 <filename>gettext</filename> should inherit this class.
822 </para>
823</section>
824
825<section id='ref-classes-gnome'>
826 <title><filename>gnome.bbclass</filename></title>
827
828 <para>
829 The <filename>gnome</filename> class supports recipes that
830 build software from the GNOME stack.
831 This class inherits the
832 <link linkend='ref-classes-gnomebase'><filename>gnomebase</filename></link>,
833 <link linkend='ref-classes-gtk-icon-cache'><filename>gtk-icon-cache</filename></link>,
834 <link linkend='ref-classes-gconf'><filename>gconf</filename></link> and
835 <link linkend='ref-classes-mime'><filename>mime</filename></link> classes.
836 The class also disables GObject introspection where applicable.
837 </para>
838</section>
839
840<section id='ref-classes-gnomebase'>
841 <title><filename>gnomebase.bbclass</filename></title>
842
843 <para>
844 The <filename>gnomebase</filename> class is the base
845 class for recipes that build software from the GNOME stack.
846 This class sets
847 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link> to
848 download the source from the GNOME mirrors as well as extending
849 <link linkend='var-FILES'><filename>FILES</filename></link>
850 with the typical GNOME installation paths.
851 </para>
852</section>
853
854<section id='ref-classes-grub-efi'>
855 <title><filename>grub-efi.bbclass</filename></title>
856
857 <para>
858 The <filename>grub-efi</filename>
859 class provides <filename>grub-efi</filename>-specific functions for
860 building bootable images.
861 </para>
862
863 <para>
864 This class supports several variables:
865 <itemizedlist>
866 <listitem><para>
867 <link linkend='var-INITRD'><filename>INITRD</filename></link>:
868 Indicates a filesystem image to use as an initrd (optional).
869 </para></listitem>
870 <listitem><para>
871 <link linkend='var-ROOTFS'><filename>ROOTFS</filename></link>:
872 Indicates a filesystem image to include as the root filesystem
873 (optional).</para></listitem>
874 <listitem><para>
875 <link linkend='var-GRUB_GFXSERIAL'><filename>GRUB_GFXSERIAL</filename></link>:
876 Set this to "1" to have graphics and serial in the boot menu.
877 </para></listitem>
878 <listitem><para>
879 <link linkend='var-LABELS'><filename>LABELS</filename></link>:
880 A list of targets for the automatic configuration.
881 </para></listitem>
882 <listitem><para>
883 <link linkend='var-APPEND'><filename>APPEND</filename></link>:
884 An override list of append strings for each
885 <filename>LABEL</filename>.
886 </para></listitem>
887 <listitem><para>
888 <link linkend='var-GRUB_OPTS'><filename>GRUB_OPTS</filename></link>:
889 Additional options to add to the configuration (optional).
890 Options are delimited using semi-colon characters
891 (<filename>;</filename>).</para></listitem>
892 <listitem><para>
893 <link linkend='var-GRUB_TIMEOUT'><filename>GRUB_TIMEOUT</filename></link>:
894 Timeout before executing the default <filename>LABEL</filename>
895 (optional).
896 </para></listitem>
897 </itemizedlist>
898 </para>
899</section>
900
901<section id='ref-classes-gsettings'>
902 <title><filename>gsettings.bbclass</filename></title>
903
904 <para>
905 The <filename>gsettings</filename> class
906 provides common functionality for recipes that need to install
907 GSettings (glib) schemas.
908 The schemas are assumed to be part of the main package.
909 Appropriate post-install and post-remove (postinst/postrm)
910 scriptlets are added to register and unregister the schemas in the
911 target image.
912 </para>
913</section>
914
915<section id='ref-classes-gtk-doc'>
916 <title><filename>gtk-doc.bbclass</filename></title>
917
918 <para>
919 The <filename>gtk-doc</filename> class
920 is a helper class to pull in the appropriate
921 <filename>gtk-doc</filename> dependencies and disable
922 <filename>gtk-doc</filename>.
923 </para>
924</section>
925
926<section id='ref-classes-gtk-icon-cache'>
927 <title><filename>gtk-icon-cache.bbclass</filename></title>
928
929 <para>
930 The <filename>gtk-icon-cache</filename> class
931 generates the proper post-install and post-remove (postinst/postrm)
932 scriptlets for packages that use GTK+ and install icons.
933 These scriptlets call <filename>gtk-update-icon-cache</filename> to add
934 the fonts to GTK+'s icon cache.
935 Since the cache files are architecture-specific,
936 <filename>gtk-update-icon-cache</filename> is run using QEMU if the
937 postinst scriptlets need to be run on the build host during image
938 creation.
939 </para>
940</section>
941
942<section id='ref-classes-gtk-immodules-cache'>
943 <title><filename>gtk-immodules-cache.bbclass</filename></title>
944
945 <para>
946 The <filename>gtk-immodules-cache</filename> class
947 generates the proper post-install and post-remove (postinst/postrm)
948 scriptlets for packages that install GTK+ input method modules for
949 virtual keyboards.
950 These scriptlets call <filename>gtk-update-icon-cache</filename> to add
951 the input method modules to the cache.
952 Since the cache files are architecture-specific,
953 <filename>gtk-update-icon-cache</filename> is run using QEMU if the
954 postinst scriptlets need to be run on the build host during image
955 creation.
956 </para>
957
958 <para>
959 If the input method modules being installed are in packages other than
960 the main package, set
961 <link linkend='var-GTKIMMODULES_PACKAGES'><filename>GTKIMMODULES_PACKAGES</filename></link>
962 to specify the packages containing the modules.
963 </para>
964</section>
965
966<section id='ref-classes-gzipnative'>
967 <title><filename>gzipnative.bbclass</filename></title>
968
969 <para>
970 The <filename>gzipnative</filename>
971 class enables the use of native versions of <filename>gzip</filename>
972 and <filename>pigz</filename> rather than the versions of these tools
973 from the build host.
974 </para>
975</section>
976
977<section id='ref-classes-icecc'>
978 <title><filename>icecc.bbclass</filename></title>
979
980 <para>
981 The <filename>icecc</filename> class supports
982 <ulink url='https://github.com/icecc/icecream'>Icecream</ulink>, which
983 facilitates taking compile jobs and distributing them among remote
984 machines.
985 </para>
986
987 <para>
988 The class stages directories with symlinks from <filename>gcc</filename>
989 and <filename>g++</filename> to <filename>icecc</filename>, for both
990 native and cross compilers.
991 Depending on each configure or compile, the OpenEmbedded build system
992 adds the directories at the head of the <filename>PATH</filename> list
993 and then sets the <filename>ICECC_CXX</filename> and
994 <filename>ICEC_CC</filename> variables, which are the paths to the
995 <filename>g++</filename> and <filename>gcc</filename> compilers,
996 respectively.
997 </para>
998
999 <para>
1000 For the cross compiler, the class creates a <filename>tar.gz</filename>
1001 file that contains the Yocto Project toolchain and sets
1002 <filename>ICECC_VERSION</filename>, which is the version of the
1003 cross-compiler used in the cross-development toolchain, accordingly.
1004 </para>
1005
1006 <para>
1007 The class handles all three different compile stages
1008 (i.e native ,cross-kernel and target) and creates the necessary
1009 environment <filename>tar.gz</filename> file to be used by the remote
1010 machines.
1011 The class also supports SDK generation.
1012 </para>
1013
1014 <para>
1015 If <link linkend='var-ICECC_PATH'><filename>ICECC_PATH</filename></link>
1016 is not set in your <filename>local.conf</filename> file, then the
1017 class tries to locate the <filename>icecc</filename> binary
1018 using <filename>which</filename>.
1019
1020 If
1021 <link linkend='var-ICECC_ENV_EXEC'><filename>ICECC_ENV_EXEC</filename></link>
1022 is set in your <filename>local.conf</filename> file, the variable should
1023 point to the <filename>icecc-create-env</filename> script
1024 provided by the user.
1025 If you do not point to a user-provided script, the build system
1026 uses the default script provided by the recipe
1027 <filename>icecc-create-env-native.bb</filename>.
1028 <note>
1029 This script is a modified version and not the one that comes with
1030 <filename>icecc</filename>.
1031 </note>
1032 </para>
1033
1034 <para>
1035 If you do not want the Icecream distributed compile support to apply
1036 to specific recipes or classes, you can effectively "blacklist" them
1037 by listing the recipes and classes using the
1038 <link linkend='var-ICECC_USER_PACKAGE_BL'><filename>ICECC_USER_PACKAGE_BL</filename></link>
1039 and
1040 <link linkend='var-ICECC_USER_CLASS_BL'><filename>ICECC_USER_CLASS_BL</filename></link>,
1041 variables, respectively, in your <filename>local.conf</filename> file.
1042 Doing so causes the OpenEmbedded build system to handle these
1043 compilations locally.
1044 </para>
1045
1046 <para>
1047 Additionally, you can list recipes using the
1048 <link linkend='var-ICECC_USER_PACKAGE_WL'><filename>ICECC_USER_PACKAGE_WL</filename></link>
1049 variable in your <filename>local.conf</filename> file to force
1050 <filename>icecc</filename> to be enabled for recipes using an empty
1051 <link linkend='var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></link>
1052 variable.
1053 </para>
1054
1055 <para>
1056 Inheriting the <filename>icecc</filename> class changes all sstate
1057 signatures.
1058 Consequently, if a development team has a dedicated build system
1059 that populates
1060 <link linkend='var-SSTATE_MIRRORS'><filename>STATE_MIRRORS</filename></link>
1061 and they want to reuse sstate from
1062 <filename>STATE_MIRRORS</filename>, then all developers and the
1063 build system need to either inherit the <filename>icecc</filename>
1064 class or nobody should.
1065 </para>
1066
1067 <para>
1068 At the distribution level, you can inherit the
1069 <filename>icecc</filename> class to be sure that all builders start
1070 with the same sstate signatures.
1071 After inheriting the class, you can then disable the feature by setting
1072 the
1073 <link linkend='var-ICECC_DISABLED'><filename>ICECC_DISABLED</filename></link>
1074 variable to "1" as follows:
1075 <literallayout class='monospaced'>
1076 INHERIT_DISTRO += "icecc"
1077 ICECC_DISABLED ??= "1"
1078 </literallayout>
1079 This practice makes sure everyone is using the same signatures but also
1080 requires individuals that do want to use Icecream to enable the feature
1081 individually as follows in your <filename>local.conf</filename> file:
1082 <literallayout class='monospaced'>
1083 ICECC_DISABLED = ""
1084 </literallayout>
1085 </para>
1086</section>
1087
1088<section id='ref-classes-image'>
1089 <title><filename>image.bbclass</filename></title>
1090
1091 <para>
1092 The <filename>image</filename> class helps support creating images
1093 in different formats.
1094 First, the root filesystem is created from packages using
1095 one of the <filename>rootfs*.bbclass</filename>
1096 files (depending on the package format used) and then one or more image
1097 files are created.
1098 <itemizedlist>
1099 <listitem><para>The
1100 <filename><link linkend='var-IMAGE_FSTYPES'>IMAGE_FSTYPES</link></filename>
1101 variable controls the types of images to generate.
1102 </para></listitem>
1103 <listitem><para>The
1104 <filename><link linkend='var-IMAGE_INSTALL'>IMAGE_INSTALL</link></filename>
1105 variable controls the list of packages to install into the
1106 image.</para></listitem>
1107 </itemizedlist>
1108 For information on customizing images, see the
1109 "<ulink url='&YOCTO_DOCS_DEV_URL;#usingpoky-extend-customimage'>Customizing Images</ulink>"
1110 section in the Yocto Project Development Manual.
1111 For information on how images are created, see the
1112 "<link linkend='images-dev-environment'>Images</link>" section elsewhere
1113 in this manual.
1114 </para>
1115</section>
1116
1117<section id='ref-classes-image_types'>
1118 <title><filename>image_types.bbclass</filename></title>
1119
1120 <para>
1121 The <filename>image_types</filename> class defines all of
1122 the standard image output types that you can enable through the
1123 <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
1124 variable.
1125 You can use this class as a reference on how to add support for custom
1126 image output types.
1127 </para>
1128
1129 <para>
1130 By default, this class is enabled through the
1131 <link linkend='var-IMAGE_CLASSES'><filename>IMAGE_CLASSES</filename></link>
1132 variable in
1133 <link linkend='ref-classes-image'><filename>image.bbclass</filename></link>.
1134 If you define your own image types using a custom BitBake class and
1135 then use <filename>IMAGE_CLASSES</filename> to enable it, the custom
1136 class must either inherit <filename>image_types</filename> or
1137 <filename>image_types</filename> must also appear in
1138 <filename>IMAGE_CLASSES</filename>.
1139 </para>
1140</section>
1141
1142<section id='ref-classes-image_types_uboot'>
1143 <title><filename>image_types_uboot.bbclass</filename></title>
1144
1145 <para>
1146 The <filename>image_types_uboot</filename> class
1147 defines additional image types specifically for the U-Boot bootloader.
1148 </para>
1149</section>
1150
1151<section id='ref-classes-image-live'>
1152 <title><filename>image-live.bbclass</filename></title>
1153
1154 <para>
1155 The <filename>image-live</filename> class supports building "live"
1156 images.
1157 </para>
1158
1159 <para>
1160 Normally, you do not use this class directly.
1161 Instead, you add "live" to
1162 <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>.
1163 For example, if you were building an ISO image, you would add "live"
1164 to <filename>IMAGE_FSTYPES</filename>, set the
1165 <link linkend='var-NOISO'><filename>NOISO</filename></link> variable to
1166 "0" and the build system would use the <filename>image-live</filename>
1167 class to build the ISO image.
1168 </para>
1169</section>
1170
1171<section id='ref-classes-image-mklibs'>
1172 <title><filename>image-mklibs.bbclass</filename></title>
1173
1174 <para>
1175 The <filename>image-mklibs</filename> class
1176 enables the use of the <filename>mklibs</filename> utility during the
1177 <filename>do_rootfs</filename> task, which optimizes the size of
1178 libraries contained in the image.
1179 </para>
1180
1181 <para>
1182 By default, the class is enabled in the
1183 <filename>local.conf.template</filename> using the
1184 <link linkend='var-USER_CLASSES'><filename>USER_CLASSES</filename></link>
1185 variable as follows:
1186 <literallayout class='monospaced'>
1187 USER_CLASSES ?= "buildstats image-mklibs image-prelink"
1188 </literallayout>
1189 </para>
1190</section>
1191
1192<section id='ref-classes-image-prelink'>
1193 <title><filename>image-prelink.bbclass</filename></title>
1194
1195 <para>
1196 The <filename>image-prelink</filename> class
1197 enables the use of the <filename>prelink</filename> utility during
1198 the <filename>do_rootfs</filename> task, which optimizes the dynamic
1199 linking of shared libraries to reduce executable startup time.
1200 </para>
1201
1202 <para>
1203 By default, the class is enabled in the
1204 <filename>local.conf.template</filename> using the
1205 <link linkend='var-USER_CLASSES'><filename>USER_CLASSES</filename></link>
1206 variable as follows:
1207 <literallayout class='monospaced'>
1208 USER_CLASSES ?= "buildstats image-mklibs image-prelink"
1209 </literallayout>
1210 </para>
1211</section>
1212
1213<section id='ref-classes-image-swab'>
1214 <title><filename>image-swab.bbclass</filename></title>
1215
1216 <para>
1217 The <filename>image-swab</filename> class enables the
1218 <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/swabber'>Swabber</ulink>
1219 tool in order to detect and log accesses to the host system during
1220 the OpenEmbedded build process.
1221 <note>
1222 This class is currently unmaintained.
1223 </note>
1224 </para>
1225</section>
1226
1227<section id='ref-classes-image-vmdk'>
1228 <title><filename>image-vmdk.bbclass</filename></title>
1229
1230 <para>
1231 The <filename>image-vmdk</filename> class supports building VMware
1232 VMDK images.
1233 Normally, you do not use this class directly.
1234 Instead, you add "vmdk" to
1235 <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>.
1236 </para>
1237</section>
1238
1239<section id='ref-classes-insane'>
1240 <title><filename>insane.bbclass</filename></title>
1241
1242 <para>
1243 The <filename>insane</filename> class adds a step to the package
1244 generation process so that output quality assurance checks are
1245 generated by the OpenEmbedded build system.
1246 A range of checks are performed that check the build's output
1247 for common problems that show up during runtime.
1248 Distribution policy usually dictates whether to include this class.
1249 </para>
1250
1251 <para>
1252 You can configure the sanity checks so that specific test failures
1253 either raise a warning or an error message.
1254 Typically, failures for new tests generate a warning.
1255 Subsequent failures for the same test would then generate an error
1256 message once the metadata is in a known and good condition.
1257 </para>
1258
1259 <para>
1260 Use the
1261 <link linkend='var-WARN_QA'><filename>WARN_QA</filename></link> and
1262 <link linkend='var-ERROR_QA'><filename>ERROR_QA</filename></link>
1263 variables to control the behavior of
1264 these checks at the global level (i.e. in your custom distro
1265 configuration).
1266 However, to skip one or more checks in recipes, you should use
1267 <link linkend='var-INSANE_SKIP'><filename>INSANE_SKIP</filename></link>.
1268 For example, to skip the check for symbolic link
1269 <filename>.so</filename> files in the main package of a recipe,
1270 add the following to the recipe.
1271 You need to realize that the package name override, in this example
1272 <filename>${PN}</filename>, must be used:
1273 <literallayout class='monospaced'>
1274 INSANE_SKIP_${PN} += "dev-so"
1275 </literallayout>
1276 Please keep in mind that the QA checks exist in order to detect real
1277 or potential problems in the packaged output.
1278 So exercise caution when disabling these checks.
1279 </para>
1280
1281 <para>
1282 The following list shows the tests you can list with the
1283 <filename>WARN_QA</filename> and <filename>ERROR_QA</filename>
1284 variables:
1285 <itemizedlist>
1286 <listitem><para><emphasis><filename>already-stripped:</filename></emphasis>
1287 Checks that produced binaries have not already been
1288 stripped prior to the build system extracting debug symbols.
1289 It is common for upstream software projects to default to
1290 stripping debug symbols for output binaries.
1291 In order for debugging to work on the target using
1292 <filename>-dbg</filename> packages, this stripping must be
1293 disabled.
1294 </para></listitem>
1295 <listitem><para><emphasis><filename>arch:</filename></emphasis>
1296 Checks the Executable and Linkable Format (ELF) type, bit size,
1297 and endianness of any binaries to ensure they match the target
1298 architecture.
1299 This test fails if any binaries do not match the type since
1300 there would be an incompatibility.
1301 The test could indicate that the
1302 wrong compiler or compiler options have been used.
1303 Sometimes software, like bootloaders, might need to bypass
1304 this check.
1305 </para></listitem>
1306 <listitem><para><emphasis><filename>buildpaths:</filename></emphasis>
1307 Checks for paths to locations on the build host inside the
1308 output files.
1309 Currently, this test triggers too many false positives and
1310 thus is not normally enabled.
1311 </para></listitem>
1312 <listitem><para><emphasis><filename>compile-host-path:</filename></emphasis>
1313 Checks the <filename>do_compile</filename> log for indications
1314 that paths to locations on the build host were used.
1315 Using such paths might result in host contamination of the
1316 build output.
1317 </para></listitem>
1318 <listitem><para><emphasis><filename>debug-deps:</filename></emphasis>
1319 Checks that <filename>-dbg</filename> packages only depend on other
1320 <filename>-dbg</filename> packages and not on any other types of packages,
1321 which would cause a packaging bug.</para></listitem>
1322 <listitem><para><emphasis><filename>debug-files:</filename></emphasis>
1323 Checks for <filename>.debug</filename> directories in anything but the
1324 <filename>-dbg</filename> package.
1325 The debug files should all be in the <filename>-dbg</filename> package.
1326 Thus, anything packaged elsewhere is incorrect packaging.</para></listitem>
1327 <listitem><para><emphasis><filename>dep-cmp:</filename></emphasis>
1328 Checks for invalid version comparison statements in runtime
1329 dependency relationships between packages (i.e. in
1330 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>,
1331 <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>,
1332 <link linkend='var-RSUGGESTS'><filename>RSUGGESTS</filename></link>,
1333 <link linkend='var-RPROVIDES'><filename>RPROVIDES</filename></link>,
1334 <link linkend='var-RREPLACES'><filename>RREPLACES</filename></link>,
1335 and
1336 <link linkend='var-RCONFLICTS'><filename>RCONFLICTS</filename></link>
1337 variable values).
1338 Any invalid comparisons might trigger failures or undesirable
1339 behavior when passed to the package manager.
1340 </para></listitem>
1341 <listitem><para><emphasis><filename>desktop:</filename></emphasis>
1342 Runs the <filename>desktop-file-validate</filename> program
1343 against any <filename>.desktop</filename> files to validate
1344 their contents against the specification for
1345 <filename>.desktop</filename> files.</para></listitem>
1346 <listitem><para><emphasis><filename>dev-deps:</filename></emphasis>
1347 Checks that <filename>-dev</filename> packages only depend on other
1348 <filename>-dev</filename> packages and not on any other types of packages,
1349 which would be a packaging bug.</para></listitem>
1350 <listitem><para><emphasis><filename>dev-so:</filename></emphasis>
1351 Checks that the <filename>.so</filename> symbolic links are in the
1352 <filename>-dev</filename> package and not in any of the other packages.
1353 In general, these symlinks are only useful for development purposes.
1354 Thus, the <filename>-dev</filename> package is the correct location for
1355 them.
1356 Some very rare cases do exist for dynamically loaded modules where
1357 these symlinks are needed instead in the main package.
1358 </para></listitem>
1359 <listitem><para><emphasis><filename>files-invalid:</filename></emphasis>
1360 Checks for
1361 <link linkend='var-FILES'><filename>FILES</filename></link>
1362 variable values that contain "//", which is invalid.
1363 </para></listitem>
1364 <listitem><para><emphasis><filename>incompatible-license:</filename></emphasis>
1365 Report when packages are excluded from being created due to
1366 being marked with a license that is in
1367 <link linkend='var-INCOMPATIBLE_LICENSE'><filename>INCOMPATIBLE_LICENSE</filename></link>.
1368 </para></listitem>
1369 <listitem><para><emphasis><filename>install-host-path:</filename></emphasis>
1370 Checks the <filename>do_install</filename> log for indications
1371 that paths to locations on the build host were used.
1372 Using such paths might result in host contamination of the
1373 build output.
1374 </para></listitem>
1375 <listitem><para><emphasis><filename>installed-vs-shipped:</filename></emphasis>
1376 Reports when files have been installed within
1377 <filename>do_install</filename> but have not been included in
1378 any package by way of the
1379 <link linkend='var-FILES'><filename>FILES</filename></link>
1380 variable.
1381 Files that do not appear in any package cannot be present in
1382 an image later on in the build process.
1383 Ideally, all installed files should be packaged or not
1384 installed at all.
1385 These files can be deleted at the end of
1386 <filename>do_install</filename> if the files are not
1387 needed in any package.
1388 </para></listitem>
1389 <listitem><para><emphasis><filename>la:</filename></emphasis>
1390 Checks <filename>.la</filename> files for any <filename>TMPDIR</filename>
1391 paths.
1392 Any <filename>.la</filename> file containing these paths is incorrect since
1393 <filename>libtool</filename> adds the correct sysroot prefix when using the
1394 files automatically itself.</para></listitem>
1395 <listitem><para><emphasis><filename>ldflags:</filename></emphasis>
1396 Ensures that the binaries were linked with the
1397 <filename>LDFLAGS</filename> options provided by the build system.
1398 If this test fails, check that the <filename>LDFLAGS</filename> variable
1399 is being passed to the linker command.</para></listitem>
1400 <listitem><para><emphasis><filename>libdir:</filename></emphasis>
1401 Checks for libraries being installed into incorrect
1402 (possibly hardcoded) installation paths.
1403 For example, this test will catch recipes that install
1404 <filename>/lib/bar.so</filename> when
1405 <filename>${base_libdir}</filename> is "lib32".
1406 Another example is when recipes install
1407 <filename>/usr/lib64/foo.so</filename> when
1408 <filename>${libdir}</filename> is "/usr/lib".
1409 </para></listitem>
1410 <listitem><para><emphasis><filename>libexec:</filename></emphasis>
1411 Checks if a package contains files in
1412 <filename>/usr/libexec</filename>.
1413 This check is not performed if the
1414 <filename>libexecdir</filename> variable has been set
1415 explicitly to <filename>/usr/libexec</filename>.
1416 </para></listitem>
1417 <listitem><para><emphasis><filename>packages-list:</filename></emphasis>
1418 Checks for the same package being listed multiple times through
1419 the <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>
1420 variable value.
1421 Installing the package in this manner can cause errors during
1422 packaging.
1423 </para></listitem>
1424 <listitem><para><emphasis><filename>perm-config:</filename></emphasis>
1425 Reports lines in <filename>fs-perms.txt</filename> that have
1426 an invalid format.
1427 </para></listitem>
1428 <listitem><para><emphasis><filename>perm-line:</filename></emphasis>
1429 Reports lines in <filename>fs-perms.txt</filename> that have
1430 an invalid format.
1431 </para></listitem>
1432 <listitem><para><emphasis><filename>perm-link:</filename></emphasis>
1433 Reports lines in <filename>fs-perms.txt</filename> that
1434 specify 'link' where the specified target already exists.
1435 </para></listitem>
1436 <listitem><para><emphasis><filename>perms:</filename></emphasis>
1437 Currently, this check is unused but reserved.
1438 </para></listitem>
1439 <listitem><para><emphasis><filename>pkgconfig:</filename></emphasis>
1440 Checks <filename>.pc</filename> files for any
1441 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>/<link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>
1442 paths.
1443 Any <filename>.pc</filename> file containing these paths is incorrect
1444 since <filename>pkg-config</filename> itself adds the correct sysroot prefix
1445 when the files are accessed.</para></listitem>
1446 <listitem><para><emphasis><filename>pkgname:</filename></emphasis>
1447 Checks that all packages in
1448 <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>
1449 have names that do not contain invalid characters (i.e.
1450 characters other than 0-9, a-z, ., +, and -).
1451 </para></listitem>
1452 <listitem><para><emphasis><filename>pkgv-undefined:</filename></emphasis>
1453 Checks to see if the <filename>PKGV</filename> variable
1454 is undefined during <filename>do_package</filename>.
1455 </para></listitem>
1456 <listitem><para><emphasis><filename>pkgvarcheck:</filename></emphasis>
1457 Checks through the variables
1458 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>,
1459 <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>,
1460 <link linkend='var-RSUGGESTS'><filename>RSUGGESTS</filename></link>,
1461 <link linkend='var-RCONFLICTS'><filename>RCONFLICTS</filename></link>,
1462 <link linkend='var-RPROVIDES'><filename>RPROVIDES</filename></link>,
1463 <link linkend='var-RREPLACES'><filename>RREPLACES</filename></link>,
1464 <link linkend='var-FILES'><filename>FILES</filename></link>,
1465 <link linkend='var-ALLOW_EMPTY'><filename>ALLOW_EMPTY</filename></link>,
1466 <filename>pkg_preinst</filename>,
1467 <filename>pkg_postinst</filename>,
1468 <filename>pkg_prerm</filename>
1469 and <filename>pkg_postrm</filename>, and reports if there are
1470 variable sets that are not package-specific.
1471 Using these variables without a package suffix is bad practice,
1472 and might unnecessarily complicate dependencies of other packages
1473 within the same recipe or have other unintended consequences.
1474 </para></listitem>
1475 <listitem><para><emphasis><filename>pn-overrides:</filename></emphasis>
1476 Checks that a recipe does not have a name
1477 (<link linkend='var-PN'><filename>PN</filename></link>) value
1478 that appears in
1479 <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>.
1480 If a recipe is named such that its <filename>PN</filename>
1481 value matches something already in
1482 <filename>OVERRIDES</filename> (e.g. <filename>PN</filename>
1483 happens to be the same as
1484 <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
1485 or
1486 <link linkend='var-DISTRO'><filename>DISTRO</filename></link>),
1487 it can have unexpected consequences.
1488 For example, assignments such as
1489 <filename>FILES_${PN} = "xyz"</filename> effectively turn into
1490 <filename>FILES = "xyz"</filename>.
1491 </para></listitem>
1492 <listitem><para><emphasis><filename>rpaths:</filename></emphasis>
1493 Checks for rpaths in the binaries that contain build system paths such
1494 as <filename>TMPDIR</filename>.
1495 If this test fails, bad <filename>-rpath</filename> options are being
1496 passed to the linker commands and your binaries have potential security
1497 issues.</para></listitem>
1498 <listitem><para><emphasis><filename>split-strip:</filename></emphasis>
1499 Reports that splitting or stripping debug symbols from binaries
1500 has failed.
1501 </para></listitem>
1502 <listitem><para><emphasis><filename>staticdev:</filename></emphasis>
1503 Checks for static library files (<filename>*.a</filename>) in
1504 non-<filename>staticdev</filename> packages.
1505 </para></listitem>
1506 <listitem><para><emphasis><filename>symlink-to-sysroot:</filename></emphasis>
1507 Checks for symlinks in packages that point into
1508 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
1509 on the host.
1510 Such symlinks will work on the host, but are clearly invalid
1511 when running on the target.
1512 </para></listitem>
1513 <listitem><para><emphasis><filename>textrel:</filename></emphasis>
1514 Checks for ELF binaries that contain relocations in their
1515 <filename>.text</filename> sections, which can result in a
1516 performance impact at runtime.</para></listitem>
1517 <listitem><para><emphasis><filename>unsafe-references-in-binaries:</filename></emphasis>
1518 Reports when a binary installed in
1519 <filename>${base_libdir}</filename>,
1520 <filename>${base_bindir}</filename>, or
1521 <filename>${base_sbindir}</filename>, depends on another
1522 binary installed under <filename>${exec_prefix}</filename>.
1523 This dependency is a concern if you want the system to remain
1524 basically operable if <filename>/usr</filename> is mounted
1525 separately and is not mounted.
1526 <note>
1527 Defaults for binaries installed in
1528 <filename>${base_libdir}</filename>,
1529 <filename>${base_bindir}</filename>, and
1530 <filename>${base_sbindir}</filename> are
1531 <filename>/lib</filename>, <filename>/bin</filename>, and
1532 <filename>/sbin</filename>, respectively.
1533 The default for a binary installed
1534 under <filename>${exec_prefix}</filename> is
1535 <filename>/usr</filename>.
1536 </note>
1537 </para></listitem>
1538 <listitem><para><emphasis><filename>unsafe-references-in-scripts:</filename></emphasis>
1539 Reports when a script file installed in
1540 <filename>${base_libdir}</filename>,
1541 <filename>${base_bindir}</filename>, or
1542 <filename>${base_sbindir}</filename>, depends on files
1543 installed under <filename>${exec_prefix}</filename>.
1544 This dependency is a concern if you want the system to remain
1545 basically operable if <filename>/usr</filename> is mounted
1546 separately and is not mounted.
1547 <note>
1548 Defaults for binaries installed in
1549 <filename>${base_libdir}</filename>,
1550 <filename>${base_bindir}</filename>, and
1551 <filename>${base_sbindir}</filename> are
1552 <filename>/lib</filename>, <filename>/bin</filename>, and
1553 <filename>/sbin</filename>, respectively.
1554 The default for a binary installed
1555 under <filename>${exec_prefix}</filename> is
1556 <filename>/usr</filename>.
1557 </note>
1558 </para></listitem>
1559 <listitem><para><emphasis><filename>useless-rpaths:</filename></emphasis>
1560 Checks for dynamic library load paths (rpaths) in the binaries that
1561 by default on a standard system are searched by the linker (e.g.
1562 <filename>/lib</filename> and <filename>/usr/lib</filename>).
1563 While these paths will not cause any breakage, they do waste space and
1564 are unnecessary.</para></listitem>
1565 <listitem><para><emphasis><filename>var-undefined:</filename></emphasis>
1566 Reports when variables fundamental to packaging (i.e.
1567 <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>,
1568 <link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link>,
1569 <link linkend='var-D'><filename>D</filename></link>,
1570 <link linkend='var-PN'><filename>PN</filename></link>, and
1571 <link linkend='var-PKGD'><filename>PKGD</filename></link>) are
1572 undefined during <filename>do_package</filename>.
1573 </para></listitem>
1574 <listitem><para><emphasis><filename>version-going-backwards:</filename></emphasis>
1575 If Build History is enabled, reports when a package
1576 being written out has a lower version than the previously
1577 written package under the same name.
1578 If you are placing output packages into a feed and
1579 upgrading packages on a target system using that feed, the
1580 version of a package going backwards can result in the target
1581 system not correctly upgrading to the "new" version of the
1582 package.
1583 <note>
1584 If you are not using runtime package management on your
1585 target system, then you do not need to worry about
1586 this situation.
1587 </note>
1588 </para></listitem>
1589 <listitem><para><emphasis><filename>xorg-driver-abi:</filename></emphasis>
1590 Checks that all packages containing Xorg drivers have ABI
1591 dependencies.
1592 The <filename>xserver-xorg</filename> recipe provides driver
1593 ABI names.
1594 All drivers should depend on the ABI versions that they have
1595 been built against.
1596 Driver recipes that include
1597 <filename>xorg-driver-input.inc</filename>
1598 or <filename>xorg-driver-video.inc</filename> will
1599 automatically get these versions.
1600 Consequently, you should only need to explicitly add
1601 dependencies to binary driver recipes.
1602 </para></listitem>
1603 </itemizedlist>
1604 </para>
1605</section>
1606
1607<section id='ref-classes-insserv'>
1608 <title><filename>insserv.bbclass</filename></title>
1609
1610 <para>
1611 The <filename>insserv</filename> class
1612 uses the <filename>insserv</filename> utility to update the order of
1613 symbolic links in <filename>/etc/rc?.d/</filename> within an image
1614 based on dependencies specified by LSB headers in the
1615 <filename>init.d</filename> scripts themselves.
1616 </para>
1617</section>
1618
1619<section id='ref-classes-kernel'>
1620 <title><filename>kernel.bbclass</filename></title>
1621
1622 <para>
1623 The <filename>kernel</filename> class handles building Linux kernels.
1624 The class contains code to build all kernel trees.
1625 All needed headers are staged into the
1626 <filename><link linkend='var-STAGING_KERNEL_DIR'>STAGING_KERNEL_DIR</link></filename>
1627 directory to allow out-of-tree module builds using
1628 the
1629 <link linkend='ref-classes-module'><filename>module</filename></link>
1630 class.
1631 </para>
1632
1633 <para>
1634 This means that each built kernel module is packaged separately and inter-module
1635 dependencies are created by parsing the <filename>modinfo</filename> output.
1636 If all modules are required, then installing the <filename>kernel-modules</filename>
1637 package installs all packages with modules and various other kernel packages
1638 such as <filename>kernel-vmlinux</filename>.
1639 </para>
1640
1641 <para>
1642 Various other classes are used by the <filename>kernel</filename>
1643 and <filename>module</filename> classes internally including the
1644 <link linkend='ref-classes-kernel-arch'><filename>kernel-arch</filename></link>,
1645 <link linkend='ref-classes-module-base'><filename>module-base</filename></link>,
1646 and
1647 <link linkend='ref-classes-linux-kernel-base'><filename>linux-kernel-base</filename></link>
1648 classes.
1649 </para>
1650</section>
1651
1652<section id='ref-classes-kernel-arch'>
1653 <title><filename>kernel-arch.bbclass</filename></title>
1654
1655 <para>
1656 The <filename>kernel-arch</filename> class
1657 sets the <filename>ARCH</filename> environment variable for Linux
1658 kernel compilation (including modules).
1659 </para>
1660</section>
1661
1662<section id='ref-classes-kernel-module-split'>
1663 <title><filename>kernel-module-split.bbclass</filename></title>
1664
1665 <para>
1666 The <filename>kernel-module-split</filename> class
1667 provides common functionality for splitting Linux kernel modules into
1668 separate packages.
1669 </para>
1670</section>
1671
1672<section id='ref-classes-kernel-yocto'>
1673 <title><filename>kernel-yocto.bbclass</filename></title>
1674
1675 <para>
1676 The <filename>kernel-yocto</filename> class
1677 provides common functionality for building from linux-yocto style
1678 kernel source repositories.
1679 </para>
1680</section>
1681
1682<section id='ref-classes-lib_package'>
1683 <title><filename>lib_package.bbclass</filename></title>
1684
1685 <para>
1686 The <filename>lib_package</filename> class
1687 supports recipes that build libraries and produce executable
1688 binaries, where those binaries should not be installed by default
1689 along with the library.
1690 Instead, the binaries are added to a separate
1691 <filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}-bin</filename>
1692 package to make their installation optional.
1693 </para>
1694</section>
1695
1696<section id='ref-classes-license'>
1697 <title><filename>license.bbclass</filename></title>
1698
1699 <para>
1700 The <filename>license</filename> class provides license
1701 manifest creation and license exclusion.
1702 This class is enabled by default using the default value for the
1703 <link linkend='var-INHERIT_DISTRO'><filename>INHERIT_DISTRO</filename></link>
1704 variable.
1705 </para>
1706</section>
1707
1708<section id='ref-classes-linux-kernel-base'>
1709 <title><filename>linux-kernel-base.bbclass</filename></title>
1710
1711 <para>
1712 The <filename>linux-kernel-base</filename> class
1713 provides common functionality for recipes that build out of the Linux
1714 kernel source tree.
1715 These builds goes beyond the kernel itself.
1716 For example, the Perf recipe also inherits this class.
1717 </para>
1718</section>
1719
1720<section id='ref-classes-logging'>
1721 <title><filename>logging.bbclass</filename></title>
1722
1723 <para>
1724 The <filename>logging</filename> class provides the standard
1725 shell functions used to log messages for various BitBake severity levels
1726 (i.e. <filename>bbplain</filename>, <filename>bbnote</filename>,
1727 <filename>bbwarn</filename>, <filename>bberror</filename>,
1728 <filename>bbfatal</filename>, and <filename>bbdebug</filename>).
1729 </para>
1730
1731 <para>
1732 This class is enabled by default since it is inherited by
1733 the <filename>base</filename> class.
1734 </para>
1735</section>
1736
1737<section id='ref-classes-meta'>
1738 <title><filename>meta.bbclass</filename></title>
1739
1740 <para>
1741 The <filename>meta</filename> class is inherited by recipes
1742 that do not build any output packages themselves, but act as a "meta"
1743 target for building other recipes.
1744 </para>
1745</section>
1746
1747<section id='ref-classes-metadata_scm'>
1748 <title><filename>metadata_scm.bbclass</filename></title>
1749
1750 <para>
1751 The <filename>metadata_scm</filename> class provides functionality for
1752 querying the branch and revision of a Source Code Manager (SCM)
1753 repository.
1754 </para>
1755
1756 <para>
1757 The <link linkend='ref-classes-base'><filename>base</filename></link>
1758 class uses this class to print the revisions of each layer before
1759 starting every build.
1760 The <filename>metadata_scm</filename> class is enabled by default
1761 because it is inherited by the <filename>base</filename> class.
1762 </para>
1763</section>
1764
1765<section id='ref-classes-mime'>
1766 <title><filename>mime.bbclass</filename></title>
1767
1768 <para>
1769 The <filename>mime</filename> class generates the proper
1770 post-install and post-remove (postinst/postrm) scriptlets for packages
1771 that install MIME type files.
1772 These scriptlets call <filename>update-mime-database</filename> to add
1773 the MIME types to the shared database.
1774 </para>
1775</section>
1776
1777<section id='ref-classes-mirrors'>
1778 <title><filename>mirrors.bbclass</filename></title>
1779
1780 <para>
1781 The <filename>mirrors</filename> class sets up some standard
1782 <link linkend='var-MIRRORS'><filename>MIRRORS</filename></link> entries
1783 for source code mirrors.
1784 These mirrors provide a fall-back path in case the upstream source
1785 specified in
1786 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
1787 within recipes is unavailable.
1788 </para>
1789
1790 <para>
1791 This class is enabled by default since it is inherited by the
1792 <link linkend='ref-classes-base'><filename>base</filename></link> class.
1793 </para>
1794</section>
1795
1796<section id='ref-classes-module'>
1797 <title><filename>module.bbclass</filename></title>
1798
1799 <para>
1800 The <filename>module</filename> class provides support for building
1801 out-of-tree Linux kernel modules.
1802 The class inherits the
1803 <link linkend='ref-classes-module-base'><filename>module-base</filename></link>
1804 and
1805 <link linkend='ref-classes-kernel-module-split'><filename>kernel-module-split</filename></link>
1806 classes, and implements <filename>do_compile</filename> and
1807 <filename>do_install</filename> functions.
1808 The class provides everything needed to build and package a kernel
1809 module.
1810 </para>
1811
1812 <para>
1813 For general information on out-of-tree Linux kernel modules, see the
1814 "<ulink url='&YOCTO_DOCS_KERNEL_URL;#incorporating-out-of-tree-modules'>Incorporating Out-of-Tree Modules</ulink>"
1815 section in the Yocto Project Linux Kernel Development Manual.
1816 </para>
1817</section>
1818
1819<section id='ref-classes-module-base'>
1820 <title><filename>module-base.bbclass</filename></title>
1821
1822 <para>
1823 The <filename>module-base</filename> class provides the base
1824 functionality for building Linux kernel modules.
1825 Typically, a recipe that builds software that includes one or
1826 more kernel modules and has its own means of building
1827 the module inherits this class as opposed to inheriting the
1828 <link linkend='ref-classes-module'><filename>module</filename></link>
1829 class.
1830 </para>
1831</section>
1832
1833<section id='ref-classes-multilib*'>
1834 <title><filename>multilib*.bbclass</filename></title>
1835
1836 <para>
1837 The <filename>multilib*</filename> classes provide support
1838 for building libraries with different target optimizations or target
1839 architectures and installing them side-by-side in the same image.
1840 </para>
1841
1842 <para>
1843 For more information on using the Multilib feature, see the
1844 "<ulink url='&YOCTO_DOCS_DEV_URL;#combining-multiple-versions-library-files-into-one-image'>Combining Multiple Versions of Library Files into One Image</ulink>"
1845 section in the Yocto Project Development Manual.
1846 </para>
1847</section>
1848
1849<section id='ref-classes-native'>
1850 <title><filename>native.bbclass</filename></title>
1851
1852 <para>
1853 The <filename>native</filename> class provides common
1854 functionality for recipes that wish to build tools to run on the build
1855 host (i.e. tools that use the compiler or other tools from the
1856 build host).
1857 </para>
1858
1859 <para>
1860 You can create a recipe that builds tools that run natively on the
1861 host a couple different ways:
1862 <itemizedlist>
1863 <listitem><para>Create a <filename>myrecipe-native.bb</filename>
1864 that inherits the <filename>native</filename> class.
1865 If you use this method, you must order the inherit statement
1866 in the recipe after all other inherit statements so that the
1867 <filename>native</filename> class is inherited last.
1868 </para></listitem>
1869 <listitem><para>Create or modify a target recipe that has adds
1870 the following:
1871 <literallayout class='monospaced'>
1872 <link linkend='var-BBCLASSEXTEND'><filename>BBCLASSEXTEND</filename></link> = "native"
1873 </literallayout>
1874 Inside the recipe, use <filename>_class-native</filename> and
1875 <filename>_class-target</filename> overrides to specify any
1876 functionality specific to the respective native or target
1877 case.</para></listitem>
1878 </itemizedlist>
1879 </para>
1880
1881 <para>
1882 Although applied differently, the <filename>native</filename> class is
1883 used with both methods.
1884 The advantage of the second method is that you do not need to have two
1885 separate recipes (assuming you need both) for native and target.
1886 All common parts of the recipe are automatically shared.
1887 </para>
1888</section>
1889
1890<section id='ref-classes-nativesdk'>
1891 <title><filename>nativesdk.bbclass</filename></title>
1892
1893 <para>
1894 The <filename>nativesdk</filename> class provides common
1895 functionality for recipes that wish to build tools to run as part of
1896 an SDK (i.e. tools that run on
1897 <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>).
1898 </para>
1899
1900 <para>
1901 You can create a recipe that builds tools that run on the SDK machine
1902 a couple different ways:
1903 <itemizedlist>
1904 <listitem><para>Create a <filename>myrecipe-nativesdk.bb</filename>
1905 recipe that inherits the <filename>nativesdk</filename> class.
1906 If you use this method, you must order the inherit statement
1907 in the recipe after all other inherit statements so that the
1908 <filename>nativesdk</filename> class is inherited last.
1909 </para></listitem>
1910 <listitem><para>Create a <filename>nativesdk</filename> variant
1911 of any recipe by adding the following:
1912 <literallayout class='monospaced'>
1913 <link linkend='var-BBCLASSEXTEND'><filename>BBCLASSEXTEND</filename></link> = "nativesdk"
1914 </literallayout>
1915 Inside the recipe, use <filename>_class-nativesdk</filename> and
1916 <filename>_class-target</filename> overrides to specify any
1917 functionality specific to the respective SDK machine or target
1918 case.</para></listitem>
1919 </itemizedlist>
1920 </para>
1921
1922 <para>
1923 Although applied differently, the <filename>nativesdk</filename> class
1924 is used with both methods.
1925 The advantage of the second method is that you do not need to have two
1926 separate recipes (assuming you need both) for the SDK machine and the
1927 target.
1928 All common parts of the recipe are automatically shared.
1929 </para>
1930</section>
1931
1932<section id='ref-classes-oelint'>
1933 <title><filename>oelint.bbclass</filename></title>
1934
1935 <para>
1936 The <filename>oelint</filename> class is an
1937 obsolete lint checking tool that exists in
1938 <filename>meta/classes</filename> in the
1939 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
1940 </para>
1941
1942 <para>
1943 A number of classes exist that are could be generally useful in
1944 OE-Core but are never actually used within OE-Core itself.
1945 The <filename>oelint</filename> class is one such example.
1946 However, being aware of this class can reduce the proliferation of
1947 different versions of similar classes across multiple layers.
1948 </para>
1949</section>
1950
1951<section id='ref-classes-own-mirrors'>
1952 <title><filename>own-mirrors.bbclass</filename></title>
1953
1954 <para>
1955 The <filename>own-mirrors</filename> class makes it
1956 easier to set up your own
1957 <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>
1958 from which to first fetch source before attempting to fetch it from the
1959 upstream specified in
1960 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
1961 within each recipe.
1962 </para>
1963
1964 <para>
1965 To use this class, inherit it globally and specify
1966 <link linkend='var-SOURCE_MIRROR_URL'><filename>SOURCE_MIRROR_URL</filename></link>.
1967 Here is an example:
1968 <literallayout class='monospaced'>
1969 INHERIT += "own-mirrors"
1970 SOURCE_MIRROR_URL = "http://example.com/my-source-mirror"
1971 </literallayout>
1972 You can specify only a single URL in
1973 <filename>SOURCE_MIRROR_URL</filename>.
1974 </para>
1975</section>
1976
1977<section id='ref-classes-package'>
1978 <title><filename>package.bbclass</filename></title>
1979
1980 <para>
1981 The <filename>package</filename> class supports generating
1982 packages from a build's output.
1983 The core generic functionality is in
1984 <filename>package.bbclass</filename>.
1985 The code specific to particular package types resides in these
1986 package-specific classes:
1987 <link linkend='ref-classes-package_deb'><filename>package_deb</filename></link>,
1988 <link linkend='ref-classes-package_rpm'><filename>package_rpm</filename></link>,
1989 <link linkend='ref-classes-package_ipk'><filename>package_ipk</filename></link>,
1990 and
1991 <link linkend='ref-classes-package_tar'><filename>package_tar</filename></link>.
1992 </para>
1993
1994 <para>
1995 You can control the list of resulting package formats by using the
1996 <filename><link linkend='var-PACKAGE_CLASSES'>PACKAGE_CLASSES</link></filename>
1997 variable defined in your <filename>conf/local.conf</filename>
1998 configuration file, which is located in the
1999 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
2000 When defining the variable, you can specify one or more package types.
2001 Since images are generated from packages, a packaging class is
2002 needed to enable image generation.
2003 The first class listed in this variable is used for image generation.
2004 </para>
2005
2006 <para>
2007 If you take the optional step to set up a repository (package feed)
2008 on the development host that can be used by Smart, you can
2009 install packages from the feed while you are running the image
2010 on the target (i.e. runtime installation of packages).
2011 For more information, see the
2012 "<ulink url='&YOCTO_DOCS_DEV_URL;#using-runtime-package-management'>Using Runtime Package Management</ulink>"
2013 section in the Yocto Project Development Manual.
2014 </para>
2015
2016 <para>
2017 The package-specific class you choose can affect build-time performance
2018 and has space ramifications.
2019 In general, building a package with IPK takes about thirty percent less
2020 time as compared to using RPM to build the same or similar package.
2021 This comparison takes into account a complete build of the package with
2022 all dependencies previously built.
2023 The reason for this discrepancy is because the RPM package manager
2024 creates and processes more
2025 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink> than the
2026 IPK package manager.
2027 Consequently, you might consider setting
2028 <filename>PACKAGE_CLASSES</filename> to "package_ipk" if you are
2029 building smaller systems.
2030 </para>
2031
2032 <para>
2033 Before making your package manager decision, however, you should
2034 consider some further things about using RPM:
2035 <itemizedlist>
2036 <listitem><para>
2037 RPM starts to provide more abilities than IPK due to
2038 the fact that it processes more Metadata.
2039 For example, this information includes individual file types,
2040 file checksum generation and evaluation on install, sparse file
2041 support, conflict detection and resolution for Multilib systems,
2042 ACID style upgrade, and repackaging abilities for rollbacks.
2043 </para></listitem>
2044 <listitem><para>
2045 For smaller systems, the extra space used for the Berkeley
2046 Database and the amount of metadata when using RPM can affect
2047 your ability to perform on-device upgrades.
2048 </para></listitem>
2049 </itemizedlist>
2050 </para>
2051
2052 <para>
2053 You can find additional information on the effects of the package
2054 class at these two Yocto Project mailing list links:
2055 <itemizedlist>
2056 <listitem><para><ulink url='&YOCTO_LISTS_URL;/pipermail/poky/2011-May/006362.html'>
2057 https://lists.yoctoproject.org/pipermail/poky/2011-May/006362.html</ulink></para></listitem>
2058 <listitem><para><ulink url='&YOCTO_LISTS_URL;/pipermail/poky/2011-May/006363.html'>
2059 https://lists.yoctoproject.org/pipermail/poky/2011-May/006363.html</ulink></para></listitem>
2060 </itemizedlist>
2061 </para>
2062</section>
2063
2064<section id='ref-classes-package_deb'>
2065 <title><filename>package_deb.bbclass</filename></title>
2066
2067 <para>
2068 The <filename>package_deb</filename> class
2069 provides support for creating packages that use the
2070 <filename>.deb</filename> file format.
2071 The class ensures the packages are written out to the
2072 <filename>${</filename><link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link><filename>}/deb</filename>
2073 directory in a <filename>.deb</filename> file format.
2074 </para>
2075
2076 <para>
2077 This class inherits the
2078 <link linkend='ref-classes-package'><filename>package</filename></link>
2079 class and is enabled through the
2080 <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
2081 variable in the <filename>local.conf</filename> file.
2082 </para>
2083</section>
2084
2085<section id='ref-classes-package_ipk'>
2086 <title><filename>package_ipk.bbclass</filename></title>
2087
2088 <para>
2089 The <filename>package_ipk</filename> class
2090 provides support for creating packages that use the
2091 <filename>.ipk</filename> file format.
2092 The class ensures the packages are written out to the
2093 <filename>${</filename><link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link><filename>}/ipk</filename>
2094 directory in a <filename>.ipk</filename> file format.
2095 </para>
2096
2097 <para>
2098 This class inherits the
2099 <link linkend='ref-classes-package'><filename>package</filename></link>
2100 class and is enabled through the
2101 <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
2102 variable in the <filename>local.conf</filename> file.
2103 </para>
2104</section>
2105
2106<section id='ref-classes-package_rpm'>
2107 <title><filename>package_rpm.bbclass</filename></title>
2108
2109 <para>
2110 The <filename>package_deb</filename> class
2111 provides support for creating packages that use the
2112 <filename>.rpm</filename> file format.
2113 The class ensures the packages are written out to the
2114 <filename>${</filename><link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link><filename>}/rpm</filename>
2115 directory in a <filename>.rpm</filename> file format.
2116 </para>
2117
2118 <para>
2119 This class inherits the
2120 <link linkend='ref-classes-package'><filename>package</filename></link>
2121 class and is enabled through the
2122 <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
2123 variable in the <filename>local.conf</filename> file.
2124 </para>
2125</section>
2126
2127<section id='ref-classes-package_tar'>
2128 <title><filename>package_tar.bbclass</filename></title>
2129
2130 <para>
2131 The <filename>package_tar</filename>
2132 class provides support for creating packages that use the
2133 <filename>.tar</filename> file format.
2134 The class ensures the packages are written out to the
2135 <filename>${</filename><link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link><filename>}/tar</filename>
2136 directory in a <filename>.tar</filename> file format.
2137 </para>
2138
2139 <para>
2140 This class inherits the
2141 <link linkend='ref-classes-package'><filename>package</filename></link>
2142 class and is enabled through the
2143 <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
2144 variable in the <filename>local.conf</filename> file.
2145 <note>
2146 You cannot specify the <filename>package_tar</filename> class
2147 first using the <filename>PACKAGE_CLASSES</filename> variable.
2148 You must use <filename>.deb</filename>,
2149 <filename>.ipk</filename>, or <filename>.rpm</filename> file
2150 formats for your image or SDK.
2151 </note>
2152 </para>
2153</section>
2154
2155<section id='ref-classes-packagedata'>
2156 <title><filename>packagedata.bbclass</filename></title>
2157
2158 <para>
2159 The <filename>packagedata</filename> class provides
2160 common functionality for reading <filename>pkgdata</filename> files
2161 found in
2162 <link linkend='var-PKGDATA_DIR'><filename>PKGDATA_DIR</filename></link>.
2163 These files contain information about each output package produced by
2164 the OpenEmbedded build system.
2165 </para>
2166
2167 <para>
2168 This class is enabled by default because it is inherited by the
2169 <link linkend='ref-classes-package'><filename>package</filename></link>
2170 class.
2171 </para>
2172</section>
2173
2174<section id='ref-classes-packagegroup'>
2175 <title><filename>packagegroup.bbclass</filename></title>
2176
2177 <para>
2178 The <filename>packagegroup</filename> class sets default values
2179 appropriate for package group recipes (e.g.
2180 <filename><link linkend='var-PACKAGES'>PACKAGES</link></filename>,
2181 <filename><link linkend='var-PACKAGE_ARCH'>PACKAGE_ARCH</link></filename>,
2182 <filename><link linkend='var-ALLOW_EMPTY'>ALLOW_EMPTY</link></filename>,
2183 and so forth).
2184 It is highly recommended that all package group recipes inherit this class.
2185 </para>
2186
2187 <para>
2188 For information on how to use this class, see the
2189 "<ulink url='&YOCTO_DOCS_DEV_URL;#usingpoky-extend-customimage-customtasks'>Customizing Images Using Custom Package Groups</ulink>"
2190 section in the Yocto Project Development Manual.
2191 </para>
2192
2193 <para>
2194 Previously, this class was called the <filename>task</filename> class.
2195 </para>
2196</section>
2197
2198<section id='ref-classes-packageinfo'>
2199 <title><filename>packageinfo.bbclass</filename></title>
2200
2201 <para>
2202 The <filename>packageinfo</filename> class
2203 gives a BitBake user interface the ability to retrieve information
2204 about output packages from the <filename>pkgdata</filename> files.
2205 </para>
2206
2207 <para>
2208 This class is enabled automatically when using the
2209 <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/hob'>Hob</ulink>
2210 user interface.
2211 </para>
2212</section>
2213
2214<section id='ref-classes-patch'>
2215 <title><filename>patch.bbclass</filename></title>
2216
2217 <para>
2218 The <filename>patch</filename> class provides all functionality for
2219 applying patches during the <filename>do_patch</filename> task.
2220 </para>
2221
2222 <para>
2223 This class is enabled by default because it is inherited by the
2224 <link linkend='ref-classes-base'><filename>base</filename></link>
2225 class.
2226 </para>
2227</section>
2228
2229<section id='ref-classes-perlnative'>
2230 <title><filename>perlnative.bbclass</filename></title>
2231
2232 <para>
2233 When inherited by a recipe, the <filename>perlnative</filename> class
2234 supports using the native version of Perl built by the build system
2235 rather than using the version provided by the build host.
2236 </para>
2237</section>
2238
2239<section id='ref-classes-pixbufcache'>
2240 <title><filename>pixbufcache.bbclass</filename></title>
2241
2242 <para>
2243 The <filename>pixbufcache</filename> class generates the proper
2244 post-install and post-remove (postinst/postrm) scriptlets for packages
2245 that install pixbuf loaders, which are used with
2246 <filename>gdk-pixbuf</filename>.
2247 These scriptlets call <filename>update_pixbuf_cache</filename>
2248 to add the pixbuf loaders to the cache.
2249 Since the cache files are architecture-specific,
2250 <filename>update_pixbuf_cache</filename> is run using QEMU if the
2251 postinst scriptlets need to be run on the build host during image
2252 creation.
2253 </para>
2254
2255 <para>
2256 If the pixbuf loaders being installed are in packages other
2257 than the recipe's main package, set
2258 <link linkend='var-PIXBUF_PACKAGES'><filename>PIXBUF_PACKAGES</filename></link>
2259 to specify the packages containing the loaders.
2260 </para>
2261</section>
2262
2263<section id='ref-classes-pkgconfig'>
2264 <title><filename>pkgconfig.bbclass</filename></title>
2265
2266 <para>
2267 The <filename>pkg-config</filename> class provides a standard way to get
2268 header and library information.
2269 This class aims to smooth integration of
2270 <filename>pkg-config</filename> into libraries that use it.
2271 </para>
2272
2273 <para>
2274 During staging, BitBake installs <filename>pkg-config</filename> data into the
2275 <filename>sysroots/</filename> directory.
2276 By making use of sysroot functionality within <filename>pkg-config</filename>,
2277 this class no longer has to manipulate the files.
2278 </para>
2279</section>
2280
2281<section id='ref-classes-populate-sdk'>
2282 <title><filename>populate_sdk.bbclass</filename></title>
2283
2284 <para>
2285 The <filename>populate_sdk</filename> class provides support for
2286 SDK-only recipes.
2287 For information on advantages gained when building a cross-development
2288 toolchain using the <filename>do_populate_sdk</filename> task, see the
2289 "<ulink url='&YOCTO_DOCS_ADT_URL;#optionally-building-a-toolchain-installer'>Optionally Building a Toolchain Installer</ulink>"
2290 section in the Yocto Project Application Developer's Guide.
2291 </para>
2292</section>
2293
2294<section id='ref-classes-populate-sdk-*'>
2295 <title><filename>populate_sdk_*.bbclass</filename></title>
2296
2297 <para>
2298 The <filename>populate_sdk_*</filename> classes support SDK creation
2299 and consist of the following classes:
2300 <itemizedlist>
2301 <listitem><para><emphasis><filename>populate_sdk_base</filename>:</emphasis>
2302 The base class supporting SDK creation under all package
2303 managers (i.e. DEB, RPM, and IPK).</para></listitem>
2304 <listitem><para><emphasis><filename>populate_sdk_deb</filename>:</emphasis>
2305 Supports creation of the SDK given the Debian package manager.
2306 </para></listitem>
2307 <listitem><para><emphasis><filename>populate_sdk_rpm</filename>:</emphasis>
2308 Supports creation of the SDK given the RPM package manager.
2309 </para></listitem>
2310 <listitem><para><emphasis><filename>populate_sdk_ipk</filename>:</emphasis>
2311 Supports creation of the SDK given the IPK package manager.
2312 </para></listitem>
2313 </itemizedlist>
2314 </para>
2315
2316 <para>
2317 The <filename>populate_sdk_base</filename> package inherits the
2318 appropriate <filename>populate_sdk_*</filename> (i.e.
2319 <filename>deb</filename>, <filename>rpm</filename>, and
2320 <filename>ipk</filename>) based on
2321 <link linkend='var-IMAGE_PKGTYPE'><filename>IMAGE_PKGTYPE</filename></link>.
2322 </para>
2323
2324 <para>
2325 The base class ensures all source and destination directories are
2326 established and then populates the SDK.
2327 After populating the SDK, the <filename>populate_sdk_base</filename>
2328 class constructs two images:
2329 <link linkend='var-SDK_ARCH'><filename>SDK_ARCH</filename></link><filename>-nativesdk</filename>,
2330 which contains the cross-compiler and associated tooling, and the
2331 target, which contains a target root filesystem that is configured for
2332 the SDK usage.
2333 These two images reside in
2334 <link linkend='var-SDK_OUTPUT'><filename>SDK_OUTPUT</filename></link>,
2335 which consists of the following:
2336 <literallayout class='monospaced'>
2337 ${SDK_OUTPUT}/&lt;sdk_arch-nativesdk pkgs&gt;
2338 ${SDK_OUTPUT}/${SDKTARGETSYSROOT}/&lt;target pkgs&gt;
2339 </literallayout>
2340 </para>
2341
2342 <para>
2343 Finally, the base populate SDK class creates the toolchain
2344 environment setup script, the tarball of the SDK, and the installer.
2345 </para>
2346
2347 <para>
2348 The respective <filename>populate_sdk_deb</filename>,
2349 <filename>populate_sdk_rpm</filename>, and
2350 <filename>populate_sdk_ipk</filename> classes each support the
2351 specific type of SDK.
2352 These classes are inherited by and used with the
2353 <filename>populate_sdk_base</filename> class.
2354 </para>
2355
2356 <para>
2357 For more information on the cross-development toolchain
2358 generation, see the
2359 "<link linkend='cross-development-toolchain-generation'>Cross-Development Toolchain Generation</link>"
2360 section.
2361 For information on advantages gained when building a
2362 cross-development toolchain using the
2363 <filename>do_populate_sdk</filename> task, see the
2364 "<ulink url='&YOCTO_DOCS_ADT_URL;#optionally-building-a-toolchain-installer'>Optionally Building a Toolchain Installer</ulink>"
2365 section in the Yocto Project Application Developer's Guide.
2366 </para>
2367</section>
2368
2369<section id='ref-classes-prexport'>
2370 <title><filename>prexport.bbclass</filename></title>
2371
2372 <para>
2373 The <filename>prexport</filename> class provides functionality for
2374 exporting
2375 <link linkend='var-PR'><filename>PR</filename></link> values.
2376 <note>
2377 This class is not intended to be used directly.
2378 Rather, it is enabled when using
2379 "<filename>bitbake-prserv-tool export</filename>".
2380 </note>
2381 </para>
2382</section>
2383
2384<section id='ref-classes-primport'>
2385 <title><filename>primport.bbclass</filename></title>
2386
2387 <para>
2388 The <filename>primport</filename> class provides functionality for
2389 importing
2390 <link linkend='var-PR'><filename>PR</filename></link> values.
2391 <note>
2392 This class is not intended to be used directly.
2393 Rather, it is enabled when using
2394 "<filename>bitbake-prserv-tool import</filename>".
2395 </note>
2396 </para>
2397</section>
2398
2399<section id='ref-classes-prserv'>
2400 <title><filename>prserv.bbclass</filename></title>
2401
2402 <para>
2403 The <filename>prserv</filename> class provides functionality for
2404 using a
2405 <ulink url='&YOCTO_DOCS_DEV_URL;#working-with-a-pr-service'>PR service</ulink>
2406 in order to automatically manage the incrementing of the
2407 <link linkend='var-PR'><filename>PR</filename></link> variable for
2408 each recipe.
2409 </para>
2410
2411 <para>
2412 This class is enabled by default because it is inherited by the
2413 <link linkend='ref-classes-package'><filename>package</filename></link>
2414 class.
2415 However, the OpenEmbedded build system will not enable the
2416 functionality of this class unless
2417 <link linkend='var-PRSERV_HOST'><filename>PRSERV_HOST</filename></link>
2418 has been set.
2419 </para>
2420</section>
2421
2422<section id='ref-classes-ptest'>
2423 <title><filename>ptest.bbclass</filename></title>
2424
2425 <para>
2426 The <filename>ptest</filename> class provides functionality for
2427 packaging and installing runtime tests for recipes that build software
2428 that provides these tests.
2429 </para>
2430
2431 <para>
2432 This class is intended to be inherited by individual recipes.
2433 However, the class' functionality is largely disabled unless "ptest"
2434 appears in
2435 <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.
2436 See the
2437 "<ulink url='&YOCTO_DOCS_DEV_URL;#testing-packages-with-ptest'>Testing Packages With ptest</ulink>"
2438 section in the Yocto Project Development Manual for more information
2439 on ptest.
2440 </para>
2441</section>
2442
2443<section id='ref-classes-python-dir'>
2444 <title><filename>python-dir.bbclass</filename></title>
2445
2446 <para>
2447 The <filename>python-dir</filename> class provides the base version,
2448 location, and site package location for Python.
2449 </para>
2450</section>
2451
2452<section id='ref-classes-pythonnative'>
2453 <title><filename>pythonnative.bbclass</filename></title>
2454
2455 <para>
2456 When inherited by a recipe, the <filename>pythonnative</filename> class
2457 supports using the native version of Python built by the build system
2458 rather than using the version provided by the build host.
2459 </para>
2460</section>
2461
2462<section id='ref-classes-qemu'>
2463 <title><filename>qemu.bbclass</filename></title>
2464
2465 <para>
2466 The <filename>qemu</filename> class provides functionality for recipes
2467 that either need QEMU or test for the existence of QEMU.
2468 Typically, this class is used to run programs for a target system on
2469 the build host using QEMU's application emulation mode.
2470 </para>
2471</section>
2472
2473<section id='ref-classes-qmake*'>
2474 <title><filename>qmake*.bbclass</filename></title>
2475
2476 <para>
2477 The <filename>qmake*</filename> classes support recipes that
2478 need to build software that uses Qt's <filename>qmake</filename>
2479 build system and are comprised of the following:
2480 <itemizedlist>
2481 <listitem><para><emphasis><filename>qmake_base</filename>:</emphasis>
2482 Provides base functionality for all versions of
2483 <filename>qmake</filename>.</para></listitem>
2484 <listitem><para><emphasis><filename>qmake2</filename>:</emphasis>
2485 Extends base functionality for <filename>qmake</filename> 2.x as
2486 used by Qt 4.x.</para></listitem>
2487 </itemizedlist>
2488 </para>
2489
2490 <para>
2491 If you need to set any configuration variables or pass any options to
2492 <filename>qmake</filename>, you can add these to the
2493 <link linkend='var-EXTRA_QMAKEVARS_PRE'><filename>EXTRA_QMAKEVARS_PRE</filename></link>
2494 or
2495 <link linkend='var-EXTRA_QMAKEVARS_POST'><filename>EXTRA_QMAKEVARS_POST</filename></link>
2496 variables, depending on whether the arguments need to be before or
2497 after the <filename>.pro</filename> file list on the command line,
2498 respectively.
2499 </para>
2500
2501 <para>
2502 By default, all <filename>.pro</filename> files are built.
2503 If you want to specify your own subset of <filename>.pro</filename>
2504 files to be built, specify them in the
2505 <link linkend='var-QMAKE_PROFILES'><filename>QMAKE_PROFILES</filename></link>
2506 variable.
2507 </para>
2508</section>
2509
2510<section id='ref-classes-qt4*'>
2511 <title><filename>qt4*.bbclass</filename></title>
2512
2513 <para>
2514 The <filename>qt4*</filename> classes support recipes that need to
2515 build software that uses the Qt development framework version 4.x
2516 and consist of the following:
2517 <itemizedlist>
2518 <listitem><para><emphasis><filename>qt4e</filename>:</emphasis>
2519 Supports building against Qt/Embedded, which uses the
2520 framebuffer for graphical output.</para></listitem>
2521 <listitem><para><emphasis><filename>qt4x11</filename>:</emphasis>
2522 Supports building against Qt/X11.</para></listitem>
2523 </itemizedlist>
2524 </para>
2525
2526 <para>
2527 The classes inherit the
2528 <link linkend='ref-classes-qmake*'><filename>qmake2</filename></link>
2529 class.
2530 </para>
2531</section>
2532
2533<section id='ref-classes-relocatable'>
2534 <title><filename>relocatable.bbclass</filename></title>
2535
2536 <para>
2537 The <filename>relocatable</filename> class enables relocation of
2538 binaries when they are installed into the sysroot.
2539 </para>
2540
2541 <para>
2542 This class makes use of the
2543 <link linkend='ref-classes-chrpath'><filename>chrpath</filename></link>
2544 class and is used by both the
2545 <link linkend='ref-classes-cross'><filename>cross</filename></link>
2546 and
2547 <link linkend='ref-classes-native'><filename>native</filename></link>
2548 classes.
2549 </para>
2550</section>
2551
2552<section id='ref-classes-report-error'>
2553 <title><filename>report-error.bbclass</filename></title>
2554
2555 <para>
2556 The <filename>report-error</filename> class supports enabling the
2557 <ulink url='&YOCTO_DOCS_DEV_URL;#using-the-error-reporting-tool'>error reporting tool</ulink>,
2558 which allows you to submit build error information to a central
2559 database.
2560 </para>
2561
2562 <para>
2563 The class collects debug information for recipe, recipe version, task,
2564 machine, distro, build system, target system, host distro, branch,
2565 commit, and log.
2566 From the information, report files using a JSON format are created and
2567 stored in
2568 <filename>${</filename><link linkend='var-LOG_DIR'><filename>LOG_DIR</filename></link><filename>}/error-report</filename>.
2569 </para>
2570</section>
2571
2572<section id='ref-classes-rm-work'>
2573 <title><filename>rm_work.bbclass</filename></title>
2574
2575 <para>
2576 The <filename>rm_work</filename> class supports deletion of temporary
2577 workspace, which can ease your hard drive demands during builds.
2578 </para>
2579
2580 <para>
2581 The OpenEmbedded build system can use a substantial amount of disk
2582 space during the build process.
2583 A portion of this space is the work files under the
2584 <filename>${TMPDIR}/work</filename> directory for each recipe.
2585 Once the build system generates the packages for a recipe, the work
2586 files for that recipe are no longer needed.
2587 However, by default, the build system preserves these files
2588 for inspection and possible debugging purposes.
2589 If you would rather have these files deleted to save disk space
2590 as the build progresses, you can enable <filename>rm_work</filename>
2591 by adding the following to your <filename>local.conf</filename> file,
2592 which is found in the
2593 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
2594 <literallayout class='monospaced'>
2595 INHERIT += "rm_work"
2596 </literallayout>
2597 If you are modifying and building source code out of the work directory
2598 for a recipe, enabling <filename>rm_work</filename> will potentially
2599 result in your changes to the source being lost.
2600 To exclude some recipes from having their work directories deleted by
2601 <filename>rm_work</filename>, you can add the names of the recipe or
2602 recipes you are working on to the <filename>RM_WORK_EXCLUDE</filename>
2603 variable, which can also be set in your <filename>local.conf</filename>
2604 file.
2605 Here is an example:
2606 <literallayout class='monospaced'>
2607 RM_WORK_EXCLUDE += "busybox eglibc"
2608 </literallayout>
2609 </para>
2610</section>
2611
2612<section id='ref-classes-rootfs*'>
2613 <title><filename>rootfs*.bbclass</filename></title>
2614
2615 <para>
2616 The <filename>rootfs*</filename> classes support creating
2617 the root filesystem for an image and consist of the following classes:
2618 <itemizedlist>
2619 <listitem><para>
2620 The <filename>rootfs_deb</filename> class, which supports
2621 creation of root filesystems for images built using
2622 <filename>.deb</filename> packages.</para></listitem>
2623 <listitem><para>
2624 The <filename>rootfs_rpm</filename> class, which supports
2625 creation of root filesystems for images built using
2626 <filename>.rpm</filename> packages.</para></listitem>
2627 <listitem><para>
2628 The <filename>rootfs_ipk</filename> class, which supports
2629 creation of root filesystems for images built using
2630 <filename>.ipk</filename> packages.</para></listitem>
2631 </itemizedlist>
2632 </para>
2633
2634 <para>
2635 The root filesystem is created from packages using one of the
2636 <filename>rootfs*.bbclass</filename> files as determined by the
2637 <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
2638 variable.
2639 </para>
2640
2641 <para>
2642 For information on how root filesystem images are created, see the
2643 "<link linkend='image-generation-dev-environment'>Image Generation</link>"
2644 section.
2645 </para>
2646</section>
2647
2648<section id='ref-classes-sanity'>
2649 <title><filename>sanity.bbclass</filename></title>
2650
2651 <para>
2652 The <filename>sanity</filename> class checks to see if prerequisite
2653 software is present on the host system so that users can be notified
2654 of potential problems that might affect their build.
2655 The class also performs basic user configuration checks from
2656 the <filename>local.conf</filename> configuration file to
2657 prevent common mistakes that cause build failures.
2658 Distribution policy usually determines whether to include this class.
2659 </para>
2660</section>
2661
2662<section id='ref-classes-scons'>
2663 <title><filename>scons.bbclass</filename></title>
2664
2665 <para>
2666 The <filename>scons</filename> class supports recipes that need to
2667 build software that uses the SCons build system.
2668 You can use the
2669 <link linkend='var-EXTRA_OESCONS'><filename>EXTRA_OESCONS</filename></link>
2670 variable to specify additional configuration options you want to pass
2671 SCons command line.
2672 </para>
2673</section>
2674
2675<section id='ref-classes-sdl'>
2676 <title><filename>sdl.bbclass</filename></title>
2677
2678 <para>
2679 The <filename>sdl</filename> class supports recipes that need to build
2680 software that uses the Simple DirectMedia Layer (SDL) library.
2681 </para>
2682</section>
2683
2684<section id='ref-classes-setuptools'>
2685 <title><filename>setuptools.bbclass</filename></title>
2686
2687 <para>
2688 The <filename>setuptools</filename> class supports Python
2689 version 2.x extensions that use build systems based on
2690 <filename>setuptools</filename>.
2691 If your recipe uses these build systems, the recipe needs to
2692 inherit the <filename>setuptools</filename> class.
2693 </para>
2694</section>
2695
2696<section id='ref-classes-setuptools3'>
2697 <title><filename>setuptools3.bbclass</filename></title>
2698
2699 <para>
2700 The <filename>setuptools3</filename> class supports Python
2701 version 3.x extensions that use build systems based on
2702 <filename>setuptools3</filename>.
2703 If your recipe uses these build systems, the recipe needs to
2704 inherit the <filename>setuptools3</filename> class.
2705 </para>
2706</section>
2707
2708<section id='ref-classes-sip'>
2709 <title><filename>sip.bbclass</filename></title>
2710
2711 <para>
2712 The <filename>sip</filename> class
2713 supports recipes that build or package SIP-based Python bindings.
2714 </para>
2715</section>
2716
2717<section id='ref-classes-siteconfig'>
2718 <title><filename>siteconfig.bbclass</filename></title>
2719
2720 <para>
2721 The <filename>siteconfig</filename> class
2722 provides functionality for handling site configuration.
2723 The class is used by the
2724 <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
2725 class to accelerate the <filename>do_configure</filename> task.
2726 </para>
2727</section>
2728
2729<section id='ref-classes-siteinfo'>
2730 <title><filename>siteinfo.bbclass</filename></title>
2731
2732 <para>
2733 The <filename>siteinfo</filename> class provides information about
2734 the targets that might be needed by other classes or recipes.
2735 </para>
2736
2737 <para>
2738 As an example, consider Autotools, which can require tests that must
2739 execute on the target hardware.
2740 Since this is not possible in general when cross compiling, site
2741 information is used to provide cached test results so these tests can
2742 be skipped over but still make the correct values available.
2743 The
2744 <filename><link linkend='structure-meta-site'>meta/site directory</link></filename>
2745 contains test results sorted into different categories such as
2746 architecture, endianness, and the <filename>libc</filename> used.
2747 Site information provides a list of files containing data relevant to
2748 the current build in the
2749 <filename><link linkend='var-CONFIG_SITE'>CONFIG_SITE</link></filename> variable
2750 that Autotools automatically picks up.
2751 </para>
2752
2753 <para>
2754 The class also provides variables like
2755 <filename><link linkend='var-SITEINFO_ENDIANNESS'>SITEINFO_ENDIANNESS</link></filename>
2756 and <filename><link linkend='var-SITEINFO_BITS'>SITEINFO_BITS</link></filename>
2757 that can be used elsewhere in the metadata.
2758 </para>
2759
2760 <para>
2761 Because the
2762 <link linkend='ref-classes-base'><filename>base</filename></link> class
2763 includes the <filename>siteinfo</filename> class, it is always active.
2764 </para>
2765</section>
2766
2767<section id='ref-classes-spdx'>
2768 <title><filename>spdx.bbclass</filename></title>
2769
2770 <para>
2771 The <filename>spdx</filename> class integrates real-time license
2772 scanning, generation of SPDX standard output, and verification
2773 of license information during the build.
2774 <note>
2775 This class is currently at the prototype stage in the 1.5
2776 release.
2777 </note>
2778 </para>
2779</section>
2780
2781<section id='ref-classes-sstate'>
2782 <title><filename>sstate.bbclass</filename></title>
2783
2784 <para>
2785 The <filename>sstate</filename> class provides support for Shared
2786 State (sstate).
2787 By default, the class is enabled through the
2788 <link linkend='var-INHERIT_DISTRO'><filename>INHERIT_DISTRO</filename></link>
2789 variable's default value.
2790 </para>
2791
2792 <para>
2793 For more information on sstate, see the
2794 "<link linkend='shared-state-cache'>Shared State Cache</link>"
2795 section.
2796 </para>
2797</section>
2798
2799<section id='ref-classes-staging'>
2800 <title><filename>staging.bbclass</filename></title>
2801
2802 <para>
2803 The <filename>staging</filename> class provides support for staging
2804 files into the sysroot during the
2805 <filename>do_populate_sysroot</filename> task.
2806 The class is enabled by default because it is inherited by the
2807 <link linkend='ref-classes-base'><filename>base</filename></link>
2808 class.
2809 </para>
2810</section>
2811
2812<section id='ref-classes-syslinux'>
2813 <title><filename>syslinux.bbclass</filename></title>
2814
2815 <para>
2816 The <filename>syslinux</filename> class provides syslinux-specific
2817 functions for building bootable images.
2818 </para>
2819
2820 <para>
2821 The class supports the following variables:
2822 <itemizedlist>
2823 <listitem><para><emphasis><link linkend='var-INITRD'><filename>INITRD</filename></link>:</emphasis>
2824 Indicates a filesystem image to use as an initial RAM disk
2825 (initrd).
2826 This variable is optional.</para></listitem>
2827 <listitem><para><emphasis><link linkend='var-ROOTFS'><filename>ROOTFS</filename></link>:</emphasis>
2828 Indicates a filesystem image to include as the root filesystem.
2829 This variable is optional.</para></listitem>
2830 <listitem><para><emphasis><link linkend='var-AUTO_SYSLINUXMENU'><filename>AUTO_SYSLINUXMENU</filename></link>:</emphasis>
2831 Enables creating an automatic menu when set to "1".
2832 </para></listitem>
2833 <listitem><para><emphasis><link linkend='var-LABELS'><filename>LABELS</filename></link>:</emphasis>
2834 Lists targets for automatic configuration.
2835 </para></listitem>
2836 <listitem><para><emphasis><link linkend='var-APPEND'><filename>APPEND</filename></link>:</emphasis>
2837 Lists append string overrides for each label.
2838 </para></listitem>
2839 <listitem><para><emphasis><link linkend='var-SYSLINUX_OPTS'><filename>SYSLINUX_OPTS</filename></link>:</emphasis>
2840 Lists additional options to add to the syslinux file.
2841 Semicolon characters separate multiple options.
2842 </para></listitem>
2843 <listitem><para><emphasis><link linkend='var-SYSLINUX_SPLASH'><filename>SYSLINUX_SPLASH</filename></link>:</emphasis>
2844 Lists a background for the VGA boot menu when you are using the
2845 boot menu.</para></listitem>
2846 <listitem><para><emphasis><link linkend='var-SYSLINUX_DEFAULT_CONSOLE'><filename>SYSLINUX_DEFAULT_CONSOLE</filename></link>:</emphasis>
2847 Set to "console=ttyX" to change kernel boot default console.
2848 </para></listitem>
2849 <listitem><para><emphasis><link linkend='var-SYSLINUX_SERIAL'><filename>SYSLINUX_SERIAL</filename></link>:</emphasis>
2850 Sets an alternate serial port.
2851 Or, turns off serial when the variable is set with an
2852 empty string.</para></listitem>
2853 <listitem><para><emphasis><link linkend='var-SYSLINUX_SERIAL_TTY'><filename>SYSLINUX_SERIAL_TTY</filename></link>:</emphasis>
2854 Sets an alternate "console=tty..." kernel boot argument.
2855 </para></listitem>
2856 </itemizedlist>
2857 </para>
2858</section>
2859
2860<section id='ref-classes-systemd'>
2861 <title><filename>systemd.bbclass</filename></title>
2862
2863 <para>
2864 The <filename>systemd</filename> class provides support for recipes
2865 that install systemd unit files.
2866 </para>
2867
2868 <para>
2869 The functionality for this class is disabled unless you have "systemd"
2870 in
2871 <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.
2872 </para>
2873
2874 <para>
2875 Under this class, the recipe or Makefile (i.e. whatever the recipe is
2876 calling during the <filename>do_install</filename> task) installs unit
2877 files into
2878 <filename>${</filename><link linkend='var-D'><filename>D</filename></link><filename>}${systemd_unitdir}/system</filename>.
2879 If the unit files being installed go into packages other than the
2880 main package, you need to set
2881 <link linkend='var-SYSTEMD_PACKAGES'><filename>SYSTEMD_PACKAGES</filename></link>
2882 in your recipe to identify the packages in which the files will be
2883 installed.
2884 </para>
2885
2886 <para>
2887 You should set
2888 <link linkend='var-SYSTEMD_SERVICE'><filename>SYSTEMD_SERVICE</filename></link>
2889 to the name of the service file.
2890 You should also use a package name override to indicate the package
2891 to which the value applies.
2892 If the value applies to the recipe's main package, use
2893 <filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}</filename>.
2894 Here is an example from the connman recipe:
2895 <literallayout class='monospaced'>
2896 SYSTEMD_SERVICE_${PN} = "connman.service"
2897 </literallayout>
2898 Services are set up to start on boot automatically unless
2899 you have set
2900 <link linkend='var-SYSTEMD_AUTO_ENABLE'><filename>SYSTEMD_AUTO_ENABLE</filename></link>
2901 to "disable".
2902 </para>
2903
2904 <para>
2905 For more information on <filename>systemd</filename>, see the
2906 "<ulink url='&YOCTO_DOCS_DEV_URL;#selecting-an-initialization-manager'>Selecting an Initialization Manager</ulink>"
2907 section in the Yocto Project Development Manual.
2908 </para>
2909</section>
2910
2911<section id='ref-classes-terminal'>
2912 <title><filename>terminal.bbclass</filename></title>
2913
2914 <para>
2915 The <filename>terminal</filename> class provides support for starting
2916 a terminal session.
2917 The
2918 <link linkend='var-OE_TERMINAL'><filename>OE_TERMINAL</filename></link>
2919 variable controls which terminal emulator is used for the session.
2920 </para>
2921
2922 <para>
2923 Other classes use the <filename>terminal</filename> class anywhere a
2924 separate terminal session needs to be started.
2925 For example, the
2926 <link linkend='ref-classes-patch'><filename>patch</filename></link>
2927 class assuming
2928 <link linkend='var-PATCHRESOLVE'><filename>PATCHRESOLVE</filename></link>
2929 is set to "user", the
2930 <link linkend='ref-classes-cml1'><filename>cml1</filename></link>
2931 class, and the
2932 <link linkend='ref-classes-devshell'><filename>devshell</filename></link>
2933 class all use the <filename>terminal</filename> class.
2934 </para>
2935</section>
2936
2937<section id='ref-classes-testimage'>
2938 <title><filename>testimage.bbclass</filename></title>
2939
2940 <para>
2941 The <filename>testimage</filename> class supports running automated
2942 tests against images using QEMU and on actual hardware.
2943 The class handles loading the tests and starting the image.
2944 </para>
2945
2946 <para>
2947 To use the class, you need to perform steps to set up the
2948 environment.
2949 The tests are commands that run on the target system over
2950 <filename>ssh</filename>.
2951 they are written in Python and make use of the
2952 <filename>unittest</filename> module.
2953 </para>
2954
2955 <para>
2956 For information on how to enable, run, and create new tests, see the
2957 "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
2958 section.
2959 </para>
2960</section>
2961
2962<section id='ref-classes-tinderclient'>
2963 <title><filename>tinderclient.bbclass</filename></title>
2964
2965 <para>
2966 The <filename>tinderclient</filename> class submits build results to
2967 an external Tinderbox instance.
2968 <note>
2969 This class is currently unmaintained.
2970 </note>
2971 </para>
2972</section>
2973
2974<section id='ref-classes-toaster'>
2975 <title><filename>toaster.bbclass</filename></title>
2976
2977 <para>
2978 The <filename>toaster</filename> class collects information about
2979 packages and images and sends them as events that the BitBake
2980 user interface can receive.
2981 The class is enabled when the Toaster user interface is running.
2982 </para>
2983
2984 <para>
2985 This class is not intended to be used directly.
2986 </para>
2987</section>
2988
2989<section id='ref-classes-toolchain-scripts'>
2990 <title><filename>toolchain-scripts.bbclass</filename></title>
2991
2992 <para>
2993 The <filename>toolchain-scripts</filename> class provides the scripts
2994 used for setting up the environment for installed SDKs.
2995 </para>
2996</section>
2997
2998<section id='ref-classes-typecheck'>
2999 <title><filename>typecheck.bbclass</filename></title>
3000
3001 <para>
3002 The <filename>typecheck</filename> class provides support for
3003 validating the values of variables set at the configuration level
3004 against their defined types.
3005 The OpenEmbedded build system allows you to define the type of a
3006 variable using the "type" varflag.
3007 Here is an example:
3008 <literallayout class='monospaced'>
3009 IMAGE_FEATURES[type] = "list"
3010 </literallayout>
3011 </para>
3012</section>
3013
3014<section id='ref-classes-uboot-config'>
3015 <title><filename>uboot-config.bbclass</filename></title>
3016
3017 <para>
3018 The <filename>uboot-config</filename> class provides support for
3019 U-Boot configuration for a machine.
3020 Specify the machine in your recipe as follows:
3021 <literallayout class='monospaced'>
3022 UBOOT_CONFIG ??= &lt;default&gt;
3023 UBOOT_CONFIG[foo] = "config,images"
3024 </literallayout>
3025 You can also specify the machine using this method:
3026 <literallayout class='monospaced'>
3027 UBOOT_MACHINE = "config"
3028 </literallayout>
3029 See the
3030 <link linkend='var-UBOOT_CONFIG'><filename>UBOOT_CONFIG</filename></link>
3031 and
3032 <link linkend='var-UBOOT_MACHINE'><filename>UBOOT_MACHINE</filename></link>
3033 variables for additional information.
3034 </para>
3035</section>
3036
3037<section id='ref-classes-update-alternatives'>
3038 <title><filename>update-alternatives.bbclass</filename></title>
3039
3040 <para>
3041 The <filename>update-alternatives</filename> class helps the
3042 alternatives system when multiple sources provide the same command.
3043 This situation occurs when several programs that have the same or
3044 similar function are installed with the same name.
3045 For example, the <filename>ar</filename> command is available from the
3046 <filename>busybox</filename>, <filename>binutils</filename> and
3047 <filename>elfutils</filename> packages.
3048 The <filename>update-alternatives</filename> class handles
3049 renaming the binaries so that multiple packages can be installed
3050 without conflicts.
3051 The <filename>ar</filename> command still works regardless of which
3052 packages are installed or subsequently removed.
3053 The class renames the conflicting binary in each package and symlinks
3054 the highest priority binary during installation or removal of packages.
3055 </para>
3056
3057 <para>
3058 To use this class, you need to define a number of variables:
3059 <itemizedlist>
3060 <listitem><para><link linkend='var-ALTERNATIVE'><filename>ALTERNATIVE</filename></link>
3061 </para></listitem>
3062 <listitem><para><link linkend='var-ALTERNATIVE_LINK_NAME'><filename>ALTERNATIVE_LINK_NAME</filename></link>
3063 </para></listitem>
3064 <listitem><para><link linkend='var-ALTERNATIVE_TARGET'><filename>ALTERNATIVE_TARGET</filename></link>
3065 </para></listitem>
3066 <listitem><para><link linkend='var-ALTERNATIVE_PRIORITY'><filename>ALTERNATIVE_PRIORITY</filename></link>
3067 </para></listitem>
3068 </itemizedlist>
3069 These variables list alternative commands needed by a package,
3070 provide pathnames for links, default links for targets, and
3071 so forth.
3072 For details on how to use this class, see the comments in the
3073 <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/poky/tree/meta/classes/update-alternatives.bbclass'><filename>update-alternatives.bbclass</filename></ulink>.
3074 </para>
3075
3076 <note>
3077 You can use the <filename>update-alternatives</filename> command
3078 directly in your recipes.
3079 However, this class simplifies things in most cases.
3080 </note>
3081</section>
3082
3083<section id='ref-classes-update-rc.d'>
3084 <title><filename>update-rc.d.bbclass</filename></title>
3085
3086 <para>
3087 The <filename>update-rc.d</filename> class uses
3088 <filename>update-rc.d</filename> to safely install an
3089 initialization script on behalf of the package.
3090 The OpenEmbedded build system takes care of details such as making
3091 sure the script is stopped before a package is removed and started when
3092 the package is installed.
3093 </para>
3094
3095 <para>
3096 Three variables control this class:
3097 <filename><link linkend='var-INITSCRIPT_PACKAGES'>INITSCRIPT_PACKAGES</link></filename>,
3098 <filename><link linkend='var-INITSCRIPT_NAME'>INITSCRIPT_NAME</link></filename> and
3099 <filename><link linkend='var-INITSCRIPT_PARAMS'>INITSCRIPT_PARAMS</link></filename>.
3100 See the variable links for details.
3101 </para>
3102</section>
3103
3104<section id='ref-classes-useradd'>
3105 <title><filename>useradd.bbclass</filename></title>
3106
3107 <para>
3108 The <filename>useradd</filename> class supports the addition of users
3109 or groups for usage by the package on the target.
3110 For example, if you have packages that contain system services that
3111 should be run under their own user or group, you can use this class to
3112 enable creation of the user or group.
3113 The <filename>meta-skeleton/recipes-skeleton/useradd/useradd-example.bb</filename>
3114 recipe in the <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
3115 provides a simple example that shows how to add three
3116 users and groups to two packages.
3117 See the <filename>useradd-example.bb</filename> recipe for more
3118 information on how to use this class.
3119 </para>
3120
3121 <para>
3122 The <filename>useradd</filename> class supports the
3123 <link linkend='var-USERADD_PACKAGES'><filename>USERADD_PACKAGES</filename></link>,
3124 <link linkend='var-USERADD_PARAM'><filename>USERADD_PARAM</filename></link>,
3125 <link linkend='var-GROUPADD_PARAM'><filename>GROUPADD_PARAM</filename></link>,
3126 and
3127 <link linkend='var-GROUPMEMS_PARAM'><filename>GROUPMEMS_PARAM</filename></link>
3128 variables.
3129 </para>
3130</section>
3131
3132<section id='ref-classes-useradd-staticids'>
3133 <title><filename>useradd-staticids.bbclass</filename></title>
3134
3135 <para>
3136 The <filename>useradd-staticids</filename> class supports the addition
3137 of users or groups that have static user identification
3138 (<filename>uid</filename>) and group identification
3139 (<filename>gid</filename>) values.
3140 </para>
3141
3142 <para>
3143 The default behavior of the OpenEmbedded build system for assigning
3144 <filename>uid</filename> and <filename>gid</filename> values when
3145 packages add users and groups during package install time is to
3146 add them dynamically.
3147 This works fine for programs that do not care what the values of the
3148 resulting users and groups become.
3149 In these cases, the order of the installation determines the final
3150 <filename>uid</filename> and <filename>gid</filename> values.
3151 However, if non-deterministic
3152 <filename>uid</filename> and <filename>gid</filename> values are a
3153 problem, you can override the default, dynamic application of these
3154 values by setting static values.
3155 When you set static values, the OpenEmbedded build system looks in
3156 <link linkend='var-BBPATH'><filename>BBPATH</filename></link> for
3157 <filename>files/passwd</filename> and <filename>files/group</filename>
3158 files for the values.
3159 </para>
3160
3161 <para>
3162 To use static <filename>uid</filename> and <filename>gid</filename>
3163 values, you need to set some variables.
3164 See the
3165 <link linkend='var-USERADDEXTENSION'><filename>USERADDEXTENSION</filename></link>,
3166 <link linkend='var-USERADD_UID_TABLES'><filename>USERADD_UID_TABLES</filename></link>,
3167 <link linkend='var-USERADD_GID_TABLES'><filename>USERADD_GID_TABLES</filename></link>,
3168 and
3169 <link linkend='var-USERADD_ERROR_DYNAMIC'><filename>USERADD_ERROR_DYNAMIC</filename></link>
3170 variables.
3171 You can also see the
3172 <link linkend='ref-classes-useradd'><filename>useradd</filename></link>
3173 class for additional information.
3174 </para>
3175
3176 <note><title>Notes</title>
3177 You do not use this class directly.
3178 You either enable or disable the class by setting the
3179 <filename>USERADDEXTENSION</filename> variable.
3180 If you enable or disable the class in a configured system,
3181 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
3182 might contain incorrect <filename>uid</filename> and
3183 <filename>gid</filename> values.
3184 Deleting the <filename>TMPDIR</filename> directory
3185 will correct this condition.
3186 </note>
3187</section>
3188
3189<section id='ref-classes-utility-tasks'>
3190 <title><filename>utility-tasks.bbclass</filename></title>
3191
3192 <para>
3193 The <filename>utility-tasks</filename> class provides support for
3194 various "utility" type tasks that are applicable to all recipes,
3195 such as <filename>do_clean</filename> and
3196 <filename>do_listtasks</filename>.
3197 </para>
3198
3199 <para>
3200 This class is enabled by default because it is inherited by
3201 the
3202 <link linkend='ref-classes-base'><filename>base</filename></link>
3203 class.
3204 </para>
3205</section>
3206
3207<section id='ref-classes-utils'>
3208 <title><filename>utils.bbclass</filename></title>
3209
3210 <para>
3211 The <filename>utils</filename> class provides some useful Python
3212 functions that are typically used in inline Python expressions
3213 (e.g. <filename>${@...}</filename>).
3214 One example use is for <filename>base_contains()</filename>.
3215 </para>
3216
3217 <para>
3218 This class is enabled by default because it is inherited by the
3219 <link linkend='ref-classes-base'><filename>base</filename></link>
3220 class.
3221 </para>
3222</section>
3223
3224<section id='ref-classes-vala'>
3225 <title><filename>vala.bbclass</filename></title>
3226
3227 <para>
3228 The <filename>vala</filename> class supports recipes that need to
3229 build software written using the Vala programming language.
3230 </para>
3231</section>
3232
3233<section id='ref-classes-waf'>
3234 <title><filename>waf.bbclass</filename></title>
3235
3236 <para>
3237 The <filename>waf</filename> class supports recipes that need to build
3238 software that uses the Waf build system.
3239 You can use the
3240 <link linkend='var-EXTRA_OECONF'><filename>EXTRA_OECONF</filename></link>
3241 variable to specify additional configuration options to be passed on
3242 the Waf command line.
3243 </para>
3244</section>
3245
3246<!-- Undocumented classes are:
3247 image-empty.bbclass (possibly being dropped)
3248 migrate_localcount.bbclass (still need a description)
3249-->
3250
3251
3252</chapter>
3253<!--
3254vim: expandtab tw=80 ts=4
3255-->
diff --git a/documentation/ref-manual/ref-features.xml b/documentation/ref-manual/ref-features.xml
new file mode 100644
index 0000000000..f351931ab6
--- /dev/null
+++ b/documentation/ref-manual/ref-features.xml
@@ -0,0 +1,344 @@
1<!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 the image, a reference on image types you can
11 build, 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 in the <filename>poky.conf</filename> distribution configuration file.
20 Machine features are set in the
21 <filename><link linkend='var-MACHINE_FEATURES'>MACHINE_FEATURES</link></filename>
22 variable, which is set in the machine configuration file and
23 specifies the hardware features for a given machine.
24 </para>
25
26 <para>
27 These two variables combine to work out which kernel modules,
28 utilities, and other packages to include.
29 A given distribution can support a selected subset of features so some machine features might not
30 be included if the distribution itself does not support them.
31 </para>
32
33 <para>
34 One method you can use to determine which recipes are checking to see if a
35 particular feature is contained or not is to <filename>grep</filename> through
36 the <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
37 for the feature.
38 Here is an example that discovers the recipes whose build is potentially
39 changed based on a given feature:
40 <literallayout class='monospaced'>
41 $ cd poky
42 $ git grep 'contains.*MACHINE_FEATURES.*&lt;feature&gt;'
43 </literallayout>
44 </para>
45
46 <section id='ref-features-machine'>
47 <title>Machine Features</title>
48
49 <para>
50 The items below are features you can use with
51 <link linkend='var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></link>.
52 Features do not have a one-to-one correspondence to packages, and they can
53 go beyond simply controlling the installation of a package or packages.
54 Sometimes a feature can influence how certain recipes are built.
55 For example, a feature might determine whether a particular configure option
56 is specified within <filename>do_configure</filename> for a particular
57 recipe.
58 </para>
59
60 <para>
61 This feature list only represents features as shipped with the Yocto Project metadata:
62 <itemizedlist>
63 <listitem><para><emphasis>acpi:</emphasis> Hardware has ACPI (x86/x86_64 only)
64 </para></listitem>
65 <listitem><para><emphasis>alsa:</emphasis> Hardware has ALSA audio drivers
66 </para></listitem>
67 <listitem><para><emphasis>apm:</emphasis> Hardware uses APM (or APM emulation)
68 </para></listitem>
69 <listitem><para><emphasis>bluetooth:</emphasis> Hardware has integrated BT
70 </para></listitem>
71 <listitem><para><emphasis>ext2:</emphasis> Hardware HDD or Microdrive
72 </para></listitem>
73 <listitem><para><emphasis>irda:</emphasis> Hardware has IrDA support
74 </para></listitem>
75 <listitem><para><emphasis>keyboard:</emphasis> Hardware has a keyboard
76 </para></listitem>
77 <listitem><para><emphasis>pci:</emphasis> Hardware has a PCI bus
78 </para></listitem>
79 <listitem><para><emphasis>pcmcia:</emphasis> Hardware has PCMCIA or CompactFlash sockets
80 </para></listitem>
81 <listitem><para><emphasis>screen:</emphasis> Hardware has a screen
82 </para></listitem>
83 <listitem><para><emphasis>serial:</emphasis> Hardware has serial support (usually RS232)
84 </para></listitem>
85 <listitem><para><emphasis>touchscreen:</emphasis> Hardware has a touchscreen
86 </para></listitem>
87 <listitem><para><emphasis>usbgadget:</emphasis> Hardware is USB gadget device capable
88 </para></listitem>
89 <listitem><para><emphasis>usbhost:</emphasis> Hardware is USB Host capable
90 </para></listitem>
91 <listitem><para><emphasis>wifi:</emphasis> Hardware has integrated WiFi
92 </para></listitem>
93 </itemizedlist>
94 </para>
95 </section>
96
97 <section id='ref-features-distro'>
98 <title>Distro Features</title>
99
100 <para>
101 The items below are features you can use with
102 <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
103 to enable features across your distribution.
104 Features do not have a one-to-one correspondence to packages,
105 and they can go beyond simply controlling the installation of a
106 package or packages.
107 In most cases, the presence or absence of a feature translates to
108 the appropriate option supplied to the configure script during
109 <filename>do_configure</filename> for the recipes that optionally
110 support the feature.
111 </para>
112
113 <para>
114 Some distro features are also machine features.
115 These select features make sense to be controlled both at
116 the machine and distribution configuration level.
117 See the
118 <ulink url='&YOCTO_DOCS_REF_URL;#var-COMBINED_FEATURES'><filename>COMBINED_FEATURES</filename></ulink>
119 variable for more information.
120 </para>
121
122 <para>
123 This list only represents features as shipped with the Yocto Project metadata:
124 <itemizedlist>
125 <listitem><para><emphasis>alsa:</emphasis> Include ALSA support
126 (OSS compatibility kernel modules installed if available).
127 </para></listitem>
128 <listitem><para><emphasis>bluetooth:</emphasis> Include
129 bluetooth support (integrated BT only).</para></listitem>
130 <listitem><para><emphasis>cramfs:</emphasis> Include CramFS
131 support.</para></listitem>
132 <listitem><para><emphasis>directfb:</emphasis>
133 Include DirectFB support.
134 </para></listitem>
135 <listitem><para><emphasis>ext2:</emphasis> Include tools for
136 supporting for devices with internal HDD/Microdrive for
137 storing files (instead of Flash only devices).
138 </para></listitem>
139 <listitem><para><emphasis>ipsec:</emphasis> Include IPSec
140 support.</para></listitem>
141 <listitem><para><emphasis>ipv6:</emphasis> Include IPv6 support.
142 </para></listitem>
143 <listitem><para><emphasis>irda:</emphasis> Include IrDA support.
144 </para></listitem>
145 <listitem><para><emphasis>keyboard:</emphasis> Include keyboard
146 support (e.g. keymaps will be loaded during boot).
147 </para></listitem>
148 <listitem><para><emphasis>nfs:</emphasis> Include NFS client
149 support (for mounting NFS exports on device).
150 </para></listitem>
151 <listitem><para><emphasis>opengl:</emphasis>
152 Include the Open Graphics Library, which is a
153 cross-language, multi-platform application programming
154 interface used for rendering two and three-dimensional
155 graphics.</para></listitem>
156 <listitem><para><emphasis>pci:</emphasis> Include PCI bus
157 support.</para></listitem>
158 <listitem><para><emphasis>pcmcia:</emphasis> Include
159 PCMCIA/CompactFlash support.</para></listitem>
160 <listitem><para><emphasis>ppp:</emphasis> Include PPP dialup
161 support.</para></listitem>
162 <listitem><para><emphasis>smbfs:</emphasis> Include SMB networks
163 client support (for mounting Samba/Microsoft Windows shares
164 on device).</para></listitem>
165 <listitem><para><emphasis>systemd:</emphasis> Include support
166 for this <filename>init</filename> manager, which is a full
167 replacement of for <filename>init</filename> with parallel
168 starting of services, reduced shell overhead, and other
169 features.
170 This <filename>init</filename> manager is used by many
171 distributions.</para></listitem>
172 <listitem><para><emphasis>usbgadget:</emphasis> Include USB
173 Gadget Device support (for USB networking/serial/storage).
174 </para></listitem>
175 <listitem><para><emphasis>usbhost:</emphasis> Include USB Host
176 support (allows to connect external keyboard, mouse,
177 storage, network etc).</para></listitem>
178 <listitem><para><emphasis>wayland:</emphasis> Include the
179 Wayland display server protocol and the library that
180 supports it.</para></listitem>
181 <listitem><para><emphasis>wifi:</emphasis> Include WiFi support
182 (integrated only).</para></listitem>
183 <listitem><para><emphasis>x11:</emphasis> Include the X server
184 and libraries.</para></listitem>
185 </itemizedlist>
186 </para>
187 </section>
188
189 <section id='ref-features-image'>
190 <title>Image Features</title>
191
192 <para>
193 The contents of images generated by the OpenEmbedded build system can be controlled by the
194 <filename><link linkend='var-IMAGE_FEATURES'>IMAGE_FEATURES</link></filename>
195 and <filename><link linkend='var-EXTRA_IMAGE_FEATURES'>EXTRA_IMAGE_FEATURES</link></filename>
196 variables that you typically configure in your image recipes.
197 Through these variables, you can add several different
198 predefined packages such as development utilities or packages with debug
199 information needed to investigate application problems or profile applications.
200 </para>
201
202 <para>
203 Current list of
204 <filename>IMAGE_FEATURES</filename> contains the following:
205 <itemizedlist>
206 <listitem><para><emphasis>dbg-pkgs:</emphasis> Installs debug symbol packages for all packages
207 installed in a given image.</para></listitem>
208 <listitem><para><emphasis>dev-pkgs:</emphasis> Installs development packages (headers and
209 extra library links) for all packages installed in a given image.</para></listitem>
210 <listitem><para><emphasis>doc-pkgs:</emphasis> Installs documentation packages for all packages
211 installed in a given image.</para></listitem>
212 <listitem><para><emphasis>nfs-server:</emphasis> Installs an NFS server.</para></listitem>
213 <listitem><para><emphasis>read-only-rootfs:</emphasis> Creates
214 an image whose root filesystem is read-only.
215 See the
216 "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-read-only-root-filesystem'>Creating a Read-Only Root Filesystem</ulink>"
217 section in the Yocto Project Development Manual for more
218 information.</para></listitem>
219 <listitem><para><emphasis>splash:</emphasis> Enables showing a splash screen during boot.
220 By default, this screen is provided by <filename>psplash</filename>, which does
221 allow customization.
222 If you prefer to use an alternative splash screen package, you can do so by
223 setting the <filename>SPLASH</filename> variable
224 to a different package name (or names) within the image recipe or at the distro
225 configuration level.</para></listitem>
226 <listitem><para><emphasis>ssh-server-dropbear:</emphasis> Installs the Dropbear minimal
227 SSH server.
228 </para></listitem>
229 <listitem><para><emphasis>ssh-server-openssh:</emphasis> Installs the OpenSSH SSH server,
230 which is more full-featured than Dropbear.
231 Note that if both the OpenSSH SSH server and the Dropbear minimal SSH server
232 are present in <filename>IMAGE_FEATURES</filename>, then OpenSSH will take
233 precedence and Dropbear will not be installed.</para></listitem>
234 <listitem><para><emphasis>staticdev-pkgs:</emphasis> Installs static development
235 packages (i.e. static libraries containing <filename>*.a</filename> files) for all
236 packages installed in a given image.</para></listitem>
237 <listitem><para><emphasis>tools-debug:</emphasis> Installs debugging tools such as
238 <filename>strace</filename> and <filename>gdb</filename>.
239 For information on GDB, see the
240 "<ulink url='&YOCTO_DOCS_DEV_URL;#platdev-gdb-remotedebug'>Debugging With the GNU Project Debugger (GDB) Remotely</ulink>"
241 section in the Yocto Project Development Manual.
242 For information on tracing and profiling, see the
243 <ulink url='&YOCTO_DOCS_PROF_URL;'>Yocto Project Profiling and Tracing Manual</ulink>.
244 </para></listitem>
245 <listitem><para><emphasis>tools-profile:</emphasis> Installs profiling tools such as
246 <filename>oprofile</filename>, <filename>exmap</filename>, and
247 <filename>LTTng</filename>.
248 For general information on user-space tools, see the
249 "<ulink url='&YOCTO_DOCS_ADT_URL;#user-space-tools'>User-Space Tools</ulink>"
250 section in the Yocto Project Application Developer's Guide.</para></listitem>
251 <listitem><para><emphasis>tools-sdk:</emphasis> Installs a full SDK that runs on the device.
252 </para></listitem>
253 <listitem><para><emphasis>tools-testapps:</emphasis> Installs device testing tools (e.g.
254 touchscreen debugging).</para></listitem>
255 <listitem><para><emphasis>x11:</emphasis> Installs the X server</para></listitem>
256 <listitem><para><emphasis>x11-base:</emphasis> Installs the X server with a
257 minimal environment.</para></listitem>
258 <listitem><para><emphasis>x11-sato:</emphasis> Installs the OpenedHand Sato environment.
259 </para></listitem>
260 </itemizedlist>
261 </para>
262 </section>
263
264 <section id='ref-features-backfill'>
265 <title>Feature Backfilling</title>
266
267 <para>
268 Sometimes it is necessary in the OpenEmbedded build system to extend
269 <link linkend='var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></link>
270 or <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
271 to control functionality that was previously enabled and not able
272 to be disabled.
273 For these cases, we need to add an
274 additional feature item to appear in one of these variables,
275 but we do not want to force developers who have existing values
276 of the variables in their configuration to add the new feature
277 in order to retain the same overall level of functionality.
278 Thus, the OpenEmbedded build system has a mechanism to
279 automatically "backfill" these added features into existing
280 distro or machine configurations.
281 You can see the list of features for which this is done by
282 finding the
283 <link linkend='var-DISTRO_FEATURES_BACKFILL'><filename>DISTRO_FEATURES_BACKFILL</filename></link>
284 and <link linkend='var-MACHINE_FEATURES_BACKFILL'><filename>MACHINE_FEATURES_BACKFILL</filename></link>
285 variables in the <filename>meta/conf/bitbake.conf</filename> file.
286 </para>
287
288 <para>
289 Because such features are backfilled by default into all
290 configurations as described in the previous paragraph, developers
291 who wish to disable the new features need to be able to selectively
292 prevent the backfilling from occurring.
293 They can do this by adding the undesired feature or features to the
294 <link linkend='var-DISTRO_FEATURES_BACKFILL_CONSIDERED'><filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename></link>
295 or <link linkend='var-MACHINE_FEATURES_BACKFILL_CONSIDERED'><filename>MACHINE_FEATURES_BACKFILL_CONSIDERED</filename></link>
296 variables for distro features and machine features respectively.
297 </para>
298
299 <para>
300 Here are two examples to help illustrate feature backfilling:
301 <itemizedlist>
302 <listitem><para><emphasis>The "pulseaudio" distro feature option</emphasis>:
303 Previously, PulseAudio support was enabled within the Qt and
304 GStreamer frameworks.
305 Because of this, the feature is backfilled and thus
306 enabled for all distros through the
307 <filename>DISTRO_FEATURES_BACKFILL</filename>
308 variable in the <filename>meta/conf/bitbake.conf</filename> file.
309 However, your distro needs to disable the feature.
310 You can disable the feature without affecting
311 other existing distro configurations that need PulseAudio support
312 by adding "pulseaudio" to
313 <filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename>
314 in your distro's <filename>.conf</filename> file.
315 Adding the feature to this variable when it also
316 exists in the <filename>DISTRO_FEATURES_BACKFILL</filename>
317 variable prevents the build system from adding the feature to
318 your configuration's <filename>DISTRO_FEATURES</filename>, effectively disabling
319 the feature for that particular distro.</para></listitem>
320 <listitem><para><emphasis>The "rtc" machine feature option</emphasis>:
321 Previously, real time clock (RTC) support was enabled for all
322 target devices.
323 Because of this, the feature is backfilled and thus enabled
324 for all machines through the <filename>MACHINE_FEATURES_BACKFILL</filename>
325 variable in the <filename>meta/conf/bitbake.conf</filename> file.
326 However, your target device does not have this capability.
327 You can disable RTC support for your device without
328 affecting other machines that need RTC support
329 by adding the feature to your machine's
330 <filename>MACHINE_FEATURES_BACKFILL_CONSIDERED</filename>
331 list in the machine's <filename>.conf</filename> file.
332 Adding the feature to this variable when it also
333 exists in the <filename>MACHINE_FEATURES_BACKFILL</filename>
334 variable prevents the build system from adding the feature to
335 your configuration's <filename>MACHINE_FEATURES</filename>, effectively
336 disabling RTC support for that particular machine.</para></listitem>
337 </itemizedlist>
338 </para>
339 </section>
340</chapter>
341
342<!--
343vim: expandtab tw=80 ts=4 spell spelllang=en_gb
344-->
diff --git a/documentation/ref-manual/ref-images.xml b/documentation/ref-manual/ref-images.xml
new file mode 100644
index 0000000000..e7d76f2b1b
--- /dev/null
+++ b/documentation/ref-manual/ref-images.xml
@@ -0,0 +1,167 @@
1<!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-images'>
6 <title>Images</title>
7
8 <para>
9 The OpenEmbedded build system provides several example
10 images to satisfy different needs.
11 When you issue the <filename>bitbake</filename> command you provide a “top-level” recipe
12 that essentially begins the build for the type of image you want.
13 </para>
14
15 <note>
16 Building an image without GNU General Public License Version 3 (GPLv3) components
17 is only supported for minimal and base images.
18 Furthermore, if you are going to build an image using non-GPLv3 components,
19 you must make the following changes in the <filename>local.conf</filename> file
20 before using the BitBake command to build the minimal or base image:
21 <literallayout class='monospaced'>
22 1. Comment out the EXTRA_IMAGE_FEATURES line
23 2. Set INCOMPATIBLE_LICENSE = "GPLv3"
24 </literallayout>
25 </note>
26
27 <para>
28 From within the <filename>poky</filename> Git repository, use the following command to list
29 the supported images:
30 <literallayout class='monospaced'>
31 $ ls meta*/recipes*/images/*.bb
32 </literallayout>
33 These recipes reside in the <filename>meta/recipes-core/images</filename>,
34 <filename>meta/recipes-extended/images</filename>,
35 <filename>meta/recipes-graphics/images</filename>,
36 <filename>meta/recipes-qt/images</filename>,
37 <filename>meta/recipes-rt/images</filename>,
38 <filename>meta/recipes-sato/images</filename>, and
39 <filename>meta-skeleton/recipes-multilib/images</filename> directories
40 within the <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
41 Although the recipe names are somewhat explanatory, here is a list that describes them:
42 </para>
43
44 <itemizedlist>
45 <listitem><para><emphasis><filename>build-appliance-image</filename>:</emphasis>
46 An example virtual machine that contains all the pieces required to
47 run builds using the build system as well as the build system itself.
48 You can boot and run the image using either the
49 <ulink url='http://www.vmware.com/products/player/overview.html'>VMware Player</ulink>
50 or <ulink url='http://www.vmware.com/products/workstation/overview.html'>VMware Workstation</ulink>.
51 For more information on this image, see the
52 <ulink url='&YOCTO_HOME_URL;/documentation/build-appliance'>Build Appliance</ulink> page on
53 the Yocto Project website.</para></listitem>
54 <listitem><para><emphasis><filename>core-image-base</filename>:</emphasis>
55 A console-only image that fully supports the target device hardware.</para></listitem>
56 <listitem><para><emphasis><filename>core-image-minimal</filename>:</emphasis>
57 A small image just capable of allowing a device to boot.</para></listitem>
58 <listitem><para><emphasis><filename>core-image-minimal-dev</filename>:</emphasis>
59 A <filename>core-image-minimal</filename> image suitable for development work
60 using the host.
61 The image includes headers and libraries you can use in a host development
62 environment.
63 </para></listitem>
64 <listitem><para id='images-core-image-minimal-initramfs'><emphasis><filename>core-image-minimal-initramfs</filename>:</emphasis>
65 A <filename>core-image-minimal</filename> image that has the Minimal RAM-based
66 Initial Root Filesystem (initramfs) as part of the kernel,
67 which allows the system to find the first “init” program more efficiently.
68 See the
69 <link linkend='var-PACKAGE_INSTALL'><filename>PACKAGE_INSTALL</filename></link>
70 variable for additional information helpful when working with
71 initramfs images.
72 </para></listitem>
73 <listitem><para><emphasis><filename>core-image-minimal-mtdutils</filename>:</emphasis>
74 A <filename>core-image-minimal</filename> image that has support
75 for the Minimal MTD Utilities, which let the user interact with the
76 MTD subsystem in the kernel to perform operations on flash devices.
77 </para></listitem>
78 <listitem><para><emphasis><filename>core-image-full-cmdline</filename>:</emphasis>
79 A console-only image with more full-featured Linux system
80 functionality installed.</para></listitem>
81 <listitem><para><emphasis><filename>core-image-lsb</filename>:</emphasis>
82 An image that conforms to the Linux Standard Base (LSB) specification.
83 </para></listitem>
84 <listitem><para><emphasis><filename>core-image-testmaster</filename>:</emphasis>
85 A "master" image designed to be used for automated runtime testing.
86 Provides a "known good" image that is deployed to a separate
87 partition so that you can boot into it and use it to deploy a
88 second image to be tested.
89 You can find more information about runtime testing in the
90 "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
91 section in the Yocto Project Development Manual.
92 </para></listitem>
93 <listitem><para><emphasis><filename>core-image-lsb-dev</filename>:</emphasis>
94 A <filename>core-image-lsb</filename> image that is suitable for development work
95 using the host.
96 The image includes headers and libraries you can use in a host development
97 environment.
98 </para></listitem>
99 <listitem><para><emphasis><filename>core-image-lsb-sdk</filename>:</emphasis>
100 A <filename>core-image-lsb</filename> that includes everything in meta-toolchain
101 but also includes development headers and libraries to form a complete standalone SDK.
102 This image is suitable for development using the target.</para></listitem>
103 <listitem><para><emphasis><filename>core-image-clutter</filename>:</emphasis>
104 An image with support for the Open GL-based toolkit Clutter, which enables development of
105 rich and animated graphical user interfaces.</para></listitem>
106 <listitem><para><emphasis><filename>core-image-directfb</filename>:</emphasis>
107 An image that uses <filename>directfb</filename> instead of X11.
108 </para></listitem>
109 <listitem><para><emphasis><filename>core-image-x11</filename>:</emphasis>
110 A very basic X11 image with a terminal.
111 </para></listitem>
112 <listitem><para><emphasis><filename>core-image-weston</filename>:</emphasis>
113 An image that provides the Wayland protocol libraries and the
114 reference Weston compositor.
115 For more information, see the
116 "<link linkend='wayland'>Wayland</link>" section.
117 </para></listitem>
118 <listitem><para><emphasis><filename>qt4e-demo-image</filename>:</emphasis>
119 An image that launches into the demo application for the embedded
120 (not based on X11) version of Qt.</para></listitem>
121 <listitem><para><emphasis><filename>core-image-rt</filename>:</emphasis>
122 A <filename>core-image-minimal</filename> image plus a real-time test suite and
123 tools appropriate for real-time use.</para></listitem>
124 <listitem><para><emphasis><filename>core-image-rt-sdk</filename>:</emphasis>
125 A <filename>core-image-rt</filename> image that includes everything in
126 <filename>meta-toolchain</filename>.
127 The image also includes development headers and libraries to form a complete
128 stand-alone SDK and is suitable for development using the target.
129 </para></listitem>
130 <listitem><para><emphasis><filename>core-image-sato</filename>:</emphasis>
131 An image with Sato support, a mobile environment and visual style that works well
132 with mobile devices.
133 The image supports X11 with a Sato theme and applications such as
134 a terminal, editor, file manager, media player, and so forth.
135 </para></listitem>
136 <listitem><para><emphasis><filename>core-image-sato-dev</filename>:</emphasis>
137 A <filename>core-image-sato</filename> image suitable for development
138 using the host.
139 The image includes libraries needed to build applications on the device itself,
140 testing and profiling tools, and debug symbols.
141 This image was formerly <filename>core-image-sdk</filename>.
142 </para></listitem>
143 <listitem><para><emphasis><filename>core-image-sato-sdk</filename>:</emphasis>
144 A <filename>core-image-sato</filename> image that includes everything in meta-toolchain.
145 The image also includes development headers and libraries to form a complete standalone SDK
146 and is suitable for development using the target.</para></listitem>
147 <listitem><para><emphasis><filename>core-image-multilib-example</filename>:</emphasis>
148 An example image that includes a <filename>lib32</filename> version
149 of Bash into an otherwise standard <filename>sato</filename> image.
150 The image assumes a "lib32" multilib has been enabled in the your
151 configuration.</para></listitem>
152 </itemizedlist>
153
154 <tip>
155 From the Yocto Project release 1.1 onwards, <filename>-live</filename> and
156 <filename>-directdisk</filename> images have been replaced by a "live"
157 option in <filename>IMAGE_FSTYPES</filename> that will work with any image to produce an
158 image file that can be
159 copied directly to a CD or USB device and run as is.
160 To build a live image, simply add
161 "live" to <filename>IMAGE_FSTYPES</filename> within the <filename>local.conf</filename>
162 file or wherever appropriate and then build the desired image as normal.
163 </tip>
164</chapter>
165<!--
166vim: expandtab tw=80 ts=4
167-->
diff --git a/documentation/ref-manual/ref-manual-customization.xsl b/documentation/ref-manual/ref-manual-customization.xsl
new file mode 100644
index 0000000000..3ad3a315c0
--- /dev/null
+++ b/documentation/ref-manual/ref-manual-customization.xsl
@@ -0,0 +1,11 @@
1<?xml version='1.0'?>
2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
3
4 <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl" />
5
6 <xsl:param name="html.stylesheet" select="'ref-style.css'" />
7 <xsl:param name="chapter.autolabel" select="1" />
8 <xsl:param name="appendix.autolabel" select="A" />
9 <xsl:param name="section.autolabel" select="1" />
10 <xsl:param name="section.label.includes.component.label" select="1" />
11</xsl:stylesheet>
diff --git a/documentation/ref-manual/ref-manual-eclipse-customization.xsl b/documentation/ref-manual/ref-manual-eclipse-customization.xsl
new file mode 100644
index 0000000000..4e6b7997b8
--- /dev/null
+++ b/documentation/ref-manual/ref-manual-eclipse-customization.xsl
@@ -0,0 +1,27 @@
1<?xml version='1.0'?>
2<xsl:stylesheet
3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4 xmlns="http://www.w3.org/1999/xhtml"
5 xmlns:fo="http://www.w3.org/1999/XSL/Format"
6 version="1.0">
7
8 <xsl:import
9 href="http://docbook.sourceforge.net/release/xsl/current/eclipse/eclipse3.xsl" />
10
11 <xsl:param name="chunker.output.indent" select="'yes'"/>
12 <xsl:param name="chunk.quietly" select="1"/>
13 <xsl:param name="chunk.first.sections" select="1"/>
14 <xsl:param name="chunk.section.depth" select="10"/>
15 <xsl:param name="use.id.as.filename" select="1"/>
16 <xsl:param name="ulink.target" select="'_self'" />
17 <xsl:param name="base.dir" select="'html/ref-manual/'"/>
18 <xsl:param name="html.stylesheet" select="'../book.css'"/>
19 <xsl:param name="eclipse.manifest" select="0"/>
20 <xsl:param name="create.plugin.xml" select="0"/>
21 <xsl:param name="suppress.navigation" select="1"/>
22 <xsl:param name="generate.index" select="0"/>
23 <xsl:param name="chapter.autolabel" select="1" />
24 <xsl:param name="appendix.autolabel">A</xsl:param>
25 <xsl:param name="section.autolabel" select="1" />
26 <xsl:param name="section.label.includes.component.label" select="1" />
27</xsl:stylesheet>
diff --git a/documentation/ref-manual/ref-manual.xml b/documentation/ref-manual/ref-manual.xml
new file mode 100644
index 0000000000..938deb96d8
--- /dev/null
+++ b/documentation/ref-manual/ref-manual.xml
@@ -0,0 +1,141 @@
1<!DOCTYPE book 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<book id='ref-manual' lang='en'
6 xmlns:xi="http://www.w3.org/2003/XInclude"
7 xmlns="http://docbook.org/ns/docbook"
8 >
9 <bookinfo>
10
11 <mediaobject>
12 <imageobject>
13 <imagedata fileref='figures/poky-title.png'
14 format='SVG'
15 align='left' scalefit='1' width='100%'/>
16 </imageobject>
17 </mediaobject>
18
19 <title>
20 Yocto Project Reference Manual
21 </title>
22
23 <authorgroup>
24 <author>
25 <firstname>Richard</firstname> <surname>Purdie</surname>
26 <affiliation>
27 <orgname>Linux Foundation</orgname>
28 </affiliation>
29 <email>richard.purdie@linuxfoundation.org</email>
30 </author>
31
32 </authorgroup>
33
34 <revhistory>
35 <revision>
36 <revnumber>4.0+git</revnumber>
37 <date>24 November 2010</date>
38 <revremark>Released with the Yocto Project 0.9 Release</revremark>
39 </revision>
40 <revision>
41 <revnumber>1.0</revnumber>
42 <date>6 April 2011</date>
43 <revremark>Released with the Yocto Project 1.0 Release.</revremark>
44 </revision>
45 <revision>
46 <revnumber>1.0.1</revnumber>
47 <date>23 May 2011</date>
48 <revremark>Released with the Yocto Project 1.0.1 Release.</revremark>
49 </revision>
50 <revision>
51 <revnumber>1.1</revnumber>
52 <date>6 October 2011</date>
53 <revremark>Released with the Yocto Project 1.1 Release.</revremark>
54 </revision>
55 <revision>
56 <revnumber>1.2</revnumber>
57 <date>April 2012</date>
58 <revremark>Released with the Yocto Project 1.2 Release.</revremark>
59 </revision>
60 <revision>
61 <revnumber>1.3</revnumber>
62 <date>October 2012</date>
63 <revremark>Released with the Yocto Project 1.3 Release.</revremark>
64 </revision>
65 <revision>
66 <revnumber>1.4</revnumber>
67 <date>April 2013</date>
68 <revremark>Released with the Yocto Project 1.4 Release.</revremark>
69 </revision>
70 <revision>
71 <revnumber>1.5</revnumber>
72 <date>October 2013</date>
73 <revremark>Released with the Yocto Project 1.5 Release.</revremark>
74 </revision>
75 <revision>
76 <revnumber>1.5.1</revnumber>
77 <date>January 2014</date>
78 <revremark>Released with the Yocto Project 1.5.1 Release.</revremark>
79 </revision>
80 <revision>
81 <revnumber>1.6</revnumber>
82 <date>April 2014</date>
83 <revremark>Released with the Yocto Project 1.6 Release.</revremark>
84 </revision>
85 </revhistory>
86
87 <copyright>
88 <year>&COPYRIGHT_YEAR;</year>
89 <holder>Linux Foundation</holder>
90 </copyright>
91
92 <legalnotice>
93 <para>
94 Permission is granted to copy, distribute and/or modify this document under
95 the terms of the <ulink type="http" url="http://creativecommons.org/licenses/by-sa/2.0/uk/">Creative Commons Attribution-Share Alike 2.0 UK: England &amp; Wales</ulink> as published by Creative Commons.
96 </para>
97 <note>
98 For the latest version of this manual associated with this
99 Yocto Project release, see the
100 <ulink url='&YOCTO_DOCS_REF_URL;'>Yocto Project Reference Manual</ulink>
101 from the Yocto Project website.
102 </note>
103 </legalnotice>
104
105 </bookinfo>
106
107 <xi:include href="introduction.xml"/>
108
109 <xi:include href="usingpoky.xml"/>
110
111 <xi:include href="closer-look.xml"/>
112
113 <xi:include href="technical-details.xml"/>
114
115 <xi:include href="migration.xml"/>
116
117 <xi:include href="ref-structure.xml"/>
118
119 <xi:include href="ref-classes.xml"/>
120
121 <xi:include href="ref-images.xml"/>
122
123 <xi:include href="ref-features.xml"/>
124
125 <xi:include href="ref-variables.xml"/>
126
127 <xi:include href="ref-varlocality.xml"/>
128
129 <xi:include href="faq.xml"/>
130
131 <xi:include href="resources.xml"/>
132
133<!-- <index id='index'>
134 <title>Index</title>
135 </index>
136-->
137
138</book>
139<!--
140vim: expandtab tw=80 ts=4
141-->
diff --git a/documentation/ref-manual/ref-structure.xml b/documentation/ref-manual/ref-structure.xml
new file mode 100644
index 0000000000..93cd45d456
--- /dev/null
+++ b/documentation/ref-manual/ref-structure.xml
@@ -0,0 +1,1039 @@
1<!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-structure'>
6
7<title>Source Directory Structure</title>
8
9<para>
10 The <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink> consists of several components.
11 Understanding them and knowing where they are located is key to using the Yocto Project well.
12 This chapter describes the Source Directory and gives information about the various
13 files and directories.
14</para>
15
16<para>
17 For information on how to establish a local Source Directory on your development system, see the
18 "<ulink url='&YOCTO_DOCS_DEV_URL;#getting-setup'>Getting Set Up</ulink>"
19 section in the Yocto Project Development Manual.
20</para>
21
22<note>
23 The OpenEmbedded build system does not support file or directory names that
24 contain spaces.
25 Be sure that the Source Directory you use does not contain these types
26 of names.
27</note>
28
29<section id='structure-core'>
30 <title>Top-Level Core Components</title>
31
32 <para>
33 This section describes the top-level components of the
34 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
35 </para>
36
37 <section id='structure-core-bitbake'>
38 <title><filename>bitbake/</filename></title>
39
40 <para>
41 This directory includes a copy of BitBake for ease of use.
42 The copy usually matches the current stable BitBake release from
43 the BitBake project.
44 BitBake, a
45 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
46 interpreter, reads the Yocto Project Metadata and runs the tasks
47 defined by that data.
48 Failures are usually from the Metadata and not from BitBake itself.
49 Consequently, most users do not need to worry about BitBake.
50 </para>
51
52 <para>
53 When you run the <filename>bitbake</filename> command, the
54 main BitBake executable, which resides in the
55 <filename>bitbake/bin/</filename> directory, starts.
56 Sourcing an environment setup script (e.g.
57 <link linkend="structure-core-script"><filename>&OE_INIT_FILE;</filename></link>
58 or
59 <link linkend="structure-memres-core-script"><filename>oe-init-build-env-memres</filename></link>)
60 places the <filename>scripts</filename> and
61 <filename>bitbake/bin</filename> directories (in that order) into
62 the shell's <filename>PATH</filename> environment variable.
63 </para>
64
65 <para>
66 For more information on BitBake, see the BitBake documentation
67 included in the <filename>bitbake/doc/manual</filename> directory of the
68 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
69 </para>
70 </section>
71
72 <section id='structure-core-build'>
73 <title><filename>build/</filename></title>
74
75 <para>
76 This directory contains user configuration files and the output
77 generated by the OpenEmbedded build system in its standard configuration where
78 the source tree is combined with the output.
79 The <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
80 is created initially when you <filename>source</filename>
81 the OpenEmbedded build environment setup script
82 (i.e.
83 <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
84 or
85 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>).
86 </para>
87
88 <para>
89 It is also possible to place output and configuration
90 files in a directory separate from the
91 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
92 by providing a directory name when you <filename>source</filename>
93 the setup script.
94 For information on separating output from your local
95 Source Directory files, see the
96 "<link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
97 and
98 "<link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>"
99 sections.
100 </para>
101 </section>
102
103 <section id='handbook'>
104 <title><filename>documentation/</filename></title>
105
106 <para>
107 This directory holds the source for the Yocto Project documentation
108 as well as templates and tools that allow you to generate PDF and HTML
109 versions of the manuals.
110 Each manual is contained in a sub-folder.
111 For example, the files for this manual reside in
112 the <filename>ref-manual/</filename> directory.
113 </para>
114 </section>
115
116 <section id='structure-core-meta'>
117 <title><filename>meta/</filename></title>
118
119 <para>
120 This directory contains the OpenEmbedded Core metadata.
121 The directory holds recipes, common classes, and machine
122 configuration for emulated targets (<filename>qemux86</filename>,
123 <filename>qemuarm</filename>, and so forth.)
124 </para>
125 </section>
126
127 <section id='structure-core-meta-yocto'>
128 <title><filename>meta-yocto/</filename></title>
129
130 <para>
131 This directory contains the configuration for the Poky
132 reference distribution.
133 </para>
134 </section>
135
136 <section id='structure-core-meta-yocto-bsp'>
137 <title><filename>meta-yocto-bsp/</filename></title>
138
139 <para>
140 This directory contains the Yocto Project reference
141 hardware Board Support Packages (BSPs).
142 For more information on BSPs, see the
143 <ulink url='&YOCTO_DOCS_BSP_URL;'>Yocto Project Board Support
144 Package (BSP) Developer's Guide</ulink>.
145 </para>
146 </section>
147
148 <section id='structure-meta-selftest'>
149 <title><filename>meta-selftest/</filename></title>
150
151 <para>
152 This directory adds additional recipes and append files
153 used by the OpenEmbedded selftests to verify the behavior
154 of the build system.
155 </para>
156
157 <para>
158 You do not have to add this layer to your
159 <filename>bblayers.conf</filename> file unless you want to run the
160 selftests.
161 </para>
162 </section>
163
164 <section id='structure-meta-skeleton'>
165 <title><filename>meta-skeleton/</filename></title>
166
167 <para>
168 This directory contains template recipes for BSP and kernel development.
169 </para>
170 </section>
171
172 <section id='structure-core-scripts'>
173 <title><filename>scripts/</filename></title>
174
175 <para>
176 This directory contains various integration scripts that implement
177 extra functionality in the Yocto Project environment (e.g. QEMU scripts).
178 The <link linkend="structure-core-script"><filename>&OE_INIT_FILE;</filename></link>
179 and
180 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>
181 scripts append this directory to the shell's
182 <filename>PATH</filename> environment variable.
183 </para>
184
185 <para>
186 The <filename>scripts</filename> directory has useful scripts that assist in contributing
187 back to the Yocto Project, such as <filename>create-pull-request</filename> and
188 <filename>send-pull-request</filename>.
189 </para>
190 </section>
191
192 <section id='structure-core-script'>
193 <title><filename>&OE_INIT_FILE;</filename></title>
194
195 <para>
196 This script is one of two scripts that set up the OpenEmbedded build
197 environment.
198 For information on the other script, see the
199 "<link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>"
200 section.
201 </para>
202
203 <para>
204 Running this script with the <filename>source</filename> command in
205 a shell makes changes to <filename>PATH</filename> and sets other
206 core BitBake variables based on the current working directory.
207 You need to run an environment setup script before running BitBake
208 commands.
209 The script uses other scripts within the
210 <filename>scripts</filename> directory to do the bulk of the work.
211 </para>
212
213 <para>
214 By default, running this script without a
215 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
216 argument creates the <filename>build</filename> directory
217 in your current working directory.
218 If you provide a Build Directory argument when you
219 <filename>source</filename> the script, you direct the OpenEmbedded
220 build system to create a Build Directory of your choice.
221 For example, the following command creates a Build Directory named
222 <filename>mybuilds</filename> that is outside of the
223 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>:
224 <literallayout class='monospaced'>
225 $ source &OE_INIT_FILE; ~/mybuilds
226 </literallayout>
227 <note>
228 The OpenEmbedded build system does not support file or directory names that
229 contain spaces.
230 If you attempt to run the <filename>&OE_INIT_FILE;</filename> script
231 from a Source Directory that contains spaces in either the filenames
232 or directory names, the script returns an error indicating no such
233 file or directory.
234 Be sure to use a Source Directory free of names containing spaces.
235 </note>
236 </para>
237 </section>
238
239 <section id='structure-memres-core-script'>
240 <title><filename>oe-init-build-env-memres</filename></title>
241
242 <para>
243 This script is one of two scripts that set up the OpenEmbedded
244 build environment.
245 Aside from setting up the environment, this script starts a
246 memory-resident BitBake server.
247 For information on the other setup script, see the
248 "<link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>"
249 section.
250 </para>
251
252 <para>
253 Memory-resident BitBake resides in memory until you specifically
254 remove it using the following BitBake command:
255 <literallayout class='monospaced'>
256 $ bitbake -m
257 </literallayout>
258 </para>
259
260 <para>
261 Running this script with the <filename>source</filename> command in
262 a shell makes changes to <filename>PATH</filename> and sets other
263 core BitBake variables based on the current working directory.
264 One of these variables is the
265 <link linkend='var-BBSERVER'><filename>BBSERVER</filename></link>
266 variable, which allows the OpenEmbedded build system to locate
267 the server that is running BitBake.
268 </para>
269
270 <para>
271 You need to run an environment setup script before using BitBake
272 commands.
273 Following is the script syntax:
274 <literallayout class='monospaced'>
275 $ source oe-init-build-env-memres &lt;port_number&gt; &lt;build_dir&gt;
276 </literallayout>
277 The script uses other scripts within the
278 <filename>scripts</filename> directory to do the bulk of the work.
279 </para>
280
281 <para>
282 If you do not provide a port number with the script, the
283 BitBake server at port "12345" is started.
284 </para>
285
286 <para>
287 By default, running this script without a
288 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
289 argument creates a build directory named
290 <filename>build</filename>.
291 If you provide a Build Directory argument when you
292 <filename>source</filename> the script, the Build Directory is
293 created using that name.
294 For example, the following command starts the BitBake server using
295 the default port "12345" and creates a Build Directory named
296 <filename>mybuilds</filename> that is outside of the
297 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>:
298 <literallayout class='monospaced'>
299 $ source oe-init-build-env-memres ~/mybuilds
300 </literallayout>
301 <note>
302 The OpenEmbedded build system does not support file or
303 directory names that contain spaces.
304 If you attempt to run the
305 <filename>oe-init-build-env-memres</filename> script
306 from a Source Directory that contains spaces in either the
307 filenames or directory names, the script returns an error
308 indicating no such file or directory.
309 Be sure to use a Source Directory free of names containing
310 spaces.
311 </note>
312 </para>
313 </section>
314
315 <section id='structure-basic-top-level'>
316 <title><filename>LICENSE, README, and README.hardware</filename></title>
317
318 <para>
319 These files are standard top-level files.
320 </para>
321 </section>
322</section>
323
324<section id='structure-build'>
325 <title>The Build Directory - <filename>build/</filename></title>
326
327 <para>
328 The OpenEmbedded build system creates the
329 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
330 when you run one of the build environment setup scripts (i.e.
331 <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
332 or
333 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>).
334 </para>
335
336 <para>
337 If you do not give the Build Directory a specific name when you run
338 a setup script, the name defaults to <filename>build</filename>.
339 </para>
340
341 <para>
342 The
343 <link linkend='var-TOPDIR'><filename>TOPDIR</filename></link> variable
344 points to the Build Directory.
345 </para>
346
347 <section id='structure-build-buildhistory'>
348 <title><filename>build/buildhistory</filename></title>
349
350 <para>
351 The OpenEmbedded build system creates this directory when you
352 enable the build history feature.
353 The directory tracks build information into image, packages, and
354 SDK subdirectories.
355 For information on the build history feature, see the
356 "<link linkend='maintaining-build-output-quality'>Maintaining Build Output Quality</link>"
357 section.
358 </para>
359 </section>
360
361 <section id='structure-build-conf-local.conf'>
362 <title><filename>build/conf/local.conf</filename></title>
363
364 <para>
365 This configuration file contains all the local user configurations
366 for your build environment.
367 The <filename>local.conf</filename> file contains documentation on
368 the various configuration options.
369 Any variable set here overrides any variable set elsewhere within
370 the environment unless that variable is hard-coded within a file
371 (e.g. by using '=' instead of '?=').
372 Some variables are hard-coded for various reasons but these
373 variables are relatively rare.
374 </para>
375
376 <para>
377 Edit this file to set the
378 <filename><link linkend='var-MACHINE'>MACHINE</link></filename>
379 for which you want to build, which package types you wish to use
380 (<link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>),
381 the location from which you want to access downloaded files
382 (<filename><link linkend='var-DL_DIR'>DL_DIR</link></filename>),
383 and how you want your host machine to use resources
384 (<link linkend='var-BB_NUMBER_THREADS'><filename>BB_NUMBER_THREADS</filename></link>
385 and
386 <link linkend='var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></link>).
387 </para>
388
389 <para>
390 If <filename>local.conf</filename> is not present when you
391 start the build, the OpenEmbedded build system creates it from
392 <filename>local.conf.sample</filename> when
393 you <filename>source</filename> the top-level build environment
394 setup script (i.e.
395 <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
396 or
397 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>).
398 </para>
399
400 <para>
401 The source <filename>local.conf.sample</filename> file used
402 depends on the <filename>$TEMPLATECONF</filename> script variable,
403 which defaults to <filename>meta-yocto/conf</filename>
404 when you are building from the Yocto Project development
405 environment and defaults to <filename>meta/conf</filename> when
406 you are building from the OpenEmbedded Core environment.
407 Because the script variable points to the source of the
408 <filename>local.conf.sample</filename> file, this implies that
409 you can configure your build environment from any layer by setting
410 the variable in the top-level build environment setup script as
411 follows:
412 <literallayout class='monospaced'>
413 TEMPLATECONF=&lt;your_layer&gt;/conf
414 </literallayout>
415 Once the build process gets the sample file, it uses
416 <filename>sed</filename> to substitute final
417 <filename>${</filename><link linkend='var-OEROOT'><filename>OEROOT</filename></link><filename>}</filename>
418 values for all <filename>##OEROOT##</filename> values.
419 <note>
420 You can see how the <filename>TEMPLATECONF</filename> variable
421 is used by looking at the
422 <filename>scripts/oe-setup-builddir</filename> script in the
423 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
424 You can find the Yocto Project version of the
425 <filename>local.conf.sample</filename> file in the
426 <filename>meta-yocto/conf</filename> directory.
427 </note>
428 </para>
429 </section>
430
431 <section id='structure-build-conf-bblayers.conf'>
432 <title><filename>build/conf/bblayers.conf</filename></title>
433
434 <para>
435 This configuration file defines
436 <ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>layers</ulink>,
437 which are directory trees, traversed (or walked) by BitBake.
438 The <filename>bblayers.conf</filename> file uses the
439 <link linkend='var-BBLAYERS'><filename>BBLAYERS</filename></link>
440 variable to list the layers BitBake tries to find, and uses the
441 <link linkend='var-BBLAYERS_NON_REMOVABLE'><filename>BBLAYERS_NON_REMOVABLE</filename></link>
442 variable to list layers that must not be removed.
443 </para>
444
445 <para>
446 If <filename>bblayers.conf</filename> is not present when you
447 start the build, the OpenEmbedded build system creates it from
448 <filename>bblayers.conf.sample</filename> when
449 you <filename>source</filename> the top-level build environment
450 setup script (i.e.
451 <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
452 or
453 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>).
454 </para>
455
456 <para>
457 The source <filename>bblayers.conf.sample</filename> file used
458 depends on the <filename>$TEMPLATECONF</filename> script variable,
459 which defaults to <filename>meta-yocto/conf</filename>
460 when you are building from the Yocto Project development
461 environment and defaults to <filename>meta/conf</filename> when
462 you are building from the OpenEmbedded Core environment.
463 Because the script variable points to the source of the
464 <filename>bblayers.conf.sample</filename> file, this implies that
465 you can base your build from any layer by setting the variable in
466 the top-level build environment setup script as follows:
467 <literallayout class='monospaced'>
468 TEMPLATECONF=&lt;your_layer&gt;/conf
469 </literallayout>
470 Once the build process gets the sample file, it uses
471 <filename>sed</filename> to substitute final
472 <filename>${</filename><link linkend='var-OEROOT'><filename>OEROOT</filename></link><filename>}</filename>
473 values for all <filename>##OEROOT##</filename> values.
474 <note>
475 You can see how the <filename>TEMPLATECONF</filename> variable
476 <filename>scripts/oe-setup-builddir</filename> script in the
477 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
478 You can find the Yocto Project version of the
479 <filename>bblayers.conf.sample</filename> file in the
480 <filename>meta-yocto/conf</filename> directory.
481 </note>
482 </para>
483 </section>
484
485 <section id='structure-build-conf-sanity_info'>
486 <title><filename>build/conf/sanity_info</filename></title>
487
488 <para>
489 This file indicates the state of the sanity checks and is created
490 during the build.
491 </para>
492 </section>
493
494 <section id='structure-build-downloads'>
495 <title><filename>build/downloads/</filename></title>
496
497 <para>
498 This directory contains downloaded upstream source tarballs.
499 You can reuse the directory for multiple builds or move
500 the directory to another location.
501 You can control the location of this directory through the
502 <filename><link linkend='var-DL_DIR'>DL_DIR</link></filename> variable.
503 </para>
504 </section>
505
506 <section id='structure-build-sstate-cache'>
507 <title><filename>build/sstate-cache/</filename></title>
508
509 <para>
510 This directory contains the shared state cache.
511 You can reuse the directory for multiple builds or move
512 the directory to another location.
513 You can control the location of this directory through the
514 <filename><link linkend='var-SSTATE_DIR'>SSTATE_DIR</link></filename> variable.
515 </para>
516 </section>
517
518 <section id='structure-build-tmp'>
519 <title><filename>build/tmp/</filename></title>
520
521 <para>
522 The OpenEmbedded build system creates and uses this directory
523 for all the build system's output.
524 The
525 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
526 variable points to this directory.
527 </para>
528
529 <para>
530 BitBake creates this directory if it does not exist.
531 As a last resort, to clean up a build and start it from scratch
532 (other than the downloads), you can remove everything in the
533 <filename>tmp</filename> directory or get rid of the
534 directory completely.
535 If you do, you should also completely remove the
536 <filename>build/sstate-cache</filename> directory.
537 </para>
538 </section>
539
540 <section id='structure-build-tmp-buildstats'>
541 <title><filename>build/tmp/buildstats/</filename></title>
542
543 <para>
544 This directory stores the build statistics.
545 </para>
546 </section>
547
548 <section id='structure-build-tmp-cache'>
549 <title><filename>build/tmp/cache/</filename></title>
550
551 <para>
552 When BitBake parses the metadata, it creates a cache file of the result that can
553 be used when subsequently running commands.
554 BitBake stores these results here on a per-machine basis.
555 </para>
556 </section>
557
558 <section id='structure-build-tmp-deploy'>
559 <title><filename>build/tmp/deploy/</filename></title>
560
561 <para>
562 This directory contains any "end result" output from the
563 OpenEmbedded build process.
564 The <link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link>
565 variable points to this directory.
566 For more detail on the contents of the <filename>deploy</filename>
567 directory, see the
568 "<link linkend='images-dev-environment'>Images</link>" and
569 "<link linkend='sdk-dev-environment'>Application Development SDK</link>"
570 sections.
571 </para>
572 </section>
573
574 <section id='structure-build-tmp-deploy-deb'>
575 <title><filename>build/tmp/deploy/deb/</filename></title>
576
577 <para>
578 This directory receives any <filename>.deb</filename> packages produced by
579 the build process.
580 The packages are sorted into feeds for different architecture types.
581 </para>
582 </section>
583
584 <section id='structure-build-tmp-deploy-rpm'>
585 <title><filename>build/tmp/deploy/rpm/</filename></title>
586
587 <para>
588 This directory receives any <filename>.rpm</filename> packages produced by
589 the build process.
590 The packages are sorted into feeds for different architecture types.
591 </para>
592 </section>
593
594 <section id='structure-build-tmp-deploy-ipk'>
595 <title><filename>build/tmp/deploy/ipk/</filename></title>
596
597 <para>
598 This directory receives <filename>.ipk</filename> packages produced by
599 the build process.
600 </para>
601 </section>
602
603 <section id='structure-build-tmp-deploy-licenses'>
604 <title><filename>build/tmp/deploy/licenses/</filename></title>
605
606 <para>
607 This directory receives package licensing information.
608 For example, the directory contains sub-directories for <filename>bash</filename>,
609 <filename>busybox</filename>, and <filename>eglibc</filename> (among others) that in turn
610 contain appropriate <filename>COPYING</filename> license files with other licensing information.
611 For information on licensing, see the
612 "<ulink url='&YOCTO_DOCS_DEV_URL;#maintaining-open-source-license-compliance-during-your-products-lifecycle'>Maintaining Open Source License Compliance During Your Product's Lifecycle</ulink>"
613 section.
614 </para>
615 </section>
616
617 <section id='structure-build-tmp-deploy-images'>
618 <title><filename>build/tmp/deploy/images/</filename></title>
619
620 <para>
621 This directory receives complete filesystem images.
622 If you want to flash the resulting image from a build onto a device, look here for the image.
623 </para>
624
625 <para>
626 Be careful when deleting files in this directory.
627 You can safely delete old images from this directory (e.g.
628 <filename>core-image-*</filename>, <filename>hob-image-*</filename>,
629 etc.).
630 However, the kernel (<filename>*zImage*</filename>, <filename>*uImage*</filename>, etc.),
631 bootloader and other supplementary files might be deployed here prior to building an
632 image.
633 Because these files are not directly produced from the image, if you
634 delete them they will not be automatically re-created when you build the image again.
635 </para>
636
637 <para>
638 If you do accidentally delete files here, you will need to force them to be
639 re-created.
640 In order to do that, you will need to know the target that produced them.
641 For example, these commands rebuild and re-create the kernel files:
642 <literallayout class='monospaced'>
643 $ bitbake -c clean virtual/kernel
644 $ bitbake virtual/kernel
645 </literallayout>
646 </para>
647 </section>
648
649 <section id='structure-build-tmp-deploy-sdk'>
650 <title><filename>build/tmp/deploy/sdk/</filename></title>
651
652 <para>
653 The OpenEmbedded build system creates this directory to hold
654 toolchain installer scripts, which when executed, install the
655 sysroot that matches your target hardware.
656 You can find out more about these installers in the
657 "<ulink url='&YOCTO_DOCS_ADT_URL;#optionally-building-a-toolchain-installer'>Optionally Building a Toolchain Installer</ulink>"
658 section in the Yocto Project Application Developer's Guide.
659 </para>
660 </section>
661
662 <section id='structure-build-tmp-sstate-control'>
663 <title><filename>build/tmp/sstate-control/</filename></title>
664
665 <para>
666 The OpenEmbedded build system uses this directory for the
667 shared state manifest files.
668 The shared state code uses these files to record the files
669 installed by each sstate task so that the files can be removed
670 when cleaning the recipe or when a newer version is about to
671 be installed.
672 The build system also uses the manifests to detect and produce
673 a warning when files from one task are overwriting those from
674 another.
675 </para>
676 </section>
677
678 <section id='structure-build-tmp-sysroots'>
679 <title><filename>build/tmp/sysroots/</filename></title>
680
681 <para>
682 This directory contains shared header files and libraries as well as other shared
683 data.
684 Packages that need to share output with other packages do so within this directory.
685 The directory is subdivided by architecture so multiple builds can run within
686 the one Build Directory.
687 </para>
688 </section>
689
690 <section id='structure-build-tmp-stamps'>
691 <title><filename>build/tmp/stamps/</filename></title>
692
693 <para>
694 This directory holds information that BitBake uses for accounting purposes
695 to track what tasks have run and when they have run.
696 The directory is sub-divided by architecture, package name, and
697 version.
698 Following is an example:
699 <literallayout class='monospaced'>
700 stamps/all-poky-linux/distcc-config/1.0-r0.do_build-2fdd....2do
701 </literallayout>
702 Although the files in the directory are empty of data,
703 BitBake uses the filenames and timestamps for tracking purposes.
704 </para>
705 </section>
706
707 <section id='structure-build-tmp-log'>
708 <title><filename>build/tmp/log/</filename></title>
709
710 <para>
711 This directory contains general logs that are not otherwise placed using the
712 package's <filename><link linkend='var-WORKDIR'>WORKDIR</link></filename>.
713 Examples of logs are the output from the <filename>check_pkg</filename> or
714 <filename>distro_check</filename> tasks.
715 Running a build does not necessarily mean this directory is created.
716 </para>
717 </section>
718
719 <section id='structure-build-tmp-work'>
720 <title><filename>build/tmp/work/</filename></title>
721
722 <para>
723 This directory contains architecture-specific work sub-directories
724 for packages built by BitBake.
725 All tasks execute from the appropriate work directory.
726 For example, the source for a particular package is unpacked,
727 patched, configured and compiled all within its own work directory.
728 Within the work directory, organization is based on the package group
729 and version for which the source is being compiled
730 as defined by the
731 <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>.
732 </para>
733
734 <para>
735 It is worth considering the structure of a typical work directory.
736 As an example, consider <filename>linux-yocto-kernel-3.0</filename>
737 on the machine <filename>qemux86</filename>
738 built within the Yocto Project.
739 For this package, a work directory of
740 <filename>tmp/work/qemux86-poky-linux/linux-yocto/3.0+git1+&lt;.....&gt;</filename>,
741 referred to as the
742 <filename><link linkend='var-WORKDIR'>WORKDIR</link></filename>, is created.
743 Within this directory, the source is unpacked to
744 <filename>linux-qemux86-standard-build</filename> and then patched by Quilt.
745 (See the
746 "<ulink url='&YOCTO_DOCS_DEV_URL;#using-a-quilt-workflow'>Using a Quilt Flow</ulink>"
747 section in the Yocto Project Development Manual for more information.)
748 Within the <filename>linux-qemux86-standard-build</filename> directory,
749 standard Quilt directories <filename>linux-3.0/patches</filename>
750 and <filename>linux-3.0/.pc</filename> are created,
751 and standard Quilt commands can be used.
752 </para>
753
754 <para>
755 There are other directories generated within <filename>WORKDIR</filename>.
756 The most important directory is <filename>WORKDIR/temp/</filename>,
757 which has log files for each task (<filename>log.do_*.pid</filename>)
758 and contains the scripts BitBake runs for each task
759 (<filename>run.do_*.pid</filename>).
760 The <filename>WORKDIR/image/</filename> directory is where "make
761 install" places its output that is then split into sub-packages
762 within <filename>WORKDIR/packages-split/</filename>.
763 </para>
764 </section>
765
766 <section id='structure-build-work-shared'>
767 <title><filename>build/tmp/work-shared/</filename></title>
768
769 <para>
770 For efficiency, the OpenEmbedded build system creates and uses
771 this directory to hold recipes that share a work directory with
772 other recipes.
773 In practice, this is only used for <filename>gcc</filename>
774 and its variants (e.g. <filename>gcc-cross</filename>,
775 <filename>libgcc</filename>, <filename>gcc-runtime</filename>,
776 and so forth).
777 </para>
778 </section>
779</section>
780
781<section id='structure-meta'>
782 <title>The Metadata - <filename>meta/</filename></title>
783
784 <para>
785 As mentioned previously,
786 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink> is the core
787 of the Yocto Project.
788 Metadata has several important subdivisions:
789 </para>
790
791 <section id='structure-meta-classes'>
792 <title><filename>meta/classes/</filename></title>
793
794 <para>
795 This directory contains the <filename>*.bbclass</filename> files.
796 Class files are used to abstract common code so it can be reused by multiple
797 packages.
798 Every package inherits the <filename>base.bbclass</filename> file.
799 Examples of other important classes are <filename>autotools.bbclass</filename>, which
800 in theory allows any Autotool-enabled package to work with the Yocto Project with minimal effort.
801 Another example is <filename>kernel.bbclass</filename> that contains common code and functions
802 for working with the Linux kernel.
803 Functions like image generation or packaging also have their specific class files
804 such as <filename>image.bbclass</filename>, <filename>rootfs_*.bbclass</filename> and
805 <filename>package*.bbclass</filename>.
806 </para>
807
808 <para>
809 For reference information on classes, see the
810 "<link linkend='ref-classes'>Classes</link>" chapter.
811 </para>
812 </section>
813
814 <section id='structure-meta-conf'>
815 <title><filename>meta/conf/</filename></title>
816
817 <para>
818 This directory contains the core set of configuration files that start from
819 <filename>bitbake.conf</filename> and from which all other configuration
820 files are included.
821 See the include statements at the end of the
822 <filename>bitbake.conf</filename> file and you will note that even
823 <filename>local.conf</filename> is loaded from there.
824 While <filename>bitbake.conf</filename> sets up the defaults, you can often override
825 these by using the (<filename>local.conf</filename>) file, machine file or
826 the distribution configuration file.
827 </para>
828 </section>
829
830 <section id='structure-meta-conf-machine'>
831 <title><filename>meta/conf/machine/</filename></title>
832
833 <para>
834 This directory contains all the machine configuration files.
835 If you set <filename>MACHINE = "qemux86"</filename>,
836 the OpenEmbedded build system looks for a <filename>qemux86.conf</filename> file in this
837 directory.
838 The <filename>include</filename> directory contains various data common to multiple machines.
839 If you want to add support for a new machine to the Yocto Project, look in this directory.
840 </para>
841 </section>
842
843 <section id='structure-meta-conf-distro'>
844 <title><filename>meta/conf/distro/</filename></title>
845
846 <para>
847 The contents of this directory controls any distribution-specific
848 configurations.
849 For the Yocto Project, the <filename>defaultsetup.conf</filename> is the main file here.
850 This directory includes the versions and the
851 <filename>SRCDATE</filename> definitions for applications that are configured here.
852 An example of an alternative configuration might be <filename>poky-bleeding.conf</filename>.
853 Although this file mainly inherits its configuration from Poky.
854 </para>
855 </section>
856
857 <section id='structure-meta-conf-machine-sdk'>
858 <title><filename>meta/conf/machine-sdk/</filename></title>
859
860 <para>
861 The OpenEmbedded build system searches this directory for
862 configuration files that correspond to the value of
863 <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>.
864 By default, 32-bit and 64-bit x86 files ship with the Yocto
865 Project that support some SDK hosts.
866 However, it is possible to extend that support to other SDK hosts
867 by adding additional configuration files in this subdirectory
868 within another layer.
869 </para>
870 </section>
871
872 <section id='structure-meta-files'>
873 <title><filename>meta/files/</filename></title>
874
875 <para>
876 This directory contains common license files and several text files
877 used by the build system.
878 The text files contain minimal device information and
879 lists of files and directories with known permissions.
880 </para>
881 </section>
882
883 <section id='structure-meta-lib'>
884 <title><filename>meta/lib/</filename></title>
885
886 <para>
887 This directory contains OpenEmbedded Python library code
888 used during the build process.
889 </para>
890 </section>
891
892 <section id='structure-meta-recipes-bsp'>
893 <title><filename>meta/recipes-bsp/</filename></title>
894
895 <para>
896 This directory contains anything linking to specific hardware or hardware
897 configuration information such as "u-boot" and "grub".
898 </para>
899 </section>
900
901 <section id='structure-meta-recipes-connectivity'>
902 <title><filename>meta/recipes-connectivity/</filename></title>
903
904 <para>
905 This directory contains libraries and applications related to communication with other devices.
906 </para>
907 </section>
908
909 <section id='structure-meta-recipes-core'>
910 <title><filename>meta/recipes-core/</filename></title>
911
912 <para>
913 This directory contains what is needed to build a basic working Linux image
914 including commonly used dependencies.
915 </para>
916 </section>
917
918 <section id='structure-meta-recipes-devtools'>
919 <title><filename>meta/recipes-devtools/</filename></title>
920
921 <para>
922 This directory contains tools that are primarily used by the build system.
923 The tools, however, can also be used on targets.
924 </para>
925 </section>
926
927 <section id='structure-meta-recipes-extended'>
928 <title><filename>meta/recipes-extended/</filename></title>
929
930 <para>
931 This directory contains non-essential applications that add features compared to the
932 alternatives in core.
933 You might need this directory for full tool functionality or for Linux Standard Base (LSB)
934 compliance.
935 </para>
936 </section>
937
938 <section id='structure-meta-recipes-gnome'>
939 <title><filename>meta/recipes-gnome/</filename></title>
940
941 <para>
942 This directory contains all things related to the GTK+ application framework.
943 </para>
944 </section>
945
946 <section id='structure-meta-recipes-graphics'>
947 <title><filename>meta/recipes-graphics/</filename></title>
948
949 <para>
950 This directory contains X and other graphically related system libraries
951 </para>
952 </section>
953
954 <section id='structure-meta-recipes-kernel'>
955 <title><filename>meta/recipes-kernel/</filename></title>
956
957 <para>
958 This directory contains the kernel and generic applications and libraries that
959 have strong kernel dependencies.
960 </para>
961 </section>
962
963 <section id='structure-meta-recipes-lsb4'>
964 <title><filename>meta/recipes-lsb4/</filename></title>
965
966 <para>
967 This directory contains recipes specifically added to support
968 the Linux Standard Base (LSB) version 4.x.
969 </para>
970 </section>
971
972 <section id='structure-meta-recipes-multimedia'>
973 <title><filename>meta/recipes-multimedia/</filename></title>
974
975 <para>
976 This directory contains codecs and support utilities for audio, images and video.
977 </para>
978 </section>
979
980 <section id='structure-meta-recipes-qt'>
981 <title><filename>meta/recipes-qt/</filename></title>
982
983 <para>
984 This directory contains all things related to the Qt application framework.
985 </para>
986 </section>
987
988 <section id='structure-meta-recipes-rt'>
989 <title><filename>meta/recipes-rt/</filename></title>
990
991 <para>
992 This directory contains package and image recipes for using and testing
993 the <filename>PREEMPT_RT</filename> kernel.
994 </para>
995 </section>
996
997 <section id='structure-meta-recipes-sato'>
998 <title><filename>meta/recipes-sato/</filename></title>
999
1000 <para>
1001 This directory contains the Sato demo/reference UI/UX and its associated applications
1002 and configuration data.
1003 </para>
1004 </section>
1005
1006 <section id='structure-meta-recipes-support'>
1007 <title><filename>meta/recipes-support/</filename></title>
1008
1009 <para>
1010 This directory contains recipes used by other recipes, but that are
1011 not directly included in images (i.e. dependencies of other
1012 recipes).
1013 </para>
1014 </section>
1015
1016 <section id='structure-meta-site'>
1017 <title><filename>meta/site/</filename></title>
1018
1019 <para>
1020 This directory contains a list of cached results for various architectures.
1021 Because certain "autoconf" test results cannot be determined when cross-compiling due to
1022 the tests not able to run on a live system, the information in this directory is
1023 passed to "autoconf" for the various architectures.
1024 </para>
1025 </section>
1026
1027 <section id='structure-meta-recipes-txt'>
1028 <title><filename>meta/recipes.txt</filename></title>
1029
1030 <para>
1031 This file is a description of the contents of <filename>recipes-*</filename>.
1032 </para>
1033 </section>
1034</section>
1035
1036</chapter>
1037<!--
1038vim: expandtab tw=80 ts=4
1039-->
diff --git a/documentation/ref-manual/ref-style.css b/documentation/ref-manual/ref-style.css
new file mode 100644
index 0000000000..e896a39d33
--- /dev/null
+++ b/documentation/ref-manual/ref-style.css
@@ -0,0 +1,979 @@
1/*
2 Generic XHTML / DocBook XHTML CSS Stylesheet.
3
4 Browser wrangling and typographic design by
5 Oyvind Kolas / pippin@gimp.org
6
7 Customised for Poky by
8 Matthew Allum / mallum@o-hand.com
9
10 Thanks to:
11 Liam R. E. Quin
12 William Skaggs
13 Jakub Steiner
14
15 Structure
16 ---------
17
18 The stylesheet is divided into the following sections:
19
20 Positioning
21 Margins, paddings, width, font-size, clearing.
22 Decorations
23 Borders, style
24 Colors
25 Colors
26 Graphics
27 Graphical backgrounds
28 Nasty IE tweaks
29 Workarounds needed to make it work in internet explorer,
30 currently makes the stylesheet non validating, but up until
31 this point it is validating.
32 Mozilla extensions
33 Transparency for footer
34 Rounded corners on boxes
35
36*/
37
38
39 /*************** /
40 / Positioning /
41/ ***************/
42
43body {
44 font-family: Verdana, Sans, sans-serif;
45
46 min-width: 640px;
47 width: 80%;
48 margin: 0em auto;
49 padding: 2em 5em 5em 5em;
50 color: #333;
51}
52
53h1,h2,h3,h4,h5,h6,h7 {
54 font-family: Arial, Sans;
55 color: #00557D;
56 clear: both;
57}
58
59h1 {
60 font-size: 2em;
61 text-align: left;
62 padding: 0em 0em 0em 0em;
63 margin: 2em 0em 0em 0em;
64}
65
66h2.subtitle {
67 margin: 0.10em 0em 3.0em 0em;
68 padding: 0em 0em 0em 0em;
69 font-size: 1.8em;
70 padding-left: 20%;
71 font-weight: normal;
72 font-style: italic;
73}
74
75h2 {
76 margin: 2em 0em 0.66em 0em;
77 padding: 0.5em 0em 0em 0em;
78 font-size: 1.5em;
79 font-weight: bold;
80}
81
82h3.subtitle {
83 margin: 0em 0em 1em 0em;
84 padding: 0em 0em 0em 0em;
85 font-size: 142.14%;
86 text-align: right;
87}
88
89h3 {
90 margin: 1em 0em 0.5em 0em;
91 padding: 1em 0em 0em 0em;
92 font-size: 140%;
93 font-weight: bold;
94}
95
96h4 {
97 margin: 1em 0em 0.5em 0em;
98 padding: 1em 0em 0em 0em;
99 font-size: 120%;
100 font-weight: bold;
101}
102
103h5 {
104 margin: 1em 0em 0.5em 0em;
105 padding: 1em 0em 0em 0em;
106 font-size: 110%;
107 font-weight: bold;
108}
109
110h6 {
111 margin: 1em 0em 0em 0em;
112 padding: 1em 0em 0em 0em;
113 font-size: 110%;
114 font-weight: bold;
115}
116
117.authorgroup {
118 background-color: transparent;
119 background-repeat: no-repeat;
120 padding-top: 256px;
121 background-image: url("figures/poky-title.png");
122 background-position: left top;
123 margin-top: -256px;
124 padding-right: 50px;
125 margin-left: 0px;
126 text-align: right;
127 width: 740px;
128}
129
130h3.author {
131 margin: 0em 0me 0em 0em;
132 padding: 0em 0em 0em 0em;
133 font-weight: normal;
134 font-size: 100%;
135 color: #333;
136 clear: both;
137}
138
139.author tt.email {
140 font-size: 66%;
141}
142
143.titlepage hr {
144 width: 0em;
145 clear: both;
146}
147
148.revhistory {
149 padding-top: 2em;
150 clear: both;
151}
152
153.toc,
154.list-of-tables,
155.list-of-examples,
156.list-of-figures {
157 padding: 1.33em 0em 2.5em 0em;
158 color: #00557D;
159}
160
161.toc p,
162.list-of-tables p,
163.list-of-figures p,
164.list-of-examples p {
165 padding: 0em 0em 0em 0em;
166 padding: 0em 0em 0.3em;
167 margin: 1.5em 0em 0em 0em;
168}
169
170.toc p b,
171.list-of-tables p b,
172.list-of-figures p b,
173.list-of-examples p b{
174 font-size: 100.0%;
175 font-weight: bold;
176}
177
178.toc dl,
179.list-of-tables dl,
180.list-of-figures dl,
181.list-of-examples dl {
182 margin: 0em 0em 0.5em 0em;
183 padding: 0em 0em 0em 0em;
184}
185
186.toc dt {
187 margin: 0em 0em 0em 0em;
188 padding: 0em 0em 0em 0em;
189}
190
191.toc dd {
192 margin: 0em 0em 0em 2.6em;
193 padding: 0em 0em 0em 0em;
194}
195
196div.glossary dl,
197div.variablelist dl {
198}
199
200.glossary dl dt,
201.variablelist dl dt,
202.variablelist dl dt span.term {
203 font-weight: normal;
204 width: 20em;
205 text-align: right;
206}
207
208.variablelist dl dt {
209 margin-top: 0.5em;
210}
211
212.glossary dl dd,
213.variablelist dl dd {
214 margin-top: -1em;
215 margin-left: 25.5em;
216}
217
218.glossary dd p,
219.variablelist dd p {
220 margin-top: 0em;
221 margin-bottom: 1em;
222}
223
224
225div.calloutlist table td {
226 padding: 0em 0em 0em 0em;
227 margin: 0em 0em 0em 0em;
228}
229
230div.calloutlist table td p {
231 margin-top: 0em;
232 margin-bottom: 1em;
233}
234
235div p.copyright {
236 text-align: left;
237}
238
239div.legalnotice p.legalnotice-title {
240 margin-bottom: 0em;
241}
242
243p {
244 line-height: 1.5em;
245 margin-top: 0em;
246
247}
248
249dl {
250 padding-top: 0em;
251}
252
253hr {
254 border: solid 1px;
255}
256
257
258.mediaobject,
259.mediaobjectco {
260 text-align: center;
261}
262
263img {
264 border: none;
265}
266
267ul {
268 padding: 0em 0em 0em 1.5em;
269}
270
271ul li {
272 padding: 0em 0em 0em 0em;
273}
274
275ul li p {
276 text-align: left;
277}
278
279table {
280 width :100%;
281}
282
283th {
284 padding: 0.25em;
285 text-align: left;
286 font-weight: normal;
287 vertical-align: top;
288}
289
290td {
291 padding: 0.25em;
292 vertical-align: top;
293}
294
295p a[id] {
296 margin: 0px;
297 padding: 0px;
298 display: inline;
299 background-image: none;
300}
301
302a {
303 text-decoration: underline;
304 color: #444;
305}
306
307pre {
308 overflow: auto;
309}
310
311a:hover {
312 text-decoration: underline;
313 /*font-weight: bold;*/
314}
315
316
317div.informalfigure,
318div.informalexample,
319div.informaltable,
320div.figure,
321div.table,
322div.example {
323 margin: 1em 0em;
324 padding: 1em;
325 page-break-inside: avoid;
326}
327
328
329div.informalfigure p.title b,
330div.informalexample p.title b,
331div.informaltable p.title b,
332div.figure p.title b,
333div.example p.title b,
334div.table p.title b{
335 padding-top: 0em;
336 margin-top: 0em;
337 font-size: 100%;
338 font-weight: normal;
339}
340
341.mediaobject .caption,
342.mediaobject .caption p {
343 text-align: center;
344 font-size: 80%;
345 padding-top: 0.5em;
346 padding-bottom: 0.5em;
347}
348
349.epigraph {
350 padding-left: 55%;
351 margin-bottom: 1em;
352}
353
354.epigraph p {
355 text-align: left;
356}
357
358.epigraph .quote {
359 font-style: italic;
360}
361.epigraph .attribution {
362 font-style: normal;
363 text-align: right;
364}
365
366span.application {
367 font-style: italic;
368}
369
370.programlisting {
371 font-family: monospace;
372 font-size: 80%;
373 white-space: pre;
374 margin: 1.33em 0em;
375 padding: 1.33em;
376}
377
378.tip,
379.warning,
380.caution,
381.note {
382 margin-top: 1em;
383 margin-bottom: 1em;
384
385}
386
387/* force full width of table within div */
388.tip table,
389.warning table,
390.caution table,
391.note table {
392 border: none;
393 width: 100%;
394}
395
396
397.tip table th,
398.warning table th,
399.caution table th,
400.note table th {
401 padding: 0.8em 0.0em 0.0em 0.0em;
402 margin : 0em 0em 0em 0em;
403}
404
405.tip p,
406.warning p,
407.caution p,
408.note p {
409 margin-top: 0.5em;
410 margin-bottom: 0.5em;
411 padding-right: 1em;
412 text-align: left;
413}
414
415.acronym {
416 text-transform: uppercase;
417}
418
419b.keycap,
420.keycap {
421 padding: 0.09em 0.3em;
422 margin: 0em;
423}
424
425.itemizedlist li {
426 clear: none;
427}
428
429.filename {
430 font-size: medium;
431 font-family: Courier, monospace;
432}
433
434
435div.navheader, div.heading{
436 position: absolute;
437 left: 0em;
438 top: 0em;
439 width: 100%;
440 background-color: #cdf;
441 width: 100%;
442}
443
444div.navfooter, div.footing{
445 position: fixed;
446 left: 0em;
447 bottom: 0em;
448 background-color: #eee;
449 width: 100%;
450}
451
452
453div.navheader td,
454div.navfooter td {
455 font-size: 66%;
456}
457
458div.navheader table th {
459 /*font-family: Georgia, Times, serif;*/
460 /*font-size: x-large;*/
461 font-size: 80%;
462}
463
464div.navheader table {
465 border-left: 0em;
466 border-right: 0em;
467 border-top: 0em;
468 width: 100%;
469}
470
471div.navfooter table {
472 border-left: 0em;
473 border-right: 0em;
474 border-bottom: 0em;
475 width: 100%;
476}
477
478div.navheader table td a,
479div.navfooter table td a {
480 color: #777;
481 text-decoration: none;
482}
483
484/* normal text in the footer */
485div.navfooter table td {
486 color: black;
487}
488
489div.navheader table td a:visited,
490div.navfooter table td a:visited {
491 color: #444;
492}
493
494
495/* links in header and footer */
496div.navheader table td a:hover,
497div.navfooter table td a:hover {
498 text-decoration: underline;
499 background-color: transparent;
500 color: #33a;
501}
502
503div.navheader hr,
504div.navfooter hr {
505 display: none;
506}
507
508
509.qandaset tr.question td p {
510 margin: 0em 0em 1em 0em;
511 padding: 0em 0em 0em 0em;
512}
513
514.qandaset tr.answer td p {
515 margin: 0em 0em 1em 0em;
516 padding: 0em 0em 0em 0em;
517}
518.answer td {
519 padding-bottom: 1.5em;
520}
521
522.emphasis {
523 font-weight: bold;
524}
525
526
527 /************* /
528 / decorations /
529/ *************/
530
531.titlepage {
532}
533
534.part .title {
535}
536
537.subtitle {
538 border: none;
539}
540
541/*
542h1 {
543 border: none;
544}
545
546h2 {
547 border-top: solid 0.2em;
548 border-bottom: solid 0.06em;
549}
550
551h3 {
552 border-top: 0em;
553 border-bottom: solid 0.06em;
554}
555
556h4 {
557 border: 0em;
558 border-bottom: solid 0.06em;
559}
560
561h5 {
562 border: 0em;
563}
564*/
565
566.programlisting {
567 border: solid 1px;
568}
569
570div.figure,
571div.table,
572div.informalfigure,
573div.informaltable,
574div.informalexample,
575div.example {
576 border: 1px solid;
577}
578
579
580
581.tip,
582.warning,
583.caution,
584.note {
585 border: 1px solid;
586}
587
588.tip table th,
589.warning table th,
590.caution table th,
591.note table th {
592 border-bottom: 1px solid;
593}
594
595.question td {
596 border-top: 1px solid black;
597}
598
599.answer {
600}
601
602
603b.keycap,
604.keycap {
605 border: 1px solid;
606}
607
608
609div.navheader, div.heading{
610 border-bottom: 1px solid;
611}
612
613
614div.navfooter, div.footing{
615 border-top: 1px solid;
616}
617
618 /********* /
619 / colors /
620/ *********/
621
622body {
623 color: #333;
624 background: white;
625}
626
627a {
628 background: transparent;
629}
630
631a:hover {
632 background-color: #dedede;
633}
634
635
636h1,
637h2,
638h3,
639h4,
640h5,
641h6,
642h7,
643h8 {
644 background-color: transparent;
645}
646
647hr {
648 border-color: #aaa;
649}
650
651
652.tip, .warning, .caution, .note {
653 border-color: #fff;
654}
655
656
657.tip table th,
658.warning table th,
659.caution table th,
660.note table th {
661 border-bottom-color: #fff;
662}
663
664
665.warning {
666 background-color: #f0f0f2;
667}
668
669.caution {
670 background-color: #f0f0f2;
671}
672
673.tip {
674 background-color: #f0f0f2;
675}
676
677.note {
678 background-color: #f0f0f2;
679}
680
681.glossary dl dt,
682.variablelist dl dt,
683.variablelist dl dt span.term {
684 color: #044;
685}
686
687div.figure,
688div.table,
689div.example,
690div.informalfigure,
691div.informaltable,
692div.informalexample {
693 border-color: #aaa;
694}
695
696pre.programlisting {
697 color: black;
698 background-color: #fff;
699 border-color: #aaa;
700 border-width: 2px;
701}
702
703.guimenu,
704.guilabel,
705.guimenuitem {
706 background-color: #eee;
707}
708
709
710b.keycap,
711.keycap {
712 background-color: #eee;
713 border-color: #999;
714}
715
716
717div.navheader {
718 border-color: black;
719}
720
721
722div.navfooter {
723 border-color: black;
724}
725
726
727 /*********** /
728 / graphics /
729/ ***********/
730
731/*
732body {
733 background-image: url("images/body_bg.jpg");
734 background-attachment: fixed;
735}
736
737.navheader,
738.note,
739.tip {
740 background-image: url("images/note_bg.jpg");
741 background-attachment: fixed;
742}
743
744.warning,
745.caution {
746 background-image: url("images/warning_bg.jpg");
747 background-attachment: fixed;
748}
749
750.figure,
751.informalfigure,
752.example,
753.informalexample,
754.table,
755.informaltable {
756 background-image: url("images/figure_bg.jpg");
757 background-attachment: fixed;
758}
759
760*/
761h1,
762h2,
763h3,
764h4,
765h5,
766h6,
767h7{
768}
769
770/*
771Example of how to stick an image as part of the title.
772
773div.article .titlepage .title
774{
775 background-image: url("figures/white-on-black.png");
776 background-position: center;
777 background-repeat: repeat-x;
778}
779*/
780
781div.preface .titlepage .title,
782div.colophon .title,
783div.chapter .titlepage .title,
784div.article .titlepage .title
785{
786}
787
788div.section div.section .titlepage .title,
789div.sect2 .titlepage .title {
790 background: none;
791}
792
793
794h1.title {
795 background-color: transparent;
796 background-image: url("figures/poky-title.png");
797 background-repeat: no-repeat;
798 height: 256px;
799 text-indent: -9000px;
800 overflow:hidden;
801}
802
803h2.subtitle {
804 background-color: transparent;
805 text-indent: -9000px;
806 overflow:hidden;
807 width: 0px;
808 display: none;
809}
810
811 /*************************************** /
812 / pippin.gimp.org specific alterations /
813/ ***************************************/
814
815/*
816div.heading, div.navheader {
817 color: #777;
818 font-size: 80%;
819 padding: 0;
820 margin: 0;
821 text-align: left;
822 position: absolute;
823 top: 0px;
824 left: 0px;
825 width: 100%;
826 height: 50px;
827 background: url('/gfx/heading_bg.png') transparent;
828 background-repeat: repeat-x;
829 background-attachment: fixed;
830 border: none;
831}
832
833div.heading a {
834 color: #444;
835}
836
837div.footing, div.navfooter {
838 border: none;
839 color: #ddd;
840 font-size: 80%;
841 text-align:right;
842
843 width: 100%;
844 padding-top: 10px;
845 position: absolute;
846 bottom: 0px;
847 left: 0px;
848
849 background: url('/gfx/footing_bg.png') transparent;
850}
851*/
852
853
854
855 /****************** /
856 / nasty ie tweaks /
857/ ******************/
858
859/*
860div.heading, div.navheader {
861 width:expression(document.body.clientWidth + "px");
862}
863
864div.footing, div.navfooter {
865 width:expression(document.body.clientWidth + "px");
866 margin-left:expression("-5em");
867}
868body {
869 padding:expression("4em 5em 0em 5em");
870}
871*/
872
873 /**************************************** /
874 / mozilla vendor specific css extensions /
875/ ****************************************/
876/*
877div.navfooter, div.footing{
878 -moz-opacity: 0.8em;
879}
880
881div.figure,
882div.table,
883div.informalfigure,
884div.informaltable,
885div.informalexample,
886div.example,
887.tip,
888.warning,
889.caution,
890.note {
891 -moz-border-radius: 0.5em;
892}
893
894b.keycap,
895.keycap {
896 -moz-border-radius: 0.3em;
897}
898*/
899
900table tr td table tr td {
901 display: none;
902}
903
904
905hr {
906 display: none;
907}
908
909table {
910 border: 0em;
911}
912
913 .photo {
914 float: right;
915 margin-left: 1.5em;
916 margin-bottom: 1.5em;
917 margin-top: 0em;
918 max-width: 17em;
919 border: 1px solid gray;
920 padding: 3px;
921 background: white;
922}
923 .seperator {
924 padding-top: 2em;
925 clear: both;
926 }
927
928 #validators {
929 margin-top: 5em;
930 text-align: right;
931 color: #777;
932 }
933 @media print {
934 body {
935 font-size: 8pt;
936 }
937 .noprint {
938 display: none;
939 }
940 }
941
942
943.tip,
944.note {
945 background: #f0f0f2;
946 color: #333;
947 padding: 20px;
948 margin: 20px;
949}
950
951.tip h3,
952.note h3 {
953 padding: 0em;
954 margin: 0em;
955 font-size: 2em;
956 font-weight: bold;
957 color: #333;
958}
959
960.tip a,
961.note a {
962 color: #333;
963 text-decoration: underline;
964}
965
966.footnote {
967 font-size: small;
968 color: #333;
969}
970
971/* Changes the announcement text */
972.tip h3,
973.warning h3,
974.caution h3,
975.note h3 {
976 font-size:large;
977 color: #00557D;
978}
979
diff --git a/documentation/ref-manual/ref-variables.xml b/documentation/ref-manual/ref-variables.xml
new file mode 100644
index 0000000000..4ff1a21323
--- /dev/null
+++ b/documentation/ref-manual/ref-variables.xml
@@ -0,0 +1,8419 @@
1<!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<!-- Dummy chapter -->
6<chapter id='ref-variables-glos'>
7
8<title>Variables Glossary</title>
9
10<para>
11 This chapter lists common variables used in the OpenEmbedded build system and gives an overview
12 of their function and contents.
13</para>
14
15<glossary id='ref-variables-glossary'>
16
17
18 <para>
19 <link linkend='var-ALLOW_EMPTY'>A</link>
20 <link linkend='var-B'>B</link>
21 <link linkend='var-CFLAGS'>C</link>
22 <link linkend='var-D'>D</link>
23 <link linkend='var-ENABLE_BINARY_LOCALE_GENERATION'>E</link>
24 <link linkend='var-FEATURE_PACKAGES'>F</link>
25 <link linkend='var-GROUPADD_PARAM'>G</link>
26 <link linkend='var-HOMEPAGE'>H</link>
27 <link linkend='var-ICECC_DISABLED'>I</link>
28<!-- <link linkend='var-glossary-j'>J</link> -->
29 <link linkend='var-KARCH'>K</link>
30 <link linkend='var-LABELS'>L</link>
31 <link linkend='var-MACHINE'>M</link>
32<!-- <link linkend='var-glossary-n'>N</link> -->
33 <link linkend='var-OE_BINCONFIG_EXTRA_MANGLE'>O</link>
34 <link linkend='var-P'>P</link>
35 <link linkend='var-QMAKE_PROFILES'>Q</link>
36 <link linkend='var-RCONFLICTS'>R</link>
37 <link linkend='var-S'>S</link>
38 <link linkend='var-T'>T</link>
39 <link linkend='var-UBOOT_CONFIG'>U</link>
40<!-- <link linkend='var-glossary-v'>V</link> -->
41 <link linkend='var-WARN_QA'>W</link>
42<!-- <link linkend='var-glossary-x'>X</link> -->
43<!-- <link linkend='var-glossary-y'>Y</link> -->
44<!-- <link linkend='var-glossary-z'>Z</link>-->
45 </para>
46
47 <glossdiv id='var-glossary-a'><title>A</title>
48
49 <glossentry id='var-ALLOW_EMPTY'><glossterm>ALLOW_EMPTY</glossterm>
50 <glossdef>
51 <para>
52 Specifies if an output package should still be produced if it is empty.
53 By default, BitBake does not produce empty packages.
54 This default behavior can cause issues when there is an
55 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link> or
56 some other hard runtime requirement on the existence of the package.
57 </para>
58
59 <para>
60 Like all package-controlling variables, you must always use them in
61 conjunction with a package name override, as in:
62 <literallayout class='monospaced'>
63 ALLOW_EMPTY_${PN} = "1"
64 ALLOW_EMPTY_${PN}-dev = "1"
65 ALLOW_EMPTY_${PN}-staticdev = "1"
66 </literallayout>
67 </para>
68 </glossdef>
69 </glossentry>
70
71 <glossentry id='var-ALTERNATIVE'><glossterm>ALTERNATIVE</glossterm>
72 <glossdef>
73 <para>
74 Lists commands in a package that need an alternative
75 binary naming scheme.
76 Sometimes the same command is provided in multiple packages.
77 When this occurs, the OpenEmbedded build system needs to
78 use the alternatives system to create a different binary
79 naming scheme so the commands can co-exist.
80 </para>
81
82 <para>
83 To use the variable, list out the package's commands
84 that also exist as part of another package.
85 For example, if the <filename>busybox</filename> package
86 has four commands that also exist as part of another
87 package, you identify them as follows:
88 <literallayout class='monospaced'>
89 ALTERNATIVE_busybox = "sh sed test bracket"
90 </literallayout>
91 For more information on the alternatives system, see the
92 "<link linkend='ref-classes-update-alternatives'><filename>update-alternatives.bbclass</filename></link>"
93 section.
94 </para>
95 </glossdef>
96 </glossentry>
97
98 <glossentry id='var-ALTERNATIVE_LINK_NAME'><glossterm>ALTERNATIVE_LINK_NAME</glossterm>
99 <glossdef>
100 <para>
101 Used by the alternatives system to map duplicated commands
102 to actual locations.
103 For example, if the <filename>bracket</filename> command
104 provided by the <filename>busybox</filename> package is
105 duplicated through another package, you must use the
106 <filename>ALTERNATIVE_LINK_NAME</filename> variable to
107 specify the actual location:
108 <literallayout class='monospaced'>
109 ALTERNATIVE_LINK_NAME[bracket] = "/usr/bin/["
110 </literallayout>
111 In this example, the binary for the
112 <filename>bracket</filename> command (i.e.
113 <filename>[</filename>) from the
114 <filename>busybox</filename> package resides in
115 <filename>/usr/bin/</filename>.
116 <note>
117 If <filename>ALTERNATIVE_LINK_NAME</filename> is not
118 defined, it defaults to
119 <filename>${bindir}/&lt;name&gt;</filename>.
120 </note>
121 </para>
122
123 <para>
124 For more information on the alternatives system, see the
125 "<link linkend='ref-classes-update-alternatives'><filename>update-alternatives.bbclass</filename></link>"
126 section.
127 </para>
128 </glossdef>
129 </glossentry>
130
131 <glossentry id='var-ALTERNATIVE_PRIORITY'><glossterm>ALTERNATIVE_PRIORITY</glossterm>
132 <glossdef>
133 <para>
134 Used by the alternatives system to create default
135 priorities for duplicated commands.
136 You can use the variable to create a single default
137 regardless of the command name or package, a default for
138 specific duplicated commands regardless of the package, or
139 a default for specific commands tied to particular packages.
140 Here are the available syntax forms:
141 <literallayout class='monospaced'>
142 ALTERNATIVE_PRIORITY = "&lt;priority&gt;"
143 ALTERNATIVE_PRIORITY[&lt;name&gt;] = "&lt;priority&gt;"
144 ALTERNATIVE_PRIORITY_&lt;pkg&gt;[&lt;name&gt;] = "&lt;priority&gt;"
145 </literallayout>
146 </para>
147
148 <para>
149 For more information on the alternatives system, see the
150 "<link linkend='ref-classes-update-alternatives'><filename>update-alternatives.bbclass</filename></link>"
151 section.
152 </para>
153 </glossdef>
154 </glossentry>
155
156 <glossentry id='var-ALTERNATIVE_TARGET'><glossterm>ALTERNATIVE_TARGET</glossterm>
157 <glossdef>
158 <para>
159 Used by the alternatives system to create default link
160 locations for duplicated commands.
161 You can use the variable to create a single default
162 location for all duplicated commands regardless of the
163 command name or package, a default for
164 specific duplicated commands regardless of the package, or
165 a default for specific commands tied to particular packages.
166 Here are the available syntax forms:
167 <literallayout class='monospaced'>
168 ALTERNATIVE_TARGET = "&lt;target&gt;"
169 ALTERNATIVE_TARGET[&lt;name&gt;] = "&lt;target&gt;"
170 ALTERNATIVE_TARGET_&lt;pkg&gt;[&lt;name&gt;] = "&lt;target&gt;"
171 </literallayout>
172 <note>
173 <para>
174 If <filename>ALTERNATIVE_TARGET</filename> is not
175 defined, it inherits the value from the
176 <link linkend='var-ALTERNATIVE_LINK_NAME'><filename>ALTERNATIVE_LINK_NAME</filename></link>
177 variable.
178 </para>
179
180 <para>
181 If <filename>ALTERNATIVE_LINK_NAME</filename> and
182 <filename>ALTERNATIVE_TARGET</filename> are the
183 same, the target for
184 <filename>ALTERNATIVE_TARGET</filename>
185 has "<filename>.{BPN}</filename>" appended to it.
186 </para>
187
188 <para>
189 Finally, if the file referenced has not been
190 renamed, the alternatives system will rename it to
191 avoid the need to rename alternative files in the
192 <filename>do_install</filename> task while
193 retaining support for the command if necessary.
194 </para>
195 </note>
196 </para>
197
198 <para>
199 For more information on the alternatives system, see the
200 "<link linkend='ref-classes-update-alternatives'><filename>update-alternatives.bbclass</filename></link>"
201 section.
202 </para>
203 </glossdef>
204 </glossentry>
205
206 <glossentry id='var-APPEND'><glossterm>APPEND</glossterm>
207 <glossdef>
208 <para>
209 An override list of append strings for each
210 <link linkend='var-LABELS'><filename>LABEL</filename></link>.
211 </para>
212
213 <para>
214 See the
215 <link linkend='ref-classes-grub-efi'><filename>grub-efi</filename></link>
216 class for more information on how this variable is used.
217 </para>
218 </glossdef>
219 </glossentry>
220
221 <glossentry id='var-AUTHOR'><glossterm>AUTHOR</glossterm>
222 <glossdef>
223 <para>The email address used to contact the original author
224 or authors in order to send patches and forward bugs.</para>
225 </glossdef>
226 </glossentry>
227
228 <glossentry id='var-AUTO_SYSLINUXMENU'><glossterm>AUTO_SYSLINUXMENU</glossterm>
229 <glossdef>
230 <para>
231 Enables creating an automatic menu.
232 You must set this in your recipe.
233 The
234 <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
235 class checks this variable.
236 </para>
237 </glossdef>
238 </glossentry>
239
240 <glossentry id='var-AUTOREV'><glossterm>AUTOREV</glossterm>
241 <glossdef>
242 <para>When <filename><link linkend='var-SRCREV'>SRCREV</link></filename>
243 is set to the value of this variable, it specifies to use the latest
244 source revision in the repository.
245 Here is an example:
246 <literallayout class='monospaced'>
247 SRCREV = "${AUTOREV}"
248 </literallayout>
249 </para>
250 </glossdef>
251 </glossentry>
252
253 </glossdiv>
254
255 <glossdiv id='var-glossary-b'><title>B</title>
256
257 <glossentry id='var-B'><glossterm>B</glossterm>
258 <glossdef>
259 <para>
260 The directory within the
261 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
262 in which the OpenEmbedded build system places generated
263 objects during a recipe's build process.
264 By default, this directory is the same as the <link linkend='var-S'><filename>S</filename></link>
265 directory, which is defined as:
266 <literallayout class='monospaced'>
267 S = "${WORKDIR}/${BP}/"
268 </literallayout>
269 You can separate the (<filename>S</filename>) directory
270 and the directory pointed to by the <filename>B</filename>
271 variable.
272 Most Autotools-based recipes support separating these
273 directories.
274 The build system defaults to using separate directories for
275 <filename>gcc</filename> and some kernel recipes.
276 </para>
277 </glossdef>
278 </glossentry>
279
280 <glossentry id='var-BAD_RECOMMENDATIONS'><glossterm>BAD_RECOMMENDATIONS</glossterm>
281 <glossdef>
282 <para>
283 Lists "recommended-only" packages to not install.
284 Recommended-only packages are packages installed only
285 through the
286 <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>
287 variable.
288 You can prevent any of these "recommended" packages from
289 being installed by listing them with the
290 <filename>BAD_RECOMMENDATIONS</filename> variable:
291 <literallayout class='monospaced'>
292 BAD_RECOMMENDATIONS = "&lt;package_name&gt; &lt;package_name&gt; &lt;package_name&gt; ..."
293 </literallayout>
294 You can set this variable globally in your
295 <filename>local.conf</filename> file or you can attach it to
296 a specific image recipe by using the recipe name override:
297 <literallayout class='monospaced'>
298 BAD_RECOMMENDATIONS_pn-&lt;target_image&gt; = "&lt;package_name&gt;"
299 </literallayout>
300 </para>
301
302 <para>
303 It is important to realize that if you choose to not install
304 packages using this variable and some other packages are
305 dependent on them (i.e. listed in a recipe's
306 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
307 variable), the OpenEmbedded build system ignores your
308 request and will install the packages to avoid dependency
309 errors.
310 </para>
311
312 <para>
313 Support for this variable exists only when using the
314 IPK and RPM packaging backend.
315 Support does not exist for DEB.
316 </para>
317
318 <para>
319 See the
320 <link linkend='var-NO_RECOMMENDATIONS'><filename>NO_RECOMMENDATIONS</filename></link>
321 and the
322 <link linkend='var-PACKAGE_EXCLUDE'><filename>PACKAGE_EXCLUDE</filename></link>
323 variables for related information.
324 </para>
325 </glossdef>
326 </glossentry>
327
328 <glossentry id='var-BB_DANGLINGAPPENDS_WARNONLY'><glossterm>BB_DANGLINGAPPENDS_WARNONLY</glossterm>
329 <glossdef>
330 <para>
331 Defines how BitBake handles situations where an append
332 file (<filename>.bbappend</filename>) has no
333 corresponding recipe file (<filename>.bb</filename>).
334 This condition often occurs when layers get out of sync
335 (e.g. <filename>oe-core</filename> bumps a
336 recipe version and the old recipe no longer exists and the
337 other layer has not been updated to the new version
338 of the recipe yet).
339 </para>
340
341 <para>
342 The default fatal behavior is safest because it is
343 the sane reaction given something is out of sync.
344 It is important to realize when your changes are no longer
345 being applied.
346 </para>
347
348 <para>
349 You can change the default behavior by setting this
350 variable to "1", "yes", or "true"
351 in your <filename>local.conf</filename> file, which is
352 located in the
353 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>:
354 Here is an example:
355 <literallayout class='monospaced'>
356 BB_DANGLINGAPPENDS_WARNONLY = "1"
357 </literallayout>
358 </para>
359 </glossdef>
360 </glossentry>
361
362 <glossentry id='var-BB_DISKMON_DIRS'><glossterm>BB_DISKMON_DIRS</glossterm>
363 <glossdef>
364 <para>
365 Monitors disk space and available inodes during the build
366 and allows you to control the build based on these
367 parameters.
368 </para>
369
370 <para>
371 Disk space monitoring is disabled by default.
372 To enable monitoring, add the <filename>BB_DISKMON_DIRS</filename>
373 variable to your <filename>conf/local.conf</filename> file found in the
374 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
375 Use the following form:
376 <literallayout class='monospaced'>
377 BB_DISKMON_DIRS = "&lt;action&gt;,&lt;dir&gt;,&lt;threshold&gt; [...]"
378
379 where:
380
381 &lt;action&gt; is:
382 ABORT: Immediately abort the build when
383 a threshold is broken.
384 STOPTASKS: Stop the build after the currently
385 executing tasks have finished when
386 a threshold is broken.
387 WARN: Issue a warning but continue the
388 build when a threshold is broken.
389 Subsequent warnings are issued as
390 defined by the
391 <link linkend='var-BB_DISKMON_WARNINTERVAL'>BB_DISKMON_WARNINTERVAL</link> variable,
392 which must be defined in the
393 conf/local.conf file.
394
395 &lt;dir&gt; is:
396 Any directory you choose. You can specify one or
397 more directories to monitor by separating the
398 groupings with a space. If two directories are
399 on the same device, only the first directory
400 is monitored.
401
402 &lt;threshold&gt; is:
403 Either the minimum available disk space,
404 the minimum number of free inodes, or
405 both. You must specify at least one. To
406 omit one or the other, simply omit the value.
407 Specify the threshold using G, M, K for Gbytes,
408 Mbytes, and Kbytes, respectively. If you do
409 not specify G, M, or K, Kbytes is assumed by
410 default. Do not use GB, MB, or KB.
411 </literallayout>
412 </para>
413
414 <para>
415 Here are some examples:
416 <literallayout class='monospaced'>
417 BB_DISKMON_DIRS = "ABORT,${TMPDIR},1G,100K WARN,${SSTATE_DIR},1G,100K"
418 BB_DISKMON_DIRS = "STOPTASKS,${TMPDIR},1G"
419 BB_DISKMON_DIRS = "ABORT,${TMPDIR},,100K"
420 </literallayout>
421 The first example works only if you also provide
422 the <link linkend='var-BB_DISKMON_WARNINTERVAL'><filename>BB_DISKMON_WARNINTERVAL</filename></link> variable
423 in the <filename>conf/local.conf</filename>.
424 This example causes the build system to immediately
425 abort when either the disk space in <filename>${TMPDIR}</filename> drops
426 below 1 Gbyte or the available free inodes drops below
427 100 Kbytes.
428 Because two directories are provided with the variable, the
429 build system also issue a
430 warning when the disk space in the
431 <filename>${SSTATE_DIR}</filename> directory drops
432 below 1 Gbyte or the number of free inodes drops
433 below 100 Kbytes.
434 Subsequent warnings are issued during intervals as
435 defined by the <filename>BB_DISKMON_WARNINTERVAL</filename>
436 variable.
437 </para>
438
439 <para>
440 The second example stops the build after all currently
441 executing tasks complete when the minimum disk space
442 in the <filename>${<link linkend='var-TMPDIR'>TMPDIR</link>}</filename>
443 directory drops below 1 Gbyte.
444 No disk monitoring occurs for the free inodes in this case.
445 </para>
446
447 <para>
448 The final example immediately aborts the build when the
449 number of free inodes in the <filename>${TMPDIR}</filename> directory
450 drops below 100 Kbytes.
451 No disk space monitoring for the directory itself occurs
452 in this case.
453 </para>
454 </glossdef>
455 </glossentry>
456
457 <glossentry id='var-BB_DISKMON_WARNINTERVAL'><glossterm>BB_DISKMON_WARNINTERVAL</glossterm>
458 <glossdef>
459 <para>
460 Defines the disk space and free inode warning intervals.
461 To set these intervals, define the variable in your
462 <filename>conf/local.conf</filename> file in the
463 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
464 </para>
465
466 <para>
467 If you are going to use the
468 <filename>BB_DISKMON_WARNINTERVAL</filename> variable, you must
469 also use the
470 <link linkend='var-BB_DISKMON_DIRS'><filename>BB_DISKMON_DIRS</filename></link> variable
471 and define its action as "WARN".
472 During the build, subsequent warnings are issued each time
473 disk space or number of free inodes further reduces by
474 the respective interval.
475 </para>
476
477 <para>
478 If you do not provide a <filename>BB_DISKMON_WARNINTERVAL</filename>
479 variable and you do use <filename>BB_DISKMON_DIRS</filename> with
480 the "WARN" action, the disk monitoring interval defaults to
481 the following:
482 <literallayout class='monospaced'>
483 BB_DISKMON_WARNINTERVAL = "50M,5K"
484 </literallayout>
485 </para>
486
487 <para>
488 When specifying the variable in your configuration file,
489 use the following form:
490 <literallayout class='monospaced'>
491 BB_DISKMON_WARNINTERVAL = "&lt;disk_space_interval&gt;,&lt;disk_inode_interval&gt;"
492
493 where:
494
495 &lt;disk_space_interval&gt; is:
496 An interval of memory expressed in either
497 G, M, or K for Gbytes, Mbytes, or Kbytes,
498 respectively. You cannot use GB, MB, or KB.
499
500 &lt;disk_inode_interval&gt; is:
501 An interval of free inodes expressed in either
502 G, M, or K for Gbytes, Mbytes, or Kbytes,
503 respectively. You cannot use GB, MB, or KB.
504 </literallayout>
505 </para>
506
507 <para>
508 Here is an example:
509 <literallayout class='monospaced'>
510 BB_DISKMON_DIRS = "WARN,${SSTATE_DIR},1G,100K"
511 BB_DISKMON_WARNINTERVAL = "50M,5K"
512 </literallayout>
513 These variables cause the OpenEmbedded build system to
514 issue subsequent warnings each time the available
515 disk space further reduces by 50 Mbytes or the number
516 of free inodes further reduces by 5 Kbytes in the
517 <filename>${SSTATE_DIR}</filename> directory.
518 Subsequent warnings based on the interval occur each time
519 a respective interval is reached beyond the initial warning
520 (i.e. 1 Gbytes and 100 Kbytes).
521 </para>
522 </glossdef>
523 </glossentry>
524
525 <glossentry id='var-BB_GENERATE_MIRROR_TARBALLS'><glossterm>BB_GENERATE_MIRROR_TARBALLS</glossterm>
526 <glossdef>
527 <para>
528 Causes tarballs of the Git repositories, including the
529 Git metadata, to be placed in the
530 <link linkend='var-DL_DIR'><filename>DL_DIR</filename></link>
531 directory.
532 </para>
533
534 <para>
535 For performance reasons, creating and placing tarballs of
536 the Git repositories is not the default action by the
537 OpenEmbedded build system.
538 <literallayout class='monospaced'>
539 BB_GENERATE_MIRROR_TARBALLS = "1"
540 </literallayout>
541 Set this variable in your <filename>local.conf</filename>
542 file in the
543 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
544 </para>
545 </glossdef>
546 </glossentry>
547
548 <glossentry id='var-BB_NUMBER_THREADS'><glossterm>BB_NUMBER_THREADS</glossterm>
549 <glossdef>
550 <para>
551 The maximum number of tasks BitBake should run in parallel
552 at any one time.
553 If your host development system supports multiple cores,
554 a good rule of thumb is to set this variable to twice the
555 number of cores.
556 </para>
557
558 <para>
559 The default value for <filename>BB_NUMBER_THREADS</filename>
560 is equal to the number of cores your build system has.
561 </para>
562 </glossdef>
563 </glossentry>
564
565 <glossentry id='var-BBCLASSEXTEND'><glossterm>BBCLASSEXTEND</glossterm>
566 <glossdef>
567 <para>
568 Allows you to extend a recipe so that it builds variants of the software.
569 Common variants for recipes exist such as "natives" like <filename>quilt-native</filename>,
570 which is a copy of Quilt built to run on the build system;
571 "crosses" such as <filename>gcc-cross</filename>,
572 which is a compiler built to run on the build machine but produces binaries
573 that run on the target <link linkend='var-MACHINE'><filename>MACHINE</filename></link>;
574 "nativesdk", which targets the SDK machine instead of <filename>MACHINE</filename>;
575 and "mulitlibs" in the form "<filename>multilib:&lt;multilib_name&gt;</filename>".
576 </para>
577
578 <para>
579 To build a different variant of the recipe with a minimal amount of code, it usually
580 is as simple as adding the following to your recipe:
581 <literallayout class='monospaced'>
582 BBCLASSEXTEND =+ "native nativesdk"
583 BBCLASSEXTEND =+ "multilib:&lt;multilib_name&gt;"
584 </literallayout>
585 </para>
586 </glossdef>
587 </glossentry>
588
589 <glossentry id='var-BBFILE_COLLECTIONS'><glossterm>BBFILE_COLLECTIONS</glossterm>
590 <glossdef>
591 <para>Lists the names of configured layers.
592 These names are used to find the other <filename>BBFILE_*</filename>
593 variables.
594 Typically, each layer will append its name to this variable in its
595 <filename>conf/layer.conf</filename> file.
596 </para>
597 </glossdef>
598 </glossentry>
599
600 <glossentry id='var-BBFILE_PATTERN'><glossterm>BBFILE_PATTERN</glossterm>
601 <glossdef>
602 <para>Variable that expands to match files from
603 <link linkend='var-BBFILES'><filename>BBFILES</filename></link>
604 in a particular layer.
605 This variable is used in the <filename>conf/layer.conf</filename> file and must
606 be suffixed with the name of the specific layer (e.g.
607 <filename>BBFILE_PATTERN_emenlow</filename>).</para>
608 </glossdef>
609 </glossentry>
610
611 <glossentry id='var-BBFILE_PRIORITY'><glossterm>BBFILE_PRIORITY</glossterm>
612 <glossdef>
613 <para>Assigns the priority for recipe files in each layer.</para>
614 <para>This variable is useful in situations where the same recipe appears in
615 more than one layer.
616 Setting this variable allows you to prioritize a
617 layer against other layers that contain the same recipe - effectively
618 letting you control the precedence for the multiple layers.
619 The precedence established through this variable stands regardless of a
620 recipe's version
621 (<link linkend='var-PV'><filename>PV</filename></link> variable).
622 For example, a layer that has a recipe with a higher <filename>PV</filename> value but for
623 which the <filename>BBFILE_PRIORITY</filename> is set to have a lower precedence still has a
624 lower precedence.</para>
625 <para>A larger value for the <filename>BBFILE_PRIORITY</filename> variable results in a higher
626 precedence.
627 For example, the value 6 has a higher precedence than the value 5.
628 If not specified, the <filename>BBFILE_PRIORITY</filename> variable is set based on layer
629 dependencies (see the
630 <filename><link linkend='var-LAYERDEPENDS'>LAYERDEPENDS</link></filename> variable for
631 more information.
632 The default priority, if unspecified
633 for a layer with no dependencies, is the lowest defined priority + 1
634 (or 1 if no priorities are defined).</para>
635 <tip>
636 You can use the command <filename>bitbake-layers show-layers</filename> to list
637 all configured layers along with their priorities.
638 </tip>
639 </glossdef>
640 </glossentry>
641
642 <glossentry id='var-BBFILES'><glossterm>BBFILES</glossterm>
643 <glossdef>
644 <para>List of recipe files used by BitBake to build software.</para>
645 </glossdef>
646 </glossentry>
647
648 <glossentry id='var-BBINCLUDELOGS'><glossterm>BBINCLUDELOGS</glossterm>
649 <glossdef>
650 <para>Variable that controls how BitBake displays logs on build failure.</para>
651 </glossdef>
652 </glossentry>
653
654 <glossentry id='var-BBLAYERS'><glossterm>BBLAYERS</glossterm>
655 <glossdef>
656 <para>Lists the layers to enable during the build.
657 This variable is defined in the <filename>bblayers.conf</filename> configuration
658 file in the <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
659 Here is an example:
660 <literallayout class='monospaced'>
661 BBLAYERS = " \
662 /home/scottrif/poky/meta \
663 /home/scottrif/poky/meta-yocto \
664 /home/scottrif/poky/meta-yocto-bsp \
665 /home/scottrif/poky/meta-mykernel \
666 "
667
668 BBLAYERS_NON_REMOVABLE ?= " \
669 /home/scottrif/poky/meta \
670 /home/scottrif/poky/meta-yocto \
671 "
672 </literallayout>
673 This example enables four layers, one of which is a custom, user-defined layer
674 named <filename>meta-mykernel</filename>.
675 </para>
676 </glossdef>
677 </glossentry>
678
679 <glossentry id='var-BBLAYERS_NON_REMOVABLE'><glossterm>BBLAYERS_NON_REMOVABLE</glossterm>
680 <glossdef>
681 <para>Lists core layers that cannot be removed from the
682 <filename>bblayers.conf</filename> file during a build
683 using the
684 <ulink url='https://www.yoctoproject.org/tools-resources/projects/hob'>Hob</ulink>.
685 <note>
686 When building an image outside of Hob, this variable
687 is ignored.
688 </note>
689 In order for BitBake to build your image using Hob, your
690 <filename>bblayers.conf</filename> file must include the
691 <filename>meta</filename> and <filename>meta-yocto</filename>
692 core layers.
693 Here is an example that shows these two layers listed in
694 the <filename>BBLAYERS_NON_REMOVABLE</filename> statement:
695 <literallayout class='monospaced'>
696 BBLAYERS = " \
697 /home/scottrif/poky/meta \
698 /home/scottrif/poky/meta-yocto \
699 /home/scottrif/poky/meta-yocto-bsp \
700 /home/scottrif/poky/meta-mykernel \
701 "
702
703 BBLAYERS_NON_REMOVABLE ?= " \
704 /home/scottrif/poky/meta \
705 /home/scottrif/poky/meta-yocto \
706 "
707 </literallayout>
708 </para>
709 </glossdef>
710 </glossentry>
711
712 <glossentry id='var-BBMASK'><glossterm>BBMASK</glossterm>
713 <glossdef>
714 <para>
715 Prevents BitBake from processing recipes and recipe
716 append files.
717 Use the <filename>BBMASK</filename> variable from within the
718 <filename>conf/local.conf</filename> file found
719 in the
720 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
721 </para>
722
723 <para>
724 You can use the <filename>BBMASK</filename> variable
725 to "hide" these <filename>.bb</filename> and
726 <filename>.bbappend</filename> files.
727 BitBake ignores any recipe or recipe append files that
728 match the expression.
729 It is as if BitBake does not see them at all.
730 Consequently, matching files are not parsed or otherwise
731 used by BitBake.</para>
732 <para>
733 The value you provide is passed to Python's regular
734 expression compiler.
735 The expression is compared against the full paths to
736 the files.
737 For complete syntax information, see Python's
738 documentation at
739 <ulink url='http://docs.python.org/release/2.3/lib/re-syntax.html'></ulink>.
740 </para>
741
742 <para>
743 The following example uses a complete regular expression
744 to tell BitBake to ignore all recipe and recipe append
745 files in the <filename>meta-ti/recipes-misc/</filename>
746 directory:
747 <literallayout class='monospaced'>
748 BBMASK = "meta-ti/recipes-misc/"
749 </literallayout>
750 If you want to mask out multiple directories or recipes,
751 use the vertical bar to separate the regular expression
752 fragments.
753 This next example masks out multiple directories and
754 individual recipes:
755 <literallayout class='monospaced'>
756 BBMASK = "meta-ti/recipes-misc/|meta-ti/recipes-ti/packagegroup/"
757 BBMASK .= "|.*meta-oe/recipes-support/"
758 BBMASK .= "|.*openldap"
759 BBMASK .= "|.*opencv"
760 BBMASK .= "|.*lzma"
761 </literallayout>
762 Notice how the vertical bar is used to append the fragments.
763 <note>
764 When specifying a directory name, use the trailing
765 slash character to ensure you match just that directory
766 name.
767 </note>
768 </para>
769 </glossdef>
770 </glossentry>
771
772 <glossentry id='var-BBPATH'><glossterm>BBPATH</glossterm>
773 <glossdef>
774 <para>
775 Used by BitBake to locate
776 <filename>.bbclass</filename> and configuration files.
777 This variable is analogous to the
778 <filename>PATH</filename> variable.
779 <note>
780 If you run BitBake from a directory outside of the
781 <ulink url='&YOCTO_DOCS_DEV_URL;build-directory'>Build Directory</ulink>,
782 you must be sure to set
783 <filename>BBPATH</filename> to point to the
784 Build Directory.
785 Set the variable as you would any environment variable
786 and then run BitBake:
787 <literallayout class='monospaced'>
788 $ BBPATH = "&lt;build_directory&gt;"
789 $ export BBPATH
790 $ bitbake &lt;target&gt;
791 </literallayout>
792 </note>
793 </para>
794 </glossdef>
795 </glossentry>
796
797 <glossentry id='var-BBSERVER'><glossterm>BBSERVER</glossterm>
798 <glossdef>
799 <para>
800 Points to the server that runs memory-resident BitBake.
801 This variable is set by the
802 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>
803 setup script and should not be hand-edited.
804 The variable is only used when you employ memory-resident
805 BitBake.
806 The setup script exports the value as follows:
807 <literallayout class='monospaced'>
808 export BBSERVER=localhost:$port
809 </literallayout>
810 For more information on how the
811 <filename>BBSERVER</filename> is used, see the
812 <filename>oe-init-build-env-memres</filename> script, which
813 is located in the
814 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
815 </para>
816 </glossdef>
817 </glossentry>
818
819 <glossentry id='var-BINCONFIG_GLOB'><glossterm>BINCONFIG_GLOB</glossterm>
820 <glossdef>
821 <para>
822 When inheriting <filename>binconfig.bbclass</filename>
823 from a recipe, this variable specifies a wildcard for
824 configuration scripts that need editing.
825 The scripts are edited to correct any paths that have been
826 set up during compilation so that they are correct for
827 use when installed into the sysroot and called by the
828 build processes of other recipes.
829 </para>
830
831 <para>
832 For more information on how this variable works, see
833 <filename>meta/classes/binconfig.bbclass</filename> in the
834 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
835 You can also find general information on the class in the
836 "<link linkend='ref-classes-binconfig'><filename>binconfig.bbclass</filename></link>"
837 section.
838 </para>
839 </glossdef>
840 </glossentry>
841
842 <glossentry id='var-BP'><glossterm>BP</glossterm>
843 <glossdef>
844 <para>The base recipe name and version but without any special
845 recipe name suffix (i.e. <filename>-native</filename>, <filename>lib64-</filename>,
846 and so forth).
847 <filename>BP</filename> is comprised of the following:
848 <literallayout class="monospaced">
849 ${BPN}-${PV}
850 </literallayout></para>
851 </glossdef>
852 </glossentry>
853
854 <glossentry id='var-BPN'><glossterm>BPN</glossterm>
855 <glossdef>
856 <para>The bare name of the recipe.
857 This variable is a version of the <link linkend='var-PN'><filename>PN</filename></link> variable
858 but removes common suffixes such as "-native" and "-cross" as well
859 as removes common prefixes such as multilib's "lib64-" and "lib32-".
860 The exact list of suffixes removed is specified by the
861 <link linkend='var-SPECIAL_PKGSUFFIX'><filename>SPECIAL_PKGSUFFIX</filename></link> variable.
862 The exact list of prefixes removed is specified by the
863 <link linkend='var-MLPREFIX'><filename>MLPREFIX</filename></link> variable.
864 Prefixes are removed for <filename>multilib</filename>
865 and <filename>nativesdk</filename> cases.</para>
866 </glossdef>
867 </glossentry>
868
869 <glossentry id='var-BUGTRACKER'><glossterm>BUGTRACKER</glossterm>
870 <glossdef>
871 <para>
872 Specifies a URL for an upstream bug tracking website for
873 a recipe.
874 The OpenEmbedded build system does not use this variable.
875 Rather, the variable is a useful pointer in case a bug
876 in the software being built needs to be manually reported.
877 </para>
878 </glossdef>
879 </glossentry>
880
881 <glossentry id='var-BUILDDIR'><glossterm>BUILDDIR</glossterm>
882 <glossdef>
883 <para>
884 Points to the location of the
885 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
886 You can define this directory indirectly through the
887 <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
888 and
889 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>
890 scripts by passing in a Build Directory path when you run
891 the scripts.
892 If you run the scripts and do not provide a Build Directory
893 path, the <filename>BUILDDIR</filename> defaults to
894 <filename>build</filename> in the current directory.
895 </para>
896 </glossdef>
897 </glossentry>
898
899 <glossentry id='var-BUILDHISTORY_COMMIT'><glossterm>BUILDHISTORY_COMMIT</glossterm>
900 <glossdef>
901 <para>
902 When inheriting the
903 <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
904 class, specifies whether or not to commit the build
905 history output in a local Git repository.
906 If set to "1", this local repository will be maintained
907 automatically by the
908 <filename>buildhistory</filename>
909 class and a commit will be created on every
910 build for changes to each top-level subdirectory of the
911 build history output (images, packages, and sdk).
912 If you want to track changes to build history over
913 time, you should set this value to "1".
914 </para>
915
916 <para>
917 By default, the <filename>buildhistory</filename> class
918 does not commit the build history output in a local
919 Git repository:
920 <literallayout class='monospaced'>
921 BUILDHISTORY_COMMIT ?= "0"
922 </literallayout>
923 </para>
924 </glossdef>
925 </glossentry>
926
927 <glossentry id='var-BUILDHISTORY_COMMIT_AUTHOR'><glossterm>BUILDHISTORY_COMMIT_AUTHOR</glossterm>
928 <glossdef>
929 <para>
930 When inheriting the
931 <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
932 class, specifies the author to use for each Git commit.
933 In order for the <filename>BUILDHISTORY_COMMIT_AUTHOR</filename>
934 variable to work, the
935 <link linkend='var-BUILDHISTORY_COMMIT'><filename>BUILDHISTORY_COMMIT</filename></link>
936 variable must be set to "1".
937 </para>
938
939 <para>
940 Git requires that the value you provide for the
941 <filename>BUILDHISTORY_COMMIT_AUTHOR</filename> variable
942 takes the form of "name &lt;email@host&gt;".
943 Providing an email address or host that is not valid does
944 not produce an error.
945 </para>
946
947 <para>
948 By default, the <filename>buildhistory</filename> class
949 sets the variable as follows:
950 <literallayout class='monospaced'>
951 BUILDHISTORY_COMMIT_AUTHOR ?= "buildhistory &lt;buildhistory@${DISTRO}&gt;"
952 </literallayout>
953 </para>
954 </glossdef>
955 </glossentry>
956
957 <glossentry id='var-BUILDHISTORY_DIR'><glossterm>BUILDHISTORY_DIR</glossterm>
958 <glossdef>
959 <para>
960 When inheriting the
961 <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
962 class, specifies the directory in which build history
963 information is kept.
964 For more information on how the variable works, see the
965 <filename>buildhistory.class</filename>.
966 </para>
967
968 <para>
969 By default, the <filename>buildhistory</filename> class
970 sets the directory as follows:
971 <literallayout class='monospaced'>
972 BUILDHISTORY_DIR ?= "${TOPDIR}/buildhistory"
973 </literallayout>
974 </para>
975 </glossdef>
976 </glossentry>
977
978 <glossentry id='var-BUILDHISTORY_FEATURES'><glossterm>BUILDHISTORY_FEATURES</glossterm>
979 <glossdef>
980 <para>
981 When inheriting the
982 <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
983 class, specifies the build history features to be enabled.
984 For more information on how build history works, see the
985 "<link linkend='maintaining-build-output-quality'>Maintaining Build Output Quality</link>"
986 section.
987 </para>
988
989 <para>
990 You can specify three features in the form of a
991 space-separated list:
992 <itemizedlist>
993 <listitem><para><emphasis>image:</emphasis>
994 Analysis of the contents of images, which
995 includes the list of installed packages among other
996 things.
997 </para></listitem>
998 <listitem><para><emphasis>package:</emphasis>
999 Analysis of the contents of individual packages.
1000 </para></listitem>
1001 <listitem><para><emphasis>sdk:</emphasis>
1002 Analysis of the contents of the software
1003 development kit (SDK).
1004 </para></listitem>
1005 </itemizedlist>
1006 </para>
1007
1008 <para>
1009 By default, the <filename>buildhistory</filename> class
1010 enables all three features:
1011 <literallayout class='monospaced'>
1012 BUILDHISTORY_FEATURES ?= "image package sdk"
1013 </literallayout>
1014 </para>
1015 </glossdef>
1016 </glossentry>
1017
1018 <glossentry id='var-BUILDHISTORY_IMAGE_FILES'><glossterm>BUILDHISTORY_IMAGE_FILES</glossterm>
1019 <glossdef>
1020 <para>
1021 When inheriting the
1022 <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
1023 class, specifies a list of paths to files copied from the
1024 image contents into the build history directory under
1025 an "image-files" directory in the directory for
1026 the image, so that you can track the contents of each file.
1027 The default is to copy <filename>/etc/passwd</filename>
1028 and <filename>/etc/group</filename>, which allows you to
1029 monitor for changes in user and group entries.
1030 You can modify the list to include any file.
1031 Specifying an invalid path does not produce an error.
1032 Consequently, you can include files that might
1033 not always be present.
1034 </para>
1035
1036 <para>
1037 By default, the <filename>buildhistory</filename> class
1038 provides paths to the following files:
1039 <literallayout class='monospaced'>
1040 BUILDHISTORY_IMAGE_FILES ?= "/etc/passwd /etc/group"
1041 </literallayout>
1042 </para>
1043 </glossdef>
1044 </glossentry>
1045
1046 <glossentry id='var-BUILDHISTORY_PUSH_REPO'><glossterm>BUILDHISTORY_PUSH_REPO</glossterm>
1047 <glossdef>
1048 <para>
1049 When inheriting the
1050 <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
1051 class, optionally specifies a remote repository
1052 to which build history pushes Git changes.
1053 In order for <filename>BUILDHISTORY_PUSH_REPO</filename>
1054 to work,
1055 <link linkend='var-BUILDHISTORY_COMMIT'><filename>BUILDHISTORY_COMMIT</filename></link>
1056 must be set to "1".
1057 </para>
1058
1059 <para>
1060 The repository should correspond to a remote
1061 address that specifies a repository as understood by
1062 Git, or alternatively to a remote name that you have
1063 set up manually using <filename>git remote</filename>
1064 within the local repository.
1065 </para>
1066
1067 <para>
1068 By default, the <filename>buildhistory</filename> class
1069 sets the variable as follows:
1070 <literallayout class='monospaced'>
1071 BUILDHISTORY_PUSH_REPO ?= ""
1072 </literallayout>
1073 </para>
1074 </glossdef>
1075 </glossentry>
1076
1077 <glossentry id='var-BUILDSTATS_BASE'><glossterm>BUILDSTATS_BASE</glossterm>
1078 <glossdef>
1079 <para>
1080 Points to the location of the directory that holds build
1081 statistics when you use and enable the
1082 <link linkend='ref-classes-buildstats'><filename>buildstats</filename></link>
1083 class.
1084 The <filename>BUILDSTATS_BASE</filename> directory defaults
1085 to
1086 <filename>${</filename><link linkend='var-TMPDIR'><filename>TMPDIR</filename></link><filename>}/buildstats/</filename>.
1087 </para>
1088 </glossdef>
1089 </glossentry>
1090
1091 <glossentry id='var-BUSYBOX_SPLIT_SUID'><glossterm>BUSYBOX_SPLIT_SUID</glossterm>
1092 <glossdef>
1093 <para>
1094 For the BusyBox recipe, specifies whether to split the
1095 output executable file into two parts: one for features
1096 that require <filename>setuid root</filename>, and one for
1097 the remaining features (i.e. those that do not require
1098 <filename>setuid root</filename>).
1099 </para>
1100
1101 <para>
1102 The <filename>BUSYBOX_SPLIT_SUID</filename> variable
1103 defaults to "1", which results in a single output
1104 executable file.
1105 Set the variable to "0" to split the output file.
1106 </para>
1107 </glossdef>
1108 </glossentry>
1109
1110 </glossdiv>
1111
1112 <glossdiv id='var-glossary-c'><title>C</title>
1113
1114 <glossentry id='var-CFLAGS'><glossterm>CFLAGS</glossterm>
1115 <glossdef>
1116 <para>
1117 Flags passed to the C compiler for the target system.
1118 This variable evaluates to the same as
1119 <filename><link linkend='var-TARGET_CFLAGS'>TARGET_CFLAGS</link></filename>.
1120 </para>
1121
1122 <para>
1123 For information on flags that help with creating more
1124 secure code, see the
1125 "<ulink url='&YOCTO_DOCS_DEV_URL;#making-images-more-secure'>Making Images More Secure</ulink>"
1126 section in the Yocto Project Development Manual.
1127 </para>
1128 </glossdef>
1129 </glossentry>
1130
1131 <glossentry id='var-CLASSOVERRIDE'><glossterm>CLASSOVERRIDE</glossterm>
1132 <glossdef>
1133 <para>
1134 An internal variable specifying the special class override
1135 that should currently apply (e.g. "class-target",
1136 "class-native", and so forth).
1137 The classes that use this variable set it to
1138 appropriate values.
1139 </para>
1140
1141 <para>
1142 You do not normally directly interact with this variable.
1143 The value for the <filename>CLASSOVERRIDE</filename>
1144 variable goes into
1145 <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>
1146 and then can be used as an override.
1147 Here is an example where "python-native" is added to
1148 <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>
1149 only when building for the native case:
1150 <literallayout class='monospaced'>
1151 DEPENDS_append_class-native = " python-native"
1152 </literallayout>
1153 </para>
1154 </glossdef>
1155 </glossentry>
1156
1157 <glossentry id='var-COMBINED_FEATURES'><glossterm>COMBINED_FEATURES</glossterm>
1158 <glossdef>
1159 <para>
1160 Provides a list of hardware features that are enabled in
1161 both
1162 <link linkend='var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></link>
1163 and
1164 <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.
1165 This select list of features contains features that make
1166 sense to be controlled both at the machine and distribution
1167 configuration level.
1168 For example, the "bluetooth" feature requires hardware
1169 support but should also be optional at the distribution
1170 level, in case the hardware supports Bluetooth but you
1171 do not ever intend to use it.
1172 </para>
1173
1174 <para>
1175 For more information, see the
1176 <link linkend='var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></link>
1177 and <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
1178 variables.
1179 </para>
1180 </glossdef>
1181 </glossentry>
1182
1183 <glossentry id='var-COMMON_LICENSE_DIR'><glossterm>COMMON_LICENSE_DIR</glossterm>
1184 <glossdef>
1185 <para>
1186 Points to <filename>meta/files/common-licenses</filename>
1187 in the
1188 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>,
1189 which is where generic license files reside.
1190 </para>
1191 </glossdef>
1192 </glossentry>
1193
1194 <glossentry id='var-COMPATIBLE_HOST'><glossterm>COMPATIBLE_HOST</glossterm>
1195 <glossdef>
1196 <para>A regular expression that resolves to one or more hosts
1197 (when the recipe is native) or one or more targets (when
1198 the recipe is non-native) with which a recipe is compatible.
1199 The regular expression is matched against
1200 <link linkend="var-HOST_SYS"><filename>HOST_SYS</filename></link>.
1201 You can use the variable to stop recipes from being built
1202 for classes of systems with which the recipes are not
1203 compatible.
1204 Stopping these builds is particularly useful with kernels.
1205 The variable also helps to increase parsing speed
1206 since the build system skips parsing recipes not
1207 compatible with the current system.</para>
1208 </glossdef>
1209 </glossentry>
1210
1211 <glossentry id='var-COMPATIBLE_MACHINE'><glossterm>COMPATIBLE_MACHINE</glossterm>
1212 <glossdef>
1213 <para>A regular expression that resolves to one or more
1214 target machines with which a recipe is compatible.
1215 The regular expression is matched against
1216 <link linkend="var-MACHINEOVERRIDES"><filename>MACHINEOVERRIDES</filename></link>.
1217 You can use the variable to stop recipes from being built
1218 for machines with which the recipes are not compatible.
1219 Stopping these builds is particularly useful with kernels.
1220 The variable also helps to increase parsing speed
1221 since the build system skips parsing recipes not
1222 compatible with the current machine.</para>
1223 </glossdef>
1224 </glossentry>
1225
1226 <glossentry id='var-COMPLEMENTARY_GLOB'><glossterm>COMPLEMENTARY_GLOB</glossterm>
1227 <glossdef>
1228 <para>
1229 Defines wildcards to match when installing a list of
1230 complementary packages for all the packages explicitly
1231 (or implicitly) installed in an image.
1232 The resulting list of complementary packages is associated
1233 with an item that can be added to
1234 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>.
1235 An example usage of this is the "dev-pkgs" item that when
1236 added to <filename>IMAGE_FEATURES</filename> will
1237 install -dev packages (containing headers and other
1238 development files) for every package in the image.
1239 </para>
1240
1241 <para>
1242 To add a new feature item pointing to a wildcard, use a
1243 variable flag to specify the feature item name and
1244 use the value to specify the wildcard.
1245 Here is an example:
1246 <literallayout class='monospaced'>
1247 COMPLEMENTARY_GLOB[dev-pkgs] = '*-dev'
1248 </literallayout>
1249 </para>
1250 </glossdef>
1251 </glossentry>
1252
1253 <glossentry id='var-CONFFILES'><glossterm>CONFFILES</glossterm>
1254 <glossdef>
1255 <para>
1256 Identifies editable or configurable files that are part of a package.
1257 If the Package Management System (PMS) is being used to update
1258 packages on the target system, it is possible that
1259 configuration files you have changed after the original installation
1260 and that you now want to remain unchanged are overwritten.
1261 In other words, editable files might exist in the package that you do not
1262 want reset as part of the package update process.
1263 You can use the <filename>CONFFILES</filename> variable to list the files in the
1264 package that you wish to prevent the PMS from overwriting during this update process.
1265 </para>
1266
1267 <para>
1268 To use the <filename>CONFFILES</filename> variable, provide a package name
1269 override that identifies the resulting package.
1270 Then, provide a space-separated list of files.
1271 Here is an example:
1272 <literallayout class='monospaced'>
1273 CONFFILES_${PN} += "${sysconfdir}/file1 \
1274 ${sysconfdir}/file2 ${sysconfdir}/file3"
1275 </literallayout>
1276 </para>
1277
1278 <para>
1279 A relationship exists between the <filename>CONFFILES</filename> and
1280 <filename><link linkend='var-FILES'>FILES</link></filename> variables.
1281 The files listed within <filename>CONFFILES</filename> must be a subset of
1282 the files listed within <filename>FILES</filename>.
1283 Because the configuration files you provide with <filename>CONFFILES</filename>
1284 are simply being identified so that the PMS will not overwrite them,
1285 it makes sense that
1286 the files must already be included as part of the package through the
1287 <filename>FILES</filename> variable.
1288 </para>
1289
1290 <note>
1291 When specifying paths as part of the <filename>CONFFILES</filename> variable,
1292 it is good practice to use appropriate path variables.
1293 For example, <filename>${sysconfdir}</filename> rather than
1294 <filename>/etc</filename> or <filename>${bindir}</filename> rather
1295 than <filename>/usr/bin</filename>.
1296 You can find a list of these variables at the top of the
1297 <filename>meta/conf/bitbake.conf</filename> file in the
1298 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
1299 </note>
1300 </glossdef>
1301 </glossentry>
1302
1303 <glossentry id='var-CONFIG_INITRAMFS_SOURCE'><glossterm>CONFIG_INITRAMFS_SOURCE</glossterm>
1304 <glossdef>
1305 <para>
1306 Identifies the initial RAM disk (initramfs) source files.
1307 The OpenEmbedded build system receives and uses
1308 this kernel Kconfig variable as an environment variable.
1309 By default, the variable is set to null ("").
1310 </para>
1311
1312 <para>
1313 The <filename>CONFIG_INITRAMFS_SOURCE</filename> can be
1314 either a single cpio archive with a
1315 <filename>.cpio</filename> suffix or a
1316 space-separated list of directories and files for building
1317 the initramfs image.
1318 A cpio archive should contain a filesystem archive
1319 to be used as an initramfs image.
1320 Directories should contain a filesystem layout to be
1321 included in the initramfs image.
1322 Files should contain entries according to the format
1323 described by the
1324 <filename>usr/gen_init_cpio</filename> program in the
1325 kernel tree.
1326 </para>
1327
1328 <para>
1329 If you specify multiple directories and files, the
1330 initramfs image will be the aggregate of all of them.
1331 </para>
1332 </glossdef>
1333 </glossentry>
1334
1335 <glossentry id='var-CONFIG_SITE'><glossterm>CONFIG_SITE</glossterm>
1336 <glossdef>
1337 <para>
1338 A list of files that contains <filename>autoconf</filename> test results relevant
1339 to the current build.
1340 This variable is used by the Autotools utilities when running
1341 <filename>configure</filename>.
1342 </para>
1343 </glossdef>
1344 </glossentry>
1345
1346 <glossentry id='var-CONFLICT_DISTRO_FEATURES'><glossterm>CONFLICT_DISTRO_FEATURES</glossterm>
1347 <glossdef>
1348 <para>
1349 When a recipe inherits the
1350 <filename>distro_features_check</filename> class, this
1351 variable identifies distribution features that would
1352 be in conflict should the recipe
1353 be built.
1354 In other words, if the
1355 <filename>CONFLICT_DISTRO_FEATURES</filename> variable
1356 lists a feature that also appears in
1357 <filename>DISTRO_FEATURES</filename> within the
1358 current configuration, an error occurs and the
1359 build stops.
1360 </para>
1361 </glossdef>
1362 </glossentry>
1363
1364 <glossentry id='var-COPY_LIC_DIRS'><glossterm>COPY_LIC_DIRS</glossterm>
1365 <glossdef>
1366 <para>
1367 If set to "1" along with the
1368 <link linkend='var-COPY_LIC_MANIFEST'><filename>COPY_LIC_MANIFEST</filename></link>
1369 variable, the OpenEmbedded build system copies
1370 into the image the license files, which are located in
1371 <filename>/usr/share/common-licenses</filename>,
1372 for each package.
1373 The license files are placed
1374 in directories within the image itself.
1375 </para>
1376 </glossdef>
1377 </glossentry>
1378
1379 <glossentry id='var-COPY_LIC_MANIFEST'><glossterm>COPY_LIC_MANIFEST</glossterm>
1380 <glossdef>
1381 <para>
1382 If set to "1", the OpenEmbedded build system copies
1383 the license manifest for the image to
1384 <filename>/usr/share/common-licenses/license.manifest</filename>
1385 within the image itself.
1386 </para>
1387 </glossdef>
1388 </glossentry>
1389
1390 <glossentry id='var-CORE_IMAGE_EXTRA_INSTALL'><glossterm>CORE_IMAGE_EXTRA_INSTALL</glossterm>
1391 <glossdef>
1392 <para>
1393 Specifies the list of packages to be added to the image.
1394 You should only set this variable in the
1395 <filename>local.conf</filename> configuration file found
1396 in the
1397 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
1398 </para>
1399
1400 <para>
1401 This variable replaces <filename>POKY_EXTRA_INSTALL</filename>, which is no longer supported.
1402 </para>
1403 </glossdef>
1404 </glossentry>
1405
1406 <glossentry id='var-COREBASE'><glossterm>COREBASE</glossterm>
1407 <glossdef>
1408 <para>
1409 Specifies the parent directory of the OpenEmbedded
1410 Core Metadata layer (i.e. <filename>meta</filename>).
1411 </para>
1412
1413 <para>
1414 It is an important distinction that
1415 <filename>COREBASE</filename> points to the parent of this
1416 layer and not the layer itself.
1417 Consider an example where you have cloned the Poky Git
1418 repository and retained the <filename>poky</filename>
1419 name for your local copy of the repository.
1420 In this case, <filename>COREBASE</filename> points to
1421 the <filename>poky</filename> folder because it is the
1422 parent directory of the <filename>poky/meta</filename>
1423 layer.
1424 </para>
1425 </glossdef>
1426 </glossentry>
1427
1428 </glossdiv>
1429
1430 <glossdiv id='var-glossary-d'><title>D</title>
1431
1432 <glossentry id='var-D'><glossterm>D</glossterm>
1433 <glossdef>
1434 <para>
1435 The destination directory.
1436 The location in the <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
1437 where components are installed by the <filename>do_install</filename> task.
1438 This location defaults to:
1439 <literallayout class='monospaced'>
1440 ${WORKDIR}/image
1441 </literallayout>
1442 </para>
1443 </glossdef>
1444 </glossentry>
1445
1446 <glossentry id='var-DATETIME'><glossterm>DATETIME</glossterm>
1447 <glossdef>
1448 <para>
1449 The date and time on which the current build started.
1450 The format is suitable for timestamps.
1451 </para>
1452 </glossdef>
1453 </glossentry>
1454
1455 <glossentry id='var-DEBUG_BUILD'><glossterm>DEBUG_BUILD</glossterm>
1456 <glossdef>
1457 <para>
1458 Specifies to build packages with debugging information.
1459 This influences the value of the
1460 <filename><link linkend='var-SELECTED_OPTIMIZATION'>SELECTED_OPTIMIZATION</link></filename>
1461 variable.
1462 </para>
1463 </glossdef>
1464 </glossentry>
1465
1466 <glossentry id='var-DEBUG_OPTIMIZATION'><glossterm>DEBUG_OPTIMIZATION</glossterm>
1467 <glossdef>
1468 <para>
1469 The options to pass in
1470 <filename><link linkend='var-TARGET_CFLAGS'>TARGET_CFLAGS</link></filename>
1471 and <filename><link linkend='var-CFLAGS'>CFLAGS</link></filename> when compiling
1472 a system for debugging.
1473 This variable defaults to "-O -fno-omit-frame-pointer ${DEBUG_FLAGS} -pipe".
1474 </para>
1475 </glossdef>
1476 </glossentry>
1477
1478 <glossentry id='var-DEFAULT_PREFERENCE'><glossterm>DEFAULT_PREFERENCE</glossterm>
1479 <glossdef>
1480 <para>
1481 Specifies a weak bias for recipe selection priority.
1482 </para>
1483 <para>
1484 The most common usage of this is variable is to set
1485 it to "-1" within a recipe for a development version of a
1486 piece of software.
1487 Using the variable in this way causes the stable version
1488 of the recipe to build by default in the absence of
1489 <filename><link linkend='var-PREFERRED_VERSION'>PREFERRED_VERSION</link></filename>
1490 being used to build the development version.
1491 </para>
1492 <note>
1493 The bias provided by <filename>DEFAULT_PREFERENCE</filename>
1494 is weak and is overridden by
1495 <filename><link linkend='var-BBFILE_PRIORITY'>BBFILE_PRIORITY</link></filename>
1496 if that variable is different between two layers
1497 that contain different versions of the same recipe.
1498 </note>
1499 </glossdef>
1500 </glossentry>
1501
1502 <glossentry id='var-DEPENDS'><glossterm>DEPENDS</glossterm>
1503 <glossdef>
1504 <para>
1505 Lists a recipe's build-time dependencies
1506 (i.e. other recipe files).
1507 The system ensures that all the dependencies listed
1508 have been built and have their contents in the appropriate
1509 sysroots before the recipe's configure task is executed.
1510 </para>
1511
1512 <para>
1513 Consider this simple example for two recipes named "a" and
1514 "b" that produce similarly named packages.
1515 In this example, the <filename>DEPENDS</filename>
1516 statement appears in the "a" recipe:
1517 <literallayout class='monospaced'>
1518 DEPENDS = "b"
1519 </literallayout>
1520 Here, the dependency is such that the
1521 <filename>do_configure</filename> task for recipe "a"
1522 depends on the <filename>do_populate_sysroot</filename>
1523 task of recipe "b".
1524 This means anything that recipe "b" puts into sysroot
1525 is available when recipe "a" is configuring itself.
1526 </para>
1527
1528 <para>
1529 For information on runtime dependencies, see the
1530 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
1531 variable.
1532 </para>
1533 </glossdef>
1534 </glossentry>
1535
1536 <glossentry id='var-DEPLOY_DIR'><glossterm>DEPLOY_DIR</glossterm>
1537 <glossdef>
1538 <para>
1539 Points to the general area that the OpenEmbedded build
1540 system uses to place images, packages, SDKs and other output
1541 files that are ready to be used outside of the build system.
1542 By default, this directory resides within the
1543 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
1544 as <filename>${TMPDIR}/deploy</filename>.
1545 </para>
1546
1547 <para>
1548 For more information on the structure of the Build
1549 Directory, see
1550 "<link linkend='structure-build'>The Build Directory - <filename>build/</filename></link>"
1551 section.
1552 For more detail on the contents of the
1553 <filename>deploy</filename> directory, see the
1554 "<link linkend='images-dev-environment'>Images</link>" and
1555 "<link linkend='sdk-dev-environment'>Application Development SDK</link>"
1556 sections.
1557 </para>
1558 </glossdef>
1559 </glossentry>
1560
1561 <glossentry id='var-DEPLOY_DIR_IMAGE'><glossterm>DEPLOY_DIR_IMAGE</glossterm>
1562 <glossdef>
1563 <para>
1564 Points to the area that the OpenEmbedded build system uses
1565 to place images and other associated output files that are
1566 ready to be deployed onto the target machine.
1567 The directory is machine-specific as it contains the
1568 <filename>${MACHINE}</filename> name.
1569 By default, this directory resides within the
1570 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
1571 as <filename>${DEPLOY_DIR}/images/${MACHINE}/</filename>.
1572 </para>
1573
1574 <para>
1575 For more information on the structure of the Build
1576 Directory, see
1577 "<link linkend='structure-build'>The Build Directory - <filename>build/</filename></link>"
1578 section.
1579 For more detail on the contents of the
1580 <filename>deploy</filename> directory, see the
1581 "<link linkend='images-dev-environment'>Images</link>" and
1582 "<link linkend='sdk-dev-environment'>Application Development SDK</link>"
1583 sections.
1584 </para>
1585 </glossdef>
1586 </glossentry>
1587
1588 <glossentry id='var-DEPLOYDIR'><glossterm>DEPLOYDIR</glossterm>
1589 <glossdef>
1590 <para>
1591 For recipes that inherit the
1592 <link linkend='ref-classes-deploy'><filename>deploy</filename></link>
1593 class, the <filename>DEPLOYDIR</filename> points to a
1594 temporary work area for deployed files that is set in the
1595 <filename>deploy</filename> class as follows:
1596 <literallayout class='monospaced'>
1597 DEPLOYDIR = "${WORKDIR}/deploy-${<link linkend='var-PN'><filename>PN</filename></link>}"
1598 </literallayout>
1599 Recipes inheriting the <filename>deploy</filename> class
1600 should copy files to be deployed into
1601 <filename>DEPLOYDIR</filename>, and the class will take
1602 care of copying them into
1603 <link linkend='var-DEPLOY_DIR_IMAGE'><filename>DEPLOY_DIR_IMAGE</filename></link>
1604 afterwards.
1605 </para>
1606 </glossdef>
1607 </glossentry>
1608
1609 <glossentry id='var-DESCRIPTION'><glossterm>DESCRIPTION</glossterm>
1610 <glossdef>
1611 <para>The package description used by package managers.
1612 If not set, <filename>DESCRIPTION</filename> takes
1613 the value of the
1614 <link linkend='var-SUMMARY'><filename>SUMMARY</filename></link>
1615 variable.
1616 </para>
1617 </glossdef>
1618 </glossentry>
1619
1620 <glossentry id='var-DISK_SIGNATURE'><glossterm>DISK_SIGNATURE</glossterm>
1621 <glossdef>
1622 <para>
1623 A 32-bit MBR disk signature used by
1624 <filename>directdisk</filename> images.
1625 </para>
1626
1627 <para>
1628 By default, the signature is set to an automatically
1629 generated random value that allows the OpenEmbedded
1630 build system to create a boot loader.
1631 You can override the signature in the image recipe
1632 by setting <filename>DISK_SIGNATURE</filename> to an
1633 8-digit hex string.
1634 You might want to override
1635 <filename>DISK_SIGNATURE</filename> if you want the disk
1636 signature to remain constant between image builds.
1637 </para>
1638
1639 <para>
1640 When using Linux 3.8 or later, you can use
1641 <filename>DISK_SIGNATURE</filename> to specify the root
1642 by UUID to allow the kernel to locate the root device
1643 even if the device name changes due to differences in
1644 hardware configuration.
1645 By default, <filename>SYSLINUX_ROOT</filename> is set
1646 as follows:
1647 <literallayout class='monospaced'>
1648 SYSLINUX_ROOT = "root=/dev/sda2"
1649 </literallayout>
1650 However, you can change this to locate the root device
1651 using the disk signature instead:
1652 <literallayout class='monospaced'>
1653 SYSLINUX_ROOT = "root=PARTUUID=${DISK_SIGNATURE}-02"
1654 </literallayout>
1655 </para>
1656
1657 <para>
1658 As previously mentioned, it is possible to set the
1659 <filename>DISK_SIGNATURE</filename> variable in your
1660 <filename>local.conf</filename> file to a fixed
1661 value if you do not want <filename>syslinux.cfg</filename>
1662 changing for each build.
1663 You might find this useful when you want to upgrade the
1664 root filesystem on a device without having to recreate or
1665 modify the master boot record.
1666 </para>
1667 </glossdef>
1668 </glossentry>
1669
1670 <glossentry id='var-DISTRO'><glossterm>DISTRO</glossterm>
1671 <glossdef>
1672 <para>
1673 The short name of the distribution.
1674 This variable corresponds to a distribution
1675 configuration file whose root name is the same as the
1676 variable's argument and whose filename extension is
1677 <filename>.conf</filename>.
1678 For example, the distribution configuration file for the
1679 Poky distribution is named <filename>poky.conf</filename>
1680 and resides in the
1681 <filename>meta-yocto/conf/distro</filename> directory of
1682 the
1683 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
1684 </para>
1685
1686 <para>
1687 Within that <filename>poky.conf</filename> file, the
1688 <filename>DISTRO</filename> variable is set as follows:
1689 <literallayout class='monospaced'>
1690 DISTRO = "poky"
1691 </literallayout>
1692 </para>
1693
1694 <para>
1695 Distribution configuration files are located in a
1696 <filename>conf/distro</filename> directory within the
1697 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
1698 that contains the distribution configuration.
1699 The value for <filename>DISTRO</filename> must not contain
1700 spaces, and is typically all lower-case.
1701 <note>
1702 If the <filename>DISTRO</filename> variable is blank, a set
1703 of default configurations are used, which are specified
1704 within
1705 <filename>meta/conf/distro/defaultsetup.conf</filename>
1706 also in the Source Directory.
1707 </note>
1708 </para>
1709 </glossdef>
1710 </glossentry>
1711
1712 <glossentry id='var-DISTRO_EXTRA_RDEPENDS'><glossterm>DISTRO_EXTRA_RDEPENDS</glossterm>
1713 <glossdef>
1714 <para>
1715 Specifies a list of distro-specific packages to add to all images.
1716 This variable takes affect through
1717 <filename>packagegroup-base</filename> so the
1718 variable only really applies to the more full-featured
1719 images that include <filename>packagegroup-base</filename>.
1720 You can use this variable to keep distro policy out of
1721 generic images.
1722 As with all other distro variables, you set this variable
1723 in the distro <filename>.conf</filename> file.
1724 </para>
1725 </glossdef>
1726 </glossentry>
1727
1728 <glossentry id='var-DISTRO_EXTRA_RRECOMMENDS'><glossterm>DISTRO_EXTRA_RRECOMMENDS</glossterm>
1729 <glossdef>
1730 <para>
1731 Specifies a list of distro-specific packages to add to all images
1732 if the packages exist.
1733 The packages might not exist or be empty (e.g. kernel modules).
1734 The list of packages are automatically installed but you can
1735 remove them.
1736 </para>
1737 </glossdef>
1738 </glossentry>
1739
1740 <glossentry id='var-DISTRO_FEATURES'><glossterm>DISTRO_FEATURES</glossterm>
1741 <glossdef>
1742 <para>
1743 The software support you want in your distribution for
1744 various features.
1745 You define your distribution features in the distribution
1746 configuration file.
1747 </para>
1748
1749 <para>
1750 In most cases, the presence or absence of a feature in
1751 <filename>DISTRO_FEATURES</filename> is translated to the
1752 appropriate option supplied to the configure script
1753 during <filename>do_configure</filename> for recipes that
1754 optionally support the feature.
1755 For example, specifying "x11" in
1756 <filename>DISTRO_FEATURES</filename>, causes
1757 every piece of software built for the target that can
1758 optionally support X11 to have its X11 support enabled.
1759 </para>
1760
1761 <para>
1762 Two more examples are Bluetooth and NFS support.
1763 For a more complete list of features that ships with the
1764 Yocto Project and that you can provide with this variable,
1765 see the
1766 "<link linkend='ref-features-distro'>Distro Features</link>"
1767 section.
1768 </para>
1769 </glossdef>
1770 </glossentry>
1771
1772 <glossentry id='var-DISTRO_FEATURES_BACKFILL'><glossterm>DISTRO_FEATURES_BACKFILL</glossterm>
1773 <glossdef>
1774 <para>Features to be added to
1775 <filename><link linkend='var-DISTRO_FEATURES'>DISTRO_FEATURES</link></filename>
1776 if not also present in
1777 <filename><link linkend='var-DISTRO_FEATURES_BACKFILL_CONSIDERED'>DISTRO_FEATURES_BACKFILL_CONSIDERED</link></filename>.
1778 </para>
1779
1780 <para>
1781 This variable is set in the <filename>meta/conf/bitbake.conf</filename> file.
1782 It is not intended to be user-configurable.
1783 It is best to just reference the variable to see which distro features are
1784 being backfilled for all distro configurations.
1785 See the <link linkend='ref-features-backfill'>Feature backfilling</link> section for
1786 more information.
1787 </para>
1788 </glossdef>
1789 </glossentry>
1790
1791 <glossentry id='var-DISTRO_FEATURES_BACKFILL_CONSIDERED'><glossterm>DISTRO_FEATURES_BACKFILL_CONSIDERED</glossterm>
1792 <glossdef>
1793 <para>Features from
1794 <filename><link linkend='var-DISTRO_FEATURES_BACKFILL'>DISTRO_FEATURES_BACKFILL</link></filename>
1795 that should not be backfilled (i.e. added to
1796 <filename><link linkend='var-DISTRO_FEATURES'>DISTRO_FEATURES</link></filename>)
1797 during the build.
1798 See the "<link linkend='ref-features-backfill'>Feature Backfilling</link>" section for
1799 more information.
1800 </para>
1801 </glossdef>
1802 </glossentry>
1803
1804 <glossentry id='var-DISTRO_NAME'><glossterm>DISTRO_NAME</glossterm>
1805 <glossdef>
1806 <para>The long name of the distribution.</para>
1807 </glossdef>
1808 </glossentry>
1809
1810 <glossentry id='var-DISTRO_PN_ALIAS'><glossterm>DISTRO_PN_ALIAS</glossterm>
1811 <glossdef>
1812 <para>Alias names used for the recipe in various Linux distributions.</para>
1813 <para>See the
1814 "<ulink url='&YOCTO_DOCS_DEV_URL;#usingpoky-configuring-DISTRO_PN_ALIAS'>Handling
1815 a Package Name Alias</ulink>" section in the Yocto Project Development
1816 Manual for more information.</para>
1817 </glossdef>
1818 </glossentry>
1819
1820 <glossentry id='var-DISTRO_VERSION'><glossterm>DISTRO_VERSION</glossterm>
1821 <glossdef>
1822 <para>The version of the distribution.</para>
1823 </glossdef>
1824 </glossentry>
1825
1826 <glossentry id='var-DISTROOVERRIDES'><glossterm>DISTROOVERRIDES</glossterm>
1827 <glossdef>
1828 <para>
1829 This variable lists overrides specific to the current
1830 distribution.
1831 By default, the variable list includes the value of the
1832 <filename><link linkend='var-DISTRO'>DISTRO</link></filename>
1833 variable.
1834 You can extend the variable to apply any variable overrides
1835 you want as part of the distribution and are not
1836 already in <filename>OVERRIDES</filename> through
1837 some other means.
1838 </para>
1839 </glossdef>
1840 </glossentry>
1841
1842 <glossentry id='var-DL_DIR'><glossterm>DL_DIR</glossterm>
1843 <glossdef>
1844 <para>
1845 The central download directory used by the build process to
1846 store downloads.
1847 By default, <filename>DL_DIR</filename> gets files
1848 suitable for mirroring for everything except Git
1849 repositories.
1850 If you want tarballs of Git repositories, use the
1851 <link linkend='var-BB_GENERATE_MIRROR_TARBALLS'><filename>BB_GENERATE_MIRROR_TARBALLS</filename></link>
1852 variable.
1853 </para>
1854
1855 <para>
1856 You can set this directory by defining the
1857 <filename>DL_DIR</filename> variable in the
1858 <filename>conf/local.conf</filename> file.
1859 This directory is self-maintaining and you should not have
1860 to touch it.
1861 By default, the directory is <filename>downloads</filename>
1862 in the
1863 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
1864 <literallayout class='monospaced'>
1865 #DL_DIR ?= "${TOPDIR}/downloads"
1866 </literallayout>
1867 To specify a different download directory, simply remove
1868 the comment from the line and provide your directory.
1869 </para>
1870
1871 <para>
1872 During a first build, the system downloads many different
1873 source code tarballs from various upstream projects.
1874 Downloading can take a while, particularly if your network
1875 connection is slow.
1876 Tarballs are all stored in the directory defined by
1877 <filename>DL_DIR</filename> and the build system looks there
1878 first to find source tarballs.
1879 <note>
1880 When wiping and rebuilding, you can preserve this
1881 directory to speed up this part of subsequent
1882 builds.
1883 </note>
1884 </para>
1885
1886 <para>
1887 You can safely share this directory between multiple builds
1888 on the same development machine.
1889 For additional information on how the build process gets
1890 source files when working behind a firewall or proxy server,
1891 see this specific question in the
1892 "<link linkend='how-does-the-yocto-project-obtain-source-code-and-will-it-work-behind-my-firewall-or-proxy-server'>FAQ</link>"
1893 chapter.
1894 </para>
1895 </glossdef>
1896
1897 </glossentry>
1898 </glossdiv>
1899
1900 <glossdiv id='var-glossary-e'><title>E</title>
1901
1902 <glossentry id='var-ENABLE_BINARY_LOCALE_GENERATION'><glossterm>ENABLE_BINARY_LOCALE_GENERATION</glossterm>
1903 <glossdef>
1904 <para></para>
1905 <para>Variable that controls which locales for
1906 <filename>eglibc</filename> are generated during the
1907 build (useful if the target device has 64Mbytes
1908 of RAM or less).</para>
1909 </glossdef>
1910 </glossentry>
1911
1912 <glossentry id='var-ERROR_QA'><glossterm>ERROR_QA</glossterm>
1913 <glossdef>
1914 <para>
1915 Specifies the quality assurance checks whose failures are
1916 reported as errors by the OpenEmbedded build system.
1917 You set this variable in your distribution configuration
1918 file.
1919 For a list of the checks you can control with this variable,
1920 see the
1921 "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
1922 section.
1923 </para>
1924 </glossdef>
1925 </glossentry>
1926
1927 <glossentry id='var-ERR_REPORT_DIR'><glossterm>ERR_REPORT_DIR</glossterm>
1928 <glossdef>
1929 <para>
1930 When used with the
1931 <link linkend='ref-classes-report-error'><filename>report-error</filename></link>
1932 class, specifies the path used for storing the debug files
1933 created by the
1934 <ulink url='&YOCTO_DOCS_DEV_URL;#using-the-error-reporting-tool'>error reporting tool</ulink>,
1935 which allows you to submit build errors you encounter to a
1936 central database.
1937 By default, the value of this variable is
1938 <filename>${</filename><link linkend='var-LOG_DIR'><filename>LOG_DIR</filename></link><filename>}/error-report</filename>.
1939 </para>
1940
1941 <para>
1942 You can set <filename>ERR_REPORT_DIR</filename> to the path
1943 you want the error reporting tool to store the debug files
1944 as follows in your <filename>local.conf</filename> file:
1945 <literallayout class='monospaced'>
1946 ERR_REPORT_DIR = "path"
1947 </literallayout>
1948 </para>
1949 </glossdef>
1950 </glossentry>
1951
1952 <glossentry id='var-EXCLUDE_FROM_WORLD'><glossterm>EXCLUDE_FROM_WORLD</glossterm>
1953 <glossdef>
1954 <para>
1955 Directs BitBake to exclude a recipe from world builds (i.e.
1956 <filename>bitbake world</filename>).
1957 During world builds, BitBake locates, parses and builds all
1958 recipes found in every layer exposed in the
1959 <filename>bblayers.conf</filename> configuration file.
1960 </para>
1961
1962 <para>
1963 To exclude a recipe from a world build using this variable,
1964 set the variable to "1" in the recipe.
1965 </para>
1966
1967 <note>
1968 Recipes added to <filename>EXCLUDE_FROM_WORLD</filename>
1969 may still be built during a world build in order to satisfy
1970 dependencies of other recipes.
1971 Adding a recipe to <filename>EXCLUDE_FROM_WORLD</filename>
1972 only ensures that the recipe is not explicitly added
1973 to the list of build targets in a world build.
1974 </note>
1975 </glossdef>
1976 </glossentry>
1977
1978 <glossentry id='var-EXTENDPE'><glossterm>EXTENDPE</glossterm>
1979 <glossdef>
1980 <para>
1981 Used with file and pathnames to create a prefix for a recipe's
1982 version based on the recipe's
1983 <link linkend='var-PE'><filename>PE</filename></link> value.
1984 If <filename>PE</filename> is set and greater than zero for a recipe,
1985 <filename>EXTENDPE</filename> becomes that value (e.g if
1986 <filename>PE</filename> is equal to "1" then <filename>EXTENDPE</filename>
1987 becomes "1_").
1988 If a recipe's <filename>PE</filename> is not set (the default) or is equal to
1989 zero, <filename>EXTENDPE</filename> becomes "".</para>
1990 <para>See the <link linkend='var-STAMP'><filename>STAMP</filename></link>
1991 variable for an example.
1992 </para>
1993 </glossdef>
1994 </glossentry>
1995
1996 <glossentry id='var-EXTENDPKGV'><glossterm>EXTENDPKGV</glossterm>
1997 <glossdef>
1998 <para>
1999 The full package version specification as it appears on the
2000 final packages produced by a recipe.
2001 The variable's value is normally used to fix a runtime
2002 dependency to the exact same version of another package
2003 in the same recipe:
2004 <literallayout class='monospaced'>
2005 RDEPENDS_${PN}-additional-module = "${PN} (= ${EXTENDPKGV})"
2006 </literallayout>
2007 </para>
2008
2009 <para>
2010 The dependency relationships are intended to force the
2011 package manager to upgrade these types of packages in
2012 lock-step.
2013 </para>
2014 </glossdef>
2015 </glossentry>
2016
2017 <glossentry id='var-EXTERNALSRC'><glossterm>EXTERNALSRC</glossterm>
2018 <glossdef>
2019 <para>
2020 If <filename>externalsrc.bbclass</filename> is inherited,
2021 this variable points to the source tree, which is
2022 outside of the OpenEmbedded build system.
2023 When set, this variable sets the
2024 <link linkend='var-S'><filename>S</filename></link>
2025 variable, which is what the OpenEmbedded build system uses
2026 to locate unpacked recipe source code.
2027 </para>
2028
2029 <para>
2030 For more information on
2031 <filename>externalsrc.bbclass</filename>, see the
2032 "<link linkend='ref-classes-externalsrc'><filename>externalsrc.bbclass</filename></link>"
2033 section.
2034 You can also find information on how to use this variable
2035 in the
2036 "<ulink url='&YOCTO_DOCS_DEV_URL;#building-software-from-an-external-source'>Building Software from an External Source</ulink>"
2037 section in the Yocto Project Development Manual.
2038 </para>
2039 </glossdef>
2040 </glossentry>
2041
2042 <glossentry id='var-EXTERNALSRC_BUILD'><glossterm>EXTERNALSRC_BUILD</glossterm>
2043 <glossdef>
2044 <para>
2045 If <filename>externalsrc.bbclass</filename> is inherited,
2046 this variable points to the directory in which the recipe's
2047 source code is built,
2048 which is outside of the OpenEmbedded build system.
2049 When set, this variable sets the
2050 <link linkend='var-B'><filename>B</filename></link>
2051 variable, which is what the OpenEmbedded build system uses
2052 to locate the Build Directory.
2053 </para>
2054
2055 <para>
2056 For more information on
2057 <filename>externalsrc.bbclass</filename>, see the
2058 "<link linkend='ref-classes-externalsrc'><filename>externalsrc.bbclass</filename></link>"
2059 section.
2060 You can also find information on how to use this variable
2061 in the
2062 "<ulink url='&YOCTO_DOCS_DEV_URL;#building-software-from-an-external-source'>Building Software from an External Source</ulink>"
2063 section in the Yocto Project Development Manual.
2064 </para>
2065 </glossdef>
2066 </glossentry>
2067
2068 <glossentry id='var-EXTRA_IMAGE_FEATURES'><glossterm>EXTRA_IMAGE_FEATURES</glossterm>
2069 <glossdef>
2070 <para>
2071 The list of additional features to include in an image.
2072 Typically, you configure this variable in your
2073 <filename>local.conf</filename> file, which is found in the
2074 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
2075 Although you can use this variable from within a recipe,
2076 best practices dictate that you do not.
2077 <note>
2078 To enable primary features from within the image
2079 recipe, use the
2080 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
2081 variable.
2082 </note>
2083 </para>
2084
2085 <para>
2086 Here are some examples of features you can add:
2087 <literallayout class='monospaced'>
2088"dbg-pkgs" - Adds -dbg packages for all installed packages
2089 including symbol information for debugging and
2090 profiling.
2091
2092"debug-tweaks" - Makes an image suitable for development.
2093 For example, ssh root access has a blank
2094 password. You should remove this feature
2095 before you produce a production image.
2096
2097"dev-pkgs" - Adds -dev packages for all installed packages.
2098 This is useful if you want to develop against
2099 the libraries in the image.
2100
2101"read-only-rootfs" - Creates an image whose root
2102 filesystem is read-only. See the
2103 "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-read-only-root-filesystem'>Creating a Read-Only Root Filesystem</ulink>"
2104 section in the Yocto Project
2105 Development Manual for more
2106 information
2107
2108"tools-debug" - Adds debugging tools such as gdb and
2109 strace.
2110
2111"tools-profile" - Adds profiling tools such as oprofile,
2112 exmap, lttng and valgrind (x86 only).
2113
2114"tools-sdk" - Adds development tools such as gcc, make,
2115 pkgconfig and so forth.
2116
2117"tools-testapps" - Adds useful testing tools such as
2118 ts_print, aplay, arecord and so
2119 forth.
2120
2121 </literallayout>
2122 </para>
2123
2124 <para>
2125 For a complete list of image features that ships with the
2126 Yocto Project, see the
2127 "<link linkend="ref-features-image">Image Features</link>"
2128 section.
2129 </para>
2130
2131 <para>
2132 For an example that shows how to customize your image by
2133 using this variable, see the
2134 "<ulink url='&YOCTO_DOCS_DEV_URL;#usingpoky-extend-customimage-imagefeatures'>Customizing Images Using Custom <filename>IMAGE_FEATURES</filename> and <filename>EXTRA_IMAGE_FEATURES</filename></ulink>"
2135 section in the Yocto Project Development Manual.
2136 </para>
2137 </glossdef>
2138 </glossentry>
2139
2140 <glossentry id='var-EXTRA_IMAGEDEPENDS'><glossterm>EXTRA_IMAGEDEPENDS</glossterm>
2141 <glossdef>
2142 <para>A list of recipes to build that do not provide packages
2143 for installing into the root filesystem.
2144 </para>
2145 <para>Sometimes a recipe is required to build the final image but is not
2146 needed in the root filesystem.
2147 You can use the <filename>EXTRA_IMAGEDEPENDS</filename> variable to
2148 list these recipes and thus specify the dependencies.
2149 A typical example is a required bootloader in a machine configuration.
2150 </para>
2151 <note>
2152 To add packages to the root filesystem, see the various
2153 <filename>*<link linkend='var-RDEPENDS'>RDEPENDS</link></filename>
2154 and <filename>*<link linkend='var-RRECOMMENDS'>RRECOMMENDS</link></filename>
2155 variables.
2156 </note>
2157 </glossdef>
2158 </glossentry>
2159
2160 <glossentry id='var-EXTRA_OECMAKE'><glossterm>EXTRA_OECMAKE</glossterm>
2161 <glossdef>
2162 <para>Additional <filename>cmake</filename> options.</para>
2163 </glossdef>
2164 </glossentry>
2165
2166 <glossentry id='var-EXTRA_OECONF'><glossterm>EXTRA_OECONF</glossterm>
2167 <glossdef>
2168 <para>Additional <filename>configure</filename> script options.</para>
2169 </glossdef>
2170 </glossentry>
2171
2172 <glossentry id='var-EXTRA_OEMAKE'><glossterm>EXTRA_OEMAKE</glossterm>
2173 <glossdef>
2174 <para>Additional GNU <filename>make</filename> options.</para>
2175 </glossdef>
2176 </glossentry>
2177
2178 <glossentry id='var-EXTRA_OESCONS'><glossterm>EXTRA_OESCONS</glossterm>
2179 <glossdef>
2180 <para>
2181 When a recipe inherits the
2182 <link linkend='ref-classes-scons'><filename>scons</filename></link>
2183 class, this variable specifies additional configuration
2184 options you want to pass to the
2185 <filename>scons</filename> command line.
2186 </para>
2187 </glossdef>
2188 </glossentry>
2189
2190 <glossentry id='var-EXTRA_QMAKEVARS_POST'><glossterm>EXTRA_QMAKEVARS_POST</glossterm>
2191 <glossdef>
2192 <para>
2193 Configuration variables or options you want to pass to
2194 <filename>qmake</filename>.
2195 Use this variable when the arguments need to be after the
2196 <filename>.pro</filename> file list on the command line.
2197 </para>
2198
2199 <para>
2200 This variable is used with recipes that inherit the
2201 <link linkend='ref-classes-qmake*'><filename>qmake_base</filename></link>
2202 class or other classes that inherit
2203 <filename>qmake_base</filename>.
2204 </para>
2205 </glossdef>
2206 </glossentry>
2207
2208 <glossentry id='var-EXTRA_QMAKEVARS_PRE'><glossterm>EXTRA_QMAKEVARS_PRE</glossterm>
2209 <glossdef>
2210 <para>
2211 Configuration variables or options you want to pass to
2212 <filename>qmake</filename>.
2213 Use this variable when the arguments need to be before the
2214 <filename>.pro</filename> file list on the command line.
2215 </para>
2216
2217 <para>
2218 This variable is used with recipes that inherit the
2219 <link linkend='ref-classes-qmake*'><filename>qmake_base</filename></link>
2220 class or other classes that inherit
2221 <filename>qmake_base</filename>.
2222 </para>
2223 </glossdef>
2224 </glossentry>
2225
2226 <glossentry id='var-EXTRA_USERS_PARAMS'><glossterm>EXTRA_USERS_PARAMS</glossterm>
2227 <glossdef>
2228 <para>
2229 When a recipe inherits the
2230 <link linkend='ref-classes-extrausers'><filename>extrausers</filename></link>
2231 class, this variable provides image level user and group
2232 operations.
2233 This is a more global method of providing user and group
2234 configuration as compared to using the
2235 <link linkend='ref-classes-useradd'><filename>useradd</filename></link>
2236 class, which ties user and group configurations to a
2237 specific recipe.
2238 </para>
2239
2240 <para>
2241 The set list of commands you can configure using the
2242 <filename>EXTRA_USERS_PARAMS</filename> is shown in the
2243 <filename>extrausers</filename> class.
2244 These commands map to the normal Unix commands of the same
2245 names:
2246 <literallayout class='monospaced'>
2247 # EXTRA_USERS_PARAMS = "\
2248 # useradd -p '' tester; \
2249 # groupadd developers; \
2250 # userdel nobody; \
2251 # groupdel -g video; \
2252 # groupmod -g 1020 developers; \
2253 # usermod -s /bin/sh tester; \
2254 # "
2255 </literallayout>
2256 </para>
2257 </glossdef>
2258 </glossentry>
2259
2260 </glossdiv>
2261
2262 <glossdiv id='var-glossary-f'><title>F</title>
2263
2264 <glossentry id='var-FEATURE_PACKAGES'><glossterm>FEATURE_PACKAGES</glossterm>
2265 <glossdef>
2266 <para>
2267 Defines one or more packages to include in an image when
2268 a specific item is included in
2269 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>.
2270 When setting the value, <filename>FEATURE_PACKAGES</filename>
2271 should have the name of the feature item as an override.
2272 Here is an example:
2273 <literallayout class='monospaced'>
2274 FEATURE_PACKAGES_widget = "package1 package2"
2275 </literallayout>
2276 In this example, if "widget" were added to
2277 <filename>IMAGE_FEATURES</filename>, "package1" and
2278 "package2" would be included in the image.
2279 <note>
2280 Packages installed by features defined through
2281 <filename>FEATURE_PACKAGES</filename> are often package
2282 groups.
2283 While similarly named, you should not confuse the
2284 <filename>FEATURE_PACKAGES</filename> variable with
2285 package groups, which are discussed elsewhere in the
2286 documentation.
2287 </note>
2288 </para>
2289 </glossdef>
2290 </glossentry>
2291
2292 <glossentry id='var-FEED_DEPLOYDIR_BASE_URI'><glossterm>FEED_DEPLOYDIR_BASE_URI</glossterm>
2293 <glossdef>
2294 <para>
2295 Points to the base URL of the server and location within
2296 the document-root that provides the metadata and
2297 packages required by OPKG to support runtime package
2298 management of IPK packages.
2299 You set this variable in your
2300 <filename>local.conf</filename> file.
2301 </para>
2302
2303 <para>
2304 Consider the following example:
2305 <literallayout class='monospaced'>
2306 FEED_DEPLOYDIR_BASE_URI = "http://192.168.7.1/BOARD-dir"
2307 </literallayout>
2308 This example assumes you are serving your packages over
2309 HTTP and your databases are located in a directory
2310 named <filename>BOARD-dir</filename>, which is underneath
2311 your HTTP server's document-root.
2312 In this case, the OpenEmbedded build system generates a set
2313 of configuration files for you in your target that work
2314 with the feed.
2315 </para>
2316 </glossdef>
2317 </glossentry>
2318
2319 <glossentry id='var-FILES'><glossterm>FILES</glossterm>
2320 <glossdef>
2321 <para>
2322 The list of directories or files that are placed in packages.
2323 </para>
2324
2325 <para>
2326 To use the <filename>FILES</filename> variable, provide a package name
2327 override that identifies the resulting package.
2328 Then, provide a space-separated list of files or paths that identifies the
2329 files you want included as part of the resulting package.
2330 Here is an example:
2331 <literallayout class='monospaced'>
2332 FILES_${PN} += "${bindir}/mydir1/ ${bindir}/mydir2/myfile"
2333 </literallayout>
2334 </para>
2335
2336 <note>
2337 When specifying paths as part of the <filename>FILES</filename> variable,
2338 it is good practice to use appropriate path variables.
2339 For example, use <filename>${sysconfdir}</filename> rather than
2340 <filename>/etc</filename>, or <filename>${bindir}</filename> rather
2341 than <filename>/usr/bin</filename>.
2342 You can find a list of these variables at the top of the
2343 <filename>meta/conf/bitbake.conf</filename> file in the
2344 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
2345 </note>
2346
2347 <para>
2348 If some of the files you provide with the <filename>FILES</filename> variable
2349 are editable and you know they should not be
2350 overwritten during the package update process by the Package Management
2351 System (PMS), you can identify these files so that the PMS will not
2352 overwrite them.
2353 See the <filename><link linkend='var-CONFFILES'>CONFFILES</link></filename>
2354 variable for information on how to identify these files to the PMS.
2355 </para>
2356
2357 </glossdef>
2358 </glossentry>
2359
2360 <glossentry id='var-FILESEXTRAPATHS'><glossterm>FILESEXTRAPATHS</glossterm>
2361 <glossdef>
2362 <para>
2363 Extends the search path the OpenEmbedded build system uses
2364 when looking for files and patches as it processes recipes
2365 and append files.
2366 The default directories BitBake uses when it processes
2367 recipes are initially defined by the
2368 <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>
2369 variable.
2370 You can extend <filename>FILESPATH</filename> variable
2371 by using <filename>FILESEXTRAPATHS</filename>.
2372 </para>
2373
2374 <para>
2375 Best practices dictate that you accomplish this by using
2376 <filename>FILESEXTRAPATHS</filename> from within a
2377 <filename>.bbappend</filename> file and that you prepend
2378 paths as follows:
2379 <literallayout class='monospaced'>
2380 FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
2381 </literallayout>
2382 In the above example, the build system first looks for files
2383 in a directory that has the same name as the corresponding
2384 append file.
2385 <note>
2386 <para>When extending <filename>FILESEXTRAPATHS</filename>,
2387 be sure to use the immediate expansion
2388 (<filename>:=</filename>) operator.
2389 Immediate expansion makes sure that BitBake evaluates
2390 <link linkend='var-THISDIR'><filename>THISDIR</filename></link>
2391 at the time the directive is encountered rather than at
2392 some later time when expansion might result in a
2393 directory that does not contain the files you need.
2394 </para>
2395 <para>Also, include the trailing separating colon
2396 character if you are prepending.
2397 The trailing colon character is necessary because you
2398 are directing BitBake to extend the path by prepending
2399 directories to the search path.</para>
2400 </note>
2401 Here is another common use:
2402 <literallayout class='monospaced'>
2403 FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
2404 </literallayout>
2405 In this example, the build system extends the
2406 <filename>FILESPATH</filename> variable to include a
2407 directory named <filename>files</filename> that is in the
2408 same directory as the corresponding append file.
2409 </para>
2410
2411 <para>
2412 Here is a final example that specifically adds three paths:
2413 <literallayout class='monospaced'>
2414 FILESEXTRAPATHS_prepend := "path_1:path_2:path_3:"
2415 </literallayout>
2416 </para>
2417
2418 <para>
2419 By prepending paths in <filename>.bbappend</filename>
2420 files, you allow multiple append files that reside in
2421 different layers but are used for the same recipe to
2422 correctly extend the path.
2423 </para>
2424 </glossdef>
2425 </glossentry>
2426
2427 <glossentry id='var-FILESOVERRIDES'><glossterm>FILESOVERRIDES</glossterm>
2428 <glossdef>
2429 <para>
2430 A subset of <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>
2431 used by the OpenEmbedded build system for creating
2432 <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>.
2433 You can find more information on how overrides are handled
2434 in the BitBake Manual that is located at
2435 <filename>bitbake/doc/manual</filename> in the
2436 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
2437 </para>
2438
2439 <para>
2440 By default, the <filename>FILESOVERRIDES</filename>
2441 variable is defined as:
2442 <literallayout class='monospaced'>
2443 FILESOVERRIDES = "${TRANSLATED_TARGET_ARCH}:${MACHINEOVERRIDES}:${DISTROOVERRIDES}"
2444 </literallayout>
2445
2446 <note>
2447 Do not hand-edit the <filename>FILESOVERRIDES</filename>
2448 variable.
2449 The values match up with expected overrides and are
2450 used in an expected manner by the build system.
2451 </note>
2452 </para>
2453 </glossdef>
2454 </glossentry>
2455
2456 <glossentry id='var-FILESPATH'><glossterm>FILESPATH</glossterm>
2457 <glossdef>
2458 <para>
2459 The default set of directories the OpenEmbedded build system
2460 uses when searching for patches and files.
2461 During the build process, BitBake searches each directory in
2462 <filename>FILESPATH</filename> in the specified order when
2463 looking for files and patches specified by each
2464 <filename>file://</filename> URI in a recipe.
2465 </para>
2466
2467 <para>
2468 The default value for the <filename>FILESPATH</filename>
2469 variable is defined in the <filename>base.bbclass</filename>
2470 class found in <filename>meta/classes</filename> in the
2471 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>:
2472 <literallayout class='monospaced'>
2473 FILESPATH = "${@base_set_filespath(["${FILE_DIRNAME}/${BP}", \
2474 "${FILE_DIRNAME}/${BPN}", "${FILE_DIRNAME}/files"], d)}"
2475 </literallayout>
2476 <note>
2477 Do not hand-edit the <filename>FILESPATH</filename>
2478 variable.
2479 If you want the build system to look in directories
2480 other than the defaults, extend the
2481 <filename>FILESPATH</filename> variable by using the
2482 <link linkend='var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></link>
2483 variable.
2484 </note>
2485 Be aware that the default <filename>FILESPATH</filename>
2486 directories do not map to directories in custom layers
2487 where append files (<filename>.bbappend</filename>)
2488 are used.
2489 If you want the build system to find patches or files
2490 that reside with your append files, you need to extend
2491 the <filename>FILESPATH</filename> variable by using
2492 the
2493 <link linkend='var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></link>
2494 variable.
2495 </para>
2496 </glossdef>
2497 </glossentry>
2498
2499 <glossentry id='var-FILESYSTEM_PERMS_TABLES'><glossterm>FILESYSTEM_PERMS_TABLES</glossterm>
2500 <glossdef>
2501 <para>Allows you to define your own file permissions settings table as part of
2502 your configuration for the packaging process.
2503 For example, suppose you need a consistent set of custom permissions for
2504 a set of groups and users across an entire work project.
2505 It is best to do this in the packages themselves but this is not always
2506 possible.
2507 </para>
2508 <para>
2509 By default, the OpenEmbedded build system uses the <filename>fs-perms.txt</filename>, which
2510 is located in the <filename>meta/files</filename> folder in the
2511 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
2512 If you create your own file permissions setting table, you should place it in your
2513 layer or the distro's layer.
2514 </para>
2515 <para>
2516 You define the <filename>FILESYSTEM_PERMS_TABLES</filename> variable in the
2517 <filename>conf/local.conf</filename> file, which is found in the
2518 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>, to
2519 point to your custom <filename>fs-perms.txt</filename>.
2520 You can specify more than a single file permissions setting table.
2521 The paths you specify to these files must be defined within the
2522 <link linkend='var-BBPATH'><filename>BBPATH</filename></link> variable.
2523 </para>
2524 <para>
2525 For guidance on how to create your own file permissions settings table file,
2526 examine the existing <filename>fs-perms.txt</filename>.
2527 </para>
2528 </glossdef>
2529 </glossentry>
2530
2531 <glossentry id='var-FONT_PACKAGES'><glossterm>FONT_PACKAGES</glossterm>
2532 <glossdef>
2533 <para>
2534 When a recipe inherits the
2535 <link linkend='ref-classes-fontcache'><filename>fontcache</filename></link>
2536 class, this variable identifies packages containing font
2537 files that need to be cached by Fontconfig.
2538 By default, the <filename>fontcache</filename> class assumes
2539 that fonts are in the recipe's main package
2540 (i.e. <filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}</filename>).
2541 Use this variable if fonts you need are in a package
2542 other than that main package.
2543 </para>
2544 </glossdef>
2545 </glossentry>
2546
2547 <glossentry id='var-FULL_OPTIMIZATION'><glossterm>FULL_OPTIMIZATION</glossterm>
2548 <glossdef>
2549 <para>
2550 The options to pass in
2551 <filename><link linkend='var-TARGET_CFLAGS'>TARGET_CFLAGS</link></filename>
2552 and <filename><link linkend='var-CFLAGS'>CFLAGS</link></filename>
2553 when compiling an optimized system.
2554 This variable defaults to
2555 "-O2 -pipe ${DEBUG_FLAGS}".
2556 </para>
2557 </glossdef>
2558 </glossentry>
2559 </glossdiv>
2560
2561 <glossdiv id='var-glossary-g'><title>G</title>
2562
2563 <glossentry id='var-GROUPADD_PARAM'><glossterm>GROUPADD_PARAM</glossterm>
2564 <glossdef>
2565 <para>
2566 When a recipe inherits the
2567 <filename>useradd</filename> class, this variable
2568 specifies for a package what parameters should be passed
2569 to the <filename>groupadd</filename> command
2570 if you wish to add a group to the system when the package
2571 is installed.
2572 </para>
2573
2574 <para>
2575 Here is an example from the <filename>dbus</filename>
2576 recipe:
2577 <literallayout class='monospaced'>
2578 GROUPADD_PARAM_${PN} = "-r netdev"
2579 </literallayout>
2580 For information on the standard Linux shell command
2581 <filename>groupadd</filename>, see
2582 <ulink url='http://linux.die.net/man/8/groupadd'></ulink>.
2583 </para>
2584 </glossdef>
2585 </glossentry>
2586
2587 <glossentry id='var-GROUPMEMS_PARAM'><glossterm>GROUPMEMS_PARAM</glossterm>
2588 <glossdef>
2589 <para>
2590 When a recipe inherits the
2591 <filename>useradd</filename> class, this variable
2592 specifies for a package what parameters should be passed
2593 to the <filename>groupmems</filename> command
2594 if you wish to modify the members of a group when the
2595 package is installed.
2596 </para>
2597
2598 <para>
2599 For information on the standard Linux shell command
2600 <filename>groupmems</filename>, see
2601 <ulink url='http://linux.die.net/man/8/groupmems'></ulink>.
2602 </para>
2603 </glossdef>
2604 </glossentry>
2605
2606 <glossentry id='var-GRUB_GFXSERIAL'><glossterm>GRUB_GFXSERIAL</glossterm>
2607 <glossdef>
2608 <para>
2609 Configures the GNU GRand Unified Bootloader (GRUB) to have
2610 graphics and serial in the boot menu.
2611 Set this variable to "1" in your
2612 <filename>local.conf</filename> or distribution
2613 configuration file to enable graphics and serial
2614 in the menu.
2615 </para>
2616
2617 <para>
2618 See the
2619 <link linkend='ref-classes-grub-efi'><filename>grub-efi</filename></link>
2620 class for more information on how this variable is used.
2621 </para>
2622 </glossdef>
2623 </glossentry>
2624
2625 <glossentry id='var-GRUB_OPTS'><glossterm>GRUB_OPTS</glossterm>
2626 <glossdef>
2627 <para>
2628 Additional options to add to the GNU GRand Unified
2629 Bootloader (GRUB) configuration.
2630 Use a semi-colon character (<filename>;</filename>) to
2631 separate multiple options.
2632 </para>
2633
2634 <para>
2635 The <filename>GRUB_OPTS</filename> variable is optional.
2636 See the
2637 <link linkend='ref-classes-grub-efi'><filename>grub-efi</filename></link>
2638 class for more information on how this variable is used.
2639 </para>
2640 </glossdef>
2641 </glossentry>
2642
2643 <glossentry id='var-GRUB_TIMEOUT'><glossterm>GRUB_TIMEOUT</glossterm>
2644 <glossdef>
2645 <para>
2646 Specifies the timeout before executing the default
2647 <filename>LABEL</filename> in the GNU GRand Unified
2648 Bootloader (GRUB).
2649 </para>
2650
2651 <para>
2652 The <filename>GRUB_TIMEOUT</filename> variable is optional.
2653 See the
2654 <link linkend='ref-classes-grub-efi'><filename>grub-efi</filename></link>
2655 class for more information on how this variable is used.
2656 </para>
2657 </glossdef>
2658 </glossentry>
2659
2660 <glossentry id='var-GTKIMMODULES_PACKAGES'><glossterm>GTKIMMODULES_PACKAGES</glossterm>
2661 <glossdef>
2662 <para>
2663 For recipes that inherit the
2664 <link linkend='ref-classes-gtk-immodules-cache'><filename>gtk-immodules-cache</filename></link>
2665 class, this variable specifies the packages that contain the
2666 GTK+ input method modules being installed when the modules
2667 are in packages other than the main package.
2668 </para>
2669 </glossdef>
2670 </glossentry>
2671
2672 </glossdiv>
2673
2674 <glossdiv id='var-glossary-h'><title>H</title>
2675
2676 <glossentry id='var-HOMEPAGE'><glossterm>HOMEPAGE</glossterm>
2677 <glossdef>
2678 <para>Website where more information about the software the recipe is building
2679 can be found.</para>
2680 </glossdef>
2681 </glossentry>
2682
2683 <glossentry id='var-HOST_SYS'><glossterm>HOST_SYS</glossterm>
2684 <glossdef>
2685 <para>
2686 Specifies the system, including the architecture and the
2687 operating system, for with the build is occurring
2688 in the context of the current
2689 recipe.
2690 The OpenEmbedded build system automatically sets this
2691 variable.
2692 You do not need to set the variable yourself.
2693 </para>
2694
2695 <para>
2696 Here are two examples:
2697 <itemizedlist>
2698 <listitem><para>Given a native recipe on a 32-bit
2699 x86 machine running Linux, the value is
2700 "i686-linux".
2701 </para></listitem>
2702 <listitem><para>Given a recipe being built for a
2703 little-endian MIPS target running Linux,
2704 the value might be "mipsel-linux".
2705 </para></listitem>
2706 </itemizedlist>
2707 </para>
2708 </glossdef>
2709 </glossentry>
2710
2711 </glossdiv>
2712
2713 <glossdiv id='var-glossary-i'><title>I</title>
2714
2715 <glossentry id='var-ICECC_DISABLED'><glossterm>ICECC_DISABLED</glossterm>
2716 <glossdef>
2717 <para>
2718 Disables or enables the <filename>icecc</filename>
2719 (Icecream) function.
2720 For more information on this function and best practices
2721 for using this variable, see the
2722 "<link linkend='ref-classes-icecc'><filename>icecc.bbclass</filename></link>"
2723 section.
2724 </para>
2725
2726 <para>
2727 Setting this variable to "1" in your
2728 <filename>local.conf</filename> disables the function:
2729 <literallayout class='monospaced'>
2730 ICECC_DISABLED ??= "1"
2731 </literallayout>
2732 To enable the function, set the variable as follows:
2733 <literallayout class='monospaced'>
2734 ICECC_DISABLED = ""
2735 </literallayout>
2736 </para>
2737 </glossdef>
2738 </glossentry>
2739
2740 <glossentry id='var-ICECC_ENV_EXEC'><glossterm>ICECC_ENV_EXEC</glossterm>
2741 <glossdef>
2742 <para>
2743 Points to the <filename>icecc-create-env</filename> script
2744 that you provide.
2745 This variable is used by the
2746 <link linkend='ref-classes-icecc'><filename>icecc</filename></link>
2747 class.
2748 You set this variable in your
2749 <filename>local.conf</filename> file.
2750 </para>
2751
2752 <para>
2753 If you do not point to a script that you provide, the
2754 OpenEmbedded build system uses the default script provided
2755 by the <filename>icecc-create-env.bb</filename> recipe,
2756 which is a modified version and not the one that comes with
2757 <filename>icecc</filename>.
2758 </para>
2759 </glossdef>
2760 </glossentry>
2761
2762 <glossentry id='var-ICECC_PARALLEL_MAKE'><glossterm>ICECC_PARALLEL_MAKE</glossterm>
2763 <glossdef>
2764 <para>
2765 Extra options passed to the <filename>make</filename>
2766 command during the <filename>do_compile</filename> task
2767 that specify parallel compilation.
2768 This variable usually takes the form of
2769 <filename>-j 4</filename>, where the number
2770 represents the maximum number of parallel threads
2771 <filename>make</filename> can run.
2772 <note>
2773 The options passed affect builds on all enabled
2774 machines on the network, which are machines running the
2775 <filename>iceccd</filename> daemon.
2776 </note>
2777 </para>
2778
2779 <para>
2780 If your enabled machines support multiple cores,
2781 coming up with the maximum number of parallel threads
2782 that gives you the best performance could take some
2783 experimentation since machine speed, network lag,
2784 available memory, and existing machine loads can all
2785 affect build time.
2786 Consequently, unlike the
2787 <link linkend='var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></link>
2788 variable, there is no rule-of-thumb for setting
2789 <filename>ICECC_PARALLEL_MAKE</filename> to achieve
2790 optimal performance.
2791 </para>
2792
2793 <para>
2794 If you do not set <filename>ICECC_PARALLEL_MAKE</filename>,
2795 the build system does not use it (i.e. the system does
2796 not detect and assign the number of cores as is done with
2797 <filename>PARALLEL_MAKE</filename>).
2798 </para>
2799 </glossdef>
2800 </glossentry>
2801
2802 <glossentry id='var-ICECC_PATH'><glossterm>ICECC_PATH</glossterm>
2803 <glossdef>
2804 <para>
2805 The location of the <filename>icecc</filename> binary.
2806 You can set this variable in your
2807 <filename>local.conf</filename> file.
2808 If your <filename>local.conf</filename> file does not define
2809 this variable, the
2810 <link linkend='ref-classes-icecc'><filename>icecc</filename></link>
2811 class attempts to define it by locating
2812 <filename>icecc</filename> using <filename>which</filename>.
2813 </para>
2814 </glossdef>
2815 </glossentry>
2816
2817 <glossentry id='var-ICECC_USER_CLASS_BL'><glossterm>ICECC_USER_CLASS_BL</glossterm>
2818 <glossdef>
2819 <para>
2820 Identifies user classes that you do not want the
2821 Icecream distributed compile support to consider.
2822 This variable is used by the
2823 <link linkend='ref-classes-icecc'><filename>icecc</filename></link>
2824 class.
2825 You set this variable in your
2826 <filename>local.conf</filename> file.
2827 </para>
2828
2829 <para>
2830 When you list classes using this variable, you are
2831 "blacklisting" them from distributed compilation across
2832 remote hosts.
2833 Any classes you list will be distributed and compiled
2834 locally.
2835 </para>
2836 </glossdef>
2837 </glossentry>
2838
2839 <glossentry id='var-ICECC_USER_PACKAGE_BL'><glossterm>ICECC_USER_PACKAGE_BL</glossterm>
2840 <glossdef>
2841 <para>
2842 Identifies user recipes that you do not want the
2843 Icecream distributed compile support to consider.
2844 This variable is used by the
2845 <link linkend='ref-classes-icecc'><filename>icecc</filename></link>
2846 class.
2847 You set this variable in your
2848 <filename>local.conf</filename> file.
2849 </para>
2850
2851 <para>
2852 When you list packages using this variable, you are
2853 "blacklisting" them from distributed compilation across
2854 remote hosts.
2855 Any packages you list will be distributed and compiled
2856 locally.
2857 </para>
2858 </glossdef>
2859 </glossentry>
2860
2861 <glossentry id='var-ICECC_USER_PACKAGE_WL'><glossterm>ICECC_USER_PACKAGE_WL</glossterm>
2862 <glossdef>
2863 <para>
2864 Identifies user recipes that use an empty
2865 <link linkend='var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></link>
2866 variable that you want to force remote distributed
2867 compilation on using the Icecream distributed compile
2868 support.
2869 This variable is used by the
2870 <link linkend='ref-classes-icecc'><filename>icecc</filename></link>
2871 class.
2872 You set this variable in your
2873 <filename>local.conf</filename> file.
2874 </para>
2875 </glossdef>
2876 </glossentry>
2877
2878 <glossentry id='var-IMAGE_BASENAME'><glossterm>IMAGE_BASENAME</glossterm>
2879 <glossdef>
2880 <para>
2881 The base name of image output files.
2882 This variable defaults to the recipe name
2883 (<filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}</filename>).
2884 </para>
2885 </glossdef>
2886 </glossentry>
2887
2888 <glossentry id='var-IMAGE_CLASSES'><glossterm>IMAGE_CLASSES</glossterm>
2889 <glossdef>
2890 <para>
2891 A list of classes that all images should inherit.
2892 You typically use this variable to specify the list of
2893 classes that register the different types of images
2894 the OpenEmbedded build system creates.
2895 </para>
2896
2897 <para>
2898 The default value for <filename>IMAGE_CLASSES</filename> is
2899 <filename>image_types</filename>.
2900 You can set this variable in your
2901 <filename>local.conf</filename> or in a distribution
2902 configuration file.
2903 </para>
2904
2905 <para>
2906 For more information, see
2907 <filename>meta/classes/image_types.bbclass</filename> in the
2908 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
2909 </para>
2910 </glossdef>
2911 </glossentry>
2912
2913 <glossentry id='var-IMAGE_FEATURES'><glossterm>IMAGE_FEATURES</glossterm>
2914 <glossdef>
2915 <para>
2916 The primary list of features to include in an image.
2917 Typically, you configure this variable in an image recipe.
2918 Although you can use this variable from your
2919 <filename>local.conf</filename> file, which is found in the
2920 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>,
2921 best practices dictate that you do not.
2922 <note>
2923 To enable extra features from outside the image recipe,
2924 use the
2925 <filename><link linkend='var-EXTRA_IMAGE_FEATURES'>EXTRA_IMAGE_FEATURES</link></filename> variable.
2926 </note>
2927 For a list of image features that ships with the Yocto
2928 Project, see the
2929 "<link linkend="ref-features-image">Image Features</link>"
2930 section.
2931 </para>
2932
2933 <para>
2934 For an example that shows how to customize your image by
2935 using this variable, see the
2936 "<ulink url='&YOCTO_DOCS_DEV_URL;#usingpoky-extend-customimage-imagefeatures'>Customizing Images Using Custom <filename>IMAGE_FEATURES</filename> and <filename>EXTRA_IMAGE_FEATURES</filename></ulink>"
2937 section in the Yocto Project Development Manual.
2938 </para>
2939 </glossdef>
2940 </glossentry>
2941
2942 <glossentry id='var-IMAGE_FSTYPES'><glossterm>IMAGE_FSTYPES</glossterm>
2943 <glossdef>
2944 <para>
2945 Specifies the formats the OpenEmbedded build system uses
2946 during the build when creating the root filesystem.
2947 For example, setting <filename>IMAGE_FSTYPES</filename>
2948 as follows causes the build system to create root
2949 filesystems using two formats: <filename>.ext3</filename>
2950 and <filename>.tar.bz2</filename>:
2951 <literallayout class='monospaced'>
2952 IMAGE_FSTYPES = "ext3 tar.bz2"
2953 </literallayout>
2954 For the complete list of supported image formats from which
2955 you can choose, see
2956 <link linkend='var-IMAGE_TYPES'><filename>IMAGE_TYPES</filename></link>.
2957 </para>
2958
2959 <note>
2960 If you add "live" to <filename>IMAGE_FSTYPES</filename>
2961 inside an image recipe, be sure that you do so prior to the
2962 "inherit image" line of the recipe or the live image will
2963 not build.
2964 </note>
2965
2966 <note>
2967 Due to the way this variable is processed, it is not
2968 possible to update its contents using
2969 <filename>_append</filename> or
2970 <filename>_prepend</filename>. To add one or more
2971 additional options to this variable the
2972 <filename>+=</filename> operator must be used.
2973 </note>
2974 </glossdef>
2975 </glossentry>
2976
2977 <glossentry id='var-IMAGE_INSTALL'><glossterm>IMAGE_INSTALL</glossterm>
2978 <glossdef>
2979 <para>
2980 Specifies the packages to install into an image.
2981 The <filename>IMAGE_INSTALL</filename> variable is a
2982 mechanism for an image recipe and you should use it
2983 with care to avoid ordering issues.
2984 <note>
2985 When working with an
2986 <link linkend='images-core-image-minimal-initramfs'><filename>core-image-minimal-initramfs</filename></link>
2987 image, do not use the <filename>IMAGE_INSTALL</filename>
2988 variable to specify packages for installation.
2989 Instead, use the
2990 <link linkend='var-PACKAGE_INSTALL'><filename>PACKAGE_INSTALL</filename></link>
2991 variable, which allows the initial RAM disk (initramfs)
2992 recipe to use a fixed set of packages and not be
2993 affected by <filename>IMAGE_INSTALL</filename>.
2994 </note>
2995 </para>
2996
2997 <para>
2998 Image recipes set <filename>IMAGE_INSTALL</filename>
2999 to specify the packages to install into an image through
3000 <filename>image.bbclass</filename>.
3001 Additionally, "helper" classes exist, such as
3002 <filename>core-image.bbclass</filename>, that can take
3003 <filename><link linkend='var-IMAGE_FEATURES'>IMAGE_FEATURES</link></filename>
3004 lists and turn these into auto-generated entries in
3005 <filename>IMAGE_INSTALL</filename> in addition to its
3006 default contents.
3007 </para>
3008
3009 <para>
3010 Using <filename>IMAGE_INSTALL</filename> with the
3011 <filename>+=</filename> operator from the
3012 <filename>/conf/local.conf</filename> file or from within
3013 an image recipe is not recommended as it can cause ordering
3014 issues.
3015 Since <filename>core-image.bbclass</filename> sets
3016 <filename>IMAGE_INSTALL</filename> to a default value using
3017 the <filename>?=</filename> operator, using a
3018 <filename>+=</filename> operation against
3019 <filename>IMAGE_INSTALL</filename> will result in
3020 unexpected behavior when used in
3021 <filename>conf/local.conf</filename>.
3022 Furthermore, the same operation from within an image
3023 recipe may or may not succeed depending on the specific
3024 situation.
3025 In both these cases, the behavior is contrary to how most
3026 users expect the <filename>+=</filename> operator to work.
3027 </para>
3028
3029 <para>
3030 When you use this variable, it is best to use it as follows:
3031 <literallayout class='monospaced'>
3032 IMAGE_INSTALL_append = " package-name"
3033 </literallayout>
3034 Be sure to include the space between the quotation character
3035 and the start of the package name or names.
3036 </para>
3037 </glossdef>
3038 </glossentry>
3039
3040 <glossentry id='var-IMAGE_LINGUAS'><glossterm>IMAGE_LINGUAS</glossterm>
3041 <glossdef>
3042 <para>
3043 Specifies the list of locales to install into the image
3044 during the root filesystem construction process.
3045 The OpenEmbedded build system automatically splits locale
3046 files, which are used for localization, into separate
3047 packages.
3048 Setting the <filename>IMAGE_LINGUAS</filename> variable
3049 ensures that any locale packages that correspond to packages
3050 already selected for installation into the image are also
3051 installed.
3052 Here is an example:
3053 <literallayout class='monospaced'>
3054 IMAGE_LINGUAS = "pt-br de-de"
3055 </literallayout>
3056 In this example, the build system ensures any Brazilian
3057 Portuguese and German locale files that correspond to
3058 packages in the image are installed (i.e.
3059 <filename>*-locale-pt-br</filename>
3060 and <filename>*-locale-de-de</filename> as well as
3061 <filename>*-locale-pt</filename>
3062 and <filename>*-locale-de</filename>, since some software
3063 packages only provide locale files by language and not by
3064 country-specific language).
3065 </para>
3066 </glossdef>
3067 </glossentry>
3068
3069 <glossentry id='var-IMAGE_MANIFEST'><glossterm>IMAGE_MANIFEST</glossterm>
3070 <glossdef>
3071 <para>
3072 The manifest file for the image.
3073 This file lists all the installed packages that make up
3074 the image.
3075 The file contains package information on a line-per-package
3076 basis as follows:
3077 <literallayout class='monospaced'>
3078 &lt;packagename&gt; &lt;packagearch&gt; &lt;version&gt;
3079 </literallayout>
3080 </para>
3081
3082 <para>
3083 The
3084 <link linkend='ref-classes-image'><filename>image</filename></link>
3085 class defines the manifest file as follows:
3086 <literallayout class='monospaced'>
3087 IMAGE_MANIFEST = "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.manifest"
3088 </literallayout>
3089 The location is derived using the
3090 <link linkend='var-DEPLOY_DIR_IMAGE'><filename>DEPLOY_DIR_IMAGE</filename></link>
3091 and
3092 <link linkend='var-IMAGE_NAME'><filename>IMAGE_NAME</filename></link>
3093 variables.
3094 You can find information on how the image
3095 is created in the
3096 "<link linkend='image-generation-dev-environment'>Image Generation</link>"
3097 section.
3098 </para>
3099 </glossdef>
3100 </glossentry>
3101
3102 <glossentry id='var-IMAGE_NAME'><glossterm>IMAGE_NAME</glossterm>
3103 <glossdef>
3104 <para>
3105 The name of the output image files minus the extension.
3106 This variable is derived using the
3107 <link linkend='var-IMAGE_BASENAME'><filename>IMAGE_BASENAME</filename></link>,
3108 <link linkend='var-MACHINE'><filename>MACHINE</filename></link>,
3109 and
3110 <link linkend='var-DATETIME'><filename>DATETIME</filename></link>
3111 variables:
3112 <literallayout class='monospaced'>
3113 IMAGE_NAME = "${IMAGE_BASENAME}-${MACHINE}-${DATETIME}"
3114 </literallayout>
3115 </para>
3116 </glossdef>
3117 </glossentry>
3118
3119 <glossentry id='var-IMAGE_OVERHEAD_FACTOR'><glossterm>IMAGE_OVERHEAD_FACTOR</glossterm>
3120 <glossdef>
3121 <para>
3122 Defines a multiplier that the build system applies to the initial image
3123 size for cases when the multiplier times the returned disk usage value
3124 for the image is greater than the sum of
3125 <filename><link linkend='var-IMAGE_ROOTFS_SIZE'>IMAGE_ROOTFS_SIZE</link></filename>
3126 and
3127 <filename><link linkend='var-IMAGE_ROOTFS_EXTRA_SPACE'>IMAGE_ROOTFS_EXTRA_SPACE</link></filename>.
3128 The result of the multiplier applied to the initial image size creates
3129 free disk space in the image as overhead.
3130 By default, the build process uses a multiplier of 1.3 for this variable.
3131 This default value results in 30% free disk space added to the image when this
3132 method is used to determine the final generated image size.
3133 You should be aware that post install scripts and the package management
3134 system uses disk space inside this overhead area.
3135 Consequently, the multiplier does not produce an image with
3136 all the theoretical free disk space.
3137 See <filename><link linkend='var-IMAGE_ROOTFS_SIZE'>IMAGE_ROOTFS_SIZE</link></filename>
3138 for information on how the build system determines the overall image size.
3139 </para>
3140
3141 <para>
3142 The default 30% free disk space typically gives the image enough room to boot
3143 and allows for basic post installs while still leaving a small amount of
3144 free disk space.
3145 If 30% free space is inadequate, you can increase the default value.
3146 For example, the following setting gives you 50% free space added to the image:
3147 <literallayout class='monospaced'>
3148 IMAGE_OVERHEAD_FACTOR = "1.5"
3149 </literallayout>
3150 </para>
3151
3152 <para>
3153 Alternatively, you can ensure a specific amount of free disk space is added
3154 to the image by using the
3155 <filename><link linkend='var-IMAGE_ROOTFS_EXTRA_SPACE'>IMAGE_ROOTFS_EXTRA_SPACE</link></filename>
3156 variable.
3157 </para>
3158 </glossdef>
3159 </glossentry>
3160
3161 <glossentry id='var-IMAGE_PKGTYPE'><glossterm>IMAGE_PKGTYPE</glossterm>
3162 <glossdef>
3163 <para>
3164 Defines the package type (DEB, RPM, IPK, or TAR) used
3165 by the OpenEmbedded build system.
3166 The variable is defined appropriately by the
3167 <link linkend='ref-classes-package_deb'><filename>package_deb</filename></link>,
3168 <link linkend='ref-classes-package_rpm'><filename>package_rpm</filename></link>,
3169 <link linkend='ref-classes-package_ipk'><filename>package_ipk</filename></link>,
3170 or
3171 <link linkend='ref-classes-package_tar'><filename>package_tar</filename></link>
3172 class.
3173 </para>
3174
3175 <para>
3176 The
3177 <link linkend='ref-classes-populate-sdk-*'><filename>package_sdk_base</filename></link>
3178 and
3179 <link linkend='ref-classes-image'><filename>image</filename></link>
3180 classes use the <filename>IMAGE_PKGTYPE</filename> for
3181 packaging up images and SDKs.
3182 </para>
3183
3184 <para>
3185 You should not set the <filename>IMAGE_PKGTYPE</filename>
3186 manually.
3187 Rather, the variable is set indirectly through the
3188 appropriate
3189 <link linkend='ref-classes-package'><filename>package_*</filename></link>
3190 class using the
3191 <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
3192 variable.
3193 The OpenEmbedded build system uses the first package type
3194 (e.g. DEB, RPM, or IPK) that appears with the variable
3195 <note>
3196 Files using the <filename>.tar</filename> format are
3197 never used as a substitute packaging format for DEB,
3198 RPM, and IPK formatted files for your image or SDK.
3199 </note>
3200 </para>
3201 </glossdef>
3202 </glossentry>
3203
3204 <glossentry id='var-IMAGE_POSTPROCESS_COMMAND'><glossterm>IMAGE_POSTPROCESS_COMMAND</glossterm>
3205 <glossdef>
3206 <para>
3207 Added by classes to run post processing commands once the
3208 OpenEmbedded build system has created the image.
3209 You can specify shell commands separated by semicolons:
3210 <literallayout class='monospaced'>
3211 IMAGE_POSTPROCESS_COMMAND += "&lt;shell_command&gt;; ... "
3212 </literallayout>
3213 If you need to pass the path to the root filesystem within
3214 the command, you can use
3215 <filename>${IMAGE_ROOTFS}</filename>, which points to
3216 the root filesystem image.
3217 </para>
3218 </glossdef>
3219 </glossentry>
3220
3221 <glossentry id='var-IMAGE_ROOTFS'><glossterm>IMAGE_ROOTFS</glossterm>
3222 <glossdef>
3223 <para>
3224 The location of the root filesystem while it is under
3225 construction (i.e. during <filename>do_rootfs</filename>).
3226 This variable is not configurable.
3227 Do not change it.
3228 </para>
3229 </glossdef>
3230 </glossentry>
3231
3232 <glossentry id='var-IMAGE_ROOTFS_EXTRA_SPACE'><glossterm>IMAGE_ROOTFS_EXTRA_SPACE</glossterm>
3233 <glossdef>
3234 <para>
3235 Defines additional free disk space created in the image in Kbytes.
3236 By default, this variable is set to "0".
3237 This free disk space is added to the image after the build system determines
3238 the image size as described in
3239 <filename><link linkend='var-IMAGE_ROOTFS_SIZE'>IMAGE_ROOTFS_SIZE</link></filename>.
3240 </para>
3241
3242 <para>
3243 This variable is particularly useful when you want to ensure that a
3244 specific amount of free disk space is available on a device after an image
3245 is installed and running.
3246 For example, to be sure 5 Gbytes of free disk space is available, set the
3247 variable as follows:
3248 <literallayout class='monospaced'>
3249 IMAGE_ROOTFS_EXTRA_SPACE = "5242880"
3250 </literallayout>
3251 </para>
3252
3253 <para>
3254 For example, the Yocto Project Build Appliance specifically requests 40 Gbytes
3255 of extra space with the line:
3256 <literallayout class='monospaced'>
3257 IMAGE_ROOTFS_EXTRA_SPACE = "41943040"
3258 </literallayout>
3259 </para>
3260 </glossdef>
3261 </glossentry>
3262
3263 <glossentry id='var-IMAGE_ROOTFS_SIZE'><glossterm>IMAGE_ROOTFS_SIZE</glossterm>
3264 <glossdef>
3265 <para>
3266 Defines the size in Kbytes for the generated image.
3267 The OpenEmbedded build system determines the final size for the generated
3268 image using an algorithm that takes into account the initial disk space used
3269 for the generated image, a requested size for the image, and requested
3270 additional free disk space to be added to the image.
3271 Programatically, the build system determines the final size of the
3272 generated image as follows:
3273 <literallayout class='monospaced'>
3274 if (image-du * overhead) &lt; rootfs-size:
3275 internal-rootfs-size = rootfs-size + xspace
3276 else:
3277 internal-rootfs-size = (image-du * overhead) + xspace
3278
3279 where:
3280
3281 image-du = Returned value of the du command on
3282 the image.
3283
3284 overhead = IMAGE_OVERHEAD_FACTOR
3285
3286 rootfs-size = IMAGE_ROOTFS_SIZE
3287
3288 internal-rootfs-size = Initial root filesystem
3289 size before any modifications.
3290
3291 xspace = IMAGE_ROOTFS_EXTRA_SPACE
3292 </literallayout>
3293 See the <link linkend='var-IMAGE_OVERHEAD_FACTOR'><filename>IMAGE_OVERHEAD_FACTOR</filename></link>
3294 and <link linkend='var-IMAGE_ROOTFS_EXTRA_SPACE'><filename>IMAGE_ROOTFS_EXTRA_SPACE</filename></link>
3295 variables for related information.
3296<!-- In the above example, <filename>overhead</filename> is defined by the
3297 <filename><link linkend='var-IMAGE_OVERHEAD_FACTOR'>IMAGE_OVERHEAD_FACTOR</link></filename>
3298 variable, <filename>xspace</filename> is defined by the
3299 <filename><link linkend='var-IMAGE_ROOTFS_EXTRA_SPACE'>IMAGE_ROOTFS_EXTRA_SPACE</link></filename>
3300 variable, and <filename>du</filename> is the results of the disk usage command
3301 on the initially generated image. -->
3302 </para>
3303 </glossdef>
3304 </glossentry>
3305
3306 <glossentry id='var-IMAGE_TYPEDEP'><glossterm>IMAGE_TYPEDEP</glossterm>
3307 <glossdef>
3308 <para>
3309 Specifies a dependency from one image type on another.
3310 Here is an example from the
3311 <link linkend='ref-classes-image-live'><filename>image-live</filename></link>
3312 class:
3313 <literallayout class='monospaced'>
3314 IMAGE_TYPEDEP_live = "ext3"
3315 </literallayout>
3316 In the previous example, the variable ensures that when
3317 "live" is listed with the
3318 <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
3319 variable, the OpenEmbedded build system produces an
3320 <filename>ext3</filename> image first since one of the
3321 components of the live
3322 image is an <filename>ext3</filename>
3323 formatted partition containing the root
3324 filesystem.
3325 </para>
3326 </glossdef>
3327 </glossentry>
3328
3329 <glossentry id='var-IMAGE_TYPES'><glossterm>IMAGE_TYPES</glossterm>
3330 <glossdef>
3331 <para>
3332 Specifies the complete list of supported image types
3333 by default:
3334 <literallayout class='monospaced'>
3335 jffs2
3336 jffs2.sum
3337 cramfs
3338 ext2
3339 ext2.gz
3340 ext2.bz2
3341 ext3
3342 ext3.gz
3343 ext2.lzma
3344 btrfs
3345 live
3346 squashfs
3347 squashfs-xz
3348 ubi
3349 ubifs
3350 tar
3351 tar.gz
3352 tar.bz2
3353 tar.xz
3354 cpio
3355 cpio.gz
3356 cpio.xz
3357 cpio.lzma
3358 vmdk
3359 elf
3360 </literallayout>
3361 For more information on how these types of images, see
3362 <filename>meta/classes/image_types*.bbclass</filename>
3363 in the
3364 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
3365 </para>
3366 </glossdef>
3367 </glossentry>
3368
3369 <glossentry id='var-INC_PR'><glossterm>INC_PR</glossterm>
3370 <glossdef>
3371 <para>Helps define the recipe revision for recipes that share
3372 a common <filename>include</filename> file.
3373 You can think of this variable as part of the recipe revision
3374 as set from within an include file.</para>
3375 <para>Suppose, for example, you have a set of recipes that
3376 are used across several projects.
3377 And, within each of those recipes the revision
3378 (its <link linkend='var-PR'><filename>PR</filename></link>
3379 value) is set accordingly.
3380 In this case, when the revision of those recipes changes,
3381 the burden is on you to find all those recipes and
3382 be sure that they get changed to reflect the updated
3383 version of the recipe.
3384 In this scenario, it can get complicated when recipes
3385 that are used in many places and provide common functionality
3386 are upgraded to a new revision.</para>
3387 <para>A more efficient way of dealing with this situation is
3388 to set the <filename>INC_PR</filename> variable inside
3389 the <filename>include</filename> files that the recipes
3390 share and then expand the <filename>INC_PR</filename>
3391 variable within the recipes to help
3392 define the recipe revision.
3393 </para>
3394 <para>
3395 The following provides an example that shows how to use
3396 the <filename>INC_PR</filename> variable
3397 given a common <filename>include</filename> file that
3398 defines the variable.
3399 Once the variable is defined in the
3400 <filename>include</filename> file, you can use the
3401 variable to set the <filename>PR</filename> values in
3402 each recipe.
3403 You will notice that when you set a recipe's
3404 <filename>PR</filename> you can provide more granular
3405 revisioning by appending values to the
3406 <filename>INC_PR</filename> variable:
3407 <literallayout class='monospaced'>
3408recipes-graphics/xorg-font/xorg-font-common.inc:INC_PR = "r2"
3409recipes-graphics/xorg-font/encodings_1.0.4.bb:PR = "${INC_PR}.1"
3410recipes-graphics/xorg-font/font-util_1.3.0.bb:PR = "${INC_PR}.0"
3411recipes-graphics/xorg-font/font-alias_1.0.3.bb:PR = "${INC_PR}.3"
3412 </literallayout>
3413 The first line of the example establishes the baseline
3414 revision to be used for all recipes that use the
3415 <filename>include</filename> file.
3416 The remaining lines in the example are from individual
3417 recipes and show how the <filename>PR</filename> value
3418 is set.</para>
3419 </glossdef>
3420 </glossentry>
3421
3422 <glossentry id='var-INCOMPATIBLE_LICENSE'><glossterm>INCOMPATIBLE_LICENSE</glossterm>
3423 <glossdef>
3424 <para>
3425 Specifies a space-separated list of license names
3426 (as they would appear in
3427 <link linkend='var-LICENSE'><filename>LICENSE</filename></link>)
3428 that should be excluded from the build.
3429 Recipes that provide no alternatives to listed incompatible
3430 licenses are not built.
3431 Packages that are individually licensed with the specified
3432 incompatible licenses will be deleted.
3433 </para>
3434
3435 <note>
3436 This functionality is only regularly tested using
3437 the following setting:
3438 <literallayout class='monospaced'>
3439 INCOMPATIBLE_LICENSE = "GPLv3"
3440 </literallayout>
3441 Although you can use other settings, you might be required
3442 to remove dependencies on or provide alternatives to
3443 components that are required to produce a functional system
3444 image.
3445 </note>
3446 </glossdef>
3447 </glossentry>
3448
3449 <glossentry id='var-INHIBIT_DEFAULT_DEPS'><glossterm>INHIBIT_DEFAULT_DEPS</glossterm>
3450 <glossdef>
3451 <para>
3452 Prevents the default dependencies, namely the C compiler
3453 and standard C library (libc), from being added to
3454 <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>.
3455 This variable is usually used within recipes that do not
3456 require any compilation using the C compiler.
3457 </para>
3458
3459 <para>
3460 Set the variable to "1" to prevent the default dependencies
3461 from being added.
3462 </para>
3463 </glossdef>
3464 </glossentry>
3465
3466 <glossentry id='var-INHIBIT_PACKAGE_STRIP'><glossterm>INHIBIT_PACKAGE_STRIP</glossterm>
3467 <glossdef>
3468 <para>
3469 If set to "1", causes the build to not strip binaries in resulting packages.
3470 </para>
3471 </glossdef>
3472 </glossentry>
3473
3474 <glossentry id='var-INHERIT'><glossterm>INHERIT</glossterm>
3475 <glossdef>
3476 <para>
3477 Causes the named class to be inherited at
3478 this point during parsing.
3479 The variable is only valid in configuration files.
3480 </para>
3481 </glossdef>
3482 </glossentry>
3483
3484 <glossentry id='var-INHERIT_DISTRO'><glossterm>INHERIT_DISTRO</glossterm>
3485 <glossdef>
3486 <para>
3487 Lists classes that will be inherited at the
3488 distribution level.
3489 It is unlikely that you want to edit this variable.
3490 </para>
3491
3492 <para>
3493 The default value of the variable is set as follows in the
3494 <filename>meta/conf/distro/defaultsetup.conf</filename>
3495 file:
3496 <literallayout class='monospaced'>
3497 INHERIT_DISTRO ?= "debian devshell sstate license"
3498 </literallayout>
3499 </para>
3500 </glossdef>
3501 </glossentry>
3502
3503 <glossentry id='var-INITRAMFS_FSTYPES'><glossterm>INITRAMFS_FSTYPES</glossterm>
3504 <glossdef>
3505 <para>
3506 Defines the format for the output image of an initial
3507 RAM disk (initramfs), which is used during boot.
3508 Supported formats are the same as those supported by the
3509 <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
3510 variable.
3511 </para>
3512 </glossdef>
3513 </glossentry>
3514
3515 <glossentry id='var-INITRAMFS_IMAGE'><glossterm>INITRAMFS_IMAGE</glossterm>
3516 <glossdef>
3517 <para>
3518 Causes the OpenEmbedded build system to build an additional
3519 recipe as a dependency to your root filesystem recipe
3520 (e.g. <filename>core-image-sato</filename>).
3521 The additional recipe is used to create an initial RAM disk
3522 (initramfs) that might be needed during the initial boot of
3523 the target system to accomplish such things as loading
3524 kernel modules prior to mounting the root file system.
3525 </para>
3526
3527 <para>
3528 When you set the variable, specify the name of the
3529 initramfs you want created.
3530 The following example, which is set in the
3531 <filename>local.conf</filename> configuration file, causes
3532 a separate recipe to be created that results in an
3533 initramfs image named
3534 <filename>core-image-sato-initramfs.bb</filename> to be
3535 created:
3536 <literallayout class='monospaced'>
3537 INITRAMFS_IMAGE = "core-image-minimal-initramfs"
3538 </literallayout>
3539 By default, the
3540 <link linkend='ref-classes-kernel'><filename>kernel</filename></link>
3541 class sets this variable to a null string as follows:
3542 <literallayout class='monospaced'>
3543 INITRAMFS_IMAGE = ""
3544 </literallayout>
3545 </para>
3546
3547 <para>
3548 See the
3549 <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/poky/tree/meta-yocto/conf/local.conf.sample.extended'><filename>local.conf.sample.extended</filename></ulink>
3550 file for additional information.
3551 You can also reference the
3552 <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/poky/tree/meta/classes/kernel.bbclass'><filename>kernel.bbclass</filename></ulink>
3553 file to see how the variable is used.
3554 </para>
3555 </glossdef>
3556 </glossentry>
3557
3558 <glossentry id='var-INITRAMFS_IMAGE_BUNDLE'><glossterm>INITRAMFS_IMAGE_BUNDLE</glossterm>
3559 <glossdef>
3560 <para>
3561 Controls whether or not the image recipe specified by
3562 <link linkend='var-INITRAMFS_IMAGE'><filename>INITRAMFS_IMAGE</filename></link>
3563 is run through an extra pass during kernel compilation
3564 in order to build a single binary that contains both the
3565 kernel image and the initial RAM disk (initramfs).
3566 Using an extra compilation pass ensures that when a kernel
3567 attempts to use an initramfs, it does not encounter
3568 circular dependencies should the initramfs include kernel
3569 modules.
3570 </para>
3571
3572 <para>
3573 The combined binary is deposited into the
3574 <filename>tmp/deploy</filename> directory, which is part
3575 of the
3576 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
3577 </para>
3578
3579 <para>
3580 Setting the variable to "1" in a configuration file causes
3581 the OpenEmbedded build system to make the extra pass during
3582 kernel compilation:
3583 <literallayout class='monospaced'>
3584 INITRAMFS_IMAGE_BUNDLE = "1"
3585 </literallayout>
3586 By default, the
3587 <link linkend='ref-classes-kernel'><filename>kernel</filename></link>
3588 class sets this variable to a null string as follows:
3589 <literallayout class='monospaced'>
3590 INITRAMFS_IMAGE_BUNDLE = ""
3591 </literallayout>
3592 <note>
3593 You must set the
3594 <filename>INITRAMFS_IMAGE_BUNDLE</filename> variable in
3595 a configuration file.
3596 You cannot set the variable in a recipe file.
3597 </note>
3598 See the
3599 <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/poky/tree/meta-yocto/conf/local.conf.sample.extended'><filename>local.conf.sample.extended</filename></ulink>
3600 file for additional information.
3601 </para>
3602 </glossdef>
3603 </glossentry>
3604
3605 <glossentry id='var-INITRD'><glossterm>INITRD</glossterm>
3606 <glossdef>
3607 <para>
3608 Indicates a filesystem image to use as an initial RAM
3609 disk (<filename>initrd</filename>).
3610 </para>
3611
3612 <para>
3613 The <filename>INITRD</filename> variable is an optional
3614 variable used with the
3615 <link linkend='ref-classes-bootimg'><filename>buildimg</filename></link>
3616 class.
3617 </para>
3618 </glossdef>
3619 </glossentry>
3620
3621 <glossentry id='var-INITSCRIPT_NAME'><glossterm>INITSCRIPT_NAME</glossterm>
3622 <glossdef>
3623 <para>
3624 The filename of the initialization script as installed to
3625 <filename>${sysconfdir}/init.d</filename>.
3626 </para>
3627 <para>
3628 This variable is used in recipes when using <filename>update-rc.d.bbclass</filename>.
3629 The variable is mandatory.
3630 </para>
3631 </glossdef>
3632 </glossentry>
3633
3634 <glossentry id='var-INITSCRIPT_PACKAGES'><glossterm>INITSCRIPT_PACKAGES</glossterm>
3635 <glossdef>
3636 <para>
3637 A list of the packages that contain initscripts.
3638 If multiple packages are specified, you need to append the package name
3639 to the other <filename>INITSCRIPT_*</filename> as an override.</para>
3640 <para>
3641 This variable is used in recipes when using <filename>update-rc.d.bbclass</filename>.
3642 The variable is optional and defaults to the
3643 <link linkend='var-PN'><filename>PN</filename></link> variable.
3644 </para>
3645 </glossdef>
3646 </glossentry>
3647
3648 <glossentry id='var-INITSCRIPT_PARAMS'><glossterm>INITSCRIPT_PARAMS</glossterm>
3649 <glossdef>
3650 <para>
3651 Specifies the options to pass to <filename>update-rc.d</filename>.
3652 Here is an example:
3653 <literallayout class='monospaced'>
3654 INITSCRIPT_PARAMS = "start 99 5 2 . stop 20 0 1 6 ."
3655 </literallayout>
3656 In this example, the script has a runlevel of 99,
3657 starts the script in initlevels 2 and 5, and
3658 stops the script in levels 0, 1 and 6.
3659 </para>
3660 <para>
3661 The variable is mandatory and is used in recipes when using
3662 <filename>update-rc.d.bbclass</filename>.
3663 </para>
3664 </glossdef>
3665 </glossentry>
3666
3667 <glossentry id='var-INSANE_SKIP'><glossterm>INSANE_SKIP</glossterm>
3668 <glossdef>
3669 <para>
3670 Specifies the QA checks to skip for a specific package
3671 within a recipe.
3672 For example, to skip the check for symbolic link
3673 <filename>.so</filename> files in the main package of a
3674 recipe, add the following to the recipe.
3675 The package name override must be used, which in this
3676 example is <filename>${PN}</filename>:
3677 <literallayout class='monospaced'>
3678 INSANE_SKIP_${PN} += "dev-so"
3679 </literallayout>
3680 </para>
3681 <para>
3682 See the "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
3683 section for a list of the valid QA checks you can
3684 specify using this variable.
3685 </para>
3686 </glossdef>
3687 </glossentry>
3688
3689 <glossentry id='var-IPK_FEED_URIS'><glossterm>IPK_FEED_URIS</glossterm>
3690 <glossdef>
3691 <para>
3692 When the IPK backend is in use and package management
3693 is enabled on the target, you can use this variable to
3694 set up <filename>opkg</filename> in the target image
3695 to point to package feeds on a nominated server.
3696 Once the feed is established, you can perform
3697 installations or upgrades using the package manager
3698 at runtime.
3699 </para>
3700 </glossdef>
3701 </glossentry>
3702
3703<!--
3704 <glossentry id='var-INTERCEPT_DIR'><glossterm>INTERCEPT_DIR</glossterm>
3705 <glossdef>
3706 <para>
3707 An environment variable that defines the directory where
3708 post installation hooks are installed for the
3709 post install environment.
3710 This variable is fixed as follows:
3711 <literallayout class='monospaced'>
3712 ${WORKDIR}/intercept_scripts
3713 </literallayout>
3714 </para>
3715
3716 <para>
3717 After installation of a target's root filesystem,
3718 post installation scripts, which are essentially bash scripts,
3719 are all executed just a single time.
3720 Limiting execution of these scripts minimizes installation
3721 time that would be lengthened due to certain packages
3722 triggering redundant operations.
3723 For example, consider the installation of font packages
3724 as a common example.
3725 Without limiting the execution of post installation scripts,
3726 all font directories would be rescanned to create the
3727 cache after each individual font package was installed.
3728 </para>
3729
3730 <para>
3731 Do not edit the <filename>INTERCEPT_DIR</filename>
3732 variable.
3733 </para>
3734 </glossdef>
3735 </glossentry>
3736-->
3737
3738 </glossdiv>
3739
3740<!-- <glossdiv id='var-glossary-j'><title>J</title>-->
3741<!-- </glossdiv>-->
3742
3743 <glossdiv id='var-glossary-k'><title>K</title>
3744
3745 <glossentry id='var-KARCH'><glossterm>KARCH</glossterm>
3746 <glossdef>
3747 <para>
3748 Defines the kernel architecture used when assembling
3749 the configuration.
3750 Architectures supported for this release are:
3751 <literallayout class='monospaced'>
3752 powerpc
3753 i386
3754 x86_64
3755 arm
3756 qemu
3757 mips
3758 </literallayout>
3759 </para>
3760
3761 <para>
3762 You define the <filename>KARCH</filename> variable in the
3763 <ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#bsp-descriptions'>BSP Descriptions</ulink>.
3764 </para>
3765 </glossdef>
3766 </glossentry>
3767
3768 <glossentry id='var-KBRANCH'><glossterm>KBRANCH</glossterm>
3769 <glossdef>
3770 <para>
3771 A regular expression used by the build process to explicitly
3772 identify the kernel branch that is validated, patched
3773 and configured during a build.
3774 The <filename>KBRANCH</filename> variable is optional.
3775 You can use it to trigger checks to ensure the exact kernel
3776 branch you want is being used by the build process.
3777 </para>
3778
3779 <para>
3780 Values for this variable are set in the kernel's recipe
3781 file and the kernel's append file.
3782 For example, if you are using the Yocto Project kernel that
3783 is based on the Linux 3.10 kernel, the kernel recipe file
3784 is the
3785 <filename>meta/recipes-kernel/linux/linux-yocto_3.10.bb</filename>
3786 file.
3787 Following is the default value for <filename>KBRANCH</filename>
3788 and the default override for the architectures the Yocto
3789 Project supports:
3790 <literallayout class='monospaced'>
3791 KBRANCH_DEFAULT = "standard/base"
3792 KBRANCH = "${KBRANCH_DEFAULT}"
3793 </literallayout>
3794 This branch exists in the <filename>linux-yocto-3.10</filename>
3795 kernel Git repository
3796 <ulink url='&YOCTO_GIT_URL;/cgit.cgi/linux-yocto-3.10/refs/heads'></ulink>.
3797 </para>
3798
3799 <para>
3800 This variable is also used from the kernel's append file
3801 to identify the kernel branch specific to a particular
3802 machine or target hardware.
3803 The kernel's append file is located in the BSP layer for
3804 a given machine.
3805 For example, the kernel append file for the Crown Bay BSP is in the
3806 <filename>meta-intel</filename> Git repository and is named
3807 <filename>meta-crownbay/recipes-kernel/linux/linux-yocto_3.10.bbappend</filename>.
3808 Here are the related statements from the append file:
3809 <literallayout class='monospaced'>
3810 COMPATIBLE_MACHINE_crownbay = "crownbay"
3811 KMACHINE_crownbay = "crownbay"
3812 KBRANCH_crownbay = "standard/crownbay"
3813 KERNEL_FEATURES_append_crownbay = " features/drm-emgd/drm-emgd-1.18 cfg/vesafb"
3814
3815 COMPATIBLE_MACHINE_crownbay-noemgd = "crownbay-noemgd"
3816 KMACHINE_crownbay-noemgd = "crownbay"
3817 KBRANCH_crownbay-noemgd = "standard/crownbay"
3818 KERNEL_FEATURES_append_crownbay-noemgd = " cfg/vesafb"
3819 </literallayout>
3820 The <filename>KBRANCH_*</filename> statements identify
3821 the kernel branch to use when building for the Crown
3822 Bay BSP.
3823 In this case there are two identical statements: one
3824 for each type of Crown Bay machine.
3825 </para>
3826 </glossdef>
3827 </glossentry>
3828
3829 <glossentry id='var-KBRANCH_DEFAULT'><glossterm>KBRANCH_DEFAULT</glossterm>
3830 <glossdef>
3831 <para>
3832 Defines the Linux kernel source repository's default
3833 branch used to build the Linux kernel.
3834 The <filename>KBRANCH_DEFAULT</filename> value is
3835 the default value for
3836 <link linkend='var-KBRANCH'><filename>KBRANCH</filename></link>.
3837 Unless you specify otherwise,
3838 <filename>KBRANCH_DEFAULT</filename> initializes to
3839 "master".
3840 </para>
3841 </glossdef>
3842 </glossentry>
3843
3844 <glossentry id='var-KERNEL_EXTRA_ARGS'><glossterm>KERNEL_EXTRA_ARGS</glossterm>
3845 <glossdef>
3846 <para>
3847 Specifies additional <filename>make</filename>
3848 command-line arguments the OpenEmbedded build system
3849 passes on when compiling the kernel.
3850 </para>
3851 </glossdef>
3852 </glossentry>
3853
3854 <glossentry id='var-KERNEL_FEATURES'><glossterm>KERNEL_FEATURES</glossterm>
3855 <glossdef>
3856 <para>Includes additional metadata from the Yocto Project kernel Git repository.
3857 In the OpenEmbedded build system, the default Board Support Packages (BSPs)
3858 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
3859 is provided through
3860 the <link linkend='var-KMACHINE'><filename>KMACHINE</filename></link>
3861 and <link linkend='var-KBRANCH'><filename>KBRANCH</filename></link> variables.
3862 You can use the <filename>KERNEL_FEATURES</filename> variable to further
3863 add metadata for all BSPs.</para>
3864 <para>The metadata you add through this variable includes config fragments and
3865 features descriptions,
3866 which usually includes patches as well as config fragments.
3867 You typically override the <filename>KERNEL_FEATURES</filename> variable
3868 for a specific machine.
3869 In this way, you can provide validated, but optional, sets of kernel
3870 configurations and features.</para>
3871 <para>For example, the following adds <filename>netfilter</filename> to all
3872 the Yocto Project kernels and adds sound support to the <filename>qemux86</filename>
3873 machine:
3874 <literallayout class='monospaced'>
3875 # Add netfilter to all linux-yocto kernels
3876 KERNEL_FEATURES="features/netfilter"
3877
3878 # Add sound support to the qemux86 machine
3879 KERNEL_FEATURES_append_qemux86=" cfg/sound"
3880 </literallayout></para>
3881 </glossdef>
3882 </glossentry>
3883
3884 <glossentry id='var-KERNEL_IMAGE_BASE_NAME'><glossterm>KERNEL_IMAGE_BASE_NAME</glossterm>
3885 <glossdef>
3886 <para>
3887 The base name of the kernel image.
3888 This variable is set in the
3889 <link linkend='ref-classes-kernel'>kernel</link> class
3890 as follows:
3891 <literallayout class='monospaced'>
3892 KERNEL_IMAGE_BASE_NAME ?= "${KERNEL_IMAGETYPE}-${PKGE}-${PKGV}-${PKGR}-${MACHINE}-${DATETIME}"
3893 </literallayout>
3894 See the
3895 <link linkend='var-KERNEL_IMAGETYPE'><filename>KERNEL_IMAGETYPE</filename></link>,
3896 <link linkend='var-PKGE'><filename>PKGE</filename></link>,
3897 <link linkend='var-PKGV'><filename>PKGV</filename></link>,
3898 <link linkend='var-PKGR'><filename>PKGR</filename></link>,
3899 <link linkend='var-MACHINE'><filename>MACHINE</filename></link>,
3900 and
3901 <link linkend='var-DATETIME'><filename>DATETIME</filename></link>
3902 variables for additional information.
3903 </para>
3904 </glossdef>
3905 </glossentry>
3906
3907 <glossentry id='var-KERNEL_IMAGETYPE'><glossterm>KERNEL_IMAGETYPE</glossterm>
3908 <glossdef>
3909 <para>The type of kernel to build for a device, usually set by the
3910 machine configuration files and defaults to "zImage".
3911 This variable is used
3912 when building the kernel and is passed to <filename>make</filename> as the target to
3913 build.</para>
3914 </glossdef>
3915 </glossentry>
3916
3917 <glossentry id='var-KERNEL_PATH'><glossterm>KERNEL_PATH</glossterm>
3918 <glossdef>
3919 <para>
3920 The location of the kernel sources.
3921 This variable is set to the value of the
3922 <link linkend='var-STAGING_KERNEL_DIR'><filename>STAGING_KERNEL_DIR</filename></link>
3923 within the <filename>module.bbclass</filename> class.
3924 For information on how this variable is used, see the
3925 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#incorporating-out-of-tree-modules'>Incorporating Out-of-Tree Modules</ulink>"
3926 section.
3927 </para>
3928
3929 <para>
3930 To help maximize compatibility with out-of-tree drivers
3931 used to build modules, the OpenEmbedded build system also
3932 recognizes and uses the
3933 <link linkend='var-KERNEL_SRC'><filename>KERNEL_SRC</filename></link>
3934 variable, which is identical to the
3935 <filename>KERNEL_PATH</filename> variable.
3936 Both variables are common variables used by external
3937 Makefiles to point to the kernel source directory.
3938 </para>
3939 </glossdef>
3940 </glossentry>
3941
3942 <glossentry id='var-KERNEL_SRC'><glossterm>KERNEL_SRC</glossterm>
3943 <glossdef>
3944 <para>
3945 The location of the kernel sources.
3946 This variable is set to the value of the
3947 <link linkend='var-STAGING_KERNEL_DIR'><filename>STAGING_KERNEL_DIR</filename></link>
3948 within the <filename>module.bbclass</filename> class.
3949 For information on how this variable is used, see the
3950 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#incorporating-out-of-tree-modules'>Incorporating Out-of-Tree Modules</ulink>"
3951 section.
3952 </para>
3953
3954 <para>
3955 To help maximize compatibility with out-of-tree drivers
3956 used to build modules, the OpenEmbedded build system also
3957 recognizes and uses the
3958 <link linkend='var-KERNEL_PATH'><filename>KERNEL_PATH</filename></link>
3959 variable, which is identical to the
3960 <filename>KERNEL_SRC</filename> variable.
3961 Both variables are common variables used by external
3962 Makefiles to point to the kernel source directory.
3963 </para>
3964 </glossdef>
3965 </glossentry>
3966
3967 <glossentry id='var-KFEATURE_DESCRIPTION'><glossterm>KFEATURE_DESCRIPTION</glossterm>
3968 <glossdef>
3969 <para>
3970 Provides a short description of a configuration fragment.
3971 You use this variable in the <filename>.scc</filename>
3972 file that describes a configuration fragment file.
3973 Here is the variable used in a file named
3974 <filename>smp.scc</filename> to describe SMP being
3975 enabled:
3976 <literallayout class='monospaced'>
3977 define KFEATURE_DESCRIPTION "Enable SMP"
3978 </literallayout>
3979 </para>
3980 </glossdef>
3981 </glossentry>
3982
3983 <glossentry id='var-KMACHINE'><glossterm>KMACHINE</glossterm>
3984 <glossdef>
3985 <para>
3986 The machine as known by the kernel.
3987 Sometimes the machine name used by the kernel does not match the machine name
3988 used by the OpenEmbedded build system.
3989 For example, the machine name that the OpenEmbedded build system understands as
3990 <filename>qemuarm</filename> goes by a different name in the Linux Yocto kernel.
3991 The kernel understands that machine as <filename>arm_versatile926ejs</filename>.
3992 For cases like these, the <filename>KMACHINE</filename> variable maps the
3993 kernel machine name to the OpenEmbedded build system machine name.
3994 </para>
3995
3996 <para>
3997 Kernel machine names are initially defined in the
3998 Yocto Linux Kernel's <filename>meta</filename> branch.
3999 From the <filename>meta</filename> branch, look in
4000 the <filename>meta/cfg/kernel-cache/bsp/&lt;bsp_name&gt;/&lt;bsp-name&gt;-&lt;kernel-type&gt;.scc</filename> file.
4001 For example, from the <filename>meta</filename> branch in the
4002 <filename>linux-yocto-3.0</filename> kernel, the
4003 <filename>meta/cfg/kernel-cache/bsp/cedartrail/cedartrail-standard.scc</filename> file
4004 has the following:
4005 <literallayout class='monospaced'>
4006 define KMACHINE cedartrail
4007 define KTYPE standard
4008 define KARCH i386
4009
4010 include ktypes/standard
4011 branch cedartrail
4012
4013 include cedartrail.scc
4014 </literallayout>
4015 You can see that the kernel understands the machine name for
4016 the Cedar Trail Board Support Package (BSP) as
4017 <filename>cedartrail</filename>.
4018 </para>
4019
4020 <para>
4021 If you look in the Cedar Trail BSP layer in the
4022 <filename>meta-intel</filename>
4023 <ulink url='&YOCTO_DOCS_DEV_URL;#source-repositories'>Source Repositories</ulink>
4024 at <filename>meta-cedartrail/recipes-kernel/linux/linux-yocto_3.0.bbappend</filename>,
4025 you will find the following statements among others:
4026 <literallayout class='monospaced'>
4027 COMPATIBLE_MACHINE_cedartrail = "cedartrail"
4028 KMACHINE_cedartrail = "cedartrail"
4029 KBRANCH_cedartrail = "yocto/standard/cedartrail"
4030 KERNEL_FEATURES_append_cedartrail += "bsp/cedartrail/cedartrail-pvr-merge.scc"
4031 KERNEL_FEATURES_append_cedartrail += "cfg/efi-ext.scc"
4032
4033 COMPATIBLE_MACHINE_cedartrail-nopvr = "cedartrail"
4034 KMACHINE_cedartrail-nopvr = "cedartrail"
4035 KBRANCH_cedartrail-nopvr = "yocto/standard/cedartrail"
4036 KERNEL_FEATURES_append_cedartrail-nopvr += " cfg/smp.scc"
4037 </literallayout>
4038 The <filename>KMACHINE</filename> statements in the kernel's append file make sure that
4039 the OpenEmbedded build system and the Yocto Linux kernel understand the same machine
4040 names.
4041 </para>
4042
4043 <para>
4044 This append file uses two <filename>KMACHINE</filename> statements.
4045 The first is not really necessary but does ensure that the machine known to the
4046 OpenEmbedded build system as <filename>cedartrail</filename> maps to the machine
4047 in the kernel also known as <filename>cedartrail</filename>:
4048 <literallayout class='monospaced'>
4049 KMACHINE_cedartrail = "cedartrail"
4050 </literallayout>
4051 </para>
4052
4053 <para>
4054 The second statement is a good example of why the <filename>KMACHINE</filename> variable
4055 is needed.
4056 In this example, the OpenEmbedded build system uses the <filename>cedartrail-nopvr</filename>
4057 machine name to refer to the Cedar Trail BSP that does not support the proprietary
4058 PowerVR driver.
4059 The kernel, however, uses the machine name <filename>cedartrail</filename>.
4060 Thus, the append file must map the <filename>cedartrail-nopvr</filename> machine name to
4061 the kernel's <filename>cedartrail</filename> name:
4062 <literallayout class='monospaced'>
4063 KMACHINE_cedartrail-nopvr = "cedartrail"
4064 </literallayout>
4065 </para>
4066
4067 <para>
4068 BSPs that ship with the Yocto Project release provide all mappings between the Yocto
4069 Project kernel machine names and the OpenEmbedded machine names.
4070 Be sure to use the <filename>KMACHINE</filename> if you create a BSP and the machine
4071 name you use is different than that used in the kernel.
4072 </para>
4073 </glossdef>
4074 </glossentry>
4075
4076 <glossentry id='var-KTYPE'><glossterm>KTYPE</glossterm>
4077 <glossdef>
4078 <para>
4079 Defines the kernel type to be used in assembling the
4080 configuration.
4081 The linux-yocto recipes define "standard", "tiny",
4082 and "preempt-rt" kernel types.
4083 See the
4084 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#kernel-types'>Kernel Types</ulink>"
4085 section in the Yocto Project Linux Kernel Development
4086 Manual for more information on kernel types.
4087 </para>
4088
4089 <para>
4090 You define the <filename>KTYPE</filename> variable in the
4091 <ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#bsp-descriptions'>BSP Descriptions</ulink>.
4092 The value you use must match the value used for the
4093 <link linkend='var-LINUX_KERNEL_TYPE'><filename>LINUX_KERNEL_TYPE</filename></link>
4094 value used by the kernel recipe.
4095 </para>
4096 </glossdef>
4097 </glossentry>
4098 </glossdiv>
4099
4100 <glossdiv id='var-glossary-l'><title>L</title>
4101
4102 <glossentry id='var-LABELS'><glossterm>LABELS</glossterm>
4103 <glossdef>
4104 <para>
4105 Provides a list of targets for automatic configuration.
4106 </para>
4107
4108 <para>
4109 See the
4110 <link linkend='ref-classes-grub-efi'><filename>grub-efi</filename></link>
4111 class for more information on how this variable is used.
4112 </para>
4113 </glossdef>
4114 </glossentry>
4115
4116 <glossentry id='var-LAYERDEPENDS'><glossterm>LAYERDEPENDS</glossterm>
4117 <glossdef>
4118 <para>Lists the layers that this recipe depends upon, separated by spaces.
4119 Optionally, you can specify a specific layer version for a dependency
4120 by adding it to the end of the layer name with a colon, (e.g. "anotherlayer:3"
4121 to be compared against
4122 <link linkend='var-LAYERVERSION'><filename>LAYERVERSION</filename></link><filename>_anotherlayer</filename>
4123 in this case).
4124 An error will be produced if any dependency is missing or
4125 the version numbers do not match exactly (if specified).
4126 This variable is used in the <filename>conf/layer.conf</filename> file
4127 and must be suffixed with the name of the specific layer (e.g.
4128 <filename>LAYERDEPENDS_mylayer</filename>).</para>
4129 </glossdef>
4130 </glossentry>
4131
4132 <glossentry id='var-LAYERDIR'><glossterm>LAYERDIR</glossterm>
4133 <glossdef>
4134 <para>When used inside the <filename>layer.conf</filename> configuration
4135 file, this variable provides the path of the current layer.
4136 This variable is not available outside of <filename>layer.conf</filename>
4137 and references are expanded immediately when parsing of the file completes.</para>
4138 </glossdef>
4139 </glossentry>
4140
4141 <glossentry id='var-LAYERVERSION'><glossterm>LAYERVERSION</glossterm>
4142 <glossdef>
4143 <para>Optionally specifies the version of a layer as a single number.
4144 You can use this within
4145 <link linkend='var-LAYERDEPENDS'><filename>LAYERDEPENDS</filename></link>
4146 for another layer in order to depend on a specific version
4147 of the layer.
4148 This variable is used in the <filename>conf/layer.conf</filename> file
4149 and must be suffixed with the name of the specific layer (e.g.
4150 <filename>LAYERVERSION_mylayer</filename>).</para>
4151 </glossdef>
4152 </glossentry>
4153
4154 <glossentry id='var-LEAD_SONAME'><glossterm>LEAD_SONAME</glossterm>
4155 <glossdef>
4156 <para>
4157 Specifies the lead (or primary) compiled library file
4158 (<filename>.so</filename>) that the
4159 <link linkend='ref-classes-debian'><filename>debian</filename></link>
4160 class applies its naming policy to given a recipe that
4161 packages multiple libraries.
4162 </para>
4163
4164 <para>
4165 This variable works in conjunction with the
4166 <filename>debian</filename> class.
4167 </para>
4168 </glossdef>
4169 </glossentry>
4170
4171 <glossentry id='var-LIC_FILES_CHKSUM'><glossterm>LIC_FILES_CHKSUM</glossterm>
4172 <glossdef>
4173 <para>Checksums of the license text in the recipe source code.</para>
4174 <para>This variable tracks changes in license text of the source
4175 code files.
4176 If the license text is changed, it will trigger a build
4177 failure, which gives the developer an opportunity to review any
4178 license change.</para>
4179 <para>
4180 This variable must be defined for all recipes (unless
4181 <link linkend='var-LICENSE'><filename>LICENSE</filename></link>
4182 is set to "CLOSED")</para>
4183 <para>For more information, see the
4184 <link linkend='usingpoky-configuring-LIC_FILES_CHKSUM'>
4185 Tracking License Changes</link> section</para>
4186 </glossdef>
4187 </glossentry>
4188
4189 <glossentry id='var-LICENSE'><glossterm>LICENSE</glossterm>
4190 <glossdef>
4191 <para>
4192 The list of source licenses for the recipe.
4193 Follow these rules:
4194 <itemizedlist>
4195 <listitem><para>Do not use spaces within individual
4196 license names.</para></listitem>
4197 <listitem><para>Separate license names using
4198 | (pipe) when there is a choice between licenses.
4199 </para></listitem>
4200 <listitem><para>Separate license names using
4201 &amp; (ampersand) when multiple licenses exist
4202 that cover different parts of the source.
4203 </para></listitem>
4204 <listitem><para>You can use spaces between license
4205 names.</para></listitem>
4206 <listitem><para>For standard licenses, use the names
4207 of the files in
4208 <filename>meta/files/common-licenses/</filename>
4209 or the
4210 <link linkend='var-SPDXLICENSEMAP'><filename>SPDXLICENSEMAP</filename></link>
4211 flag names defined in
4212 <filename>meta/conf/licenses.conf</filename>.
4213 </para></listitem>
4214 </itemizedlist>
4215 </para>
4216
4217 <para>
4218 Here are some examples:
4219 <literallayout class='monospaced'>
4220 LICENSE = "LGPLv2.1 | GPLv3"
4221 LICENSE = "MPL-1 &amp; LGPLv2.1"
4222 LICENSE = "GPLv2+"
4223 </literallayout>
4224 The first example is from the recipes for Qt, which the user
4225 may choose to distribute under either the LGPL version
4226 2.1 or GPL version 3.
4227 The second example is from Cairo where two licenses cover
4228 different parts of the source code.
4229 The final example is from <filename>sysstat</filename>,
4230 which presents a single license.
4231 </para>
4232
4233 <para>
4234 You can also specify licenses on a per-package basis to
4235 handle situations where components of the output have
4236 different licenses.
4237 For example, a piece of software whose code is
4238 licensed under GPLv2 but has accompanying documentation
4239 licensed under the GNU Free Documentation License 1.2 could
4240 be specified as follows:
4241 <literallayout class='monospaced'>
4242 LICENSE = "GFDL-1.2 &amp; GPLv2"
4243 LICENSE_${PN} = "GPLv2"
4244 LICENSE_${PN}-doc = "GFDL-1.2"
4245 </literallayout>
4246 </para>
4247 </glossdef>
4248 </glossentry>
4249
4250 <glossentry id='var-LICENSE_PATH'><glossterm>LICENSE_PATH</glossterm>
4251 <glossdef>
4252 <para>Path to additional licenses used during the build.
4253 By default, the OpenEmbedded build system uses <filename>COMMON_LICENSE_DIR</filename>
4254 to define the directory that holds common license text used during the build.
4255 The <filename>LICENSE_PATH</filename> variable allows you to extend that
4256 location to other areas that have additional licenses:
4257 <literallayout class='monospaced'>
4258 LICENSE_PATH += "/path/to/additional/common/licenses"
4259 </literallayout></para>
4260 </glossdef>
4261 </glossentry>
4262
4263 <glossentry id='var-LINUX_KERNEL_TYPE'><glossterm>LINUX_KERNEL_TYPE</glossterm>
4264 <glossdef>
4265 <para>
4266 Defines the kernel type to be used in assembling the
4267 configuration.
4268 The linux-yocto recipes define "standard", "tiny", and
4269 "preempt-rt" kernel types.
4270 See the
4271 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#kernel-types'>Kernel Types</ulink>"
4272 section in the Yocto Project Linux Kernel Development
4273 Manual for more information on kernel types.
4274 </para>
4275
4276 <para>
4277 If you do not specify a
4278 <filename>LINUX_KERNEL_TYPE</filename>, it defaults to
4279 "standard".
4280 Together with
4281 <link linkend='var-KMACHINE'><filename>KMACHINE</filename></link>,
4282 the <filename>LINUX_KERNEL_TYPE</filename> variable
4283 defines the search
4284 arguments used by the kernel tools to find the appropriate
4285 description within the kernel
4286 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
4287 with which to build out the sources and configuration.
4288 </para>
4289 </glossdef>
4290 </glossentry>
4291
4292 <glossentry id='var-LINUX_VERSION'><glossterm>LINUX_VERSION</glossterm>
4293 <glossdef>
4294 <para>The Linux version from <filename>kernel.org</filename>
4295 on which the Linux kernel image being built using the
4296 OpenEmbedded build system is based.
4297 You define this variable in the kernel recipe.
4298 For example, the <filename>linux-yocto-3.4.bb</filename>
4299 kernel recipe found in
4300 <filename>meta/recipes-kernel/linux</filename>
4301 defines the variables as follows:
4302 <literallayout class='monospaced'>
4303 LINUX_VERSION ?= "3.4.24"
4304 </literallayout>
4305 The <filename>LINUX_VERSION</filename> variable is used to
4306 define <link linkend='var-PV'><filename>PV</filename></link>
4307 for the recipe:
4308 <literallayout class='monospaced'>
4309 PV = "${LINUX_VERSION}+git${SRCPV}"
4310 </literallayout></para>
4311 </glossdef>
4312 </glossentry>
4313
4314 <glossentry id='var-LINUX_VERSION_EXTENSION'><glossterm>LINUX_VERSION_EXTENSION</glossterm>
4315 <glossdef>
4316 <para>A string extension compiled into the version
4317 string of the Linux kernel built with the OpenEmbedded
4318 build system.
4319 You define this variable in the kernel recipe.
4320 For example, the linux-yocto kernel recipes all define
4321 the variable as follows:
4322 <literallayout class='monospaced'>
4323 LINUX_VERSION_EXTENSION ?= "-yocto-${<link linkend='var-LINUX_KERNEL_TYPE'>LINUX_KERNEL_TYPE</link>}"
4324 </literallayout>
4325 Defining this variable essentially sets the
4326 Linux kernel configuration item
4327 <filename>CONFIG_LOCALVERSION</filename>, which is visible
4328 through the <filename>uname</filename> command.
4329 Here is an example that shows the extension assuming it
4330 was set as previously shown:
4331 <literallayout class='monospaced'>
4332 $ uname -r
4333 3.7.0-rc8-custom
4334 </literallayout>
4335 </para>
4336 </glossdef>
4337 </glossentry>
4338
4339 <glossentry id='var-LOG_DIR'><glossterm>LOG_DIR</glossterm>
4340 <glossdef>
4341 <para>
4342 Specifies the directory to which the OpenEmbedded build
4343 system writes overall log files.
4344 The default directory is <filename>${TMPDIR}/log</filename>.
4345 </para>
4346 <para>
4347 For the directory containing logs specific to each task,
4348 see the <link linkend='var-T'><filename>T</filename></link>
4349 variable.
4350 </para>
4351 </glossdef>
4352 </glossentry>
4353
4354 </glossdiv>
4355
4356 <glossdiv id='var-glossary-m'><title>M</title>
4357
4358 <glossentry id='var-MACHINE'><glossterm>MACHINE</glossterm>
4359 <glossdef>
4360 <para>
4361 Specifies the target device for which the image is built.
4362 You define <filename>MACHINE</filename> in the
4363 <filename>local.conf</filename> file found in the
4364 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
4365 By default, <filename>MACHINE</filename> is set to
4366 "qemux86", which is an x86-based architecture machine to
4367 be emulated using QEMU:
4368 <literallayout class='monospaced'>
4369 MACHINE ?= "qemux86"
4370 </literallayout>
4371 The variable corresponds to a machine configuration file of the
4372 same name, through which machine-specific configurations are set.
4373 Thus, when <filename>MACHINE</filename> is set to "qemux86" there
4374 exists the corresponding <filename>qemux86.conf</filename> machine
4375 configuration file, which can be found in the
4376 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
4377 in <filename>meta/conf/machine</filename>.
4378 </para>
4379
4380 <para>
4381 The list of machines supported by the Yocto Project as
4382 shipped include the following:
4383 <literallayout class='monospaced'>
4384 MACHINE ?= "qemuarm"
4385 MACHINE ?= "qemumips"
4386 MACHINE ?= "qemuppc"
4387 MACHINE ?= "qemux86"
4388 MACHINE ?= "qemux86-64"
4389 MACHINE ?= "genericx86"
4390 MACHINE ?= "genericx86-64"
4391 MACHINE ?= "beaglebone"
4392 MACHINE ?= "mpc8315e-rdb"
4393 MACHINE ?= "edgerouter"
4394 </literallayout>
4395 The last five are Yocto Project reference hardware boards, which
4396 are provided in the <filename>meta-yocto-bsp</filename> layer.
4397 <note>Adding additional Board Support Package (BSP) layers
4398 to your configuration adds new possible settings for
4399 <filename>MACHINE</filename>.
4400 </note>
4401 </para>
4402 </glossdef>
4403 </glossentry>
4404
4405 <glossentry id='var-MACHINE_ESSENTIAL_EXTRA_RDEPENDS'><glossterm>MACHINE_ESSENTIAL_EXTRA_RDEPENDS</glossterm>
4406 <glossdef>
4407 <para></para>
4408 <para>
4409 A list of required machine-specific packages to install as part of
4410 the image being built.
4411 The build process depends on these packages being present.
4412 Furthermore, because this is a "machine essential" variable, the list of
4413 packages are essential for the machine to boot.
4414 The impact of this variable affects images based on
4415 <filename>packagegroup-core-boot</filename>,
4416 including the <filename>core-image-minimal</filename> image.
4417 </para>
4418 <para>
4419 This variable is similar to the
4420 <filename><link linkend='var-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS'>MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS</link></filename>
4421 variable with the exception that the image being built has a build
4422 dependency on the variable's list of packages.
4423 In other words, the image will not build if a file in this list is not found.
4424 </para>
4425 <para>
4426 As an example, suppose the machine for which you are building requires
4427 <filename>example-init</filename> to be run during boot to initialize the hardware.
4428 In this case, you would use the following in the machine's
4429 <filename>.conf</filename> configuration file:
4430 <literallayout class='monospaced'>
4431 MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "example-init"
4432 </literallayout>
4433 </para>
4434 </glossdef>
4435 </glossentry>
4436
4437 <glossentry id='var-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS'><glossterm>MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS</glossterm>
4438 <glossdef>
4439 <para></para>
4440 <para>
4441 A list of recommended machine-specific packages to install as part of
4442 the image being built.
4443 The build process does not depend on these packages being present.
4444 However, because this is a "machine essential" variable, the list of
4445 packages are essential for the machine to boot.
4446 The impact of this variable affects images based on
4447 <filename>packagegroup-core-boot</filename>,
4448 including the <filename>core-image-minimal</filename> image.
4449 </para>
4450 <para>
4451 This variable is similar to the
4452 <filename><link linkend='var-MACHINE_ESSENTIAL_EXTRA_RDEPENDS'>MACHINE_ESSENTIAL_EXTRA_RDEPENDS</link></filename>
4453 variable with the exception that the image being built does not have a build
4454 dependency on the variable's list of packages.
4455 In other words, the image will still build if a package in this list is not found.
4456 Typically, this variable is used to handle essential kernel modules, whose
4457 functionality may be selected to be built into the kernel rather than as a module,
4458 in which case a package will not be produced.
4459 </para>
4460 <para>
4461 Consider an example where you have a custom kernel where a specific touchscreen
4462 driver is required for the machine to be usable.
4463 However, the driver can be built as a module or
4464 into the kernel depending on the kernel configuration.
4465 If the driver is built as a module, you want it to be installed.
4466 But, when the driver is built into the kernel, you still want the
4467 build to succeed.
4468 This variable sets up a "recommends" relationship so that in the latter case,
4469 the build will not fail due to the missing package.
4470 To accomplish this, assuming the package for the module was called
4471 <filename>kernel-module-ab123</filename>, you would use the
4472 following in the machine's <filename>.conf</filename> configuration
4473 file:
4474 <literallayout class='monospaced'>
4475 MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "kernel-module-ab123"
4476 </literallayout>
4477 </para>
4478 <para>
4479 Some examples of these machine essentials are flash, screen, keyboard, mouse,
4480 or touchscreen drivers (depending on the machine).
4481 </para>
4482 </glossdef>
4483 </glossentry>
4484
4485 <glossentry id='var-MACHINE_EXTRA_RDEPENDS'><glossterm>MACHINE_EXTRA_RDEPENDS</glossterm>
4486 <glossdef>
4487 <para>
4488 A list of machine-specific packages to install as part of the
4489 image being built that are not essential for the machine to boot.
4490 However, the build process for more fully-featured images
4491 depends on the packages being present.
4492 </para>
4493 <para>
4494 This variable affects all images based on
4495 <filename>packagegroup-base</filename>, which does not include the
4496 <filename>core-image-minimal</filename> or <filename>core-image-full-cmdline</filename>
4497 images.
4498 </para>
4499 <para>
4500 The variable is similar to the
4501 <filename><link linkend='var-MACHINE_EXTRA_RRECOMMENDS'>MACHINE_EXTRA_RRECOMMENDS</link></filename>
4502 variable with the exception that the image being built has a build
4503 dependency on the variable's list of packages.
4504 In other words, the image will not build if a file in this list is not found.
4505 </para>
4506 <para>
4507 An example is a machine that has WiFi capability but is not
4508 essential for the machine to boot the image.
4509 However, if you are building a more fully-featured image, you want to enable
4510 the WiFi.
4511 The package containing the firmware for the WiFi hardware is always
4512 expected to exist, so it is acceptable for the build process to depend upon
4513 finding the package.
4514 In this case, assuming the package for the firmware was called
4515 <filename>wifidriver-firmware</filename>, you would use the following in the
4516 <filename>.conf</filename> file for the machine:
4517 <literallayout class='monospaced'>
4518 MACHINE_EXTRA_RDEPENDS += "wifidriver-firmware"
4519 </literallayout>
4520 </para>
4521 </glossdef>
4522 </glossentry>
4523
4524 <glossentry id='var-MACHINE_EXTRA_RRECOMMENDS'><glossterm>MACHINE_EXTRA_RRECOMMENDS</glossterm>
4525 <glossdef>
4526 <para></para>
4527 <para>
4528 A list of machine-specific packages to install as part of the
4529 image being built that are not essential for booting the machine.
4530 The image being built has no build dependency on this list of packages.
4531 </para>
4532 <para>
4533 This variable affects only images based on
4534 <filename>packagegroup-base</filename>, which does not include the
4535 <filename>core-image-minimal</filename> or <filename>core-image-full-cmdline</filename>
4536 images.
4537 </para>
4538 <para>
4539 This variable is similar to the
4540 <filename><link linkend='var-MACHINE_EXTRA_RDEPENDS'>MACHINE_EXTRA_RDEPENDS</link></filename>
4541 variable with the exception that the image being built does not have a build
4542 dependency on the variable's list of packages.
4543 In other words, the image will build if a file in this list is not found.
4544 </para>
4545 <para>
4546 An example is a machine that has WiFi capability but is not essential
4547 For the machine to boot the image.
4548 However, if you are building a more fully-featured image, you want to enable
4549 WiFi.
4550 In this case, the package containing the WiFi kernel module will not be produced
4551 if the WiFi driver is built into the kernel, in which case you still want the
4552 build to succeed instead of failing as a result of the package not being found.
4553 To accomplish this, assuming the package for the module was called
4554 <filename>kernel-module-examplewifi</filename>, you would use the
4555 following in the <filename>.conf</filename> file for the machine:
4556 <literallayout class='monospaced'>
4557 MACHINE_EXTRA_RRECOMMENDS += "kernel-module-examplewifi"
4558 </literallayout>
4559 </para>
4560 </glossdef>
4561 </glossentry>
4562
4563 <glossentry id='var-MACHINE_FEATURES'><glossterm>MACHINE_FEATURES</glossterm>
4564 <glossdef>
4565 <para>
4566 Specifies the list of hardware features the
4567 <link linkend='var-MACHINE'><filename>MACHINE</filename></link> is capable
4568 of supporting.
4569 For related information on enabling features, see the
4570 <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>,
4571 <link linkend='var-COMBINED_FEATURES'><filename>COMBINED_FEATURES</filename></link>,
4572 and
4573 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
4574 variables.
4575 </para>
4576
4577 <para>
4578 For a list of hardware features supported by the Yocto
4579 Project as shipped, see the
4580 "<link linkend='ref-features-machine'>Machine Features</link>"
4581 section.
4582 </para>
4583 </glossdef>
4584 </glossentry>
4585
4586 <glossentry id='var-MACHINE_FEATURES_BACKFILL'><glossterm>MACHINE_FEATURES_BACKFILL</glossterm>
4587 <glossdef>
4588 <para>Features to be added to
4589 <filename><link linkend='var-MACHINE_FEATURES'>MACHINE_FEATURES</link></filename>
4590 if not also present in
4591 <filename><link linkend='var-MACHINE_FEATURES_BACKFILL_CONSIDERED'>MACHINE_FEATURES_BACKFILL_CONSIDERED</link></filename>.
4592 </para>
4593
4594 <para>
4595 This variable is set in the <filename>meta/conf/bitbake.conf</filename> file.
4596 It is not intended to be user-configurable.
4597 It is best to just reference the variable to see which machine features are
4598 being backfilled for all machine configurations.
4599 See the "<link linkend='ref-features-backfill'>Feature backfilling</link>" section for
4600 more information.
4601 </para>
4602 </glossdef>
4603 </glossentry>
4604
4605 <glossentry id='var-MACHINE_FEATURES_BACKFILL_CONSIDERED'><glossterm>MACHINE_FEATURES_BACKFILL_CONSIDERED</glossterm>
4606 <glossdef>
4607 <para>Features from
4608 <filename><link linkend='var-MACHINE_FEATURES_BACKFILL'>MACHINE_FEATURES_BACKFILL</link></filename>
4609 that should not be backfilled (i.e. added to
4610 <filename><link linkend='var-MACHINE_FEATURES'>MACHINE_FEATURES</link></filename>)
4611 during the build.
4612 See the "<link linkend='ref-features-backfill'>Feature backfilling</link>" section for
4613 more information.
4614 </para>
4615 </glossdef>
4616 </glossentry>
4617
4618 <glossentry id='var-MACHINEOVERRIDES'><glossterm>MACHINEOVERRIDES</glossterm>
4619 <glossdef>
4620 <para>
4621 Lists overrides specific to the current machine.
4622 By default, this list includes the value
4623 of <filename><link linkend='var-MACHINE'>MACHINE</link></filename>.
4624 You can extend the list to apply variable overrides for
4625 classes of machines.
4626 For example, all QEMU emulated machines (e.g. qemuarm,
4627 qemux86, and so forth) include a common file named
4628 <filename>meta/conf/machine/include/qemu.inc</filename>
4629 that prepends <filename>MACHINEOVERRIDES</filename> with
4630 the following variable override:
4631 <literallayout class='monospaced'>
4632 MACHINEOVERRIDES =. "qemuall:"
4633 </literallayout>
4634 Applying an override like <filename>qemuall</filename>
4635 affects all QEMU emulated machines elsewhere.
4636 Here is an example from the
4637 <filename>connman-conf</filename> recipe:
4638 <literallayout class='monospaced'>
4639 SRC_URI_append_qemuall = "file://wired.config \
4640 file://wired-setup \
4641 "
4642 </literallayout>
4643 </para>
4644 </glossdef>
4645 </glossentry>
4646
4647 <glossentry id='var-MAINTAINER'><glossterm>MAINTAINER</glossterm>
4648 <glossdef>
4649 <para>The email address of the distribution maintainer.</para>
4650 </glossdef>
4651 </glossentry>
4652
4653 <glossentry id='var-MIRRORS'><glossterm>MIRRORS</glossterm>
4654 <glossdef>
4655 <para>
4656 Specifies additional paths from which the OpenEmbedded
4657 build system gets source code.
4658 When the build system searches for source code, it first
4659 tries the local download directory.
4660 If that location fails, the build system tries locations
4661 defined by
4662 <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>,
4663 the upstream source, and then locations specified by
4664 <filename>MIRRORS</filename> in that order.
4665 </para>
4666
4667 <para>
4668 Assuming your distribution
4669 (<link linkend='var-DISTRO'><filename>DISTRO</filename></link>)
4670 is "poky", the default value for
4671 <filename>MIRRORS</filename> is defined in the
4672 <filename>conf/distro/poky.conf</filename> file in the
4673 <filename>meta-yocto</filename> Git repository.
4674 </para>
4675 </glossdef>
4676 </glossentry>
4677
4678 <glossentry id='var-MLPREFIX'><glossterm>MLPREFIX</glossterm>
4679 <glossdef>
4680 <para>
4681 Specifies a prefix has been added to
4682 <link linkend='var-PN'><filename>PN</filename></link> to create a special version
4683 of a recipe or package, such as a Multilib version.
4684 The variable is used in places where the prefix needs to be
4685 added to or removed from a the name (e.g. the
4686 <link linkend='var-BPN'><filename>BPN</filename></link> variable).
4687 <filename>MLPREFIX</filename> gets set when a prefix has been
4688 added to <filename>PN</filename>.
4689 </para>
4690 </glossdef>
4691 </glossentry>
4692
4693 <glossentry id='var-module_autoload'><glossterm>module_autoload</glossterm>
4694 <glossdef>
4695 <para>
4696 Lists kernel modules that need to be auto-loaded during
4697 boot.
4698 </para>
4699
4700 <para>
4701 You can use this variable anywhere that it can be
4702 recognized by the kernel recipe or out-of-tree kernel
4703 module recipe (e.g. a machine configuration file, a
4704 distribution configuration file, an append file for the
4705 recipe, or the recipe itself).
4706 </para>
4707
4708 <para>
4709 Specify it as follows:
4710 <literallayout class='monospaced'>
4711 module_autoload_&lt;modname&gt; = "modname1 modname2 modname3"
4712 </literallayout>
4713 You must use the kernel module name override.
4714 </para>
4715
4716 <para>
4717 Including <filename>module_autoload</filename> causes the
4718 OpenEmbedded build system to populate the
4719 <filename>/etc/modules-load.d/modname.conf</filename>
4720 file with the list of modules to be auto-loaded on boot.
4721 The modules appear one-per-line in the file.
4722 Here is an example of the most common use case:
4723 <literallayout class='monospaced'>
4724 module_autoload_modname = "modname"
4725 </literallayout>
4726 </para>
4727
4728 <para>
4729 For information on how to populate the
4730 <filename>modname.conf</filename> file with
4731 <filename>modprobe.d</filename> syntax lines, see the
4732 <link linkend='var-module_conf'><filename>module_conf</filename></link>
4733 variable.
4734 </para>
4735 </glossdef>
4736 </glossentry>
4737
4738 <glossentry id='var-module_conf'><glossterm>module_conf</glossterm>
4739 <glossdef>
4740 <para>
4741 Specifies <filename>modprobe.d</filename> syntax lines
4742 for inclusion in the
4743 <filename>/etc/modprobe.d/modname.conf</filename> file.
4744 </para>
4745
4746 <para>
4747 You can use this variable anywhere that it can be
4748 recognized by the kernel recipe or out-of-tree kernel
4749 module recipe (e.g. a machine configuration file, a
4750 distribution configuration file, an append file for the
4751 recipe, or the recipe itself).
4752 </para>
4753
4754 <para>
4755 Here is the general syntax:
4756 <literallayout class='monospaced'>
4757 module_conf_&lt;modname&gt; = "modprobe.d-syntax"
4758 </literallayout>
4759 You must use the kernel module name override.
4760 </para>
4761
4762 <para>
4763 Run <filename>man modprobe.d</filename> in the shell to
4764 find out more information on the exact syntax for lines
4765 you want to provide with <filename>module_conf</filename>.
4766 </para>
4767
4768 <para>
4769 Including <filename>module_conf</filename> causes the
4770 OpenEmbedded build system to populate the
4771 <filename>/etc/modprobe.d/modname.conf</filename>
4772 file with <filename>modprobe.d</filename> syntax lines.
4773 Here is an example:
4774 <literallayout class='monospaced'>
4775 module_conf_&lt;modname&gt; = "options modname arg1=val1 arg2=val2"
4776 </literallayout>
4777 </para>
4778
4779 <para>
4780 For information on how to specify kernel modules to
4781 auto-load on boot, see the
4782 <link linkend='var-module_autoload'><filename>module_autoload</filename></link>
4783 variable.
4784 </para>
4785 </glossdef>
4786 </glossentry>
4787
4788 <glossentry id='var-MODULE_IMAGE_BASE_NAME'><glossterm>MODULE_IMAGE_BASE_NAME</glossterm>
4789 <glossdef>
4790 <para>
4791 The base name of the kernel modules tarball.
4792 This variable is set in the
4793 <link linkend='ref-classes-kernel'>kernel</link> class
4794 as follows:
4795 <literallayout class='monospaced'>
4796 MODULE_IMAGE_BASE_NAME ?= "modules-${PKGE}-${PKGV}-${PKGR}-${MACHINE}-${DATETIME}"
4797 </literallayout>
4798 See the
4799 <link linkend='var-PKGE'><filename>PKGE</filename></link>,
4800 <link linkend='var-PKGV'><filename>PKGV</filename></link>,
4801 <link linkend='var-PKGR'><filename>PKGR</filename></link>,
4802 <link linkend='var-MACHINE'><filename>MACHINE</filename></link>,
4803 and
4804 <link linkend='var-DATETIME'><filename>DATETIME</filename></link>
4805 variables for additional information.
4806 </para>
4807 </glossdef>
4808 </glossentry>
4809
4810 <glossentry id='var-MODULE_TARBALL_DEPLOY'><glossterm>MODULE_TARBALL_DEPLOY</glossterm>
4811 <glossdef>
4812 <para>
4813 Controls creation of the <filename>modules-*.tgz</filename>
4814 file.
4815 Set this variable to "0" to disable creation of this
4816 file, which contains all of the kernel modules resulting
4817 from a kernel build.
4818 </para>
4819 </glossdef>
4820 </glossentry>
4821
4822 <glossentry id='var-MULTIMACH_TARGET_SYS'><glossterm>MULTIMACH_TARGET_SYS</glossterm>
4823 <glossdef>
4824 <para>
4825 Separates files for different machines such that you can build
4826 for multiple target machines using the same output directories.
4827 See the <link linkend='var-STAMP'><filename>STAMP</filename></link> variable
4828 for an example.
4829 </para>
4830 </glossdef>
4831 </glossentry>
4832
4833 </glossdiv>
4834
4835 <glossdiv id='var-glossary-n'><title>N</title>
4836
4837 <glossentry id='var-NATIVELSBSTRING'><glossterm>NATIVELSBSTRING</glossterm>
4838 <glossdef>
4839 <para>
4840 A string identifying the host distribution.
4841 Strings consist of the host distributor ID
4842 followed by the release, as reported by the
4843 <filename>lsb_release</filename> tool
4844 or as read from <filename>/etc/lsb-release</filename>.
4845 For example, when running a build on Ubuntu 12.10, the value
4846 is "Ubuntu-12.10".
4847 If this information is unable to be determined, the value
4848 resolves to "Unknown".
4849 </para>
4850 <para>
4851 This variable is used by default to isolate native shared
4852 state packages for different distributions (e.g. to avoid
4853 problems with <filename>glibc</filename> version
4854 incompatibilities).
4855 Additionally, the variable is checked against
4856 <link linkend='var-SANITY_TESTED_DISTROS'><filename>SANITY_TESTED_DISTROS</filename></link>
4857 if that variable is set.
4858 </para>
4859 </glossdef>
4860 </glossentry>
4861
4862 <glossentry id='var-NO_RECOMMENDATIONS'><glossterm>NO_RECOMMENDATIONS</glossterm>
4863 <glossdef>
4864 <para>
4865 Prevents installation of all "recommended-only" packages.
4866 Recommended-only packages are packages installed only
4867 through the
4868 <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>
4869 variable).
4870 Setting the <filename>NO_RECOMMENDATIONS</filename> variable
4871 to "1" turns this feature on:
4872 <literallayout class='monospaced'>
4873 NO_RECOMMENDATIONS = "1"
4874 </literallayout>
4875 You can set this variable globally in your
4876 <filename>local.conf</filename> file or you can attach it to
4877 a specific image recipe by using the recipe name override:
4878 <literallayout class='monospaced'>
4879 NO_RECOMMENDATIONS_pn-&lt;target_image&gt; = "&lt;package_name&gt;"
4880 </literallayout>
4881 </para>
4882
4883 <para>
4884 It is important to realize that if you choose to not install
4885 packages using this variable and some other packages are
4886 dependent on them (i.e. listed in a recipe's
4887 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
4888 variable), the OpenEmbedded build system ignores your
4889 request and will install the packages to avoid dependency
4890 errors.
4891 <note>
4892 Some recommended packages might be required for certain
4893 system functionality, such as kernel modules.
4894 It is up to you to add packages with the
4895 <link linkend='var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></link>
4896 variable.
4897 </note>
4898 </para>
4899
4900 <para>
4901 Support for this variable exists only when using the
4902 IPK and RPM packaging backend.
4903 Support does not exist for DEB.
4904 </para>
4905
4906 <para>
4907 See the
4908 <link linkend='var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></link>
4909 and the
4910 <link linkend='var-PACKAGE_EXCLUDE'><filename>PACKAGE_EXCLUDE</filename></link>
4911 variables for related information.
4912 </para>
4913 </glossdef>
4914 </glossentry>
4915
4916 <glossentry id='var-NOHDD'><glossterm>NOHDD</glossterm>
4917 <glossdef>
4918 <para>
4919 Causes the OpenEmbedded build system to skip building the
4920 <filename>.hddimg</filename> image.
4921 The <filename>NOHDD</filename> variable is used with the
4922 <link linkend='ref-classes-bootimg'><filename>buildimg</filename></link>
4923 class.
4924 Set the variable to "1" to prevent the
4925 <filename>.hddimg</filename> image from being built.
4926 </para>
4927 </glossdef>
4928 </glossentry>
4929
4930 <glossentry id='var-NOISO'><glossterm>NOISO</glossterm>
4931 <glossdef>
4932 <para>
4933 Causes the OpenEmbedded build system to skip building the
4934 ISO image.
4935 The <filename>NOISO</filename> variable is used with the
4936 <link linkend='ref-classes-bootimg'><filename>buildimg</filename></link>
4937 class.
4938 Set the variable to "1" to prevent the ISO image from
4939 being built.
4940 To enable building an ISO image, set the variable to "0".
4941 </para>
4942 </glossdef>
4943 </glossentry>
4944
4945 </glossdiv>
4946
4947 <glossdiv id='var-glossary-o'><title>O</title>
4948
4949 <glossentry id='var-OE_BINCONFIG_EXTRA_MANGLE'><glossterm>OE_BINCONFIG_EXTRA_MANGLE</glossterm>
4950 <glossdef>
4951 <para>
4952 When a recipe inherits the
4953 <filename>binconfig.bbclass</filename> class, this variable
4954 specifies additional arguments passed to the "sed" command.
4955 The sed command alters any paths in configuration scripts
4956 that have been set up during compilation.
4957 Inheriting this class results in all paths in these scripts
4958 being changed to point into the
4959 <filename>sysroots/</filename> directory so that all builds
4960 that use the script will use the correct directories
4961 for the cross compiling layout.
4962 </para>
4963
4964 <para>
4965 See the <filename>meta/classes/binconfig.bbclass</filename>
4966 in the
4967 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
4968 for details on how this class applies these additional
4969 sed command arguments.
4970 For general information on the
4971 <filename>binconfig.bbclass</filename> class, see the
4972 "<link linkend='ref-classes-binconfig'>Binary Configuration Scripts - <filename>binconfig.bbclass</filename></link>"
4973 section.
4974 </para>
4975 </glossdef>
4976 </glossentry>
4977
4978 <glossentry id='var-OE_IMPORTS'><glossterm>OE_IMPORTS</glossterm>
4979 <glossdef>
4980 <para>
4981 An internal variable used to tell the OpenEmbedded build
4982 system what Python modules to import for every Python
4983 function run by the system.
4984 </para>
4985
4986 <note>
4987 Do not set this variable.
4988 It is for internal use only.
4989 </note>
4990 </glossdef>
4991 </glossentry>
4992
4993 <glossentry id='var-OE_TERMINAL'><glossterm>OE_TERMINAL</glossterm>
4994 <glossdef>
4995 <para>
4996 Controls how the OpenEmbedded build system spawns
4997 interactive terminals on the host development system
4998 (e.g. using the BitBake command with the
4999 <filename>-c devshell</filename> command-line option).
5000 For more information, see the
5001 "<ulink url='&YOCTO_DOCS_DEV_URL;#platdev-appdev-devshell'>Using a Development Shell</ulink>" section
5002 in the Yocto Project Development Manual.
5003 </para>
5004
5005 <para>
5006 You can use the following values for the
5007 <filename>OE_TERMINAL</filename> variable:
5008 <literallayout class='monospaced'>
5009 auto
5010 gnome
5011 xfce
5012 rxvt
5013 screen
5014 konsole
5015 none
5016 </literallayout>
5017 <note>Konsole support only works for KDE 3.x.
5018 Also, "auto" is the default behavior for
5019 <filename>OE_TERMINAL</filename></note>
5020 </para>
5021 </glossdef>
5022 </glossentry>
5023
5024 <glossentry id='var-OEROOT'><glossterm>OEROOT</glossterm>
5025 <glossdef>
5026 <para>
5027 The directory from which the top-level build environment
5028 setup script is sourced.
5029 The Yocto Project makes two top-level build environment
5030 setup scripts available:
5031 <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
5032 and
5033 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>.
5034 When you run one of these scripts, the
5035 <filename>OEROOT</filename> variable resolves to the
5036 directory that contains the script.
5037 </para>
5038
5039 <para>
5040 For additional information on how this variable is used,
5041 see the initialization scripts.
5042 </para>
5043 </glossdef>
5044 </glossentry>
5045
5046 <glossentry id='var-OLDEST_KERNEL'><glossterm>OLDEST_KERNEL</glossterm>
5047 <glossdef>
5048 <para>
5049 Declares the oldest version of the Linux kernel that the
5050 produced binaries must support.
5051 This variable is passed into the build of the Embedded
5052 GNU C Library (<filename>eglibc</filename>).
5053 </para>
5054
5055 <para>
5056 The default for this variable comes from the
5057 <filename>meta/conf/bitbake.conf</filename> configuration
5058 file.
5059 You can override this default by setting the variable
5060 in a custom distribution configuration file.
5061 </para>
5062 </glossdef>
5063 </glossentry>
5064
5065 <glossentry id='var-OVERRIDES'><glossterm>OVERRIDES</glossterm>
5066 <glossdef>
5067 <para>
5068 BitBake uses <filename>OVERRIDES</filename> to control
5069 what variables are overridden after BitBake parses
5070 recipes and configuration files.
5071 You can find more information on how overrides are handled
5072 in the BitBake Manual that is located at
5073 <filename>bitbake/doc/manual</filename> in the
5074 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
5075 </para>
5076 </glossdef>
5077 </glossentry>
5078 </glossdiv>
5079
5080 <glossdiv id='var-glossary-p'><title>P</title>
5081
5082 <glossentry id='var-P'><glossterm>P</glossterm>
5083 <glossdef>
5084 <para>The recipe name and version.
5085 <filename>P</filename> is comprised of the following:
5086 <literallayout class='monospaced'>
5087 ${PN}-${PV}
5088 </literallayout></para>
5089 </glossdef>
5090 </glossentry>
5091
5092 <glossentry id='var-PACKAGE_ARCH'><glossterm>PACKAGE_ARCH</glossterm>
5093 <glossdef>
5094 <para>The architecture of the resulting package or packages.</para>
5095 </glossdef>
5096 </glossentry>
5097
5098 <glossentry id='var-PACKAGE_BEFORE_PN'><glossterm>PACKAGE_BEFORE_PN</glossterm>
5099 <glossdef>
5100 <para>Enables easily adding packages to
5101 <filename><link linkend='var-PACKAGES'>PACKAGES</link></filename>
5102 before <filename>${<link linkend='var-PN'>PN</link>}</filename>
5103 so that those added packages can pick up files that would normally be
5104 included in the default package.</para>
5105 </glossdef>
5106 </glossentry>
5107
5108 <glossentry id='var-PACKAGE_CLASSES'><glossterm>PACKAGE_CLASSES</glossterm>
5109 <glossdef>
5110 <para>
5111 This variable, which is set in the
5112 <filename>local.conf</filename> configuration file found in
5113 the <filename>conf</filename> folder of the
5114 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>,
5115 specifies the package manager the OpenEmbedded build system
5116 uses when packaging data.
5117 </para>
5118
5119 <para>
5120 You can provide one or more of the following arguments for
5121 the variable:
5122 <literallayout class='monospaced'>
5123 PACKAGE_CLASSES ?= "package_rpm package_deb package_ipk package_tar"
5124 </literallayout>
5125 The build system uses only the first argument in the list
5126 as the package manager when creating your image or SDK.
5127 However, packages will be created using any additional
5128 packaging classes you specify.
5129 For example, if you use the following in your
5130 <filename>local.conf</filename> file:
5131 <literallayout class='monospaced'>
5132 PACKAGE_CLASSES ?= "package_ipk package_tar"
5133 </literallayout>
5134 The OpenEmbedded build system uses the IPK package manager
5135 to create your image or SDK as well as generating
5136 TAR packages.
5137 </para>
5138
5139 <para>
5140 You cannot specify the
5141 <link linkend='ref-classes-package_tar'><filename>package_tar</filename></link>
5142 class first in the list.
5143 Files using the <filename>.tar</filename> format cannot
5144 be used as a substitute packaging format
5145 for DEB, RPM, and IPK formatted files for your image or SDK.
5146 </para>
5147
5148 <para>
5149 For information on packaging and build performance effects
5150 as a result of the package manager in use, see the
5151 "<link linkend='ref-classes-package'><filename>package.bbclass</filename></link>"
5152 section.
5153 </para>
5154 </glossdef>
5155 </glossentry>
5156
5157 <glossentry id='var-PACKAGE_EXCLUDE'><glossterm>PACKAGE_EXCLUDE</glossterm>
5158 <glossdef>
5159 <para>
5160 Lists packages that should not be installed into an image.
5161 For example:
5162 <literallayout class='monospaced'>
5163 PACKAGE_EXCLUDE = "&lt;package_name&gt; &lt;package_name&gt; &lt;package_name&gt; ..."
5164 </literallayout>
5165 You can set this variable globally in your
5166 <filename>local.conf</filename> file or you can attach it to
5167 a specific image recipe by using the recipe name override:
5168 <literallayout class='monospaced'>
5169 PACKAGE_EXCLUDE_pn-&lt;target_image&gt; = "&lt;package_name&gt;"
5170 </literallayout>
5171 </para>
5172
5173 <para>
5174 If you choose to not install
5175 a package using this variable and some other package is
5176 dependent on it (i.e. listed in a recipe's
5177 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
5178 variable), the OpenEmbedded build system generates a fatal
5179 installation error.
5180 Because the build system halts the process with a fatal
5181 error, you can use the variable with an iterative
5182 development process to remove specific components from a
5183 system.
5184 </para>
5185
5186 <para>
5187 Support for this variable exists only when using the
5188 IPK and RPM packaging backend.
5189 Support does not exist for DEB.
5190 </para>
5191
5192 <para>
5193 See the
5194 <link linkend='var-NO_RECOMMENDATIONS'><filename>NO_RECOMMENDATIONS</filename></link>
5195 and the
5196 <link linkend='var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></link>
5197 variables for related information.
5198 </para>
5199 </glossdef>
5200 </glossentry>
5201
5202 <glossentry id='var-PACKAGE_EXTRA_ARCHS'><glossterm>PACKAGE_EXTRA_ARCHS</glossterm>
5203 <glossdef>
5204 <para>Specifies the list of architectures compatible with the device CPU.
5205 This variable is useful when you build for several different devices that use
5206 miscellaneous processors such as XScale and ARM926-EJS).</para>
5207 </glossdef>
5208 </glossentry>
5209
5210 <glossentry id='var-PACKAGE_GROUP'><glossterm>PACKAGE_GROUP</glossterm>
5211 <glossdef>
5212
5213 <para>
5214 The <filename>PACKAGE_GROUP</filename> variable has been
5215 renamed to
5216 <link linkend='var-FEATURE_PACKAGES'><filename>FEATURE_PACKAGES</filename></link>.
5217 See the variable description for
5218 <filename>FEATURE_PACKAGES</filename> for information.
5219 </para>
5220
5221 <para>
5222 If if you use the <filename>PACKAGE_GROUP</filename>
5223 variable, the OpenEmbedded build system issues a warning
5224 message.
5225 </para>
5226 </glossdef>
5227 </glossentry>
5228
5229 <glossentry id='var-PACKAGE_INSTALL'><glossterm>PACKAGE_INSTALL</glossterm>
5230 <glossdef>
5231 <para>
5232 The final list of packages passed to the package manager
5233 for installation into the image.
5234 </para>
5235
5236 <para>
5237 Because the package manager controls actual installation
5238 of all packages, the list of packages passed using
5239 <filename>PACKAGE_INSTALL</filename> is not the final list
5240 of packages that are actually installed.
5241 This variable is internal to the image construction
5242 code.
5243 Consequently, in general, you should use the
5244 <link linkend='var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></link>
5245 variable to specify packages for installation.
5246 The exception to this is when working with
5247 the
5248 <link linkend='images-core-image-minimal-initramfs'><filename>core-image-minimal-initramfs</filename></link>
5249 image.
5250 When working with an initial RAM disk (initramfs)
5251 image, use the <filename>PACKAGE_INSTALL</filename>
5252 variable.
5253 </para>
5254 </glossdef>
5255 </glossentry>
5256
5257 <glossentry id='var-PACKAGECONFIG'><glossterm>PACKAGECONFIG</glossterm>
5258 <glossdef>
5259 <para>
5260 This variable provides a means of enabling or disabling
5261 features of a recipe on a per-recipe basis.
5262 <filename>PACKAGECONFIG</filename> blocks are defined
5263 in recipes when you specify features and then arguments
5264 that define feature behaviors.
5265 Here is the basic block structure:
5266 <literallayout class='monospaced'>
5267 PACKAGECONFIG ??= "f1 f2 f3 ..."
5268 PACKAGECONFIG[f1] = "--with-f1,--without-f1,build-deps-f1,rt-deps-f1"
5269 PACKAGECONFIG[f2] = "--with-f2,--without-f2,build-deps-f2,rt-deps-f2"
5270 PACKAGECONFIG[f3] = "--with-f3,--without-f3,build-deps-f3,rt-deps-f3"
5271 </literallayout>
5272 The <filename>PACKAGECONFIG</filename>
5273 variable itself specifies a space-separated list of the
5274 features to enable.
5275 Following the features, you can determine the behavior of
5276 each feature by providing up to four order-dependent
5277 arguments, which are separated by commas.
5278 You can omit any argument you like but must retain the
5279 separating commas.
5280 The order is important and specifies the following:
5281 <orderedlist>
5282 <listitem><para>Extra arguments
5283 that should be added to the configure script
5284 argument list
5285 (<link linkend='var-EXTRA_OECONF'><filename>EXTRA_OECONF</filename></link>)
5286 if the feature is enabled.</para></listitem>
5287 <listitem><para>Extra arguments
5288 that should be added to <filename>EXTRA_OECONF</filename>
5289 if the feature is disabled.
5290 </para></listitem>
5291 <listitem><para>Additional build dependencies
5292 (<link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>)
5293 that should be added if the feature is enabled.
5294 </para></listitem>
5295 <listitem><para>Additional runtime dependencies
5296 (<link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>)
5297 that should be added if the feature is enabled.
5298 </para></listitem>
5299 </orderedlist>
5300 </para>
5301
5302 <para>
5303 Consider the following
5304 <filename>PACKAGECONFIG</filename> block taken from the
5305 <filename>librsvg</filename> recipe.
5306 In this example the feature is <filename>croco</filename>,
5307 which has three arguments that determine the feature's
5308 behavior.
5309 <literallayout class='monospaced'>
5310 PACKAGECONFIG ??= "croco"
5311 PACKAGECONFIG[croco] = "--with-croco,--without-croco,libcroco"
5312 </literallayout>
5313 The <filename>--with-croco</filename> and
5314 <filename>libcroco</filename> arguments apply only if
5315 the feature is enabled.
5316 In this case, <filename>--with-croco</filename> is
5317 added to the configure script argument list and
5318 <filename>libcroco</filename> is added to
5319 <filename><link linkend='var-DEPENDS'>DEPENDS</link></filename>.
5320 On the other hand, if the feature is disabled say through
5321 a <filename>.bbappend</filename> file in another layer, then
5322 the second argument <filename>--without-croco</filename> is
5323 added to the configure script rather than
5324 <filename>--with-croco</filename>.
5325 </para>
5326
5327 <para>
5328 The basic <filename>PACKAGECONFIG</filename> structure
5329 previously described holds true regardless of whether you
5330 are creating a block or changing a block.
5331 When creating a block, use the structure inside your
5332 recipe.
5333 </para>
5334
5335 <para>
5336 If you want to change an existing
5337 <filename>PACKAGECONFIG</filename> block, you can do so
5338 one of two ways:
5339 <itemizedlist>
5340 <listitem><para><emphasis>Append file:</emphasis>
5341 Create an append file named
5342 <filename>&lt;recipename&gt;.bbappend</filename> in your
5343 layer and override the value of
5344 <filename>PACKAGECONFIG</filename>.
5345 You can either completely override the variable:
5346 <literallayout class='monospaced'>
5347 PACKAGECONFIG="f4 f5"
5348 </literallayout>
5349 Or, you can just append the variable:
5350 <literallayout class='monospaced'>
5351 PACKAGECONFIG_append = " f4"
5352 </literallayout></para></listitem>
5353 <listitem><para><emphasis>Configuration file:</emphasis>
5354 This method is identical to changing the block
5355 through an append file except you edit your
5356 <filename>local.conf</filename> or
5357 <filename>&lt;mydistro&gt;.conf</filename> file.
5358 As with append files previously described,
5359 you can either completely override the variable:
5360 <literallayout class='monospaced'>
5361 PACKAGECONFIG_pn-&lt;recipename&gt;="f4 f5"
5362 </literallayout>
5363 Or, you can just amend the variable:
5364 <literallayout class='monospaced'>
5365 PACKAGECONFIG_append_pn-&lt;recipename&gt; = " f4"
5366 </literallayout></para></listitem>
5367 </itemizedlist>
5368 </para>
5369 </glossdef>
5370 </glossentry>
5371
5372 <glossentry id='var-PACKAGES'><glossterm>PACKAGES</glossterm>
5373 <glossdef>
5374 <para>The list of packages to be created from the recipe.
5375 The default value is the following:
5376 <literallayout class='monospaced'>
5377 ${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN}
5378 </literallayout></para>
5379 </glossdef>
5380 </glossentry>
5381
5382 <glossentry id='var-PACKAGES_DYNAMIC'><glossterm>PACKAGES_DYNAMIC</glossterm>
5383 <glossdef>
5384 <para>
5385 A promise that your recipe satisfies runtime dependencies
5386 for optional modules that are found in other recipes.
5387 <filename>PACKAGES_DYNAMIC</filename>
5388 does not actually satisfy the dependencies, it only states that
5389 they should be satisfied.
5390 For example, if a hard, runtime dependency
5391 (<link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>)
5392 of another package is satisfied
5393 at build time through the <filename>PACKAGES_DYNAMIC</filename>
5394 variable, but a package with the module name is never actually
5395 produced, then the other package will be broken.
5396 Thus, if you attempt to include that package in an image,
5397 you will get a dependency failure from the packaging system
5398 during <filename>do_rootfs</filename>.
5399 </para>
5400 <para>
5401 Typically, if there is a chance that such a situation can
5402 occur and the package that is not created is valid
5403 without the dependency being satisfied, then you should use
5404 <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>
5405 (a soft runtime dependency) instead of
5406 <filename>RDEPENDS</filename>.
5407 </para>
5408
5409 <para>
5410 For an example of how to use the <filename>PACKAGES_DYNAMIC</filename>
5411 variable when you are splitting packages, see the
5412 "<ulink url='&YOCTO_DOCS_DEV_URL;#handling-optional-module-packaging'>Handling Optional Module Packaging</ulink>" section
5413 in the Yocto Project Development Manual.
5414 </para>
5415 </glossdef>
5416 </glossentry>
5417
5418 <glossentry id='var-PARALLEL_MAKE'><glossterm>PARALLEL_MAKE</glossterm>
5419 <glossdef>
5420 <para>
5421 Extra options passed to the <filename>make</filename>
5422 command during the <filename>do_compile</filename> task
5423 in order to specify parallel compilation on the local
5424 build host.
5425 This variable is usually in the form "-j &lt;x&gt;",
5426 where x represents the maximum number of parallel threads
5427 <filename>make</filename> can run.
5428 </para>
5429
5430 <para>
5431 If your development host supports multiple cores, a good
5432 rule of thumb is to set this variable to twice the number
5433 of cores on the host.
5434 If you do not set <filename>PARALLEL_MAKE</filename>, it
5435 defaults to the number of cores your build system has.
5436 <note>
5437 Individual recipes might clear out this variable if
5438 the software being built has problems running its
5439 <filename>make</filename> process in parallel.
5440 </note>
5441 </para>
5442 </glossdef>
5443 </glossentry>
5444
5445 <glossentry id='var-PARALLEL_MAKEINST'><glossterm>PARALLEL_MAKEINST</glossterm>
5446 <glossdef>
5447 <para>
5448 Extra options passed to the
5449 <filename>make install</filename> command during the
5450 <filename>do_install</filename> task in order to specify
5451 parallel installation.
5452 This variable defaults to the value of
5453 <link linkend='var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></link>.
5454 <note>
5455 Individual recipes might clear out this variable if
5456 the software being built has problems running its
5457 <filename>make install</filename> process in parallel.
5458 </note>
5459 </para>
5460 </glossdef>
5461 </glossentry>
5462
5463 <glossentry id='var-PATCHRESOLVE'><glossterm>PATCHRESOLVE</glossterm>
5464 <glossdef>
5465 <para>
5466 Determines the action to take when a patch fails.
5467 You can set this variable to one of two values: "noop" and
5468 "user".
5469 </para>
5470
5471 <para>
5472 The default value of "noop" causes the build to simply fail
5473 when the OpenEmbedded build system cannot successfully
5474 apply a patch.
5475 Setting the value to "user" causes the build system to
5476 launch a shell and places you in the right location so that
5477 you can manually resolve the conflicts.
5478 </para>
5479
5480 <para>
5481 Set this variable in your
5482 <filename>local.conf</filename> file.
5483 </para>
5484 </glossdef>
5485 </glossentry>
5486
5487 <glossentry id='var-PATCHTOOL'><glossterm>PATCHTOOL</glossterm>
5488 <glossdef>
5489 <para>
5490 Specifies the utility used to apply patches for a recipe
5491 during <filename>do_patch</filename>.
5492 You can specify one of three utilities: "patch", "quilt", or
5493 "git".
5494 The default utility used is "quilt" except for the
5495 quilt-native recipe itself.
5496 Because the quilt tool is not available at the
5497 time quilt-native is being patched, it uses "patch".
5498 </para>
5499
5500 <para>
5501 If you wish to use an alternative patching tool, set the
5502 variable in the recipe using one of the following:
5503 <literallayout class='monospaced'>
5504 PATCHTOOL = "patch"
5505 PATCHTOOL = "quilt"
5506 PATCHTOOL = "git"
5507 </literallayout>
5508 </para>
5509 </glossdef>
5510 </glossentry>
5511
5512 <glossentry id='var-PE'><glossterm>PE</glossterm>
5513 <glossdef>
5514 <para>
5515 The epoch of the recipe.
5516 By default, this variable is unset.
5517 The variable is used to make upgrades possible when the
5518 versioning scheme changes in some backwards incompatible
5519 way.
5520 </para>
5521 </glossdef>
5522 </glossentry>
5523
5524 <glossentry id='var-PF'><glossterm>PF</glossterm>
5525 <glossdef>
5526 <para>Specifies the recipe or package name and includes all version and revision
5527 numbers (i.e. <filename>eglibc-2.13-r20+svnr15508/</filename> and
5528 <filename>bash-4.2-r1/</filename>).
5529 This variable is comprised of the following:
5530 <literallayout class='monospaced'>
5531 ${<link linkend='var-PN'>PN</link>}-${<link linkend='var-EXTENDPE'>EXTENDPE</link>}${<link linkend='var-PV'>PV</link>}-${<link linkend='var-PR'>PR</link>}
5532 </literallayout></para>
5533 </glossdef>
5534 </glossentry>
5535
5536 <glossentry id='var-PIXBUF_PACKAGES'><glossterm>PIXBUF_PACKAGES</glossterm>
5537 <glossdef>
5538 <para>
5539 When a recipe inherits the
5540 <link linkend='ref-classes-pixbufcache'><filename>pixbufcache</filename></link>
5541 class, this variable identifies packages that contain
5542 the pixbuf loaders used with
5543 <filename>gdk-pixbuf</filename>.
5544 By default, the <filename>pixbufcache</filename> class
5545 assumes that the loaders are in the recipe's main package
5546 (i.e. <filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}</filename>).
5547 Use this variable if the loaders you need are in a package
5548 other than that main package.
5549 </para>
5550 </glossdef>
5551 </glossentry>
5552
5553 <glossentry id='var-PKG'><glossterm>PKG</glossterm>
5554 <glossdef>
5555 <para>
5556 The name of the resulting package created by the
5557 OpenEmbedded build system.
5558 <note>
5559 When using the <filename>PKG</filename> variable, you
5560 must use a package name override.
5561 </note>
5562 For example, when the
5563 <link linkend='ref-classes-debian'><filename>debian</filename></link>
5564 class renames the output package, it does so by setting
5565 <filename>PKG_&lt;packagename&gt;</filename>.
5566 </para>
5567 </glossdef>
5568 </glossentry>
5569
5570 <glossentry id='var-PKGD'><glossterm>PKGD</glossterm>
5571 <glossdef>
5572 <para>
5573 Points to the destination directory for files to be
5574 packaged before they are split into individual packages.
5575 This directory defaults to the following:
5576 <literallayout class='monospaced'>
5577 ${WORKDIR}/package
5578 </literallayout>
5579 Do not change this default.
5580 </para>
5581 </glossdef>
5582 </glossentry>
5583
5584 <glossentry id='var-PKGDATA_DIR'><glossterm>PKGDATA_DIR</glossterm>
5585 <glossdef>
5586 <para>
5587 Points to a shared, global-state directory that holds data
5588 generated during the packaging process.
5589 During the packaging process, the
5590 <filename>do_packagedata</filename> task packages
5591 data for each recipe and installs it into this temporary,
5592 shared area.
5593 This directory defaults to the following:
5594 <literallayout class='monospaced'>
5595 ${STAGING_DIR_HOST}/pkgdata
5596 </literallayout>
5597 Do not change this default.
5598 </para>
5599 </glossdef>
5600 </glossentry>
5601
5602 <glossentry id='var-PKGDEST'><glossterm>PKGDEST</glossterm>
5603 <glossdef>
5604 <para>
5605 Points to the parent directory for files to be packaged
5606 after they have been split into individual packages.
5607 This directory defaults to the following:
5608 <literallayout class='monospaced'>
5609 ${WORKDIR}/packages-split
5610 </literallayout>
5611 Under this directory, the build system creates
5612 directories for each package specified in
5613 <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>.
5614 Do not change this default.
5615 </para>
5616 </glossdef>
5617 </glossentry>
5618
5619 <glossentry id='var-PKGDESTWORK'><glossterm>PKGDESTWORK</glossterm>
5620 <glossdef>
5621 <para>
5622 Points to a temporary work area used by the
5623 <filename>do_package</filename> task to write output
5624 from the <filename>do_packagedata</filename> task.
5625 The <filename>PKGDESTWORK</filename> location defaults to
5626 the following:
5627 <literallayout class='monospaced'>
5628 ${WORKDIR}/pkgdata
5629 </literallayout>
5630 The <filename>do_packagedata</filename> task then packages
5631 the data in the temporary work area and installs it into a
5632 shared directory pointed to by
5633 <link linkend='var-PKGDATA_DIR'><filename>PKGDATA_DIR</filename></link>.
5634 </para>
5635
5636 <para>
5637 Do not change this default.
5638 </para>
5639 </glossdef>
5640 </glossentry>
5641
5642 <glossentry id='var-PKGE'><glossterm>PKGE</glossterm>
5643 <glossdef>
5644 <para>
5645 The epoch of the output package built by the
5646 OpenEmbedded build system.
5647 By default, <filename>PKGE</filename> is set to
5648 <link linkend='var-PE'><filename>PE</filename></link>.
5649 </para>
5650 </glossdef>
5651 </glossentry>
5652
5653 <glossentry id='var-PKGR'><glossterm>PKGR</glossterm>
5654 <glossdef>
5655 <para>
5656 The revision of the output package built by the
5657 OpenEmbedded build system.
5658 By default, <filename>PKGR</filename> is set to
5659 <link linkend='var-PR'><filename>PR</filename></link>.
5660 </para>
5661 </glossdef>
5662 </glossentry>
5663
5664 <glossentry id='var-PKGV'><glossterm>PKGV</glossterm>
5665 <glossdef>
5666 <para>
5667 The version of the output package built by the
5668 OpenEmbedded build system.
5669 By default, <filename>PKGV</filename> is set to
5670 <link linkend='var-PV'><filename>PV</filename></link>.
5671 </para>
5672 </glossdef>
5673 </glossentry>
5674
5675 <glossentry id='var-PN'><glossterm>PN</glossterm>
5676 <glossdef>
5677 <para>This variable can have two separate functions depending on the context: a recipe
5678 name or a resulting package name.</para>
5679 <para><filename>PN</filename> refers to a recipe name in the context of a file used
5680 by the OpenEmbedded build system as input to create a package.
5681 The name is normally extracted from the recipe file name.
5682 For example, if the recipe is named
5683 <filename>expat_2.0.1.bb</filename>, then the default value of <filename>PN</filename>
5684 will be "expat".</para>
5685 <para>
5686 The variable refers to a package name in the context of a file created or produced by the
5687 OpenEmbedded build system.</para>
5688 <para>If applicable, the <filename>PN</filename> variable also contains any special
5689 suffix or prefix.
5690 For example, using <filename>bash</filename> to build packages for the native
5691 machine, <filename>PN</filename> is <filename>bash-native</filename>.
5692 Using <filename>bash</filename> to build packages for the target and for Multilib,
5693 <filename>PN</filename> would be <filename>bash</filename> and
5694 <filename>lib64-bash</filename>, respectively.
5695 </para>
5696 </glossdef>
5697 </glossentry>
5698
5699 <glossentry id='var-PNBLACKLIST'><glossterm>PNBLACKLIST</glossterm>
5700 <glossdef>
5701 <para>
5702 Lists recipes you do not want the OpenEmbedded build system
5703 to build.
5704 This variable works in conjunction with the
5705 <link linkend='ref-classes-blacklist'><filename>blacklist</filename></link>
5706 class, which the recipe must inherit globally.
5707 </para>
5708
5709 <para>
5710 To prevent a recipe from being built, inherit the class
5711 globally and use the variable in your
5712 <filename>local.conf</filename> file.
5713 Here is an example that prevents
5714 <filename>myrecipe</filename> from being built:
5715 <literallayout class='monospaced'>
5716 INHERIT += "blacklist"
5717 PNBLACKLIST[myrecipe] = "Not supported by our organization."
5718 </literallayout>
5719 </para>
5720 </glossdef>
5721 </glossentry>
5722
5723 <glossentry id='var-PR'><glossterm>PR</glossterm>
5724 <glossdef>
5725 <para>
5726 The revision of the recipe.
5727 The default value for this variable is "r0".
5728 </para>
5729 </glossdef>
5730 </glossentry>
5731
5732 <glossentry id='var-PREFERRED_PROVIDER'><glossterm>PREFERRED_PROVIDER</glossterm>
5733 <glossdef>
5734 <para>
5735 If multiple recipes provide an item, this variable
5736 determines which recipe should be given preference.
5737 You should always suffix the variable with the name of the
5738 provided item, and you should set it to the
5739 <link linkend='var-PN'><filename>PN</filename></link>
5740 of the recipe to which you want to give precedence.
5741 Some examples:
5742 <literallayout class='monospaced'>
5743 PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
5744 PREFERRED_PROVIDER_virtual/xserver = "xserver-xf86"
5745 PREFERRED_PROVIDER_virtual/libgl ?= "mesa"
5746 </literallayout>
5747 </para>
5748 </glossdef>
5749 </glossentry>
5750
5751 <glossentry id='var-PREFERRED_VERSION'><glossterm>PREFERRED_VERSION</glossterm>
5752 <glossdef>
5753 <para>
5754 If there are multiple versions of recipes available, this
5755 variable determines which recipe should be given preference.
5756 You must always suffix the variable with the
5757 <link linkend='var-PN'><filename>PN</filename></link>
5758 you want to select, and you should set the
5759 <link linkend='var-PV'><filename>PV</filename></link>
5760 accordingly for precedence.
5761 You can use the "<filename>%</filename>" character as a
5762 wildcard to match any number of characters, which can be
5763 useful when specifying versions that contain long revision
5764 numbers that could potentially change.
5765 Here are two examples:
5766 <literallayout class='monospaced'>
5767 PREFERRED_VERSION_python = "2.7.3"
5768 PREFERRED_VERSION_linux-yocto = "3.10%"
5769 </literallayout>
5770 </para>
5771 </glossdef>
5772 </glossentry>
5773
5774 <glossentry id='var-PREMIRRORS'><glossterm>PREMIRRORS</glossterm>
5775 <glossdef>
5776 <para>
5777 Specifies additional paths from which the OpenEmbedded
5778 build system gets source code.
5779 When the build system searches for source code, it first
5780 tries the local download directory.
5781 If that location fails, the build system tries locations
5782 defined by <filename>PREMIRRORS</filename>, the upstream
5783 source, and then locations specified by
5784 <link linkend='var-MIRRORS'><filename>MIRRORS</filename></link>
5785 in that order.
5786 </para>
5787
5788 <para>
5789 Assuming your distribution
5790 (<link linkend='var-DISTRO'><filename>DISTRO</filename></link>)
5791 is "poky", the default value for
5792 <filename>PREMIRRORS</filename> is defined in the
5793 <filename>conf/distro/poky.conf</filename> file in the
5794 <filename>meta-yocto</filename> Git repository.
5795 </para>
5796
5797 <para>
5798 Typically, you could add a specific server for the
5799 build system to attempt before any others by adding
5800 something like the following to the
5801 <filename>local.conf</filename> configuration file in the
5802 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>:
5803 <literallayout class='monospaced'>
5804 PREMIRRORS_prepend = "\
5805 git://.*/.* http://www.yoctoproject.org/sources/ \n \
5806 ftp://.*/.* http://www.yoctoproject.org/sources/ \n \
5807 http://.*/.* http://www.yoctoproject.org/sources/ \n \
5808 https://.*/.* http://www.yoctoproject.org/sources/ \n"
5809 </literallayout>
5810 These changes cause the build system to intercept
5811 Git, FTP, HTTP, and HTTPS requests and direct them to
5812 the <filename>http://</filename> sources mirror.
5813 You can use <filename>file://</filename> URLs to point
5814 to local directories or network shares as well.
5815 </para>
5816 </glossdef>
5817 </glossentry>
5818
5819 <glossentry id='var-PRINC'><glossterm>PRINC</glossterm>
5820 <glossdef>
5821
5822 <para>
5823 The <filename>PRINC</filename> variable has been deprecated
5824 and triggers a warning if detected during a build.
5825 For
5826 <link linkend='var-PR'><filename>PR</filename></link>
5827 increments on changes, use the PR service instead.
5828 You can find out more about this service in the
5829 "<ulink url='&YOCTO_DOCS_DEV_URL;#working-with-a-pr-service'>Working With a PR Service</ulink>"
5830 section in the Yocto Project Development Manual.
5831 </para>
5832<!--
5833
5834 <para>
5835 Causes the
5836 <link linkend='var-PR'><filename>PR</filename></link>
5837 variable of <filename>.bbappend</filename> files to
5838 dynamically increment.
5839 This increment minimizes the impact of layer ordering.
5840 </para>
5841
5842 <para>
5843 In order to ensure multiple <filename>.bbappend</filename>
5844 files can co-exist,
5845 <filename>PRINC</filename> should be self-referencing.
5846 This variable defaults to 0.
5847 </para>
5848
5849 <para>
5850 Following is an example that increments
5851 <filename>PR</filename> by two:
5852 <literallayout class='monospaced'>
5853 PRINC := "${@int(PRINC) + 2}"
5854 </literallayout>
5855 It is advisable not to use strings such as ".= '.1'" with the variable because
5856 this usage is very sensitive to layer ordering.
5857 You should avoid explicit assignments as they cannot
5858 adequately represent multiple
5859 <filename>.bbappend</filename> files.
5860 </para>
5861-->
5862 </glossdef>
5863 </glossentry>
5864
5865 <glossentry id='var-PROVIDES'><glossterm>PROVIDES</glossterm>
5866 <glossdef>
5867 <para>
5868 A list of aliases that a recipe also provides.
5869 These aliases are useful for satisfying dependencies of
5870 other recipes during the build (as specified by
5871 <filename><link linkend='var-DEPENDS'>DEPENDS</link></filename>).
5872 <note>
5873 A recipe's own
5874 <filename><link linkend='var-PN'>PN</link></filename>
5875 is implicitly already in its
5876 <filename>PROVIDES</filename> list.
5877 </note>
5878 </para>
5879 </glossdef>
5880 </glossentry>
5881
5882 <glossentry id='var-PRSERV_HOST'><glossterm>PRSERV_HOST</glossterm>
5883 <glossdef>
5884 <para>
5885 The network based
5886 <link linkend='var-PR'><filename>PR</filename></link>
5887 service host and port.
5888 </para>
5889
5890 <para>
5891 The <filename>conf/local.conf.sample.extended</filename>
5892 configuration file in the
5893 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
5894 shows how the <filename>PRSERV_HOST</filename> variable is
5895 set:
5896 <literallayout class='monospaced'>
5897 PRSERV_HOST = "localhost:0"
5898 </literallayout>
5899 You must set the variable if you want to automatically
5900 start a local
5901 <ulink url='&YOCTO_DOCS_DEV_URL;#working-with-a-pr-service'>PR service</ulink>.
5902 You can set <filename>PRSERV_HOST</filename> to other
5903 values to use a remote PR service.
5904 </para>
5905 </glossdef>
5906 </glossentry>
5907
5908 <glossentry id='var-PV'><glossterm>PV</glossterm>
5909 <glossdef>
5910 <para>
5911 The version of the recipe.
5912 The version is normally extracted from the recipe filename.
5913 For example, if the recipe is named
5914 <filename>expat_2.0.1.bb</filename>, then the default value of <filename>PV</filename>
5915 will be "2.0.1".
5916 <filename>PV</filename> is generally not overridden within
5917 a recipe unless it is building an unstable (i.e. development) version from a source code repository
5918 (e.g. Git or Subversion).
5919 </para>
5920 </glossdef>
5921 </glossentry>
5922
5923 <glossentry id='var-PYTHON_ABI'><glossterm>PYTHON_ABI</glossterm>
5924 <glossdef>
5925 <para>
5926 When used by recipes that inherit the
5927 <link linkend='ref-classes-distutils3'><filename>distutils3</filename></link>,
5928 <link linkend='ref-classes-setuptools3'><filename>setuptools3</filename></link>,
5929 <link linkend='ref-classes-distutils'><filename>distutils</filename></link>,
5930 or
5931 <link linkend='ref-classes-setuptools'><filename>setuptools</filename></link>
5932 classes, denotes the Application Binary Interface (ABI)
5933 currently in use for Python.
5934 By default, the ABI is "m".
5935 You do not have to set this variable as the OpenEmbedded
5936 build system sets it for you.
5937 </para>
5938
5939 <para>
5940 The OpenEmbedded build system uses the ABI to construct
5941 directory names used when installing the Python headers
5942 and libraries in sysroot
5943 (e.g. <filename>.../python3.3m/...</filename>).
5944 </para>
5945
5946 <para>
5947 Recipes that inherit the
5948 <link linkend='ref-classes-distutils'><filename>distutils</filename></link>
5949 class during cross-builds also use this variable to
5950 locate the headers and libraries of the appropriate Python
5951 that the extension is targeting.
5952 </para>
5953 </glossdef>
5954 </glossentry>
5955
5956 <glossentry id='var-PYTHON_PN'><glossterm>PYTHON_PN</glossterm>
5957 <glossdef>
5958 <para>
5959 When used by recipes that inherit the
5960 <link linkend='ref-classes-distutils3'><filename>distutils3</filename></link>,
5961 <link linkend='ref-classes-setuptools3'><filename>setuptools3</filename></link>,
5962 <link linkend='ref-classes-distutils'><filename>distutils</filename></link>,
5963 or
5964 <link linkend='ref-classes-setuptools'><filename>setuptools</filename></link>
5965 classes, specifies the major Python version being built.
5966 For Python 2.x, <filename>PYTHON_PN</filename> would
5967 be "python2". For Python 3.x, the variable would be
5968 "python3".
5969 You do not have to set this variable as the
5970 OpenEmbedded build system automatically sets it for you.
5971 </para>
5972
5973 <para>
5974 The variable allows recipes to use common infrastructure
5975 such as the following:
5976 <literallayout class='monospaced'>
5977 DEPENDS += "${PYTHON_PN}-native"
5978 </literallayout>
5979 In the previous example, the version of the dependency
5980 is <filename>PYTHON_PN</filename>.
5981 </para>
5982 </glossdef>
5983 </glossentry>
5984
5985 </glossdiv>
5986
5987 <glossdiv id='var-glossary-q'><title>Q</title>
5988
5989 <glossentry id='var-QMAKE_PROFILES'><glossterm>QMAKE_PROFILES</glossterm>
5990 <glossdef>
5991 <para>
5992 Specifies your own subset of <filename>.pro</filename>
5993 files to be built for use with
5994 <filename>qmake</filename>.
5995 If you do not set this variable, all
5996 <filename>.pro</filename> files in the directory pointed to
5997 by <link linkend='var-S'><filename>S</filename></link>
5998 will be built by default.
5999 </para>
6000
6001 <para>
6002 This variable is used with recipes that inherit the
6003 <link linkend='ref-classes-qmake*'><filename>qmake_base</filename></link>
6004 class or other classes that inherit
6005 <filename>qmake_base</filename>.
6006 </para>
6007 </glossdef>
6008 </glossentry>
6009
6010 </glossdiv>
6011
6012 <glossdiv id='var-glossary-r'><title>R</title>
6013
6014 <glossentry id='var-RCONFLICTS'><glossterm>RCONFLICTS</glossterm>
6015 <glossdef>
6016 <para>
6017 The list of packages that conflict with packages.
6018 Note that packages will not be installed if conflicting
6019 packages are not first removed.
6020 </para>
6021
6022 <para>
6023 Like all package-controlling variables, you must always use
6024 them in conjunction with a package name override.
6025 Here is an example:
6026 <literallayout class='monospaced'>
6027 RCONFLICTS_${PN} = "another-conflicting-package-name"
6028 </literallayout>
6029 </para>
6030
6031 <para>
6032 BitBake, which the OpenEmbedded build system uses, supports
6033 specifying versioned dependencies.
6034 Although the syntax varies depending on the packaging
6035 format, BitBake hides these differences from you.
6036 Here is the general syntax to specify versions with
6037 the <filename>RCONFLICTS</filename> variable:
6038 <literallayout class='monospaced'>
6039 RCONFLICTS_${PN} = "&lt;package&gt; (&lt;operator&gt; &lt;version&gt;)"
6040 </literallayout>
6041 For <filename>operator</filename>, you can specify the
6042 following:
6043 <literallayout class='monospaced'>
6044 =
6045 &lt;
6046 &gt;
6047 &lt;=
6048 &gt;=
6049 </literallayout>
6050 For example, the following sets up a dependency on version
6051 1.2 or greater of the package <filename>foo</filename>:
6052 <literallayout class='monospaced'>
6053 RCONFLICTS_${PN} = "foo (>= 1.2)"
6054 </literallayout>
6055 </para>
6056 </glossdef>
6057 </glossentry>
6058
6059 <glossentry id='var-RDEPENDS'><glossterm>RDEPENDS</glossterm>
6060 <glossdef>
6061 <para>
6062 Lists a package's runtime dependencies (i.e. other packages)
6063 that must be installed in order for the built package to run
6064 correctly.
6065 If a package in this list cannot be found during the build,
6066 you will get a build error.
6067 </para>
6068
6069 <para>
6070 When you use the <filename>RDEPENDS</filename> variable
6071 in a recipe, you are essentially stating that the recipe's
6072 <filename>do_build</filename> task depends on the existence
6073 of a specific package.
6074 Consider this simple example for two recipes named "a" and
6075 "b" that produce similarly named IPK packages.
6076 In this example, the <filename>RDEPENDS</filename>
6077 statement appears in the "a" recipe:
6078 <literallayout class='monospaced'>
6079 RDEPENDS_${PN} = "b"
6080 </literallayout>
6081 Here, the dependency is such that the
6082 <filename>do_build</filename> task for recipe "a" depends
6083 on the <filename>do_package_write_ipk</filename> task
6084 of recipe "b".
6085 This means the package file for "b" must be available when
6086 the output for recipe "a" has been completely built.
6087 More importantly, package "a" will be marked as depending
6088 on package "b" in a manner that is understood by the
6089 package manager.
6090 </para>
6091
6092 <para>
6093 The names of the packages you list within
6094 <filename>RDEPENDS</filename> must be the names of other
6095 packages - they cannot be recipe names.
6096 Although package names and recipe names usually match,
6097 the important point here is that you are
6098 providing package names within the
6099 <filename>RDEPENDS</filename> variable.
6100 For an example of the default list of packages created from
6101 a recipe, see the
6102 <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>
6103 variable.
6104 </para>
6105
6106 <para>
6107 Because the <filename>RDEPENDS</filename> variable applies
6108 to packages being built, you should always use the variable
6109 in a form with an attached package name.
6110 For example, suppose you are building a development package
6111 that depends on the <filename>perl</filename> package.
6112 In this case, you would use the following
6113 <filename>RDEPENDS</filename> statement:
6114 <literallayout class='monospaced'>
6115 RDEPENDS_${PN}-dev += "perl"
6116 </literallayout>
6117 In the example, the development package depends on
6118 the <filename>perl</filename> package.
6119 Thus, the <filename>RDEPENDS</filename> variable has the
6120 <filename>${PN}-dev</filename> package name as part of the
6121 variable.
6122 </para>
6123
6124 <para>
6125 The package name you attach to the
6126 <filename>RDEPENDS</filename> variable must appear
6127 as it would in the <filename>PACKAGES</filename>
6128 namespace before any renaming of the output package by
6129 classes like <filename>debian.bbclass</filename>.
6130 </para>
6131
6132 <para>
6133 In many cases you do not need to explicitly add
6134 runtime dependencies using
6135 <filename>RDEPENDS</filename> since some automatic
6136 handling occurs:
6137 <itemizedlist>
6138 <listitem><para><emphasis><filename>shlibdeps</filename></emphasis>: If
6139 a runtime package contains a shared library
6140 (<filename>.so</filename>), the build
6141 processes the library in order to determine other
6142 libraries to which it is dynamically linked.
6143 The build process adds these libraries to
6144 <filename>RDEPENDS</filename> when creating the runtime
6145 package.</para></listitem>
6146 <listitem><para><emphasis><filename>pcdeps</filename></emphasis>: If
6147 the package ships a <filename>pkg-config</filename>
6148 information file, the build process uses this file
6149 to add items to the <filename>RDEPENDS</filename>
6150 variable to create the runtime packages.
6151 </para></listitem>
6152 </itemizedlist>
6153 </para>
6154
6155 <para>
6156 BitBake, which the OpenEmbedded build system uses, supports
6157 specifying versioned dependencies.
6158 Although the syntax varies depending on the packaging
6159 format, BitBake hides these differences from you.
6160 Here is the general syntax to specify versions with
6161 the <filename>RDEPENDS</filename> variable:
6162 <literallayout class='monospaced'>
6163 RDEPENDS_${PN} = "&lt;package&gt; (&lt;operator&gt; &lt;version&gt;)"
6164 </literallayout>
6165 For <filename>operator</filename>, you can specify the
6166 following:
6167 <literallayout class='monospaced'>
6168 =
6169 &lt;
6170 &gt;
6171 &lt;=
6172 &gt;=
6173 </literallayout>
6174 For example, the following sets up a dependency on version
6175 1.2 or greater of the package <filename>foo</filename>:
6176 <literallayout class='monospaced'>
6177 RDEPENDS_${PN} = "foo (>= 1.2)"
6178 </literallayout>
6179 </para>
6180
6181 <para>
6182 For information on build-time dependencies, see the
6183 <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>
6184 variable.
6185 </para>
6186 </glossdef>
6187 </glossentry>
6188
6189 <glossentry id='var-REQUIRED_DISTRO_FEATURES'><glossterm>REQUIRED_DISTRO_FEATURES</glossterm>
6190 <glossdef>
6191 <para>
6192 When a recipe inherits the
6193 <filename>distro_features_check</filename> class, this
6194 variable identifies distribution features that must
6195 exist in the current configuration in order for the
6196 OpenEmbedded build system to build the recipe.
6197 In other words, if the
6198 <filename>REQUIRED_DISTRO_FEATURES</filename> variable
6199 lists a feature that does not appear in
6200 <filename>DISTRO_FEATURES</filename> within the
6201 current configuration, an error occurs and the
6202 build stops.
6203 </para>
6204 </glossdef>
6205 </glossentry>
6206
6207 <glossentry id='var-RM_OLD_IMAGE'><glossterm>RM_OLD_IMAGE</glossterm>
6208 <glossdef>
6209 <para>
6210 Reclaims disk space by removing previously built
6211 versions of the same image from the
6212 <filename>images</filename> directory pointed to by the
6213 <link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link>
6214 variable.
6215 </para>
6216
6217 <para>
6218 Set this variable to "1" in your
6219 <filename>local.conf</filename> file to remove these
6220 images.
6221 </para>
6222 </glossdef>
6223 </glossentry>
6224
6225 <glossentry id='var-RM_WORK_EXCLUDE'><glossterm>RM_WORK_EXCLUDE</glossterm>
6226 <glossdef>
6227 <para>
6228 With <filename>rm_work</filename> enabled, this
6229 variable specifies a list of recipes whose work directories
6230 should not be removed.
6231 See the "<link linkend='ref-classes-rm-work'><filename>rm_work.bbclass</filename></link>"
6232 section for more details.
6233 </para>
6234 </glossdef>
6235 </glossentry>
6236
6237 <glossentry id='var-ROOT_HOME'><glossterm>ROOT_HOME</glossterm>
6238 <glossdef>
6239 <para>
6240 Defines the root home directory.
6241 By default, this directory is set as follows in the
6242 BitBake configuration file:
6243 <literallayout class='monospaced'>
6244 ROOT_HOME ??= "/home/root"
6245 </literallayout>
6246 <note>
6247 This default value is likely used because some
6248 embedded solutions prefer to have a read-only root
6249 filesystem and prefer to keep writeable data in one
6250 place.
6251 </note>
6252 </para>
6253
6254 <para>
6255 You can override the default by setting the variable
6256 in any layer or in the <filename>local.conf</filename> file.
6257 Because the default is set using a "weak" assignment
6258 (i.e. "??="), you can use either of the following forms
6259 to define your override:
6260 <literallayout class='monospaced'>
6261 ROOT_HOME = "/root"
6262 ROOT_HOME ?= "/root"
6263 </literallayout>
6264 These override examples use <filename>/root</filename>,
6265 which is probably the most commonly used override.
6266 </para>
6267 </glossdef>
6268 </glossentry>
6269
6270 <glossentry id='var-ROOTFS'><glossterm>ROOTFS</glossterm>
6271 <glossdef>
6272 <para>
6273 Indicates a filesystem image to include as the root
6274 filesystem.
6275 </para>
6276
6277 <para>
6278 The <filename>ROOTFS</filename> variable is an optional
6279 variable used with the
6280 <link linkend='ref-classes-bootimg'><filename>buildimg</filename></link>
6281 class.
6282 </para>
6283 </glossdef>
6284 </glossentry>
6285
6286 <glossentry id='var-ROOTFS_POSTPROCESS_COMMAND'><glossterm>ROOTFS_POSTPROCESS_COMMAND</glossterm>
6287 <glossdef>
6288 <para>
6289 Added by classes to run post processing commands once the
6290 OpenEmbedded build system has created the root filesystem.
6291 You can specify shell commands separated by semicolons:
6292 <literallayout class='monospaced'>
6293 ROOTFS_POSTPROCESS_COMMAND += "&lt;shell_command&gt;; ... "
6294 </literallayout>
6295 If you need to pass the path to the root filesystem within
6296 the command, you can use
6297 <filename>${IMAGE_ROOTFS}</filename>, which points to
6298 the root filesystem image.
6299 </para>
6300 </glossdef>
6301 </glossentry>
6302
6303 <glossentry id='var-RPROVIDES'><glossterm>RPROVIDES</glossterm>
6304 <glossdef>
6305 <para>
6306 A list of package name aliases that a package also provides.
6307 These aliases are useful for satisfying runtime dependencies
6308 of other packages both during the build and on the target
6309 (as specified by
6310 <filename><link linkend='var-RDEPENDS'>RDEPENDS</link></filename>).
6311 <note>
6312 A package's own name is implicitly already in its
6313 <filename>RPROVIDES</filename> list.
6314 </note>
6315 </para>
6316 <para>
6317 As with all package-controlling variables, you must always
6318 use the variable in conjunction with a package name override.
6319 Here is an example:
6320 <literallayout class='monospaced'>
6321 RPROVIDES_${PN} = "widget-abi-2"
6322 </literallayout>
6323 </para>
6324 </glossdef>
6325 </glossentry>
6326
6327 <glossentry id='var-RRECOMMENDS'><glossterm>RRECOMMENDS</glossterm>
6328 <glossdef>
6329 <para>
6330 A list of packages that extends the usability of a package
6331 being built.
6332 The package being built does not depend on this list of
6333 packages in order to successfully build, but needs them for
6334 the extended usability.
6335 To specify runtime dependencies for packages, see the
6336 <filename><link linkend='var-RDEPENDS'>RDEPENDS</link></filename>
6337 variable.
6338 </para>
6339
6340 <para>
6341 The OpenEmbedded build process automatically installs the
6342 list of packages as part of the built package.
6343 However, you can remove these packages later if you want.
6344 If, during the build, a package from the
6345 <filename>RRECOMMENDS</filename> list cannot be
6346 found, the build process continues without an error.
6347 </para>
6348
6349 <para>
6350 You can also prevent packages in the list from being
6351 installed by using several variables.
6352 See the
6353 <link linkend='var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></link>,
6354 <link linkend='var-NO_RECOMMENDATIONS'><filename>NO_RECOMMENDATIONS</filename></link>,
6355 and
6356 <link linkend='var-PACKAGE_EXCLUDE'><filename>PACKAGE_EXCLUDE</filename></link>
6357 variables for more information.
6358 </para>
6359
6360 <para>
6361 Because the <filename>RRECOMMENDS</filename> variable
6362 applies to packages being built, you should always attach
6363 an override to the variable to specify the particular
6364 package whose usability is being extended.
6365 For example, suppose you are building a development package
6366 that is extended to support wireless functionality.
6367 In this case, you would use the following:
6368 <literallayout class='monospaced'>
6369 RRECOMMENDS_${PN}-dev += "&lt;wireless_package_name&gt;"
6370 </literallayout>
6371 In the example, the package name
6372 (<filename>${<link linkend='var-PN'>PN</link>}-dev</filename>)
6373 must appear as it would in the
6374 <filename><link linkend='var-PACKAGES'>PACKAGES</link></filename>
6375 namespace before any renaming of the output package by
6376 classes such as <filename>debian.bbclass</filename>.
6377 </para>
6378
6379 <para>
6380 BitBake, which the OpenEmbedded build system uses, supports
6381 specifying versioned recommends.
6382 Although the syntax varies depending on the packaging
6383 format, BitBake hides these differences from you.
6384 Here is the general syntax to specify versions with
6385 the <filename>RRECOMMENDS</filename> variable:
6386 <literallayout class='monospaced'>
6387 RRECOMMENDS_${PN} = "&lt;package&gt; (&lt;operator&gt; &lt;version&gt;)"
6388 </literallayout>
6389 For <filename>operator</filename>, you can specify the
6390 following:
6391 <literallayout class='monospaced'>
6392 =
6393 &lt;
6394 &gt;
6395 &lt;=
6396 &gt;=
6397 </literallayout>
6398 For example, the following sets up a recommend on version
6399 1.2 or greater of the package <filename>foo</filename>:
6400 <literallayout class='monospaced'>
6401 RRECOMMENDS_${PN} = "foo (>= 1.2)"
6402 </literallayout>
6403 </para>
6404 </glossdef>
6405 </glossentry>
6406
6407 <glossentry id='var-RREPLACES'><glossterm>RREPLACES</glossterm>
6408 <glossdef>
6409 <para>
6410 A list of packages replaced by a package.
6411 The package manager uses this variable to determine which
6412 package should be installed to replace other package(s)
6413 during an upgrade.
6414 In order to also have the other package(s) removed at the
6415 same time, you must add the name of the other
6416 package to the
6417 <filename><link linkend='var-RCONFLICTS'>RCONFLICTS</link></filename> variable.
6418 </para>
6419 <para>
6420 As with all package-controlling variables, you must use
6421 this variable in conjunction with a package name
6422 override.
6423 Here is an example:
6424 <literallayout class='monospaced'>
6425 RREPLACES_${PN} = "other-package-being-replaced"
6426 </literallayout>
6427 </para>
6428
6429 <para>
6430 BitBake, which the OpenEmbedded build system uses, supports
6431 specifying versioned replacements.
6432 Although the syntax varies depending on the packaging
6433 format, BitBake hides these differences from you.
6434 Here is the general syntax to specify versions with
6435 the <filename>RREPLACES</filename> variable:
6436 <literallayout class='monospaced'>
6437 RREPLACES_${PN} = "&lt;package&gt; (&lt;operator&gt; &lt;version&gt;)"
6438 </literallayout>
6439 For <filename>operator</filename>, you can specify the
6440 following:
6441 <literallayout class='monospaced'>
6442 =
6443 &lt;
6444 &gt;
6445 &lt;=
6446 &gt;=
6447 </literallayout>
6448 For example, the following sets up a replacement using
6449 version 1.2 or greater of the package
6450 <filename>foo</filename>:
6451 <literallayout class='monospaced'>
6452 RREPLACES_${PN} = "foo (>= 1.2)"
6453 </literallayout>
6454 </para>
6455 </glossdef>
6456 </glossentry>
6457
6458 <glossentry id='var-RSUGGESTS'><glossterm>RSUGGESTS</glossterm>
6459 <glossdef>
6460 <para>
6461 A list of additional packages that you can suggest for
6462 installation by the package manager at the time a package
6463 is installed.
6464 Not all package managers support this functionality.
6465 </para>
6466 <para>
6467 As with all package-controlling variables, you must always
6468 use this variable in conjunction with a package name
6469 override.
6470 Here is an example:
6471 <literallayout class='monospaced'>
6472 RSUGGESTS_${PN} = "useful-package another-package"
6473 </literallayout>
6474 </para>
6475 </glossdef>
6476 </glossentry>
6477
6478 </glossdiv>
6479
6480 <glossdiv id='var-glossary-s'><title>S</title>
6481
6482 <glossentry id='var-S'><glossterm>S</glossterm>
6483 <glossdef>
6484 <para>
6485 The location in the
6486 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
6487 where unpacked recipe source code resides.
6488 This location is within the work directory
6489 (<filename><link linkend='var-WORKDIR'>WORKDIR</link></filename>),
6490 which is not static.
6491 The unpacked source location depends on the recipe name
6492 (<filename><link linkend='var-PN'>PN</link></filename>) and
6493 recipe version
6494 (<filename><link linkend='var-PV'>PV</link></filename>) as
6495 follows:
6496 <literallayout class='monospaced'>
6497 ${WORKDIR}/${PN}-${PV}
6498 </literallayout>
6499 As an example, assume a
6500 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
6501 top-level folder named <filename>poky</filename> and a
6502 default Build Directory at <filename>poky/build</filename>.
6503 In this case, the work directory the build system uses
6504 to keep the unpacked recipe for <filename>db</filename>
6505 is the following:
6506 <literallayout class='monospaced'>
6507 poky/build/tmp/work/qemux86-poky-linux/db/5.1.19-r3/db-5.1.19
6508 </literallayout>
6509 </para>
6510 </glossdef>
6511 </glossentry>
6512
6513 <glossentry id='var-SANITY_TESTED_DISTROS'><glossterm>SANITY_TESTED_DISTROS</glossterm>
6514 <glossdef>
6515 <para>
6516 A list of the host distribution identifiers that the
6517 build system has been tested against.
6518 Identifiers consist of the host distributor ID
6519 followed by the release,
6520 as reported by the <filename>lsb_release</filename> tool
6521 or as read from <filename>/etc/lsb-release</filename>.
6522 Separate the list items with explicit newline
6523 characters (<filename>\n</filename>).
6524 If <filename>SANITY_TESTED_DISTROS</filename> is not empty
6525 and the current value of
6526 <link linkend='var-NATIVELSBSTRING'><filename>NATIVELSBSTRING</filename></link>
6527 does not appear in the list, then the build system reports
6528 a warning that indicates the current host distribution has
6529 not been tested as a build host.
6530 </para>
6531 </glossdef>
6532 </glossentry>
6533
6534 <glossentry id='var-SDK_ARCH'><glossterm>SDK_ARCH</glossterm>
6535 <glossdef>
6536 <para>
6537 The target architecture for the SDK.
6538 Typically, you do not directly set this variable.
6539 Instead, use
6540 <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>.
6541 </para>
6542 </glossdef>
6543 </glossentry>
6544
6545 <glossentry id='var-SDK_DEPLOY'><glossterm>SDK_DEPLOY</glossterm>
6546 <glossdef>
6547 <para>
6548 The directory set up and used by the
6549 <link linkend='ref-classes-populate-sdk'><filename>populate_sdk_base</filename></link>
6550 to which the SDK is deployed.
6551 The <filename>populate_sdk_base</filename> class defines
6552 <filename>SDK_DEPLOY</filename> as follows:
6553 <literallayout class='monospaced'>
6554 SDK_DEPLOY = "${<link linkend='var-TMPDIR'>TMPDIR</link>}/deploy/sdk"
6555 </literallayout>
6556 </para>
6557 </glossdef>
6558 </glossentry>
6559
6560 <glossentry id='var-SDK_DIR'><glossterm>SDK_DIR</glossterm>
6561 <glossdef>
6562 <para>
6563 The parent directory used by the OpenEmbedded build system
6564 when creating SDK output.
6565 The
6566 <link linkend='ref-classes-populate-sdk-*'><filename>populate_sdk_base</filename></link>
6567 class defines the variable as follows:
6568 <literallayout class='monospaced'>
6569 SDK_DIR = "${<link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>}/sdk"
6570 </literallayout>
6571 <note>
6572 The <filename>SDK_DIR</filename> directory is a
6573 temporary directory as it is part of
6574 <filename>WORKDIR</filename>.
6575 The final output directory is
6576 <link linkend='var-SDK_DEPLOY'><filename>SDK_DEPLOY</filename></link>.
6577 </note>
6578 </para>
6579 </glossdef>
6580 </glossentry>
6581
6582 <glossentry id='var-SDK_NAME'><glossterm>SDK_NAME</glossterm>
6583 <glossdef>
6584 <para>
6585 The base name for SDK output files.
6586 The name is derived from the
6587 <link linkend='var-DISTRO'><filename>DISTRO</filename></link>,
6588 <link linkend='var-TCLIBC'><filename>TCLIBC</filename></link>,
6589 <link linkend='var-SDK_ARCH'><filename>SDK_ARCH</filename></link>,
6590 <link linkend='var-IMAGE_BASENAME'><filename>IMAGE_BASENAME</filename></link>,
6591 and
6592 <link linkend='var-TUNE_PKGARCH'><filename>TUNE_PKGARCH</filename></link>
6593 variables:
6594 <literallayout class='monospaced'>
6595 SDK_NAME = "${DISTRO}-${TCLIBC}-${SDK_ARCH}-${IMAGE_BASENAME}-${TUNE_PKGARCH}"
6596 </literallayout>
6597 </para>
6598 </glossdef>
6599 </glossentry>
6600
6601 <glossentry id='var-SDK_OUTPUT'><glossterm>SDK_OUTPUT</glossterm>
6602 <glossdef>
6603 <para>
6604 The location used by the OpenEmbedded build system when
6605 creating SDK output.
6606 The
6607 <link linkend='ref-classes-populate-sdk-*'><filename>populate_sdk_base</filename></link>
6608 class defines the variable as follows:
6609 <literallayout class='monospaced'>
6610 SDK_OUTPUT = "${<link linkend='var-SDK_DIR'>SDK_DIR</link>}/image"
6611 </literallayout>
6612 <note>
6613 The <filename>SDK_OUTPUT</filename> directory is a
6614 temporary directory as it is part of
6615 <filename>WORKDIR</filename> by way of
6616 <filename>SDK_DIR</filename>.
6617 The final output directory is
6618 <link linkend='var-SDK_DEPLOY'><filename>SDK_DEPLOY</filename></link>.
6619 </note>
6620
6621 </para>
6622 </glossdef>
6623 </glossentry>
6624
6625 <glossentry id='var-SDKIMAGE_FEATURES'><glossterm>SDKIMAGE_FEATURES</glossterm>
6626 <glossdef>
6627 <para>Equivalent to
6628 <filename><link linkend='var-IMAGE_FEATURES'>IMAGE_FEATURES</link></filename>.
6629 However, this variable applies to the SDK generated from an
6630 image using the following command:
6631 <literallayout class='monospaced'>
6632 $ bitbake -c populate_sdk imagename
6633 </literallayout>
6634 </para>
6635 </glossdef>
6636 </glossentry>
6637
6638 <glossentry id='var-SDKMACHINE'><glossterm>SDKMACHINE</glossterm>
6639 <glossdef>
6640 <para>
6641 The architecture of the machine that runs Application
6642 Development Toolkit (ADT) items.
6643 In other words, packages are built so that they will run
6644 on the target you specify with the argument.
6645 This implies that you can build out ADT/SDK items that
6646 run on an architecture other than that of your build host.
6647 For example, you can use an x86_64-based build host to
6648 create packages that will run on an i686-based
6649 SDK Machine.
6650 </para>
6651
6652 <para>
6653 You can use "i686" and "x86_64" as possible values for this
6654 variable.
6655 The variable defaults to "i686" and is set in the
6656 <filename>local.conf</filename> file in the
6657 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
6658 <literallayout class='monospaced'>
6659 SDKMACHINE ?= "i686"
6660 </literallayout>
6661 <note>
6662 You cannot set the <filename>SDKMACHINE</filename>
6663 variable in your distribution configuration file.
6664 If you do, the configuration will not take affect.
6665 </note>
6666 </para>
6667 </glossdef>
6668 </glossentry>
6669
6670 <glossentry id='var-SDKPATH'><glossterm>SDKPATH</glossterm>
6671 <glossdef>
6672 <para>
6673 Defines the path offered to the user for installation
6674 of the SDK that is generated by the OpenEmbedded build
6675 system.
6676 The path appears as the default location for installing
6677 the SDK when you run the SDK's installation script.
6678 You can override the offered path when you run the
6679 script.
6680 </para>
6681 </glossdef>
6682 </glossentry>
6683
6684 <glossentry id='var-SECTION'><glossterm>SECTION</glossterm>
6685 <glossdef>
6686 <para>The section in which packages should be categorized.
6687 Package management utilities can make use of this variable.</para>
6688 </glossdef>
6689 </glossentry>
6690
6691 <glossentry id='var-SELECTED_OPTIMIZATION'><glossterm>SELECTED_OPTIMIZATION</glossterm>
6692 <glossdef>
6693 <para>
6694 The variable takes the value of
6695 <filename><link linkend='var-FULL_OPTIMIZATION'>FULL_OPTIMIZATION</link></filename>
6696 unless <filename><link linkend='var-DEBUG_BUILD'>DEBUG_BUILD</link></filename> = "1".
6697 In this case the value of
6698 <filename><link linkend='var-DEBUG_OPTIMIZATION'>DEBUG_OPTIMIZATION</link></filename> is used.
6699 </para>
6700 </glossdef>
6701 </glossentry>
6702
6703 <glossentry id='var-SERIAL_CONSOLE'><glossterm>SERIAL_CONSOLE</glossterm>
6704 <glossdef>
6705 <para>
6706 Defines a serial console (TTY) to enable using getty.
6707 Provide a value that specifies the baud rate followed by
6708 the TTY device name separated by a space.
6709 You cannot specify more than one TTY device:
6710 <literallayout class='monospaced'>
6711 SERIAL_CONSOLE = "115200 ttyS0"
6712 </literallayout>
6713 <note>
6714 The <filename>SERIAL_CONSOLE</filename> variable
6715 is deprecated.
6716 Please use the
6717 <link linkend='var-SERIAL_CONSOLES'><filename>SERIAL_CONSOLES</filename></link>
6718 variable.
6719 </note>
6720 </para>
6721 </glossdef>
6722 </glossentry>
6723
6724 <glossentry id='var-SERIAL_CONSOLES'><glossterm>SERIAL_CONSOLES</glossterm>
6725 <glossdef>
6726 <para>
6727 Defines the serial consoles (TTYs) to enable using getty.
6728 Provide a value that specifies the baud rate followed by
6729 the TTY device name separated by a semicolon.
6730 Use spaces to separate multiple devices:
6731 <literallayout class='monospaced'>
6732 SERIAL_CONSOLES = "115200;ttyS0 115200;ttyS1"
6733 </literallayout>
6734 </para>
6735 </glossdef>
6736 </glossentry>
6737
6738 <glossentry id='var-SERIAL_CONSOLES_CHECK'><glossterm>SERIAL_CONSOLES_CHECK</glossterm>
6739 <glossdef>
6740 <para>
6741 Similar to
6742 <link linkend='var-SERIAL_CONSOLES'><filename>SERIAL_CONSOLES</filename></link>
6743 except the device is checked for existence before attempting
6744 to enable it.
6745 This variable is currently only supported with SysVinit
6746 (i.e. not with systemd).
6747 </para>
6748 </glossdef>
6749 </glossentry>
6750
6751 <glossentry id='var-SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS'><glossterm>SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS</glossterm>
6752 <glossdef>
6753 <para>
6754 A list of recipe dependencies that should not be used to
6755 determine signatures of tasks from one recipe when they
6756 depend on tasks from another recipe.
6757 For example:
6758 <literallayout class='monospaced'>
6759 SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += "intone->mplayer2"
6760 </literallayout>
6761 In this example, <filename>intone</filename> depends on
6762 <filename>mplayer2</filename>.
6763 </para>
6764
6765 <para>
6766 Use of this variable is one mechanism to remove dependencies
6767 that affect task signatures and thus force rebuilds when a
6768 recipe changes.
6769 <note><title>Caution</title>
6770 If you add an inappropriate dependency for a recipe
6771 relationship, the software might break during
6772 runtime if the interface of the second recipe was
6773 changed after the first recipe had been built.
6774 </note>
6775 </para>
6776 </glossdef>
6777 </glossentry>
6778
6779 <glossentry id='var-SIGGEN_EXCLUDERECIPES_ABISAFE'><glossterm>SIGGEN_EXCLUDERECIPES_ABISAFE</glossterm>
6780 <glossdef>
6781 <para>
6782 A list of recipes that are completely stable and will
6783 never change.
6784 The ABI for the recipes in the list are presented by
6785 output from the tasks run to build the recipe.
6786 Use of this variable is one way to remove dependencies from
6787 one recipe on another that affect task signatures and
6788 thus force rebuilds when the recipe changes.
6789 <note><title>Caution</title>
6790 If you add an inappropriate variable to this list,
6791 the software might break at runtime if the
6792 interface of the recipe was changed after the other
6793 had been built.
6794 </note>
6795 </para>
6796 </glossdef>
6797 </glossentry>
6798
6799 <glossentry id='var-SITEINFO_BITS'><glossterm>SITEINFO_BITS</glossterm>
6800 <glossdef>
6801 <para>
6802 Specifies the number of bits for the target system CPU.
6803 The value should be either "32" or "64".
6804 </para>
6805 </glossdef>
6806 </glossentry>
6807
6808 <glossentry id='var-SITEINFO_ENDIANNESS'><glossterm>SITEINFO_ENDIANNESS</glossterm>
6809 <glossdef>
6810 <para>
6811 Specifies the endian byte order of the target system.
6812 The value should be either "le" for little-endian or "be" for big-endian.
6813 </para>
6814 </glossdef>
6815 </glossentry>
6816
6817 <glossentry id='var-SOC_FAMILY'><glossterm>SOC_FAMILY</glossterm>
6818 <glossdef>
6819 <para>
6820 Groups together machines based upon the same family
6821 of SOC (System On Chip).
6822 You typically set this variable in a common
6823 <filename>.inc</filename> file that you include in the
6824 configuration files of all the machines.
6825 <note>
6826 You must include
6827 <filename>conf/machine/include/soc-family.inc</filename>
6828 for this variable to appear in
6829 <link linkend='var-MACHINEOVERRIDES'><filename>MACHINEOVERRIDES</filename></link>.
6830 </note>
6831 </para>
6832 </glossdef>
6833 </glossentry>
6834
6835 <glossentry id='var-SOLIBS'><glossterm>SOLIBS</glossterm>
6836 <glossdef>
6837 <para>
6838 Defines the suffix for shared libraries used on the
6839 target platform.
6840 By default, this suffix is ".so.*" for all Linux-based
6841 systems and is defined in the
6842 <filename>meta/conf/bitbake.conf</filename> configuration
6843 file.
6844 </para>
6845
6846 <para>
6847 You will see this variable referenced in the default values
6848 of <filename>FILES_${PN}</filename>.
6849 </para>
6850 </glossdef>
6851 </glossentry>
6852
6853 <glossentry id='var-SOLIBSDEV'><glossterm>SOLIBSDEV</glossterm>
6854 <glossdef>
6855 <para>
6856 Defines the suffix for the development symbolic link
6857 (symlink) for shared libraries on the target platform.
6858 By default, this suffix is ".so" for Linux-based
6859 systems and is defined in the
6860 <filename>meta/conf/bitbake.conf</filename> configuration
6861 file.
6862 </para>
6863
6864 <para>
6865 You will see this variable referenced in the default values
6866 of <filename>FILES_${PN}-dev</filename>.
6867 </para>
6868 </glossdef>
6869 </glossentry>
6870
6871 <glossentry id='var-SOURCE_MIRROR_URL'><glossterm>SOURCE_MIRROR_URL</glossterm>
6872 <glossdef>
6873 <para>
6874 Defines your own
6875 <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>
6876 from which to first fetch source before attempting to fetch
6877 from the upstream specified in
6878 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>.
6879 </para>
6880
6881 <para>
6882 To use this variable, you must globally inherit the
6883 <link linkend='ref-classes-own-mirrors'><filename>own-mirrors</filename></link>
6884 class and then provide the URL to your mirrors.
6885 Here is an example:
6886 <literallayout class='monospaced'>
6887 INHERIT += "own-mirrors"
6888 SOURCE_MIRROR_URL = "http://example.com/my-source-mirror"
6889 </literallayout>
6890 <note>
6891 You can specify only a single URL in
6892 <filename>SOURCE_MIRROR_URL</filename>.
6893 </note>
6894 </para>
6895 </glossdef>
6896 </glossentry>
6897
6898 <glossentry id='var-SPDXLICENSEMAP'><glossterm>SPDXLICENSEMAP</glossterm>
6899 <glossdef>
6900 <para>
6901 Maps commonly used license names to their SPDX counterparts
6902 found in <filename>meta/files/common-licenses/</filename>.
6903 For the default <filename>SPDXLICENSEMAP</filename>
6904 mappings, see the
6905 <filename>meta/conf/licenses.conf</filename> file.
6906 </para>
6907
6908 <para>
6909 For additional information, see the
6910 <link linkend='var-LICENSE'><filename>LICENSE</filename></link>
6911 variable.
6912 </para>
6913 </glossdef>
6914 </glossentry>
6915
6916 <glossentry id='var-SPECIAL_PKGSUFFIX'><glossterm>SPECIAL_PKGSUFFIX</glossterm>
6917 <glossdef>
6918 <para>
6919 A list of prefixes for <link linkend='var-PN'><filename>PN</filename></link> used by the
6920 OpenEmbedded build system to create variants of recipes or packages.
6921 The list specifies the prefixes to strip off during certain circumstances
6922 such as the generation of the <link linkend='var-BPN'><filename>BPN</filename></link> variable.
6923 </para>
6924 </glossdef>
6925 </glossentry>
6926
6927 <glossentry id='var-SRC_URI'><glossterm>SRC_URI</glossterm>
6928 <glossdef>
6929 <para>The list of source files - local or remote.
6930 This variable tells the OpenEmbedded build system which bits
6931 to pull in for the build and how to pull them in.
6932 For example, if the recipe or append file only needs to
6933 fetch a tarball from the Internet, the recipe or
6934 append file uses a single <filename>SRC_URI</filename>
6935 entry.
6936 On the other hand, if the recipe or append file needs to
6937 fetch a tarball, apply two patches, and include a custom
6938 file, the recipe or append file would include four
6939 instances of the variable.</para>
6940 <para>The following list explains the available URI protocols:
6941 <itemizedlist>
6942 <listitem><para><emphasis><filename>file://</filename> -</emphasis>
6943 Fetches files, which are usually files shipped with
6944 the
6945 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>,
6946 from the local machine.
6947 The path is relative to the
6948 <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>
6949 variable.
6950 Thus, the build system searches, in order, from the
6951 following directories, which are assumed to be a
6952 subdirectories of the directory in which the
6953 recipe file (<filename>.bb</filename>) or
6954 append file (<filename>.bbappend</filename>)
6955 resides:
6956 <itemizedlist>
6957 <listitem><para><emphasis><filename>${BPN}</filename> -</emphasis>
6958 The base recipe name without any special
6959 suffix or version numbers.
6960 </para></listitem>
6961 <listitem><para><emphasis><filename>${BP}</filename> -</emphasis>
6962 <filename>${<link linkend='var-BPN'>BPN</link>}-${PV}</filename>.
6963 The base recipe name and version but without
6964 any special package name suffix.
6965 </para></listitem>
6966 <listitem><para><emphasis>files -</emphasis>
6967 Files within a directory, which is named
6968 <filename>files</filename> and is also
6969 alongside the recipe or append file.
6970 </para></listitem>
6971 </itemizedlist>
6972 <note>
6973 If you want the build system to pick up files
6974 specified through a
6975 <filename>SRC_URI</filename>
6976 statement from your append file, you need to be
6977 sure to extend the
6978 <filename>FILESPATH</filename>
6979 variable by also using the
6980 <link linkend='var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></link>
6981 variable from within your append file.
6982 </note>
6983 </para></listitem>
6984 <listitem><para><emphasis><filename>bzr://</filename> -</emphasis> Fetches files from a
6985 Bazaar revision control repository.</para></listitem>
6986 <listitem><para><emphasis><filename>git://</filename> -</emphasis> Fetches files from a
6987 Git revision control repository.</para></listitem>
6988 <listitem><para><emphasis><filename>osc://</filename> -</emphasis> Fetches files from
6989 an OSC (OpenSUSE Build service) revision control repository.</para></listitem>
6990 <listitem><para><emphasis><filename>repo://</filename> -</emphasis> Fetches files from
6991 a repo (Git) repository.</para></listitem>
6992 <listitem><para><emphasis><filename>svk://</filename> -</emphasis> Fetches files from
6993 an SVK revision control repository.</para></listitem>
6994 <listitem><para><emphasis><filename>http://</filename> -</emphasis> Fetches files from
6995 the Internet using <filename>http</filename>.</para></listitem>
6996 <listitem><para><emphasis><filename>https://</filename> -</emphasis> Fetches files
6997 from the Internet using <filename>https</filename>.</para></listitem>
6998 <listitem><para><emphasis><filename>ftp://</filename> -</emphasis> Fetches files
6999 from the Internet using <filename>ftp</filename>.</para></listitem>
7000 <listitem><para><emphasis><filename>cvs://</filename> -</emphasis> Fetches files from
7001 a CVS revision control repository.</para></listitem>
7002 <listitem><para><emphasis><filename>hg://</filename> -</emphasis> Fetches files from
7003 a Mercurial (<filename>hg</filename>) revision control repository.</para></listitem>
7004 <listitem><para><emphasis><filename>p4://</filename> -</emphasis> Fetches files from
7005 a Perforce (<filename>p4</filename>) revision control repository.</para></listitem>
7006 <listitem><para><emphasis><filename>ssh://</filename> -</emphasis> Fetches files from
7007 a secure shell.</para></listitem>
7008 <listitem><para><emphasis><filename>svn://</filename> -</emphasis> Fetches files from
7009 a Subversion (<filename>svn</filename>) revision control repository.</para></listitem>
7010 </itemizedlist>
7011 </para>
7012 <para>Standard and recipe-specific options for <filename>SRC_URI</filename> exist.
7013 Here are standard options:
7014 <itemizedlist>
7015 <listitem><para><emphasis><filename>apply</filename> -</emphasis> Whether to apply
7016 the patch or not.
7017 The default action is to apply the patch.</para></listitem>
7018 <listitem><para><emphasis><filename>striplevel</filename> -</emphasis> Which
7019 striplevel to use when applying the patch.
7020 The default level is 1.</para></listitem>
7021 <listitem><para><emphasis><filename>patchdir</filename> -</emphasis> Specifies
7022 the directory in which the patch should be applied.
7023 The default is <filename>${</filename><link linkend='var-S'><filename>S</filename></link><filename>}</filename>.
7024 </para></listitem>
7025 </itemizedlist>
7026 </para>
7027 <para>Here are options specific to recipes building code from a revision control system:
7028 <itemizedlist>
7029 <listitem><para><emphasis><filename>mindate</filename> -</emphasis>
7030 Apply the patch only if
7031 <link linkend='var-SRCDATE'><filename>SRCDATE</filename></link>
7032 is equal to or greater than <filename>mindate</filename>.
7033 </para></listitem>
7034 <listitem><para><emphasis><filename>maxdate</filename> -</emphasis>
7035 Apply the patch only if <filename>SRCDATE</filename>
7036 is not later than <filename>mindate</filename>.
7037 </para></listitem>
7038 <listitem><para><emphasis><filename>minrev</filename> -</emphasis>
7039 Apply the patch only if <filename>SRCREV</filename>
7040 is equal to or greater than <filename>minrev</filename>.
7041 </para></listitem>
7042 <listitem><para><emphasis><filename>maxrev</filename> -</emphasis>
7043 Apply the patch only if <filename>SRCREV</filename>
7044 is not later than <filename>maxrev</filename>.
7045 </para></listitem>
7046 <listitem><para><emphasis><filename>rev</filename> -</emphasis>
7047 Apply the patch only if <filename>SRCREV</filename>
7048 is equal to <filename>rev</filename>.
7049 </para></listitem>
7050 <listitem><para><emphasis><filename>notrev</filename> -</emphasis>
7051 Apply the patch only if <filename>SRCREV</filename>
7052 is not equal to <filename>rev</filename>.
7053 </para></listitem>
7054 </itemizedlist>
7055 </para>
7056 <para>Here are some additional options worth mentioning:
7057 <itemizedlist>
7058 <listitem><para><emphasis><filename>unpack</filename> -</emphasis> Controls
7059 whether or not to unpack the file if it is an archive.
7060 The default action is to unpack the file.</para></listitem>
7061 <listitem><para><emphasis><filename>subdir</filename> -</emphasis> Places the file
7062 (or extracts its contents) into the specified
7063 subdirectory of <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>.
7064 This option is useful for unusual tarballs or other archives that
7065 do not have their files already in a subdirectory within the archive.
7066 </para></listitem>
7067 <listitem><para><emphasis><filename>name</filename> -</emphasis> Specifies a
7068 name to be used for association with <filename>SRC_URI</filename> checksums
7069 when you have more than one file specified in <filename>SRC_URI</filename>.
7070 </para></listitem>
7071 <listitem><para><emphasis><filename>downloadfilename</filename> -</emphasis> Specifies
7072 the filename used when storing the downloaded file.</para></listitem>
7073 </itemizedlist>
7074 </para>
7075 </glossdef>
7076 </glossentry>
7077
7078 <glossentry id='var-SRC_URI_OVERRIDES_PACKAGE_ARCH'><glossterm>SRC_URI_OVERRIDES_PACKAGE_ARCH</glossterm>
7079 <glossdef>
7080 <para></para>
7081 <para>
7082 By default, the OpenEmbedded build system automatically detects whether
7083 <filename><link linkend='var-SRC_URI'>SRC_URI</link></filename>
7084 contains files that are machine-specific.
7085 If so, the build system automatically changes
7086 <filename><link linkend='var-PACKAGE_ARCH'>PACKAGE_ARCH</link></filename>.
7087 Setting this variable to "0" disables this behavior.
7088 </para>
7089 </glossdef>
7090 </glossentry>
7091
7092 <glossentry id='var-SRCDATE'><glossterm>SRCDATE</glossterm>
7093 <glossdef>
7094 <para>
7095 The date of the source code used to build the package.
7096 This variable applies only if the source was fetched from a Source Code Manager (SCM).
7097 </para>
7098 </glossdef>
7099 </glossentry>
7100
7101 <glossentry id='var-SRCPV'><glossterm>SRCPV</glossterm>
7102 <glossdef>
7103 <para>
7104 Returns the version string of the current package.
7105 This string is used to help define the value of
7106 <link linkend='var-PV'><filename>PV</filename></link>.
7107 </para>
7108
7109 <para>
7110 The <filename>SRCPV</filename> variable is defined in the
7111 <filename>meta/conf/bitbake.conf</filename> configuration
7112 file in the
7113 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
7114 as follows:
7115 <literallayout class='monospaced'>
7116 SRCPV = "${@bb.fetch2.get_srcrev(d)}"
7117 </literallayout>
7118 </para>
7119
7120 <para>
7121 Recipes that need to define <filename>PV</filename> do so
7122 with the help of the <filename>SRCPV</filename>.
7123 For example, the <filename>ofono</filename> recipe
7124 (<filename>ofono_git.bb</filename>) located in
7125 <filename>meta/recipes-connectivity</filename> in the
7126 Source Directory defines <filename>PV</filename> as
7127 follows:
7128 <literallayout class='monospaced'>
7129 PV = "0.12-git${SRCPV}"
7130 </literallayout>
7131 </para>
7132 </glossdef>
7133 </glossentry>
7134
7135 <glossentry id='var-SRCREV'><glossterm>SRCREV</glossterm>
7136 <glossdef>
7137 <para>
7138 The revision of the source code used to build the package.
7139 This variable applies to Subversion, Git, Mercurial and Bazaar
7140 only.
7141 Note that if you wish to build a fixed revision and you wish
7142 to avoid performing a query on the remote repository every time
7143 BitBake parses your recipe, you should specify a <filename>SRCREV</filename> that is a
7144 full revision identifier and not just a tag.
7145 </para>
7146 </glossdef>
7147 </glossentry>
7148
7149 <glossentry id='var-SSTATE_DIR'><glossterm>SSTATE_DIR</glossterm>
7150 <glossdef>
7151 <para>The directory for the shared state cache.</para>
7152 </glossdef>
7153 </glossentry>
7154
7155 <glossentry id='var-SSTATE_MIRRORS'><glossterm>SSTATE_MIRRORS</glossterm>
7156 <glossdef>
7157 <para>
7158 Configures the OpenEmbedded build system to search other
7159 mirror locations for prebuilt cache data objects before
7160 building out the data.
7161 This variable works like fetcher
7162 <link linkend='var-MIRRORS'><filename>MIRRORS</filename></link>
7163 and <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>
7164 and points to the cache locations to check for the shared
7165 objects.
7166 </para>
7167
7168 <para>
7169 You can specify a filesystem directory or a remote URL such
7170 as HTTP or FTP.
7171 The locations you specify need to contain the shared state
7172 cache (sstate-cache) results from previous builds.
7173 The sstate-cache you point to can also be from builds on
7174 other machines.
7175 </para>
7176
7177 <para>
7178 If a mirror uses the same structure as
7179 <link linkend='var-SSTATE_DIR'><filename>SSTATE_DIR</filename></link>,
7180 you need to add
7181 "PATH" at the end as shown in the examples below.
7182 The build system substitutes the correct path within the
7183 directory structure.
7184 <literallayout class='monospaced'>
7185 SSTATE_MIRRORS ?= "\
7186 file://.* http://someserver.tld/share/sstate/PATH \n \
7187 file://.* file:///some/local/dir/sstate/PATH"
7188 </literallayout>
7189 </para>
7190 </glossdef>
7191 </glossentry>
7192
7193 <glossentry id='var-STAGING_KERNEL_DIR'><glossterm>STAGING_KERNEL_DIR</glossterm>
7194 <glossdef>
7195 <para>
7196 The directory with kernel headers that are required to build out-of-tree
7197 modules.
7198 </para>
7199 </glossdef>
7200 </glossentry>
7201
7202 <glossentry id='var-STAMP'><glossterm>STAMP</glossterm>
7203 <glossdef>
7204 <para>
7205 Specifies the base path used to create recipe stamp files.
7206 The path to an actual stamp file is constructed by evaluating this
7207 string and then appending additional information.
7208 Currently, the default assignment for <filename>STAMP</filename>
7209 as set in the <filename>meta/conf/bitbake.conf</filename> file
7210 is:
7211 <literallayout class='monospaced'>
7212 STAMP = "${STAMPS_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}"
7213 </literallayout>
7214 See <link linkend='var-STAMPS_DIR'><filename>STAMPS_DIR</filename></link>,
7215 <link linkend='var-MULTIMACH_TARGET_SYS'><filename>MULTIMACH_TARGET_SYS</filename></link>,
7216 <link linkend='var-PN'><filename>PN</filename></link>,
7217 <link linkend='var-EXTENDPE'><filename>EXTENDPE</filename></link>,
7218 <link linkend='var-PV'><filename>PV</filename></link>, and
7219 <link linkend='var-PR'><filename>PR</filename></link> for related variable
7220 information.
7221 </para>
7222 </glossdef>
7223 </glossentry>
7224
7225 <glossentry id='var-STAMPS_DIR'><glossterm>STAMPS_DIR</glossterm>
7226 <glossdef>
7227 <para>
7228 Specifies the base directory in which the OpenEmbedded
7229 build system places stamps.
7230 The default directory is
7231 <filename>${TMPDIR}/stamps</filename>.
7232 </para>
7233 </glossdef>
7234 </glossentry>
7235
7236 <glossentry id='var-SUMMARY'><glossterm>SUMMARY</glossterm>
7237 <glossdef>
7238 <para>The short (72 characters or less) summary of the binary package for packaging
7239 systems such as <filename>opkg</filename>, <filename>rpm</filename> or
7240 <filename>dpkg</filename>.
7241 By default, <filename>SUMMARY</filename> is used to define
7242 the <link linkend='var-DESCRIPTION'><filename>DESCRIPTION</filename></link>
7243 variable if <filename>DESCRIPTION</filename> is not set
7244 in the recipe.
7245 </para>
7246 </glossdef>
7247 </glossentry>
7248
7249 <glossentry id='var-SYSLINUX_DEFAULT_CONSOLE'><glossterm>SYSLINUX_DEFAULT_CONSOLE</glossterm>
7250 <glossdef>
7251 <para>
7252 Specifies the kernel boot default console.
7253 If you want to use a console other than the default,
7254 set this variable in your recipe as follows where "X" is
7255 the console number you want to use:
7256 <literallayout class='monospaced'>
7257 SYSLINUX_DEFAULT_CONSOLE = "console=ttyX"
7258 </literallayout>
7259 </para>
7260
7261 <para>
7262 The
7263 <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
7264 class initially sets this variable to null but then checks
7265 for a value later.
7266 </para>
7267 </glossdef>
7268 </glossentry>
7269
7270 <glossentry id='var-SYSLINUX_OPTS'><glossterm>SYSLINUX_OPTS</glossterm>
7271 <glossdef>
7272 <para>
7273 Lists additional options to add to the syslinux file.
7274 You need to set this variable in your recipe.
7275 If you want to list multiple options, separate the options
7276 with a semicolon character (<filename>;</filename>).
7277 </para>
7278
7279 <para>
7280 The
7281 <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
7282 class uses this variable to create a set of options.
7283 </para>
7284 </glossdef>
7285 </glossentry>
7286
7287 <glossentry id='var-SYSLINUX_SERIAL'><glossterm>SYSLINUX_SERIAL</glossterm>
7288 <glossdef>
7289 <para>
7290 Specifies the alternate serial port or turns it off.
7291 To turn off serial, set this variable to an empty string
7292 in your recipe.
7293 The variable's default value is set in the
7294 <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
7295 as follows:
7296 <literallayout class='monospaced'>
7297 SYSLINUX_SERIAL ?= "0 115200"
7298 </literallayout>
7299 The class checks for and uses the variable as needed. </para>
7300 </glossdef>
7301 </glossentry>
7302
7303 <glossentry id='var-SYSLINUX_SPLASH'><glossterm>SYSLINUX_SPLASH</glossterm>
7304 <glossdef>
7305 <para>
7306 An <filename>.LSS</filename> file used as the background
7307 for the VGA boot menu when you are using the boot menu.
7308 You need to set this variable in your recipe.
7309 </para>
7310
7311 <para>
7312 The
7313 <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
7314 class checks for this variable and if found, the
7315 OpenEmbedded build system installs the splash screen.
7316 </para>
7317 </glossdef>
7318 </glossentry>
7319
7320 <glossentry id='var-SYSLINUX_SERIAL_TTY'><glossterm>SYSLINUX_SERIAL_TTY</glossterm>
7321 <glossdef>
7322 <para>
7323 Specifies the alternate console=tty... kernel boot argument.
7324 The variable's default value is set in the
7325 <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
7326 as follows:
7327 <literallayout class='monospaced'>
7328 SYSLINUX_SERIAL_TTY ?= "console=ttyS0,115200"
7329 </literallayout>
7330 The class checks for and uses the variable as needed.
7331 </para>
7332 </glossdef>
7333 </glossentry>
7334
7335 <glossentry id='var-SYSROOT_PREPROCESS_FUNCS'><glossterm>SYSROOT_PREPROCESS_FUNCS</glossterm>
7336 <glossdef>
7337 <para>
7338 A list of functions to execute after files are staged into
7339 the sysroot.
7340 These functions are usually used to apply additional
7341 processing on the staged files, or to stage additional
7342 files.
7343 </para>
7344 </glossdef>
7345 </glossentry>
7346
7347 <glossentry id='var-SYSTEMD_AUTO_ENABLE'><glossterm>SYSTEMD_AUTO_ENABLE</glossterm>
7348 <glossdef>
7349 <para>
7350 For recipes that inherit the
7351 <link linkend='ref-classes-systemd'><filename>systemd</filename></link>
7352 class, this variable specifies whether the service you have
7353 specified in
7354 <link linkend='var-SYSTEMD_SERVICE'><filename>SYSTEMD_SERVICE</filename></link>
7355 should be started automatically or not.
7356 By default, the service is enabled to automatically start
7357 at boot time.
7358 The default setting is in the
7359 <link linkend='ref-classes-systemd'><filename>systemd</filename></link>
7360 class as follows:
7361 <literallayout class='monospaced'>
7362 SYSTEMD_AUTO_ENABLE ??= "enable"
7363 </literallayout>
7364 You can disable the service by setting the variable to
7365 "disable".
7366 </para>
7367 </glossdef>
7368 </glossentry>
7369
7370 <glossentry id='var-SYSTEMD_PACKAGES'><glossterm>SYSTEMD_PACKAGES</glossterm>
7371 <glossdef>
7372 <para>
7373 For recipes that inherit the
7374 <link linkend='ref-classes-systemd'><filename>systemd</filename></link>
7375 class, this variable locates the systemd unit files when
7376 they are not found in the main recipe's package.
7377 By default, the
7378 <filename>SYSTEMD_PACKAGES</filename> variable is set
7379 such that the systemd unit files are assumed to reside in
7380 the recipes main package:
7381 <literallayout class='monospaced'>
7382 SYSTEMD_PACKAGES ?= "${PN}"
7383 </literallayout>
7384 If these unit files are not in this recipe's main
7385 package, you need to use
7386 <filename>SYSTEMD_PACKAGES</filename> to list the package
7387 or packages in which the build system can find the systemd
7388 unit files.
7389 </para>
7390 </glossdef>
7391 </glossentry>
7392
7393 <glossentry id='var-SYSTEMD_SERVICE'><glossterm>SYSTEMD_SERVICE</glossterm>
7394 <glossdef>
7395 <para>
7396 For recipes that inherit the
7397 <link linkend='ref-classes-systemd'><filename>systemd</filename></link>
7398 class, this variable specifies the systemd service name for
7399 a package.
7400 </para>
7401
7402 <para>
7403 When you specify this file in your recipe, use a package
7404 name override to indicate the package to which the value
7405 applies.
7406 Here is an example from the connman recipe:
7407 <literallayout class='monospaced'>
7408 SYSTEMD_SERVICE_${PN} = "connman.service"
7409 </literallayout>
7410 </para>
7411 </glossdef>
7412 </glossentry>
7413
7414 </glossdiv>
7415
7416 <glossdiv id='var-glossary-t'><title>T</title>
7417
7418 <glossentry id='var-T'><glossterm>T</glossterm>
7419 <glossdef>
7420 <para>This variable points to a directory were BitBake places
7421 temporary files, which consist mostly of task logs and
7422 scripts, when building a particular recipe.
7423 The variable is typically set as follows:
7424 <literallayout class='monospaced'>
7425 T = "${WORKDIR}/temp"
7426 </literallayout>
7427 The <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>
7428 is the directory into which BitBake unpacks and builds the
7429 recipe.
7430 The default <filename>bitbake.conf</filename> file sets this variable.</para>
7431 <para>The <filename>T</filename> variable is not to be confused with
7432 the <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link> variable,
7433 which points to the root of the directory tree where BitBake
7434 places the output of an entire build.
7435 </para>
7436 </glossdef>
7437 </glossentry>
7438
7439 <glossentry id='var-TARGET_ARCH'><glossterm>TARGET_ARCH</glossterm>
7440 <glossdef>
7441 <para>
7442 The target machine's architecture.
7443 The OpenEmbedded build system supports many
7444 architectures.
7445 Here is an example list of architectures supported.
7446 This list is by no means complete as the architecture
7447 is configurable:
7448 <literallayout class='monospaced'>
7449 arm
7450 i586
7451 x86_64
7452 powerpc
7453 powerpc64
7454 mips
7455 mipsel
7456 </literallayout>
7457 </para>
7458 </glossdef>
7459 </glossentry>
7460
7461 <glossentry id='var-TARGET_CFLAGS'><glossterm>TARGET_CFLAGS</glossterm>
7462 <glossdef>
7463 <para>
7464 Flags passed to the C compiler for the target system.
7465 This variable evaluates to the same as
7466 <filename><link linkend='var-CFLAGS'>CFLAGS</link></filename>.
7467 </para>
7468 </glossdef>
7469 </glossentry>
7470
7471
7472 <glossentry id='var-TARGET_FPU'><glossterm>TARGET_FPU</glossterm>
7473 <glossdef>
7474 <para>Specifies the method for handling FPU code.
7475 For FPU-less targets, which include most ARM CPUs, the variable must be
7476 set to "soft".
7477 If not, the kernel emulation gets used, which results in a performance penalty.</para>
7478 </glossdef>
7479 </glossentry>
7480
7481 <glossentry id='var-TARGET_OS'><glossterm>TARGET_OS</glossterm>
7482 <glossdef>
7483 <para>Specifies the target's operating system.
7484 The variable can be set to "linux" for <filename>eglibc</filename>-based systems and
7485 to "linux-uclibc" for <filename>uclibc</filename>.
7486 For ARM/EABI targets, there are also "linux-gnueabi" and
7487 "linux-uclibc-gnueabi" values possible.</para>
7488 </glossdef>
7489 </glossentry>
7490
7491 <glossentry id='var-TCLIBC'><glossterm>TCLIBC</glossterm>
7492 <glossdef>
7493 <para>
7494 Specifies the GNU standard C library (<filename>libc</filename>)
7495 variant to use during the build process.
7496 This variable replaces <filename>POKYLIBC</filename>, which is no longer
7497 supported.
7498 </para>
7499 <para>
7500 You can select "eglibc" or "uclibc".
7501 <note>
7502 This release of the Yocto Project does not support the
7503 <filename>glibc</filename> implementation of <filename>libc</filename>.
7504 </note>
7505 </para>
7506 </glossdef>
7507 </glossentry>
7508
7509 <glossentry id='var-TCMODE'><glossterm>TCMODE</glossterm>
7510 <glossdef>
7511 <para>
7512 Specifies the toolchain selector.
7513 <filename>TCMODE</filename> controls the characteristics
7514 of the generated packages and images by telling the
7515 OpenEmbedded build system which toolchain profile to use.
7516 By default, the OpenEmbedded build system builds its own
7517 internal toolchain.
7518 The variable's default value is "default", which uses
7519 that internal toolchain.
7520 <note>
7521 If <filename>TCMODE</filename> is set to a value
7522 other than "default", then it is your responsibility
7523 to ensure that the toolchain is compatible with the
7524 default toolchain.
7525 Using older or newer versions of these components
7526 might cause build problems.
7527 See the
7528 <ulink url='&YOCTO_RELEASE_NOTES;'>Release Notes</ulink>
7529 for the specific components with which the toolchain
7530 must be compatible.
7531 </note>
7532 </para>
7533
7534 <para>
7535 With additional layers, it is possible to use a pre-compiled
7536 external toolchain.
7537 One example is the Sourcery G++ Toolchain.
7538 The support for this toolchain resides in the separate
7539 <filename>meta-sourcery</filename> layer at
7540 <ulink url='http://github.com/MentorEmbedded/meta-sourcery/'></ulink>.
7541 You can use <filename>meta-sourcery</filename> as a
7542 template for adding support for other external toolchains.
7543 </para>
7544
7545 <para>
7546 The <filename>TCMODE</filename> variable points the build
7547 system to a file in
7548 <filename>conf/distro/include/tcmode-${TCMODE}.inc</filename>.
7549 Thus, for <filename>meta-sourcery</filename>,
7550 which has <filename>conf/distro/include/tcmode-external-sourcery.inc</filename>,
7551 you would set the variable as follows:
7552 <literallayout class='monospaced'>
7553 TCMODE ?= "external-sourcery"
7554 </literallayout>
7555 </para>
7556
7557 <para>
7558 The variable is similar to
7559 <link linkend='var-TCLIBC'><filename>TCLIBC</filename></link>,
7560 which controls the variant of the GNU standard C library
7561 (<filename>libc</filename>) used during the build process:
7562 <filename>eglibc</filename> or <filename>uclibc</filename>.
7563 </para>
7564 </glossdef>
7565 </glossentry>
7566
7567 <glossentry id='var-TEST_EXPORT_DIR'><glossterm>TEST_EXPORT_DIR</glossterm>
7568 <glossdef>
7569 <para>
7570 The location the OpenEmbedded build system uses to export
7571 tests when the
7572 <link linkend='var-TEST_EXPORT_ONLY'><filename>TEST_EXPORT_ONLY</filename></link>
7573 variable is set to "1".
7574 </para>
7575
7576 <para>
7577 The <filename>TEST_EXPORT_DIR</filename> variable defaults
7578 to <filename>"${TMPDIR}/testimage/${PN}"</filename>.
7579 </para>
7580 </glossdef>
7581 </glossentry>
7582
7583 <glossentry id='var-TEST_EXPORT_ONLY'><glossterm>TEST_EXPORT_ONLY</glossterm>
7584 <glossdef>
7585 <para>
7586 Specifies to export the tests only.
7587 Set this variable to "1" if you do not want to run the
7588 tests but you want them to be exported in a manner that
7589 you to run them outside of the build system.
7590 </para>
7591 </glossdef>
7592 </glossentry>
7593
7594 <glossentry id='var-TEST_IMAGE'><glossterm>TEST_IMAGE</glossterm>
7595 <glossdef>
7596 <para>
7597 Automatically runs the series of automated tests for
7598 images when an image is successfully built.
7599 </para>
7600
7601 <para>
7602 These tests are written in Python making use of the
7603 <filename>unittest</filename> module, and the majority of
7604 them run commands on the target system over
7605 <filename>ssh</filename>.
7606 You can set this variable to "1" in your
7607 <filename>local.conf</filename> file in the
7608 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
7609 to have the OpenEmbedded build system automatically run
7610 these tests after an image successfully builds:
7611 <literallayout class='monospaced'>
7612 TEST_IMAGE = "1"
7613 </literallayout>
7614 For more information on enabling, running, and writing
7615 these tests, see the
7616 "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
7617 section in the Yocto Project Development Manual and the
7618 "<link linkend='ref-classes-testimage'><filename>testimage.bbclass</filename></link>"
7619 section.
7620 </para>
7621 </glossdef>
7622 </glossentry>
7623
7624 <glossentry id='var-TEST_LOG_DIR'><glossterm>TEST_LOG_DIR</glossterm>
7625 <glossdef>
7626 <para>
7627 Holds the SSH log and the boot log for QEMU machines.
7628 The <filename>TEST_LOG_DIR</filename> variable defaults
7629 to <filename>"${WORKDIR}/testimage"</filename>.
7630 <note>
7631 Actual test results reside in the task log
7632 (<filename>log.do_testimage</filename>), which is in
7633 the <filename>${WORKDIR}/temp/</filename> directory.
7634 </note>
7635 </para>
7636 </glossdef>
7637 </glossentry>
7638
7639 <glossentry id='var-TEST_QEMUBOOT_TIMEOUT'><glossterm>TEST_QEMUBOOT_TIMEOUT</glossterm>
7640 <glossdef>
7641 <para>
7642 The time in seconds allowed for an image to boot before
7643 automated runtime tests begin to run against an
7644 image.
7645 The default timeout period to allow the boot process to
7646 reach the login prompt is 500 seconds.
7647 You can specify a different value in the
7648 <filename>local.conf</filename> file.
7649 </para>
7650
7651 <para>
7652 For more information on testing images, see the
7653 "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
7654 section in the Yocto Project Development Manual.
7655 </para>
7656 </glossdef>
7657 </glossentry>
7658
7659 <glossentry id='var-TEST_SERVER_IP'><glossterm>TEST_SERVER_IP</glossterm>
7660 <glossdef>
7661 <para>
7662 The IP address of the build machine (host machine).
7663 This IP address is usually automatically detected.
7664 However, if detection fails, this variable needs to be set
7665 to the IP address of the build machine (i.e. where
7666 the build is taking place).
7667 <note>
7668 The <filename>TEST_SERVER_IP</filename> variable
7669 is only used for a small number of tests such as
7670 the "smart" test suite, which needs to download
7671 packages from <filename>DEPLOY_DIR/rpm</filename>.
7672 </note>
7673 </para>
7674 </glossdef>
7675 </glossentry>
7676
7677 <glossentry id='var-TEST_TARGET'><glossterm>TEST_TARGET</glossterm>
7678 <glossdef>
7679 <para>
7680 Specifies the target controller to use when running tests
7681 against a test image.
7682 The default controller to use is "qemu":
7683 <literallayout class='monospaced'>
7684 TEST_TARGET = "qemu"
7685 </literallayout>
7686 A target controller is a class that defines how an
7687 image gets deployed on a target and how a target is started.
7688 A layer can extend the controllers by adding a module
7689 in the layer's <filename>/lib/oeqa/controllers</filename>
7690 directory and by inheriting the
7691 <filename>BaseTarget</filename> class, which is an abstract
7692 class that cannot be used as a value of
7693 <filename>TEST_TARGET</filename>.
7694 </para>
7695
7696 <para>
7697 You can provide the following arguments with
7698 <filename>TEST_TARGET</filename>:
7699 <itemizedlist>
7700 <listitem><para><emphasis>"qemu" and "QemuTarget":</emphasis>
7701 Boots a QEMU image and runs the tests.
7702 See the
7703 "<ulink url='&YOCTO_DOCS_DEV_URL;#qemu-image-enabling-tests'>Enabling Runtime Tests on QEMU</ulink>"
7704 section in the Yocto Project Development Manual for
7705 more information.
7706 </para></listitem>
7707 <listitem><para><emphasis>"simpleremote" and "SimpleRemoteTarget":</emphasis>
7708 Runs the tests on target hardware that is already
7709 up and running.
7710 The hardware can be on the network or it can be
7711 a device running an image on QEMU.
7712 You must also set
7713 <link linkend='var-TEST_TARGET_IP'><filename>TEST_TARGET_IP</filename></link>
7714 when you use "simpleremote" or "SimpleRemoteTarget".
7715 <note>
7716 This argument is defined in
7717 <filename>meta/lib/oeqa/targetcontrol.py</filename>.
7718 The small caps names are kept for compatibility
7719 reasons.
7720 </note>
7721 </para></listitem>
7722 <listitem><para><emphasis>"GummibootTarget":</emphasis>
7723 Automatically deploys and runs tests on an
7724 EFI-enabled machine that has a master image
7725 installed.
7726 <note>
7727 This argument is defined in
7728 <filename>meta/lib/oeqa/controllers/masterimage.py</filename>.
7729 </note>
7730 </para></listitem>
7731 </itemizedlist>
7732 </para>
7733
7734 <para>
7735 For information on running tests on hardware, see the
7736 "<ulink url='&YOCTO_DOCS_DEV_URL;#hardware-image-enabling-tests'>Enabling Runtime Tests on Hardware</ulink>"
7737 section in the Yocto Project Development Manual.
7738 </para>
7739 </glossdef>
7740 </glossentry>
7741
7742 <glossentry id='var-TEST_TARGET_IP'><glossterm>TEST_TARGET_IP</glossterm>
7743 <glossdef>
7744 <para>
7745 The IP address of your hardware under test.
7746 The <filename>TEST_TARGET_IP</filename> variable has no
7747 effect when
7748 <link linkend='var-TEST_TARGET'><filename>TEST_TARGET</filename></link>
7749 is set to "qemu".
7750 </para>
7751
7752 <para>
7753 When you specify the IP address, you can also include a
7754 port.
7755 Here is an example:
7756 <literallayout class='monospaced'>
7757 TEST_TARGET_IP = "192.168.1.4:2201"
7758 </literallayout>
7759 Specifying a port is useful when SSH is started on a
7760 non-standard port or in cases when your hardware under test
7761 is behind a firewall or network that is not directly
7762 accessible from your host and you need to do port address
7763 translation.
7764 </para>
7765 </glossdef>
7766 </glossentry>
7767
7768 <glossentry id='var-TEST_SUITES'><glossterm>TEST_SUITES</glossterm>
7769 <glossdef>
7770 <para>
7771 An ordered list of tests (modules) to run against
7772 an image when performing automated runtime testing.
7773 </para>
7774
7775 <para>
7776 The OpenEmbedded build system provides a core set of tests
7777 that can be used against images.
7778 <note>
7779 Currently, there is only support for running these tests
7780 under QEMU.
7781 </note>
7782 Tests include <filename>ping</filename>,
7783 <filename>ssh</filename>, <filename>df</filename> among
7784 others.
7785 You can add your own tests to the list of tests by
7786 appending <filename>TEST_SUITES</filename> as follows:
7787 <literallayout class='monospaced'>
7788 TEST_SUITES_append = " mytest"
7789 </literallayout>
7790 Alternatively, you can provide the "auto" option to
7791 have all applicable tests run against the image.
7792 <literallayout class='monospaced'>
7793 TEST_SUITES_append = " auto"
7794 </literallayout>
7795 Using this option causes the build system to automatically
7796 run tests that are applicable to the image.
7797 Tests that are not applicable are skipped.
7798 </para>
7799
7800 <para>
7801 The order in which tests are run is important.
7802 Tests that depend on another test must appear later in the
7803 list than the test on which they depend.
7804 For example, if you append the list of tests with two
7805 tests (<filename>test_A</filename> and
7806 <filename>test_B</filename>) where
7807 <filename>test_B</filename> is dependent on
7808 <filename>test_A</filename>, then you must order the tests
7809 as follows:
7810 <literallayout class='monospaced'>
7811 TEST_SUITES = " test_A test_B"
7812 </literallayout>
7813 </para>
7814
7815 <para>
7816 For more information on testing images, see the
7817 "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
7818 section in the Yocto Project Development Manual.
7819 </para>
7820 </glossdef>
7821 </glossentry>
7822
7823 <glossentry id='var-THISDIR'><glossterm>THISDIR</glossterm>
7824 <glossdef>
7825 <para>
7826 The directory in which the file BitBake is currently
7827 parsing is located.
7828 Do not manually set this variable.
7829 </para>
7830 </glossdef>
7831 </glossentry>
7832
7833 <glossentry id='var-TMPDIR'><glossterm>TMPDIR</glossterm>
7834 <glossdef>
7835 <para>
7836 This variable is the base directory the OpenEmbedded
7837 build system uses for all build output and intermediate
7838 files (other than the shared state cache).
7839 By default, the <filename>TMPDIR</filename> variable points
7840 to <filename>tmp</filename> within the
7841 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
7842 </para>
7843
7844 <para>
7845 If you want to establish this directory in a location other
7846 than the default, you can uncomment and edit the following
7847 statement in the
7848 <filename>conf/local.conf</filename> file in the
7849 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>:
7850 <literallayout class='monospaced'>
7851 #TMPDIR = "${TOPDIR}/tmp"
7852 </literallayout>
7853 An example use for this scenario is to set
7854 <filename>TMPDIR</filename> to a local disk, which does
7855 not use NFS, while having the Build Directory use NFS.
7856 </para>
7857
7858 <para>
7859 The filesystem used by <filename>TMPDIR</filename> must
7860 have standard filesystem semantics (i.e. mixed-case files
7861 are unique, POSIX file locking, and persistent inodes).
7862 Due to various issues with NFS and bugs in some
7863 implementations, NFS does not meet this minimum
7864 requirement.
7865 Consequently, <filename>TMPDIR</filename> cannot be on
7866 NFS.
7867 </para>
7868 </glossdef>
7869 </glossentry>
7870
7871 <glossentry id='var-TOOLCHAIN_HOST_TASK'><glossterm>TOOLCHAIN_HOST_TASK</glossterm>
7872 <glossdef>
7873 <para>
7874 This variable lists packages the OpenEmbedded build system
7875 uses when building an SDK, which contains a
7876 cross-development environment.
7877 The packages specified by this variable are part of the
7878 toolchain set that runs on the
7879 <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>,
7880 and each package should usually have the prefix
7881 "nativesdk-".
7882 When building an SDK using
7883 <filename>bitbake -c populate_sdk &lt;imagename&gt;</filename>,
7884 a default list of packages is set in this variable, but
7885 you can add additional packages to the list.
7886 </para>
7887
7888 <para>
7889 For background information on cross-development toolchains
7890 in the Yocto Project development environment, see the
7891 "<link linkend='cross-development-toolchain-generation'>Cross-Development Toolchain Generation</link>"
7892 section.
7893 For information on setting up a cross-development
7894 environment, see the
7895 "<ulink url='&YOCTO_DOCS_ADT_URL;#installing-the-adt'>Installing the ADT and Toolchains</ulink>"
7896 section in the Yocto Project Application Developer's Guide.
7897 </para>
7898 </glossdef>
7899 </glossentry>
7900
7901 <glossentry id='var-TOOLCHAIN_TARGET_TASK'><glossterm>TOOLCHAIN_TARGET_TASK</glossterm>
7902 <glossdef>
7903 <para>
7904 This variable lists packages the OpenEmbedded build system
7905 uses when it creates the target part of an SDK
7906 (i.e. the part built for the target hardware), which
7907 includes libraries and headers.
7908 </para>
7909
7910 <para>
7911 For background information on cross-development toolchains
7912 in the Yocto Project development environment, see the
7913 "<link linkend='cross-development-toolchain-generation'>Cross-Development Toolchain Generation</link>"
7914 section.
7915 For information on setting up a cross-development
7916 environment, see the
7917 "<ulink url='&YOCTO_DOCS_ADT_URL;#installing-the-adt'>Installing the ADT and Toolchains</ulink>"
7918 section in the Yocto Project Application Developer's Guide.
7919 </para>
7920 </glossdef>
7921 </glossentry>
7922
7923 <glossentry id='var-TOPDIR'><glossterm>TOPDIR</glossterm>
7924 <glossdef>
7925 <para>
7926 The top-level
7927 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
7928 BitBake automatically sets this variable when you
7929 initialize your build environment using either
7930 <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
7931 or
7932 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>.
7933 </para>
7934 </glossdef>
7935 </glossentry>
7936
7937 <glossentry id='var-TRANSLATED_TARGET_ARCH'><glossterm>TRANSLATED_TARGET_ARCH</glossterm>
7938 <glossdef>
7939 <para>
7940 A sanitized version of
7941 <link linkend='var-TARGET_ARCH'><filename>TARGET_ARCH</filename></link>.
7942 This variable is used where the architecture is needed in
7943 a value where underscores are not allowed, for example
7944 within package filenames.
7945 In this case, dash characters replace any underscore
7946 characters used in TARGET_ARCH.
7947 </para>
7948
7949 <para>
7950 Do not edit this variable.
7951 </para>
7952 </glossdef>
7953 </glossentry>
7954
7955 <glossentry id='var-TUNE_PKGARCH'><glossterm>TUNE_PKGARCH</glossterm>
7956 <glossdef>
7957 <para>
7958 The package architecture understood by the packaging
7959 system to define the architecture, ABI, and tuning of
7960 output packages.
7961 </para>
7962 </glossdef>
7963 </glossentry>
7964
7965 </glossdiv>
7966
7967 <glossdiv id='var-glossary-u'><title>U</title>
7968
7969 <glossentry id='var-UBOOT_CONFIG'><glossterm>UBOOT_CONFIG</glossterm>
7970 <glossdef>
7971 <para>
7972 Configures the
7973 <link linkend='var-UBOOT_MACHINE'><filename>UBOOT_MACHINE</filename></link>
7974 and can also define
7975 <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
7976 for individual cases.
7977 </para>
7978
7979 <para>
7980 Following is an example from the
7981 <filename>meta-fsl-arm</filename> layer.
7982 <literallayout class='monospaced'>
7983 UBOOT_CONFIG ??= "sd"
7984 UBOOT_CONFIG[sd] = "mx6qsabreauto_config,sdcard"
7985 UBOOT_CONFIG[eimnor] = "mx6qsabreauto_eimnor_config"
7986 UBOOT_CONFIG[nand] = "mx6qsabreauto_nand_config,ubifs"
7987 UBOOT_CONFIG[spinor] = "mx6qsabreauto_spinor_config"
7988 </literallayout>
7989 In this example, "sd" is selected as the configuration
7990 of the possible four for the
7991 <filename>UBOOT_MACHINE</filename>.
7992 The "sd" configuration defines "mx6qsabreauto_config"
7993 as the value for <filename>UBOOT_MACHINE</filename>, while
7994 the "sdcard" specifies the
7995 <filename>IMAGE_FSTYPES</filename> to use for the U-boot
7996 image.
7997 </para>
7998
7999 <para>
8000 For more information on how the
8001 <filename>UBOOT_CONFIG</filename> is handled, see the
8002 <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/meta/classes/uboot-config.bbclass'><filename>uboot-config</filename></ulink>
8003 class.
8004 </para>
8005 </glossdef>
8006 </glossentry>
8007
8008 <glossentry id='var-UBOOT_ENTRYPOINT'><glossterm>UBOOT_ENTRYPOINT</glossterm>
8009 <glossdef>
8010 <para>
8011 Specifies the entry point for the U-Boot image.
8012 During U-Boot image creation, the
8013 <filename>UBOOT_ENTRYPOINT</filename> variable is passed
8014 as a command-line parameter to the
8015 <filename>uboot-mkimage</filename> utility.
8016 </para>
8017 </glossdef>
8018 </glossentry>
8019
8020 <glossentry id='var-UBOOT_LOADADDRESS'><glossterm>UBOOT_LOADADDRESS</glossterm>
8021 <glossdef>
8022 <para>
8023 Specifies the load address for the U-Boot image.
8024 During U-Boot image creation, the
8025 <filename>UBOOT_LOADADDRESS</filename> variable is passed
8026 as a command-line parameter to the
8027 <filename>uboot-mkimage</filename> utility.
8028 </para>
8029 </glossdef>
8030 </glossentry>
8031
8032 <glossentry id='var-UBOOT_LOCALVERSION'><glossterm>UBOOT_LOCALVERSION</glossterm>
8033 <glossdef>
8034 <para>
8035 Appends a string to the name of the local version of the
8036 U-Boot image.
8037 For example, assuming the version of the U-Boot image
8038 built was "2013.10, the full version string reported by
8039 U-Boot would be "2013.10-yocto" given the following
8040 statement:
8041 <literallayout class='monospaced'>
8042 UBOOT_LOCALVERSION = "-yocto"
8043 </literallayout>
8044 </para>
8045 </glossdef>
8046 </glossentry>
8047
8048 <glossentry id='var-UBOOT_MACHINE'><glossterm>UBOOT_MACHINE</glossterm>
8049 <glossdef>
8050 <para>
8051 Specifies the value passed on the
8052 <filename>make</filename> command line when building
8053 a U-Boot image.
8054 The value indicates the target platform configuration.
8055 You typically set this variable from the machine
8056 configuration file (i.e.
8057 <filename>conf/machine/&lt;machine_name&gt;.conf</filename>).
8058 </para>
8059 </glossdef>
8060 </glossentry>
8061
8062 <glossentry id='var-UBOOT_MAKE_TARGET'><glossterm>UBOOT_MAKE_TARGET</glossterm>
8063 <glossdef>
8064 <para>
8065 Specifies the target called in the
8066 <filename>Makefile</filename>.
8067 The default target is "all".
8068 </para>
8069 </glossdef>
8070 </glossentry>
8071
8072 <glossentry id='var-UBOOT_SUFFIX'><glossterm>UBOOT_SUFFIX</glossterm>
8073 <glossdef>
8074 <para>
8075 Points to the generated U-Boot extension.
8076 For example, <filename>u-boot.sb</filename> has a
8077 <filename>.sb</filename> extension.
8078 </para>
8079
8080 <para>
8081 The default U-Boot extension is
8082 <filename>.bin</filename>
8083 </para>
8084 </glossdef>
8085 </glossentry>
8086
8087 <glossentry id='var-UBOOT_TARGET'><glossterm>UBOOT_TARGET</glossterm>
8088 <glossdef>
8089 <para>
8090 Specifies the target used for building U-Boot.
8091 The target is passed directly as part of the "make" command
8092 (e.g. SPL and AIS).
8093 If you do not specifically set this variable, the
8094 OpenEmbedded build process passes and uses "all" for the
8095 target during the U-Boot building process.
8096 </para>
8097 </glossdef>
8098 </glossentry>
8099
8100 <glossentry id='var-USER_CLASSES'><glossterm>USER_CLASSES</glossterm>
8101 <glossdef>
8102 <para>
8103 A list of classes to globally inherit.
8104 These classes are used by the OpenEmbedded build system
8105 to enable extra features (e.g.
8106 <filename>buildstats</filename>,
8107 <filename>image-mklibs</filename>, and so forth).
8108 </para>
8109
8110 <para>
8111 The default list is set in your
8112 <filename>local.conf</filename> file:
8113 <literallayout class='monospaced'>
8114 USER_CLASSES ?= "buildstats image-mklibs image-prelink"
8115 </literallayout>
8116 For more information, see
8117 <filename>meta-yocto/conf/local.conf.sample</filename> in
8118 the
8119 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
8120 </para>
8121 </glossdef>
8122 </glossentry>
8123
8124 <glossentry id='var-USERADD_ERROR_DYNAMIC'><glossterm>USERADD_ERROR_DYNAMIC</glossterm>
8125 <glossdef>
8126 <para>
8127 Forces the OpenEmbedded build system to produce an error
8128 if the user identification (<filename>uid</filename>) and
8129 group identification (<filename>gid</filename>) values
8130 are not defined in <filename>files/passwd</filename>
8131 and <filename>files/group</filename> files.
8132 </para>
8133
8134 <para>
8135 The default behavior for the build system is to dynamically
8136 apply <filename>uid</filename> and
8137 <filename>gid</filename> values.
8138 Consequently, the <filename>USERADD_ERROR_DYNAMIC</filename>
8139 variable is by default not set.
8140 If you plan on using statically assigned
8141 <filename>gid</filename> and <filename>uid</filename>
8142 values, you should set
8143 the <filename>USERADD_ERROR_DYNAMIC</filename> variable in
8144 your <filename>local.conf</filename> file as
8145 follows:
8146 <literallayout class='monospaced'>
8147 USERADD_ERROR_DYNAMIC = "1"
8148 </literallayout>
8149 Overriding the default behavior implies you are going to
8150 also take steps to set static <filename>uid</filename> and
8151 <filename>gid</filename> values through use of the
8152 <link linkend='var-USERADDEXTENSION'><filename>USERADDEXTENSION</filename></link>,
8153 <link linkend='var-USERADD_UID_TABLES'><filename>USERADD_UID_TABLES</filename></link>,
8154 and
8155 <link linkend='var-USERADD_GID_TABLES'><filename>USERADD_GID_TABLES</filename></link>
8156 variables.
8157 </para>
8158 </glossdef>
8159 </glossentry>
8160
8161 <glossentry id='var-USERADD_GID_TABLES'><glossterm>USERADD_GID_TABLES</glossterm>
8162 <glossdef>
8163 <para>
8164 Specifies a password file to use for obtaining static
8165 group identification (<filename>gid</filename>) values
8166 when the OpenEmbedded build system adds a group to the
8167 system during package installation.
8168 </para>
8169
8170 <para>
8171 When applying static group identification
8172 (<filename>gid</filename>) values, the OpenEmbedded build
8173 system looks in
8174 <link linkend='var-BBPATH'><filename>BBPATH</filename></link>
8175 for a <filename>files/group</filename> file and then applies
8176 those <filename>uid</filename> values.
8177 Set the variable as follows in your
8178 <filename>local.conf</filename> file:
8179 <literallayout class='monospaced'>
8180 USERADD_GID_TABLES = "files/group"
8181 </literallayout>
8182 </para>
8183
8184 <note>
8185 Setting the
8186 <link linkend='var-USERADDEXTENSION'><filename>USERADDEXTENSION</filename></link>
8187 variable to "useradd-staticids" causes the build system
8188 to use static <filename>gid</filename> values.
8189 </note>
8190 </glossdef>
8191 </glossentry>
8192
8193 <glossentry id='var-USERADD_UID_TABLES'><glossterm>USERADD_UID_TABLES</glossterm>
8194 <glossdef>
8195 <para>
8196 Specifies a password file to use for obtaining static
8197 user identification (<filename>uid</filename>) values
8198 when the OpenEmbedded build system adds a user to the
8199 system during package installation.
8200 </para>
8201
8202 <para>
8203 When applying static user identification
8204 (<filename>uid</filename>) values, the OpenEmbedded build
8205 system looks in
8206 <link linkend='var-BBPATH'><filename>BBPATH</filename></link>
8207 for a <filename>files/passwd</filename> file and then applies
8208 those <filename>uid</filename> values.
8209 Set the variable as follows in your
8210 <filename>local.conf</filename> file:
8211 <literallayout class='monospaced'>
8212 USERADD_UID_TABLES = "files/passwd"
8213 </literallayout>
8214 </para>
8215
8216 <note>
8217 Setting the
8218 <link linkend='var-USERADDEXTENSION'><filename>USERADDEXTENSION</filename></link>
8219 variable to "useradd-staticids" causes the build system
8220 to use static <filename>uid</filename> values.
8221 </note>
8222 </glossdef>
8223 </glossentry>
8224
8225 <glossentry id='var-USERADD_PACKAGES'><glossterm>USERADD_PACKAGES</glossterm>
8226 <glossdef>
8227 <para>
8228 When a recipe inherits the
8229 <filename>useradd</filename> class, this variable
8230 specifies the individual packages within the recipe that
8231 require users and/or groups to be added.
8232 </para>
8233
8234 <para>
8235 You must set this variable if the recipe inherits the
8236 class.
8237 For example, the following enables adding a user for the
8238 main package in a recipe:
8239 <literallayout class='monospaced'>
8240 USERADD_PACKAGES = "${PN}"
8241 </literallayout>
8242 <note>
8243 If follows that if you are going to use the
8244 <filename>USERADD_PACKAGES</filename> variable,
8245 you need to set one or more of the
8246 <link linkend='var-USERADD_PARAM'><filename>USERADD_PARAM</filename></link>,
8247 <link linkend='var-GROUPADD_PARAM'><filename>GROUPADD_PARAM</filename></link>,
8248 or
8249 <link linkend='var-GROUPMEMS_PARAM'><filename>GROUPMEMS_PARAM</filename></link>
8250 variables.
8251 </note>
8252 </para>
8253
8254 </glossdef>
8255 </glossentry>
8256
8257 <glossentry id='var-USERADD_PARAM'><glossterm>USERADD_PARAM</glossterm>
8258 <glossdef>
8259 <para>
8260 When a recipe inherits the
8261 <filename>useradd</filename> class, this variable
8262 specifies for a package what parameters should be passed
8263 to the <filename>useradd</filename> command
8264 if you wish to add a user to the system when the package
8265 is installed.
8266 </para>
8267
8268 <para>
8269 Here is an example from the <filename>dbus</filename>
8270 recipe:
8271 <literallayout class='monospaced'>
8272 USERADD_PARAM_${PN} = "--system --home ${localstatedir}/lib/dbus \
8273 --no-create-home --shell /bin/false \
8274 --user-group messagebus"
8275 </literallayout>
8276 For information on the standard Linux shell command
8277 <filename>useradd</filename>, see
8278 <ulink url='http://linux.die.net/man/8/useradd'></ulink>.
8279 </para>
8280 </glossdef>
8281 </glossentry>
8282
8283 <glossentry id='var-USERADDEXTENSION'><glossterm>USERADDEXTENSION</glossterm>
8284 <glossdef>
8285 <para>
8286 When set to "useradd-staticids", causes the
8287 OpenEmbedded build system to base all user and group
8288 additions on a static
8289 <filename>passwd</filename> and
8290 <filename>group</filename> files found in
8291 <link linkend='var-BBPATH'><filename>BBPATH</filename></link>.
8292 </para>
8293
8294 <para>
8295 To use static user identification (<filename>uid</filename>)
8296 and group identification (<filename>gid</filename>)
8297 values, set the variable
8298 as follows in your <filename>local.conf</filename> file:
8299 <literallayout class='monospaced'>
8300 USERADDEXTENSION = "useradd-staticids"
8301 </literallayout>
8302 <note>
8303 Setting this variable to use static
8304 <filename>uid</filename> and <filename>gid</filename>
8305 values causes the OpenEmbedded build system to employ
8306 the
8307 <link linkend='ref-classes-useradd-staticids'><filename>useradd-staticids</filename></link>
8308 class.
8309 </note>
8310 </para>
8311
8312 <para>
8313 If you use static <filename>uid</filename> and
8314 <filename>gid</filename> information, you must also
8315 specify the <filename>files/passwd</filename> and
8316 <filename>files/group</filename> files by setting the
8317 <link linkend='var-USERADD_UID_TABLES'><filename>USERADD_UID_TABLES</filename></link>
8318 and
8319 <link linkend='var-USERADD_GID_TABLES'><filename>USERADD_GID_TABLES</filename></link>
8320 variables.
8321 Additionally, you should also set the
8322 <link linkend='var-USERADD_ERROR_DYNAMIC'><filename>USERADD_ERROR_DYNAMIC</filename></link>
8323 variable.
8324 </para>
8325 </glossdef>
8326 </glossentry>
8327
8328 </glossdiv>
8329
8330<!-- <glossdiv id='var-glossary-v'><title>V</title>-->
8331<!-- </glossdiv>-->
8332
8333 <glossdiv id='var-glossary-w'><title>W</title>
8334
8335 <glossentry id='var-WARN_QA'><glossterm>WARN_QA</glossterm>
8336 <glossdef>
8337 <para>
8338 Specifies the quality assurance checks whose failures are
8339 reported as warnings by the OpenEmbedded build system.
8340 You set this variable in your distribution configuration
8341 file.
8342 For a list of the checks you can control with this variable,
8343 see the
8344 "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
8345 section.
8346 </para>
8347 </glossdef>
8348 </glossentry>
8349
8350 <glossentry id='var-WORKDIR'><glossterm>WORKDIR</glossterm>
8351 <glossdef>
8352 <para>
8353 The pathname of the work directory in which the OpenEmbedded
8354 build system builds a recipe.
8355 This directory is located within the
8356 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
8357 directory structure and is specific to the recipe being
8358 built and the system for which it is being built.
8359 </para>
8360
8361 <para>
8362 The <filename>WORKDIR</filename> directory is defined as
8363 follows:
8364 <literallayout class='monospaced'>
8365 ${TMPDIR}/work/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}
8366 </literallayout>
8367 The actual directory depends on several things:
8368 <itemizedlist>
8369 <listitem><link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>:
8370 The top-level build output directory</listitem>
8371 <listitem><link linkend='var-MULTIMACH_TARGET_SYS'><filename>MULTIMACH_TARGET_SYS</filename></link>:
8372 The target system identifier</listitem>
8373 <listitem><link linkend='var-PN'><filename>PN</filename></link>:
8374 The recipe name</listitem>
8375 <listitem><link linkend='var-EXTENDPE'><filename>EXTENDPE</filename></link>:
8376 The epoch - (if
8377 <link linkend='var-PE'><filename>PE</filename></link>
8378 is not specified, which is usually the case for most
8379 recipes, then <filename>EXTENDPE</filename> is blank)</listitem>
8380 <listitem><link linkend='var-PV'><filename>PV</filename></link>:
8381 The recipe version</listitem>
8382 <listitem><link linkend='var-PR'><filename>PR</filename></link>:
8383 The recipe revision</listitem>
8384 </itemizedlist>
8385 </para>
8386
8387 <para>
8388 As an example, assume a Source Directory top-level folder
8389 name <filename>poky</filename>, a default Build Directory at
8390 <filename>poky/build</filename>, and a
8391 <filename>qemux86-poky-linux</filename> machine target
8392 system.
8393 Furthermore, suppose your recipe is named
8394 <filename>foo_1.3.0-r0.bb</filename>.
8395 In this case, the work directory the build system uses to
8396 build the package would be as follows:
8397 <literallayout class='monospaced'>
8398 poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
8399 </literallayout>
8400 </para>
8401 </glossdef>
8402 </glossentry>
8403
8404 </glossdiv>
8405
8406<!-- <glossdiv id='var-glossary-x'><title>X</title>-->
8407<!-- </glossdiv>-->
8408
8409<!-- <glossdiv id='var-glossary-y'><title>Y</title>-->
8410<!-- </glossdiv>-->
8411
8412<!-- <glossdiv id='var-glossary-z'><title>Z</title>-->
8413<!-- </glossdiv>-->
8414
8415</glossary>
8416</chapter>
8417<!--
8418vim: expandtab tw=80 ts=4
8419-->
diff --git a/documentation/ref-manual/ref-varlocality.xml b/documentation/ref-manual/ref-varlocality.xml
new file mode 100644
index 0000000000..d3f873298d
--- /dev/null
+++ b/documentation/ref-manual/ref-varlocality.xml
@@ -0,0 +1,196 @@
1<!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-varlocality'>
6 <title>Variable Context</title>
7
8 <para>
9 While you can use most variables in almost any context such as
10 <filename>.conf</filename>, <filename>.bbclass</filename>,
11 <filename>.inc</filename>, and <filename>.bb</filename> files,
12 some variables are often associated with a particular locality or context.
13 This chapter describes some common associations.
14 </para>
15
16 <section id='ref-varlocality-configuration'>
17 <title>Configuration</title>
18
19 <para>
20 The following subsections provide lists of variables whose context is
21 configuration: distribution, machine, and local.
22 </para>
23
24 <section id='ref-varlocality-config-distro'>
25 <title>Distribution (Distro)</title>
26
27 <para>
28 This section lists variables whose configuration context is the
29 distribution, or distro.
30 <itemizedlist>
31 <listitem><para><filename><link linkend='var-DISTRO'>DISTRO</link></filename></para></listitem>
32 <listitem><para><filename><link linkend='var-DISTRO_NAME'>DISTRO_NAME</link></filename>
33 </para></listitem>
34 <listitem><para><filename><link linkend='var-DISTRO_VERSION'>DISTRO_VERSION</link>
35 </filename></para></listitem>
36 <listitem><para><filename><link linkend='var-MAINTAINER'>MAINTAINER</link></filename>
37 </para></listitem>
38 <listitem><para><filename><link linkend='var-PACKAGE_CLASSES'>PACKAGE_CLASSES</link>
39 </filename></para></listitem>
40 <listitem><para><filename><link linkend='var-TARGET_OS'>TARGET_OS</link></filename>
41 </para></listitem>
42 <listitem><para><filename><link linkend='var-TARGET_FPU'>TARGET_FPU</link></filename>
43 </para></listitem>
44 <listitem><para><filename><link linkend='var-TCMODE'>TCMODE</link></filename>
45 </para></listitem>
46 <listitem><para><filename><link linkend='var-TCLIBC'>TCLIBC</link></filename>
47 </para></listitem>
48 </itemizedlist>
49 </para>
50 </section>
51
52 <section id='ref-varlocality-config-machine'>
53 <title>Machine</title>
54
55 <para>
56 This section lists variables whose configuration context is the
57 machine.
58 <itemizedlist>
59 <listitem><para><filename><link linkend='var-TARGET_ARCH'>TARGET_ARCH</link></filename>
60 </para></listitem>
61 <listitem><para><filename><link linkend='var-SERIAL_CONSOLES'>SERIAL_CONSOLES</link>
62 </filename></para></listitem>
63 <listitem><para><filename><link linkend='var-PACKAGE_EXTRA_ARCHS'>PACKAGE_EXTRA_ARCHS</link>
64 </filename></para></listitem>
65 <listitem><para><filename><link linkend='var-IMAGE_FSTYPES'>IMAGE_FSTYPES</link>
66 </filename></para></listitem>
67 <listitem><para><filename><link linkend='var-MACHINE_FEATURES'>MACHINE_FEATURES</link>
68 </filename></para></listitem>
69 <listitem><para><filename><link linkend='var-MACHINE_EXTRA_RDEPENDS'>MACHINE_EXTRA_RDEPENDS
70 </link></filename></para></listitem>
71 <listitem><para><filename><link linkend='var-MACHINE_EXTRA_RRECOMMENDS'>MACHINE_EXTRA_RRECOMMENDS
72 </link></filename></para></listitem>
73 <listitem><para><filename><link linkend='var-MACHINE_ESSENTIAL_EXTRA_RDEPENDS'>MACHINE_ESSENTIAL_EXTRA_RDEPENDS
74 </link></filename></para></listitem>
75 <listitem><para><filename><link linkend='var-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS'>
76 MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS</link></filename></para></listitem>
77 </itemizedlist>
78 </para>
79 </section>
80
81 <section id='ref-varlocality-config-local'>
82 <title>Local</title>
83
84 <para>
85 This section lists variables whose configuration context is the
86 local configuration through the <filename>local.conf</filename>
87 file.
88 <itemizedlist>
89 <listitem><para><filename><link linkend='var-DISTRO'>DISTRO</link></filename>
90 </para></listitem>
91 <listitem><para><filename><link linkend='var-MACHINE'>MACHINE</link></filename>
92 </para></listitem>
93 <listitem><para><filename><link linkend='var-DL_DIR'>DL_DIR</link></filename>
94 </para></listitem>
95 <listitem><para><filename><link linkend='var-BBFILES'>BBFILES</link></filename>
96 </para></listitem>
97 <listitem><para><filename><link linkend='var-EXTRA_IMAGE_FEATURES'>EXTRA_IMAGE_FEATURES
98 </link></filename></para></listitem>
99 <listitem><para><filename><link linkend='var-PACKAGE_CLASSES'>PACKAGE_CLASSES</link>
100 </filename></para></listitem>
101 <listitem><para><filename><link linkend='var-BB_NUMBER_THREADS'>BB_NUMBER_THREADS</link>
102 </filename></para></listitem>
103 <listitem><para><filename><link linkend='var-BBINCLUDELOGS'>BBINCLUDELOGS</link>
104 </filename></para></listitem>
105 <listitem><para><filename><link linkend='var-ENABLE_BINARY_LOCALE_GENERATION'>
106 ENABLE_BINARY_LOCALE_GENERATION</link></filename></para></listitem>
107 </itemizedlist>
108 </para>
109 </section>
110 </section>
111
112 <section id='ref-varlocality-recipes'>
113 <title>Recipes</title>
114
115 <para>
116 The following subsections provide lists of variables whose context is
117 recipes: required, dependencies, path, and extra build information.
118 </para>
119
120 <section id='ref-varlocality-recipe-required'>
121 <title>Required</title>
122
123 <para>
124 This section lists variables that are required for recipes.
125 <itemizedlist>
126 <listitem><para><filename><link linkend='var-LICENSE'>LICENSE</link>
127 </filename></para></listitem>
128 <listitem><para><filename><link linkend='var-LIC_FILES_CHKSUM'>LIC_FILES_CHKSUM</link>
129 </filename></para></listitem>
130 <listitem><para><filename><link linkend='var-SRC_URI'>SRC_URI</link></filename> - used
131 in recipes that fetch local or remote files.
132 </para></listitem>
133 </itemizedlist>
134 </para>
135 </section>
136
137 <section id='ref-varlocality-recipe-dependencies'>
138 <title>Dependencies</title>
139
140 <para>
141 This section lists variables that define recipe dependencies.
142 <itemizedlist>
143 <listitem><para><filename><link linkend='var-DEPENDS'>DEPENDS</link>
144 </filename></para></listitem>
145 <listitem><para><filename><link linkend='var-RDEPENDS'>RDEPENDS</link>
146 </filename></para></listitem>
147 <listitem><para><filename><link linkend='var-RRECOMMENDS'>RRECOMMENDS</link>
148 </filename></para></listitem>
149 <listitem><para><filename><link linkend='var-RCONFLICTS'>RCONFLICTS</link>
150 </filename></para></listitem>
151 <listitem><para><filename><link linkend='var-RREPLACES'>RREPLACES</link>
152 </filename></para></listitem>
153 </itemizedlist>
154 </para>
155 </section>
156
157 <section id='ref-varlocality-recipe-paths'>
158 <title>Paths</title>
159
160 <para>
161 This section lists variables that define recipe paths.
162 <itemizedlist>
163 <listitem><para><filename><link linkend='var-WORKDIR'>WORKDIR</link>
164 </filename></para></listitem>
165 <listitem><para><filename><link linkend='var-S'>S</link>
166 </filename></para></listitem>
167 <listitem><para><filename><link linkend='var-FILES'>FILES</link>
168 </filename></para></listitem>
169 </itemizedlist>
170 </para>
171 </section>
172
173 <section id='ref-varlocality-recipe-build'>
174 <title>Extra Build Information</title>
175
176 <para>
177 This section lists variables that define extra build information for recipes.
178 <itemizedlist>
179 <listitem><para><filename><link linkend='var-EXTRA_OECMAKE'>EXTRA_OECMAKE</link>
180 </filename></para></listitem>
181 <listitem><para><filename><link linkend='var-EXTRA_OECONF'>EXTRA_OECONF</link>
182 </filename></para></listitem>
183 <listitem><para><filename><link linkend='var-EXTRA_OEMAKE'>EXTRA_OEMAKE</link>
184 </filename></para></listitem>
185 <listitem><para><filename><link linkend='var-PACKAGES'>PACKAGES</link></filename>
186 </para></listitem>
187 <listitem><para><filename><link linkend='var-DEFAULT_PREFERENCE'>DEFAULT_PREFERENCE
188 </link></filename></para></listitem>
189 </itemizedlist>
190 </para>
191 </section>
192 </section>
193</chapter>
194<!--
195vim: expandtab tw=80 ts=4 spell spelllang=en_gb
196-->
diff --git a/documentation/ref-manual/resources.xml b/documentation/ref-manual/resources.xml
new file mode 100644
index 0000000000..c48951f934
--- /dev/null
+++ b/documentation/ref-manual/resources.xml
@@ -0,0 +1,128 @@
1<!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='resources'>
6<title>Contributing to the Yocto Project</title>
7
8<section id='resources-intro'>
9 <title>Introduction</title>
10 <para>
11 The Yocto Project team is happy for people to experiment with the Yocto Project.
12 A number of places exist to find help if you run into difficulties or find bugs.
13 To find out how to download source code,
14 see the "<ulink url='&YOCTO_DOCS_DEV_URL;#local-yp-release'>Yocto Project Release</ulink>"
15 section in the Yocto Project Development Manual.
16 </para>
17</section>
18
19<section id='resources-bugtracker'>
20 <title>Tracking Bugs</title>
21
22 <para>
23 If you find problems with the Yocto Project, you should report them using the
24 Bugzilla application at <ulink url='&YOCTO_BUGZILLA_URL;'></ulink>.
25 </para>
26</section>
27
28<section id='resources-mailinglist'>
29 <title>Mailing lists</title>
30
31 <para>
32 A number of mailing lists maintained by the Yocto Project exist
33 as well as related OpenEmbedded mailing lists for discussion,
34 patch submission and announcements.
35 To subscribe to one of the following mailing lists, click on the
36 appropriate URL in the following list and follow the instructions:
37 <itemizedlist>
38 <listitem><para><ulink url='&YOCTO_LISTS_URL;/listinfo/yocto'></ulink> -
39 General Yocto Project discussion mailing list. </para></listitem>
40 <listitem><para><ulink url='&OE_LISTS_URL;/listinfo/openembedded-core'></ulink> -
41 Discussion mailing list about OpenEmbedded-Core (the core metadata).</para></listitem>
42 <listitem><para><ulink url='&OE_LISTS_URL;/listinfo/openembedded-devel'></ulink> -
43 Discussion mailing list about OpenEmbedded.</para></listitem>
44 <listitem><para><ulink url='&OE_LISTS_URL;/listinfo/bitbake-devel'></ulink> -
45 Discussion mailing list about the
46 <ulink url='&YOCTO_DOCS_DEV_URL;#bitbake-term'>BitBake</ulink>
47 build tool.</para></listitem>
48 <listitem><para><ulink url='&YOCTO_LISTS_URL;/listinfo/poky'></ulink> -
49 Discussion mailing list about
50 <ulink url='&YOCTO_DOCS_DEV_URL;#poky'>Poky</ulink>.
51 </para></listitem>
52 <listitem><para><ulink url='&YOCTO_LISTS_URL;/listinfo/yocto-announce'></ulink> -
53 Mailing list to receive official Yocto Project release and milestone
54 announcements.</para></listitem>
55 </itemizedlist>
56 </para>
57</section>
58
59<section id='resources-irc'>
60 <title>Internet Relay Chat (IRC)</title>
61
62 <para>
63 Two IRC channels on freenode are available for the Yocto Project and Poky discussions:
64 <itemizedlist>
65 <listitem><para><filename>#yocto</filename></para></listitem>
66 <listitem><para><filename>#poky</filename></para></listitem>
67 </itemizedlist>
68 </para>
69</section>
70
71<section id='resources-links'>
72 <title>Links</title>
73
74 <para>
75 Here is a list of resources you will find helpful:
76 <itemizedlist>
77 <listitem><para><emphasis>
78 <ulink url='&YOCTO_HOME_URL;'>The Yocto Project website</ulink>:
79 </emphasis> The home site for the Yocto
80 Project.</para></listitem>
81 <listitem><para><emphasis>
82 <ulink url='http://www.intel.com/'>Intel Corporation</ulink>:</emphasis>
83 The company who acquired OpenedHand in 2008 and began
84 development on the Yocto Project.</para></listitem>
85 <listitem><para><emphasis>
86 <ulink url='&OE_HOME_URL;'>OpenEmbedded</ulink>:</emphasis>
87 The upstream, generic, embedded distribution used as the basis
88 for the build system in the Yocto Project.
89 Poky derives from and contributes back to the OpenEmbedded
90 project.</para></listitem>
91 <listitem><para><emphasis>
92 <ulink url='http://developer.berlios.de/projects/bitbake/'>
93 BitBake</ulink>:</emphasis> The tool used to process metadata.</para></listitem>
94 <listitem><para><emphasis>
95 BitBake User Manual:</emphasis>
96 A comprehensive guide to the BitBake tool.
97 You can find the BitBake User Manual in the
98 <filename>bitbake/doc/manual</filename> directory, which is
99 found in the
100 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
101 </para></listitem>
102 <listitem><para><emphasis>
103 <ulink url='http://wiki.qemu.org/Index.html'>QEMU</ulink>:
104 </emphasis> An open source machine emulator and virtualizer.
105 </para></listitem>
106 </itemizedlist>
107 </para>
108</section>
109
110<section id='resources-contributions'>
111 <title>Contributions</title>
112
113 <para>
114 The Yocto Project gladly accepts contributions.
115 You can submit changes to the project either by creating and sending
116 pull requests,
117 or by submitting patches through email.
118 For information on how to do both as well as information on how
119 to find out who is the maintainer for areas of code, see the
120 "<ulink url='&YOCTO_DOCS_DEV_URL;#how-to-submit-a-change'>How to Submit a Change</ulink>"
121 section in the Yocto Project Development Manual.
122 </para>
123</section>
124
125</chapter>
126<!--
127vim: expandtab tw=80 ts=4
128-->
diff --git a/documentation/ref-manual/technical-details.xml b/documentation/ref-manual/technical-details.xml
new file mode 100644
index 0000000000..d34be750e3
--- /dev/null
+++ b/documentation/ref-manual/technical-details.xml
@@ -0,0 +1,1409 @@
1<!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='technical-details'>
6<title>Technical Details</title>
7
8 <para>
9 This chapter provides technical details for various parts of the
10 Yocto Project.
11 Currently, topics include Yocto Project components,
12 cross-toolchain generation, shared state (sstate) cache,
13 x32, Wayland support, and Licenses.
14 </para>
15
16<section id='usingpoky-components'>
17 <title>Yocto Project Components</title>
18
19 <para>
20 The
21 <ulink url='&YOCTO_DOCS_DEV_URL;#bitbake-term'>BitBake</ulink>
22 task executor together with various types of configuration files form
23 the OpenEmbedded Core.
24 This section overviews these components by describing their use and
25 how they interact.
26 </para>
27
28 <para>
29 BitBake handles the parsing and execution of the data files.
30 The data itself is of various types:
31 <itemizedlist>
32 <listitem><para><emphasis>Recipes:</emphasis> Provides details
33 about particular pieces of software.
34 </para></listitem>
35 <listitem><para><emphasis>Class Data:</emphasis> Abstracts
36 common build information (e.g. how to build a Linux kernel).
37 </para></listitem>
38 <listitem><para><emphasis>Configuration Data:</emphasis> Defines
39 machine-specific settings, policy decisions, and so forth.
40 Configuration data acts as the glue to bind everything
41 together.
42 </para></listitem>
43 </itemizedlist>
44 </para>
45
46 <para>
47 BitBake knows how to combine multiple data sources together and refers
48 to each data source as a layer.
49 For information on layers, see the
50 "<ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>Understanding and
51 Creating Layers</ulink>" section of the Yocto Project Development Manual.
52 </para>
53
54 <para>
55 Following are some brief details on these core components.
56 For additional information on how these components interact during
57 a build, see the
58 "<link linkend='closer-look'>A Closer Look at the Yocto Project Development Environment</link>"
59 Chapter.
60 </para>
61
62 <section id='usingpoky-components-bitbake'>
63 <title>BitBake</title>
64
65 <para>
66 BitBake is the tool at the heart of the OpenEmbedded build system
67 and is responsible for parsing the
68 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>,
69 generating a list of tasks from it, and then executing those tasks.
70 </para>
71
72 <para>
73 This section briefly introduces BitBake.
74 If you want more information on BitBake, see the
75 <ulink url='&YOCTO_DOCS_BB_URL;#bitbake-user-manual'>BitBake User Manual</ulink>.
76 </para>
77
78 <para>
79 To see a list of the options BitBake supports, use either of
80 the following commands:
81 <literallayout class='monospaced'>
82 $ bitbake -h
83 $ bitbake --help
84 </literallayout>
85 </para>
86
87 <para>
88 The most common usage for BitBake is <filename>bitbake &lt;packagename&gt;</filename>, where
89 <filename>packagename</filename> is the name of the package you want to build
90 (referred to as the "target" in this manual).
91 The target often equates to the first part of a recipe's filename
92 (e.g. "foo" for a recipe named
93 <filename>foo_1.3.0-r0.bb</filename>).
94 So, to process the <filename>matchbox-desktop_1.2.3.bb</filename> recipe file, you
95 might type the following:
96 <literallayout class='monospaced'>
97 $ bitbake matchbox-desktop
98 </literallayout>
99 Several different versions of <filename>matchbox-desktop</filename> might exist.
100 BitBake chooses the one selected by the distribution configuration.
101 You can get more details about how BitBake chooses between different
102 target versions and providers in the
103 "<ulink url='&YOCTO_DOCS_BB_URL;#bb-bitbake-providers'>Preferences and Providers</ulink>"
104 section of the BitBake User Manual.
105 </para>
106
107 <para>
108 BitBake also tries to execute any dependent tasks first.
109 So for example, before building <filename>matchbox-desktop</filename>, BitBake
110 would build a cross compiler and <filename>eglibc</filename> if they had not already
111 been built.
112 <note>This release of the Yocto Project does not support the <filename>glibc</filename>
113 GNU version of the Unix standard C library. By default, the OpenEmbedded build system
114 builds with <filename>eglibc</filename>.</note>
115 </para>
116
117 <para>
118 A useful BitBake option to consider is the <filename>-k</filename> or
119 <filename>--continue</filename> option.
120 This option instructs BitBake to try and continue processing the job
121 as long as possible even after encountering an error.
122 When an error occurs, the target that
123 failed and those that depend on it cannot be remade.
124 However, when you use this option other dependencies can still be
125 processed.
126 </para>
127 </section>
128
129 <section id='usingpoky-components-metadata'>
130 <title>Metadata (Recipes)</title>
131
132 <para>
133 Files that have the <filename>.bb</filename> suffix are "recipes"
134 files.
135 In general, a recipe contains information about a single piece of
136 software.
137 This information includes the location from which to download the
138 unaltered source, any source patches to be applied to that source
139 (if needed), which special configuration options to apply,
140 how to compile the source files, and how to package the compiled
141 output.
142 </para>
143
144 <para>
145 The term "package" is sometimes used to refer to recipes. However,
146 since the word "package" is used for the packaged output from the OpenEmbedded
147 build system (i.e. <filename>.ipk</filename> or <filename>.deb</filename> files),
148 this document avoids using the term "package" when referring to recipes.
149 </para>
150 </section>
151
152 <section id='usingpoky-components-classes'>
153 <title>Classes</title>
154
155 <para>
156 Class files (<filename>.bbclass</filename>) contain information that
157 is useful to share between
158 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink> files.
159 An example is the
160 <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
161 class, which contains common settings for any application that
162 Autotools uses.
163 The "<link linkend='ref-classes'>Classes</link>" chapter provides
164 details about classes and how to use them.
165 </para>
166 </section>
167
168 <section id='usingpoky-components-configuration'>
169 <title>Configuration</title>
170
171 <para>
172 The configuration files (<filename>.conf</filename>) define various configuration variables
173 that govern the OpenEmbedded build process.
174 These files fall into several areas that define machine configuration options,
175 distribution configuration options, compiler tuning options, general common configuration
176 options, and user configuration options in <filename>local.conf</filename>, which is found
177 in the
178 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
179 </para>
180 </section>
181</section>
182
183<section id="cross-development-toolchain-generation">
184 <title>Cross-Development Toolchain Generation</title>
185
186 <para>
187 The Yocto Project does most of the work for you when it comes to
188 creating
189 <ulink url='&YOCTO_DOCS_DEV_URL;#cross-development-toolchain'>cross-development toolchains</ulink>.
190 This section provides some technical background on how
191 cross-development toolchains are created and used.
192 For more information on toolchains, you can also see the
193 <ulink url='&YOCTO_DOCS_ADT_URL;'>Yocto Project Application Developer's Guide</ulink>.
194 </para>
195
196 <para>
197 In the Yocto Project development environment, cross-development
198 toolchains are used to build the image and applications that run on the
199 target hardware.
200 With just a few commands, the OpenEmbedded build system creates
201 these necessary toolchains for you.
202 </para>
203
204 <para>
205 The following figure shows a high-level build environment regarding
206 toolchain construction and use.
207 </para>
208
209 <para>
210 <imagedata fileref="figures/cross-development-toolchains.png" width="8in" depth="6in" align="center" />
211 </para>
212
213 <para>
214 Most of the work occurs on the Build Host.
215 This is the machine used to build images and generally work within the
216 the Yocto Project environment.
217 When you run BitBake to create an image, the OpenEmbedded build system
218 uses the host <filename>gcc</filename> compiler to bootstrap a
219 cross-compiler named <filename>gcc-cross</filename>.
220 The <filename>gcc-cross</filename> compiler is what BitBake uses to
221 compile source files when creating the target image.
222 You can think of <filename>gcc-cross</filename> simply as an
223 automatically generated cross-compiler that is used internally within
224 BitBake only.
225 </para>
226
227 <para>
228 The chain of events that occurs when <filename>gcc-cross</filename> is
229 bootstrapped is as follows:
230 <literallayout class='monospaced'>
231 gcc -> binutils-cross -> gcc-cross-initial -> linux-libc-headers -> eglibc-initial -> eglibc -> gcc-cross -> gcc-runtime
232 </literallayout>
233 <itemizedlist>
234 <listitem><para><filename>gcc</filename>:
235 The build host's GNU Compiler Collection (GCC).
236 </para></listitem>
237 <listitem><para><filename>binutils-cross</filename>:
238 The bare minimum binary utilities needed in order to run
239 the <filename>gcc-cross-initial</filename> phase of the
240 bootstrap operation.
241 </para></listitem>
242 <listitem><para><filename>gcc-cross-initial</filename>:
243 An early stage of the bootstrap process for creating
244 the cross-compiler.
245 This stage builds enough of the <filename>gcc-cross</filename>,
246 the C library, and other pieces needed to finish building the
247 final cross-compiler in later stages.
248 This tool is a "native" package (i.e. it is designed to run on
249 the build host).
250 </para></listitem>
251 <listitem><para><filename>linux-libc-headers</filename>:
252 Headers needed for the cross-compiler.
253 </para></listitem>
254 <listitem><para><filename>eglibc-initial</filename>:
255 An initial version of the Embedded GLIBC needed to bootstrap
256 <filename>eglibc</filename>.
257 </para></listitem>
258 <listitem><para><filename>gcc-cross</filename>:
259 The final stage of the bootstrap process for the
260 cross-compiler.
261 This stage results in the actual cross-compiler that
262 BitBake uses when it builds an image for a targeted
263 device.
264 <note>
265 If you are replacing this cross compiler toolchain
266 with a custom version, you must replace
267 <filename>gcc-cross</filename>.
268 </note>
269 This tool is also a "native" package (i.e. it is
270 designed to run on the build host).
271 </para></listitem>
272 <listitem><para><filename>gcc-runtime</filename>:
273 Runtime libraries resulting from the toolchain bootstrapping
274 process.
275 This tool produces a binary that consists of the
276 runtime libraries need for the targeted device.
277 </para></listitem>
278 </itemizedlist>
279 </para>
280
281 <para>
282 You can use the OpenEmbedded build system to build an installer for
283 the relocatable SDK used to develop applications.
284 When you run the installer, it installs the toolchain, which contains
285 the development tools (e.g., the
286 <filename>gcc-cross-canadian</filename>),
287 <filename>binutils-cross-canadian</filename>, and other
288 <filename>nativesdk-*</filename> tools you need to cross-compile and
289 test your software.
290 The figure shows the commands you use to easily build out this
291 toolchain.
292 This cross-development toolchain is built to execute on the
293 <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>,
294 which might or might not be the same
295 machine as the Build Host.
296 <note>
297 If your target architecture is supported by the Yocto Project,
298 you can take advantage of pre-built images that ship with the
299 Yocto Project and already contain cross-development toolchain
300 installers.
301 </note>
302 </para>
303
304 <para>
305 Here is the bootstrap process for the relocatable toolchain:
306 <literallayout class='monospaced'>
307 gcc -> binutils-crosssdk -> gcc-crosssdk-initial -> linux-libc-headers -> eglibc-initial -> nativesdk-eglibc -> gcc-crosssdk -> gcc-cross-canadian
308 </literallayout>
309 <itemizedlist>
310 <listitem><para><filename>gcc</filename>:
311 The build host's GNU Compiler Collection (GCC).
312 </para></listitem>
313 <listitem><para><filename>binutils-crosssdk</filename>:
314 The bare minimum binary utilities needed in order to run
315 the <filename>gcc-crosssdk-initial</filename> phase of the
316 bootstrap operation.
317 </para></listitem>
318 <listitem><para><filename>gcc-crosssdk-initial</filename>:
319 An early stage of the bootstrap process for creating
320 the cross-compiler.
321 This stage builds enough of the
322 <filename>gcc-crosssdk</filename> and supporting pieces so that
323 the final stage of the bootstrap process can produce the
324 finished cross-compiler.
325 This tool is a "native" binary that runs on the build host.
326 </para></listitem>
327 <listitem><para><filename>linux-libc-headers</filename>:
328 Headers needed for the cross-compiler.
329 </para></listitem>
330 <listitem><para><filename>eglibc-initial</filename>:
331 An initial version of the Embedded GLIBC needed to bootstrap
332 <filename>nativesdk-eglibc</filename>.
333 </para></listitem>
334 <listitem><para><filename>nativesdk-eglibc</filename>:
335 The Embedded GLIBC needed to bootstrap the
336 <filename>gcc-crosssdk</filename>.
337 </para></listitem>
338 <listitem><para><filename>gcc-crosssdk</filename>:
339 The final stage of the bootstrap process for the
340 relocatable cross-compiler.
341 The <filename>gcc-crosssdk</filename> is a transitory compiler
342 and never leaves the build host.
343 Its purpose is to help in the bootstrap process to create the
344 eventual relocatable <filename>gcc-cross-canadian</filename>
345 compiler, which is relocatable.
346 This tool is also a "native" package (i.e. it is
347 designed to run on the build host).
348 </para></listitem>
349 <listitem><para><filename>gcc-cross-canadian</filename>:
350 The final relocatable cross-compiler.
351 When run on the
352 <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>,
353 this tool
354 produces executable code that runs on the target device.
355 Only one cross-canadian compiler is produced per architecture
356 since they can be targeted at different processor optimizations
357 using configurations passed to the compiler through the
358 compile commands.
359 This circumvents the need for multiple compilers and thus
360 reduces the size of the toolchains.
361 </para></listitem>
362 </itemizedlist>
363 </para>
364
365 <note>
366 For information on advantages gained when building a
367 cross-development toolchain installer, see the
368 "<ulink url='&YOCTO_DOCS_ADT_URL;#optionally-building-a-toolchain-installer'>Optionally Building a Toolchain Installer</ulink>"
369 section in the Yocto Project Application Developer's Guide.
370 </note>
371</section>
372
373<section id="shared-state-cache">
374 <title>Shared State Cache</title>
375
376 <para>
377 By design, the OpenEmbedded build system builds everything from scratch unless
378 BitBake can determine that parts do not need to be rebuilt.
379 Fundamentally, building from scratch is attractive as it means all parts are
380 built fresh and there is no possibility of stale data causing problems.
381 When developers hit problems, they typically default back to building from scratch
382 so they know the state of things from the start.
383 </para>
384
385 <para>
386 Building an image from scratch is both an advantage and a disadvantage to the process.
387 As mentioned in the previous paragraph, building from scratch ensures that
388 everything is current and starts from a known state.
389 However, building from scratch also takes much longer as it generally means
390 rebuilding things that do not necessarily need to be rebuilt.
391 </para>
392
393 <para>
394 The Yocto Project implements shared state code that supports incremental builds.
395 The implementation of the shared state code answers the following questions that
396 were fundamental roadblocks within the OpenEmbedded incremental build support system:
397 <itemizedlist>
398 <listitem><para>What pieces of the system have changed and what pieces have
399 not changed?</para></listitem>
400 <listitem><para>How are changed pieces of software removed and replaced?</para></listitem>
401 <listitem><para>How are pre-built components that do not need to be rebuilt from scratch
402 used when they are available?</para></listitem>
403 </itemizedlist>
404 </para>
405
406 <para>
407 For the first question, the build system detects changes in the "inputs" to a given task by
408 creating a checksum (or signature) of the task's inputs.
409 If the checksum changes, the system assumes the inputs have changed and the task needs to be
410 rerun.
411 For the second question, the shared state (sstate) code tracks which tasks add which output
412 to the build process.
413 This means the output from a given task can be removed, upgraded or otherwise manipulated.
414 The third question is partly addressed by the solution for the second question
415 assuming the build system can fetch the sstate objects from remote locations and
416 install them if they are deemed to be valid.
417 </para>
418
419 <note>
420 The OpenEmbedded build system does not maintain
421 <link linkend='var-PR'><filename>PR</filename></link> information
422 as part of the shared state packages.
423 Consequently, considerations exist that affect maintaining shared
424 state feeds.
425 For information on how the OpenEmbedded build system
426 works with packages and can
427 track incrementing <filename>PR</filename> information, see the
428 "<ulink url='&YOCTO_DOCS_DEV_URL;#incrementing-a-package-revision-number'>Incrementing a Package Revision Number</ulink>"
429 section.
430 </note>
431
432 <para>
433 The rest of this section goes into detail about the overall incremental build
434 architecture, the checksums (signatures), shared state, and some tips and tricks.
435 </para>
436
437 <section id='overall-architecture'>
438 <title>Overall Architecture</title>
439
440 <para>
441 When determining what parts of the system need to be built, BitBake
442 works on a per-task basis rather than a per-recipe basis.
443 You might wonder why using a per-task basis is preferred over a per-recipe basis.
444 To help explain, consider having the IPK packaging backend enabled and then switching to DEB.
445 In this case, <filename>do_install</filename> and <filename>do_package</filename>
446 outputs are still valid.
447 However, with a per-recipe approach, the build would not include the
448 <filename>.deb</filename> files.
449 Consequently, you would have to invalidate the whole build and rerun it.
450 Rerunning everything is not the best solution.
451 Also, in this case, the core must be "taught" much about specific tasks.
452 This methodology does not scale well and does not allow users to easily add new tasks
453 in layers or as external recipes without touching the packaged-staging core.
454 </para>
455 </section>
456
457 <section id='checksums'>
458 <title>Checksums (Signatures)</title>
459
460 <para>
461 The shared state code uses a checksum, which is a unique signature of a task's
462 inputs, to determine if a task needs to be run again.
463 Because it is a change in a task's inputs that triggers a rerun, the process
464 needs to detect all the inputs to a given task.
465 For shell tasks, this turns out to be fairly easy because
466 the build process generates a "run" shell script for each task and
467 it is possible to create a checksum that gives you a good idea of when
468 the task's data changes.
469 </para>
470
471 <para>
472 To complicate the problem, there are things that should not be included in
473 the checksum.
474 First, there is the actual specific build path of a given task -
475 the <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>.
476 It does not matter if the work directory changes because it should not
477 affect the output for target packages.
478 Also, the build process has the objective of making native or cross packages relocatable.
479 The checksum therefore needs to exclude <filename>WORKDIR</filename>.
480 The simplistic approach for excluding the work directory is to set
481 <filename>WORKDIR</filename> to some fixed value and create the checksum
482 for the "run" script.
483 </para>
484
485 <para>
486 Another problem results from the "run" scripts containing functions that
487 might or might not get called.
488 The incremental build solution contains code that figures out dependencies
489 between shell functions.
490 This code is used to prune the "run" scripts down to the minimum set,
491 thereby alleviating this problem and making the "run" scripts much more
492 readable as a bonus.
493 </para>
494
495 <para>
496 So far we have solutions for shell scripts.
497 What about Python tasks?
498 The same approach applies even though these tasks are more difficult.
499 The process needs to figure out what variables a Python function accesses
500 and what functions it calls.
501 Again, the incremental build solution contains code that first figures out
502 the variable and function dependencies, and then creates a checksum for the data
503 used as the input to the task.
504 </para>
505
506 <para>
507 Like the <filename>WORKDIR</filename> case, situations exist where dependencies
508 should be ignored.
509 For these cases, you can instruct the build process to ignore a dependency
510 by using a line like the following:
511 <literallayout class='monospaced'>
512 PACKAGE_ARCHS[vardepsexclude] = "MACHINE"
513 </literallayout>
514 This example ensures that the <filename>PACKAGE_ARCHS</filename>
515 variable does not
516 depend on the value of
517 <link linkend='var-MACHINE'><filename>MACHINE</filename></link>,
518 even if it does reference it.
519 </para>
520
521 <para>
522 Equally, there are cases where we need to add dependencies BitBake is not able to find.
523 You can accomplish this by using a line like the following:
524 <literallayout class='monospaced'>
525 PACKAGE_ARCHS[vardeps] = "MACHINE"
526 </literallayout>
527 This example explicitly adds the <filename>MACHINE</filename> variable as a
528 dependency for <filename>PACKAGE_ARCHS</filename>.
529 </para>
530
531 <para>
532 Consider a case with in-line Python, for example, where BitBake is not
533 able to figure out dependencies.
534 When running in debug mode (i.e. using <filename>-DDD</filename>), BitBake
535 produces output when it discovers something for which it cannot figure out
536 dependencies.
537 The Yocto Project team has currently not managed to cover those dependencies
538 in detail and is aware of the need to fix this situation.
539 </para>
540
541 <para>
542 Thus far, this section has limited discussion to the direct inputs into a task.
543 Information based on direct inputs is referred to as the "basehash" in the
544 code.
545 However, there is still the question of a task's indirect inputs - the
546 things that were already built and present in the
547 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
548 The checksum (or signature) for a particular task needs to add the hashes
549 of all the tasks on which the particular task depends.
550 Choosing which dependencies to add is a policy decision.
551 However, the effect is to generate a master checksum that combines the basehash
552 and the hashes of the task's dependencies.
553 </para>
554
555 <para>
556 At the code level, there are a variety of ways both the basehash and the
557 dependent task hashes can be influenced.
558 Within the BitBake configuration file, we can give BitBake some extra information
559 to help it construct the basehash.
560 The following statement effectively results in a list of global variable
561 dependency excludes - variables never included in any checksum:
562 <literallayout class='monospaced'>
563 BB_HASHBASE_WHITELIST ?= "TMPDIR FILE PATH PWD BB_TASKHASH BBPATH DL_DIR \
564 SSTATE_DIR THISDIR FILESEXTRAPATHS FILE_DIRNAME HOME LOGNAME SHELL TERM \
565 USER FILESPATH STAGING_DIR_HOST STAGING_DIR_TARGET COREBASE PRSERV_HOST \
566 PRSERV_DUMPDIR PRSERV_DUMPFILE PRSERV_LOCKDOWN PARALLEL_MAKE \
567 CCACHE_DIR EXTERNAL_TOOLCHAIN CCACHE CCACHE_DISABLE LICENSE_PATH SDKPKGSUFFIX"
568 </literallayout>
569 The previous example excludes
570 <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>
571 since that variable is actually constructed as a path within
572 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>, which is on
573 the whitelist.
574 </para>
575
576 <para>
577 The rules for deciding which hashes of dependent tasks to include through
578 dependency chains are more complex and are generally accomplished with a
579 Python function.
580 The code in <filename>meta/lib/oe/sstatesig.py</filename> shows two examples
581 of this and also illustrates how you can insert your own policy into the system
582 if so desired.
583 This file defines the two basic signature generators <filename>OE-Core</filename>
584 uses: "OEBasic" and "OEBasicHash".
585 By default, there is a dummy "noop" signature handler enabled in BitBake.
586 This means that behavior is unchanged from previous versions.
587 <filename>OE-Core</filename> uses the "OEBasicHash" signature handler by default
588 through this setting in the <filename>bitbake.conf</filename> file:
589 <literallayout class='monospaced'>
590 BB_SIGNATURE_HANDLER ?= "OEBasicHash"
591 </literallayout>
592 The "OEBasicHash" <filename>BB_SIGNATURE_HANDLER</filename> is the same as the
593 "OEBasic" version but adds the task hash to the stamp files.
594 This results in any
595 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
596 change that changes the task hash, automatically
597 causing the task to be run again.
598 This removes the need to bump <link linkend='var-PR'><filename>PR</filename></link>
599 values, and changes to Metadata automatically ripple across the build.
600 </para>
601
602 <para>
603 It is also worth noting that the end result of these signature generators is to
604 make some dependency and hash information available to the build.
605 This information includes:
606 <itemizedlist>
607 <listitem><para><filename>BB_BASEHASH_task-&lt;taskname&gt;</filename>:
608 The base hashes for each task in the recipe.
609 </para></listitem>
610 <listitem><para><filename>BB_BASEHASH_&lt;filename:taskname&gt;</filename>:
611 The base hashes for each dependent task.
612 </para></listitem>
613 <listitem><para><filename>BBHASHDEPS_&lt;filename:taskname&gt;</filename>:
614 The task dependencies for each task.
615 </para></listitem>
616 <listitem><para><filename>BB_TASKHASH</filename>:
617 The hash of the currently running task.
618 </para></listitem>
619 </itemizedlist>
620 </para>
621 </section>
622
623 <section id='shared-state'>
624 <title>Shared State</title>
625
626 <para>
627 Checksums and dependencies, as discussed in the previous section, solve half the
628 problem of supporting a shared state.
629 The other part of the problem is being able to use checksum information during the build
630 and being able to reuse or rebuild specific components.
631 </para>
632
633 <para>
634 The
635 <link linkend='ref-classes-sstate'><filename>sstate</filename></link>
636 class is a relatively generic implementation of how to "capture"
637 a snapshot of a given task.
638 The idea is that the build process does not care about the source of a task's output.
639 Output could be freshly built or it could be downloaded and unpacked from
640 somewhere - the build process does not need to worry about its origin.
641 </para>
642
643 <para>
644 There are two types of output, one is just about creating a directory
645 in <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>.
646 A good example is the output of either <filename>do_install</filename> or
647 <filename>do_package</filename>.
648 The other type of output occurs when a set of data is merged into a shared directory
649 tree such as the sysroot.
650 </para>
651
652 <para>
653 The Yocto Project team has tried to keep the details of the
654 implementation hidden in <filename>sstate</filename> class.
655 From a user's perspective, adding shared state wrapping to a task
656 is as simple as this <filename>do_deploy</filename> example taken
657 from the
658 <link linkend='ref-classes-deploy'><filename>deploy</filename></link>
659 class:
660 <literallayout class='monospaced'>
661 DEPLOYDIR = "${WORKDIR}/deploy-${PN}"
662 SSTATETASKS += "do_deploy"
663 do_deploy[sstate-name] = "deploy"
664 do_deploy[sstate-inputdirs] = "${DEPLOYDIR}"
665 do_deploy[sstate-outputdirs] = "${DEPLOY_DIR_IMAGE}"
666
667 python do_deploy_setscene () {
668 sstate_setscene(d)
669 }
670 addtask do_deploy_setscene
671 do_deploy[dirs] = "${DEPLOYDIR} ${B}"
672 </literallayout>
673 In this example, we add some extra flags to the task, a name field ("deploy"), an
674 input directory where the task sends data, and the output
675 directory where the data from the task should eventually be copied.
676 We also add a <filename>_setscene</filename> variant of the task and add the task
677 name to the <filename>SSTATETASKS</filename> list.
678 </para>
679
680 <para>
681 If you have a directory whose contents you need to preserve, you can do this with
682 a line like the following:
683 <literallayout class='monospaced'>
684 do_package[sstate-plaindirs] = "${PKGD} ${PKGDEST}"
685 </literallayout>
686 This method, as well as the following example, also works for multiple directories.
687 <literallayout class='monospaced'>
688 do_package[sstate-inputdirs] = "${PKGDESTWORK} ${SHLIBSWORKDIR}"
689 do_package[sstate-outputdirs] = "${PKGDATA_DIR} ${SHLIBSDIR}"
690 do_package[sstate-lockfile] = "${PACKAGELOCK}"
691 </literallayout>
692 These methods also include the ability to take a lockfile when manipulating
693 shared state directory structures since some cases are sensitive to file
694 additions or removals.
695 </para>
696
697 <para>
698 Behind the scenes, the shared state code works by looking in
699 <link linkend='var-SSTATE_DIR'><filename>SSTATE_DIR</filename></link> and
700 <link linkend='var-SSTATE_MIRRORS'><filename>SSTATE_MIRRORS</filename></link>
701 for shared state files.
702 Here is an example:
703 <literallayout class='monospaced'>
704 SSTATE_MIRRORS ?= "\
705 file://.* http://someserver.tld/share/sstate/PATH \n \
706 file://.* file:///some/local/dir/sstate/PATH"
707 </literallayout>
708 <note>
709 The shared state directory (<filename>SSTATE_DIR</filename>) is
710 organized into two-character subdirectories, where the subdirectory
711 names are based on the first two characters of the hash.
712 If the shared state directory structure for a mirror has the
713 same structure as <filename>SSTATE_DIR</filename>, you must
714 specify "PATH" as part of the URI to enable the build system
715 to map to the appropriate subdirectory.
716 </note>
717 </para>
718
719 <para>
720 The shared state package validity can be detected just by looking at the
721 filename since the filename contains the task checksum (or signature) as
722 described earlier in this section.
723 If a valid shared state package is found, the build process downloads it
724 and uses it to accelerate the task.
725 </para>
726
727 <para>
728 The build processes use the <filename>*_setscene</filename> tasks
729 for the task acceleration phase.
730 BitBake goes through this phase before the main execution code and tries
731 to accelerate any tasks for which it can find shared state packages.
732 If a shared state package for a task is available, the shared state
733 package is used.
734 This means the task and any tasks on which it is dependent are not
735 executed.
736 </para>
737
738 <para>
739 As a real world example, the aim is when building an IPK-based image,
740 only the <filename>do_package_write_ipk</filename> tasks would have their
741 shared state packages fetched and extracted.
742 Since the sysroot is not used, it would never get extracted.
743 This is another reason why a task-based approach is preferred over a
744 recipe-based approach, which would have to install the output from every task.
745 </para>
746 </section>
747
748 <section id='tips-and-tricks'>
749 <title>Tips and Tricks</title>
750
751 <para>
752 The code in the build system that supports incremental builds is not
753 simple code.
754 This section presents some tips and tricks that help you work around
755 issues related to shared state code.
756 </para>
757
758 <section id='debugging'>
759 <title>Debugging</title>
760
761 <para>
762 When things go wrong, debugging needs to be straightforward.
763 Because of this, the Yocto Project includes strong debugging
764 tools:
765 <itemizedlist>
766 <listitem><para>Whenever a shared state package is written out, so is a
767 corresponding <filename>.siginfo</filename> file.
768 This practice results in a pickled Python database of all
769 the metadata that went into creating the hash for a given shared state
770 package.</para></listitem>
771 <listitem><para>If you run BitBake with the <filename>--dump-signatures</filename>
772 (or <filename>-S</filename>) option, BitBake dumps out
773 <filename>.siginfo</filename> files in
774 the stamp directory for every task it would have executed instead of
775 building the specified target package.</para></listitem>
776 <listitem><para>There is a <filename>bitbake-diffsigs</filename> command that
777 can process <filename>.siginfo</filename> files.
778 If you specify one of these files, BitBake dumps out the dependency
779 information in the file.
780 If you specify two files, BitBake compares the two files and dumps out
781 the differences between the two.
782 This more easily helps answer the question of "What
783 changed between X and Y?"</para></listitem>
784 </itemizedlist>
785 </para>
786 </section>
787
788 <section id='invalidating-shared-state'>
789 <title>Invalidating Shared State</title>
790
791 <para>
792 The OpenEmbedded build system uses checksums and shared state
793 cache to avoid unnecessarily rebuilding tasks.
794 Collectively, this scheme is known as "shared state code."
795 </para>
796
797 <para>
798 As with all schemes, this one has some drawbacks.
799 It is possible that you could make implicit changes to your
800 code that the checksum calculations do not take into
801 account.
802 These implicit changes affect a task's output but do not trigger
803 the shared state code into rebuilding a recipe.
804 Consider an example during which a tool changes its output.
805 Assume that the output of <filename>rpmdeps</filename> changes.
806 The result of the change should be that all the
807 <filename>package</filename> and
808 <filename>package_write_rpm</filename> shared state cache
809 items become invalid.
810 However, because the change to the output is
811 external to the code and therefore implicit,
812 the associated shared state cache items do not become
813 invalidated.
814 In this case, the build process uses the cached items rather
815 than running the task again.
816 Obviously, these types of implicit changes can cause problems.
817 </para>
818
819 <para>
820 To avoid these problems during the build, you need to
821 understand the effects of any changes you make.
822 Realize that changes you make directly to a function
823 are automatically factored into the checksum calculation.
824 Thus, these explicit changes invalidate the associated area of
825 shared state cache.
826 However, you need to be aware of any implicit changes that
827 are not obvious changes to the code and could affect the output
828 of a given task.
829 </para>
830
831 <para>
832 When you identify an implicit change, you can easily take steps
833 to invalidate the cache and force the tasks to run.
834 The steps you can take are as simple as changing a function's
835 comments in the source code.
836 For example, to invalidate package shared state files, change
837 the comment statements of <filename>do_package</filename> or
838 the comments of one of the functions it calls.
839 Even though the change is purely cosmetic, it causes the
840 checksum to be recalculated and forces the OpenEmbedded build
841 system to run the task again.
842 </para>
843
844 <note>
845 For an example of a commit that makes a cosmetic change to
846 invalidate shared state, see this
847 <ulink url='&YOCTO_GIT_URL;/cgit.cgi/poky/commit/meta/classes/package.bbclass?id=737f8bbb4f27b4837047cb9b4fbfe01dfde36d54'>commit</ulink>.
848 </note>
849 </section>
850 </section>
851</section>
852
853<section id='x32'>
854 <title>x32</title>
855
856 <para>
857 x32 is a processor-specific Application Binary Interface (psABI) for x86_64.
858 An ABI defines the calling conventions between functions in a processing environment.
859 The interface determines what registers are used and what the sizes are for various C data types.
860 </para>
861
862 <para>
863 Some processing environments prefer using 32-bit applications even when running
864 on Intel 64-bit platforms.
865 Consider the i386 psABI, which is a very old 32-bit ABI for Intel 64-bit platforms.
866 The i386 psABI does not provide efficient use and access of the Intel 64-bit processor resources,
867 leaving the system underutilized.
868 Now consider the x86_64 psABI.
869 This ABI is newer and uses 64-bits for data sizes and program pointers.
870 The extra bits increase the footprint size of the programs, libraries,
871 and also increases the memory and file system size requirements.
872 Executing under the x32 psABI enables user programs to utilize CPU and system resources
873 more efficiently while keeping the memory footprint of the applications low.
874 Extra bits are used for registers but not for addressing mechanisms.
875 </para>
876
877 <section id='support'>
878 <title>Support</title>
879
880 <para>
881 This Yocto Project release supports the final specifications of x32
882 psABI.
883 Support for x32 psABI exists as follows:
884 <itemizedlist>
885 <listitem><para>You can create packages and images in x32 psABI format on x86_64 architecture targets.
886 </para></listitem>
887 <listitem><para>You can successfully build many recipes with the x32 toolchain.</para></listitem>
888 <listitem><para>You can create and boot <filename>core-image-minimal</filename> and
889 <filename>core-image-sato</filename> images.</para></listitem>
890 </itemizedlist>
891 </para>
892 </section>
893
894 <section id='completing-x32'>
895 <title>Completing x32</title>
896
897 <para>
898 Future Plans for the x32 psABI in the Yocto Project include the following:
899 <itemizedlist>
900 <listitem><para>Enhance and fix the few remaining recipes so they
901 work with and support x32 toolchains.</para></listitem>
902 <listitem><para>Enhance RPM Package Manager (RPM) support for x32 binaries.</para></listitem>
903 <listitem><para>Support larger images.</para></listitem>
904 </itemizedlist>
905 </para>
906 </section>
907
908 <section id='using-x32-right-now'>
909 <title>Using x32 Right Now</title>
910
911 <para>
912 Follow these steps to use the x32 spABI:
913 <itemizedlist>
914 <listitem><para>Enable the x32 psABI tuning file for <filename>x86_64</filename>
915 machines by editing the <filename>conf/local.conf</filename> like this:
916 <literallayout class='monospaced'>
917 MACHINE = "qemux86-64"
918 DEFAULTTUNE = "x86-64-x32"
919 baselib = "${@d.getVar('BASE_LIB_tune-' + (d.getVar('DEFAULTTUNE', True) \
920 or 'INVALID'), True) or 'lib'}"
921 #MACHINE = "genericx86"
922 #DEFAULTTUNE = "core2-64-x32"
923 </literallayout></para></listitem>
924 <listitem><para>As usual, use BitBake to build an image that supports the x32 psABI.
925 Here is an example:
926 <literallayout class='monospaced'>
927 $ bitbake core-image-sato
928 </literallayout></para></listitem>
929 <listitem><para>As usual, run your image using QEMU:
930 <literallayout class='monospaced'>
931 $ runqemu qemux86-64 core-image-sato
932 </literallayout></para></listitem>
933 </itemizedlist>
934 </para>
935 </section>
936</section>
937
938<section id="wayland">
939 <title>Wayland</title>
940
941 <para>
942 <ulink url='http://en.wikipedia.org/wiki/Wayland_(display_server_protocol)'>Wayland</ulink>
943 is a computer display server protocol that
944 provides a method for compositing window managers to communicate
945 directly with applications and video hardware and expects them to
946 communicate with input hardware using other libraries.
947 Using Wayland with supporting targets can result in better control
948 over graphics frame rendering than an application might otherwise
949 achieve.
950 </para>
951
952 <para>
953 The Yocto Project provides the Wayland protocol libraries and the
954 reference
955 <ulink url='http://en.wikipedia.org/wiki/Wayland_(display_server_protocol)#Weston'>Weston</ulink>
956 compositor as part of its release.
957 This section describes what you need to do to implement Wayland and
958 use the compositor when building an image for a supporting target.
959 </para>
960
961 <section id="wayland-support">
962 <title>Support</title>
963
964 <para>
965 The Wayland protocol libraries and the reference Weston compositor
966 ship as integrated packages in the <filename>meta</filename> layer
967 of the
968 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
969 Specifically, you can find the recipes that build both Wayland
970 and Weston at <filename>meta/recipes-graphics/wayland</filename>.
971 </para>
972
973 <para>
974 You can build both the Wayland and Weston packages for use only
975 with targets that accept the
976 <ulink url='http://dri.freedesktop.org/wiki/'>Mesa 3D and Direct Rendering Infrastructure</ulink>,
977 which is also known as Mesa DRI.
978 This implies that you cannot build and use the packages if your
979 target uses, for example, the
980 <trademark class='registered'>Intel</trademark> Embedded Media and
981 Graphics Driver (<trademark class='registered'>Intel</trademark>
982 EMGD) that overrides Mesa DRI.
983 </para>
984
985 <note>
986 Due to lack of EGL support, Weston 1.0.3 will not run directly on
987 the emulated QEMU hardware.
988 However, this version of Weston will run under X emulation without
989 issues.
990 </note>
991 </section>
992
993 <section id="enabling-wayland-in-an-image">
994 <title>Enabling Wayland in an Image</title>
995
996 <para>
997 To enable Wayland, you need to enable it to be built and enable
998 it to be included in the image.
999 </para>
1000
1001 <section id="enable-building">
1002 <title>Building</title>
1003
1004 <para>
1005 To cause Mesa to build the <filename>wayland-egl</filename>
1006 platform and Weston to build Wayland with Kernel Mode
1007 Setting
1008 (<ulink url='https://wiki.archlinux.org/index.php/Kernel_Mode_Setting'>KMS</ulink>)
1009 support, include the "wayland" flag in the
1010 <link linkend="var-DISTRO_FEATURES"><filename>DISTRO_FEATURES</filename></link>
1011 statement in your <filename>local.conf</filename> file:
1012 <literallayout class='monospaced'>
1013 DISTRO_FEATURES_append = " wayland"
1014 </literallayout>
1015 </para>
1016
1017 <note>
1018 If X11 has been enabled elsewhere, Weston will build Wayland
1019 with X11 support
1020 </note>
1021 </section>
1022
1023 <section id="enable-installation-in-an-image">
1024 <title>Installing</title>
1025
1026 <para>
1027 To install the Wayland feature into an image, you must
1028 include the following
1029 <link linkend='var-CORE_IMAGE_EXTRA_INSTALL'><filename>CORE_IMAGE_EXTRA_INSTALL</filename></link>
1030 statement in your <filename>local.conf</filename> file:
1031 <literallayout class='monospaced'>
1032 CORE_IMAGE_EXTRA_INSTALL += "wayland weston"
1033 </literallayout>
1034 </para>
1035 </section>
1036 </section>
1037
1038 <section id="running-weston">
1039 <title>Running Weston</title>
1040
1041 <para>
1042 To run Weston inside X11, enabling it as described earlier and
1043 building a Sato image is sufficient.
1044 If you are running your image under Sato, a Weston Launcher appears
1045 in the "Utility" category.
1046 </para>
1047
1048 <para>
1049 Alternatively, you can run Weston through the command-line
1050 interpretor (CLI), which is better suited for development work.
1051 To run Weston under the CLI, you need to do the following after
1052 your image is built:
1053 <orderedlist>
1054 <listitem><para>Run these commands to export
1055 <filename>XDG_RUNTIME_DIR</filename>:
1056 <literallayout class='monospaced'>
1057 mkdir -p /tmp/$USER-weston
1058 chmod 0700 /tmp/$USER-weston
1059 export XDG_RUNTIME_DIR=/tmp/$USER-weston
1060 </literallayout></para></listitem>
1061 <listitem><para>Launch Weston in the shell:
1062 <literallayout class='monospaced'>
1063 weston
1064 </literallayout></para></listitem>
1065 </orderedlist>
1066 </para>
1067 </section>
1068</section>
1069
1070<section id="licenses">
1071 <title>Licenses</title>
1072
1073 <para>
1074 This section describes the mechanism by which the OpenEmbedded build system
1075 tracks changes to licensing text.
1076 The section also describes how to enable commercially licensed recipes,
1077 which by default are disabled.
1078 </para>
1079
1080 <para>
1081 For information that can help you maintain compliance with various open
1082 source licensing during the lifecycle of the product, see the
1083 "<ulink url='&YOCTO_DOCS_DEV_URL;#maintaining-open-source-license-compliance-during-your-products-lifecycle'>Maintaining Open Source License Compliance During Your Project's Lifecycle</ulink>" section
1084 in the Yocto Project Development Manual.
1085 </para>
1086
1087 <section id="usingpoky-configuring-LIC_FILES_CHKSUM">
1088 <title>Tracking License Changes</title>
1089
1090 <para>
1091 The license of an upstream project might change in the future.
1092 In order to prevent these changes going unnoticed, the
1093 <filename><link linkend='var-LIC_FILES_CHKSUM'>LIC_FILES_CHKSUM</link></filename>
1094 variable tracks changes to the license text. The checksums are validated at the end of the
1095 configure step, and if the checksums do not match, the build will fail.
1096 </para>
1097
1098 <section id="usingpoky-specifying-LIC_FILES_CHKSUM">
1099 <title>Specifying the <filename>LIC_FILES_CHKSUM</filename> Variable</title>
1100
1101 <para>
1102 The <filename>LIC_FILES_CHKSUM</filename>
1103 variable contains checksums of the license text in the source code for the recipe.
1104 Following is an example of how to specify <filename>LIC_FILES_CHKSUM</filename>:
1105 <literallayout class='monospaced'>
1106 LIC_FILES_CHKSUM = "file://COPYING;md5=xxxx \
1107 file://licfile1.txt;beginline=5;endline=29;md5=yyyy \
1108 file://licfile2.txt;endline=50;md5=zzzz \
1109 ..."
1110 </literallayout>
1111 </para>
1112
1113 <para>
1114 The build system uses the
1115 <filename><link linkend='var-S'>S</link></filename> variable as
1116 the default directory when searching files listed in
1117 <filename>LIC_FILES_CHKSUM</filename>.
1118 The previous example employs the default directory.
1119 </para>
1120
1121 <para>
1122 Consider this next example:
1123 <literallayout class='monospaced'>
1124 LIC_FILES_CHKSUM = "file://src/ls.c;beginline=5;endline=16;\
1125 md5=bb14ed3c4cda583abc85401304b5cd4e"
1126 LIC_FILES_CHKSUM = "file://${WORKDIR}/license.html;md5=5c94767cedb5d6987c902ac850ded2c6"
1127 </literallayout>
1128 </para>
1129
1130 <para>
1131 The first line locates a file in
1132 <filename>${S}/src/ls.c</filename>.
1133 The second line refers to a file in
1134 <filename><link linkend='var-WORKDIR'>WORKDIR</link></filename>.
1135 </para>
1136 <para>
1137 Note that <filename>LIC_FILES_CHKSUM</filename> variable is
1138 mandatory for all recipes, unless the
1139 <filename>LICENSE</filename> variable is set to "CLOSED".
1140 </para>
1141 </section>
1142
1143 <section id="usingpoky-LIC_FILES_CHKSUM-explanation-of-syntax">
1144 <title>Explanation of Syntax</title>
1145 <para>
1146 As mentioned in the previous section, the
1147 <filename>LIC_FILES_CHKSUM</filename> variable lists all the
1148 important files that contain the license text for the source code.
1149 It is possible to specify a checksum for an entire file, or a specific section of a
1150 file (specified by beginning and ending line numbers with the "beginline" and "endline"
1151 parameters, respectively).
1152 The latter is useful for source files with a license notice header,
1153 README documents, and so forth.
1154 If you do not use the "beginline" parameter, then it is assumed that the text begins on the
1155 first line of the file.
1156 Similarly, if you do not use the "endline" parameter, it is assumed that the license text
1157 ends with the last line of the file.
1158 </para>
1159
1160 <para>
1161 The "md5" parameter stores the md5 checksum of the license text.
1162 If the license text changes in any way as compared to this parameter
1163 then a mismatch occurs.
1164 This mismatch triggers a build failure and notifies the developer.
1165 Notification allows the developer to review and address the license text changes.
1166 Also note that if a mismatch occurs during the build, the correct md5
1167 checksum is placed in the build log and can be easily copied to the recipe.
1168 </para>
1169
1170 <para>
1171 There is no limit to how many files you can specify using the
1172 <filename>LIC_FILES_CHKSUM</filename> variable.
1173 Generally, however, every project requires a few specifications for license tracking.
1174 Many projects have a "COPYING" file that stores the license information for all the source
1175 code files.
1176 This practice allows you to just track the "COPYING" file as long as it is kept up to date.
1177 </para>
1178
1179 <tip>
1180 If you specify an empty or invalid "md5" parameter, BitBake returns an md5 mis-match
1181 error and displays the correct "md5" parameter value during the build.
1182 The correct parameter is also captured in the build log.
1183 </tip>
1184
1185 <tip>
1186 If the whole file contains only license text, you do not need to use the "beginline" and
1187 "endline" parameters.
1188 </tip>
1189 </section>
1190 </section>
1191
1192 <section id="enabling-commercially-licensed-recipes">
1193 <title>Enabling Commercially Licensed Recipes</title>
1194
1195 <para>
1196 By default, the OpenEmbedded build system disables
1197 components that have commercial or other special licensing
1198 requirements.
1199 Such requirements are defined on a
1200 recipe-by-recipe basis through the <filename>LICENSE_FLAGS</filename> variable
1201 definition in the affected recipe.
1202 For instance, the
1203 <filename>poky/meta/recipes-multimedia/gstreamer/gst-plugins-ugly</filename>
1204 recipe contains the following statement:
1205 <literallayout class='monospaced'>
1206 LICENSE_FLAGS = "commercial"
1207 </literallayout>
1208 Here is a slightly more complicated example that contains both an
1209 explicit recipe name and version (after variable expansion):
1210 <literallayout class='monospaced'>
1211 LICENSE_FLAGS = "license_${PN}_${PV}"
1212 </literallayout>
1213 In order for a component restricted by a <filename>LICENSE_FLAGS</filename>
1214 definition to be enabled and included in an image, it
1215 needs to have a matching entry in the global
1216 <filename>LICENSE_FLAGS_WHITELIST</filename> variable, which is a variable
1217 typically defined in your <filename>local.conf</filename> file.
1218 For example, to enable
1219 the <filename>poky/meta/recipes-multimedia/gstreamer/gst-plugins-ugly</filename>
1220 package, you could add either the string
1221 "commercial_gst-plugins-ugly" or the more general string
1222 "commercial" to <filename>LICENSE_FLAGS_WHITELIST</filename>.
1223 See the
1224 "<link linkend='license-flag-matching'>License Flag Matching</link>" section
1225 for a full explanation of how <filename>LICENSE_FLAGS</filename> matching works.
1226 Here is the example:
1227 <literallayout class='monospaced'>
1228 LICENSE_FLAGS_WHITELIST = "commercial_gst-plugins-ugly"
1229 </literallayout>
1230 Likewise, to additionally enable the package built from the recipe containing
1231 <filename>LICENSE_FLAGS = "license_${PN}_${PV}"</filename>, and assuming
1232 that the actual recipe name was <filename>emgd_1.10.bb</filename>,
1233 the following string would enable that package as well as
1234 the original <filename>gst-plugins-ugly</filename> package:
1235 <literallayout class='monospaced'>
1236 LICENSE_FLAGS_WHITELIST = "commercial_gst-plugins-ugly license_emgd_1.10"
1237 </literallayout>
1238 As a convenience, you do not need to specify the complete license string
1239 in the whitelist for every package.
1240 You can use an abbreviated form, which consists
1241 of just the first portion or portions of the license string before
1242 the initial underscore character or characters.
1243 A partial string will match
1244 any license that contains the given string as the first
1245 portion of its license.
1246 For example, the following
1247 whitelist string will also match both of the packages
1248 previously mentioned as well as any other packages that have
1249 licenses starting with "commercial" or "license".
1250 <literallayout class='monospaced'>
1251 LICENSE_FLAGS_WHITELIST = "commercial license"
1252 </literallayout>
1253 </para>
1254
1255 <section id="license-flag-matching">
1256 <title>License Flag Matching</title>
1257
1258 <para>
1259 License flag matching allows you to control what recipes the
1260 OpenEmbedded build system includes in the build.
1261 Fundamentally, the build system attempts to match
1262 <filename>LICENSE_FLAGS</filename> strings found in
1263 recipes against <filename>LICENSE_FLAGS_WHITELIST</filename>
1264 strings found in the whitelist.
1265 A match causes the build system to include a recipe in the
1266 build, while failure to find a match causes the build system to
1267 exclude a recipe.
1268 </para>
1269
1270 <para>
1271 In general, license flag matching is simple.
1272 However, understanding some concepts will help you
1273 correctly and effectively use matching.
1274 </para>
1275
1276 <para>
1277 Before a flag
1278 defined by a particular recipe is tested against the
1279 contents of the whitelist, the expanded string
1280 <filename>_${PN}</filename> is appended to the flag.
1281 This expansion makes each <filename>LICENSE_FLAGS</filename>
1282 value recipe-specific.
1283 After expansion, the string is then matched against the
1284 whitelist.
1285 Thus, specifying
1286 <filename>LICENSE_FLAGS = "commercial"</filename>
1287 in recipe "foo", for example, results in the string
1288 <filename>"commercial_foo"</filename>.
1289 And, to create a match, that string must appear in the
1290 whitelist.
1291 </para>
1292
1293 <para>
1294 Judicious use of the <filename>LICENSE_FLAGS</filename>
1295 strings and the contents of the
1296 <filename>LICENSE_FLAGS_WHITELIST</filename> variable
1297 allows you a lot of flexibility for including or excluding
1298 recipes based on licensing.
1299 For example, you can broaden the matching capabilities by
1300 using license flags string subsets in the whitelist.
1301 <note>When using a string subset, be sure to use the part of
1302 the expanded string that precedes the appended underscore
1303 character (e.g. <filename>usethispart_1.3</filename>,
1304 <filename>usethispart_1.4</filename>, and so forth).
1305 </note>
1306 For example, simply specifying the string "commercial" in
1307 the whitelist matches any expanded
1308 <filename>LICENSE_FLAGS</filename> definition that starts with
1309 the string "commercial" such as "commercial_foo" and
1310 "commercial_bar", which are the strings the build system
1311 automatically generates for hypothetical recipes named
1312 "foo" and "bar" assuming those recipes simply specify the
1313 following:
1314 <literallayout class='monospaced'>
1315 LICENSE_FLAGS = "commercial"
1316 </literallayout>
1317 Thus, you can choose to exhaustively
1318 enumerate each license flag in the whitelist and
1319 allow only specific recipes into the image, or
1320 you can use a string subset that causes a broader range of
1321 matches to allow a range of recipes into the image.
1322 </para>
1323
1324 <para>
1325 This scheme works even if the
1326 <filename>LICENSE_FLAGS</filename> string already
1327 has <filename>_${PN}</filename> appended.
1328 For example, the build system turns the license flag
1329 "commercial_1.2_foo" into "commercial_1.2_foo_foo" and would
1330 match both the general "commercial" and the specific
1331 "commercial_1.2_foo" strings found in the whitelist, as
1332 expected.
1333 </para>
1334
1335 <para>
1336 Here are some other scenarios:
1337 <itemizedlist>
1338 <listitem><para>You can specify a versioned string in the
1339 recipe such as "commercial_foo_1.2" in a "foo" recipe.
1340 The build system expands this string to
1341 "commercial_foo_1.2_foo".
1342 Combine this license flag with a whitelist that has
1343 the string "commercial" and you match the flag along
1344 with any other flag that starts with the string
1345 "commercial".</para></listitem>
1346 <listitem><para>Under the same circumstances, you can
1347 use "commercial_foo" in the whitelist and the
1348 build system not only matches "commercial_foo_1.2" but
1349 also matches any license flag with the string
1350 "commercial_foo", regardless of the version.
1351 </para></listitem>
1352 <listitem><para>You can be very specific and use both the
1353 package and version parts in the whitelist (e.g.
1354 "commercial_foo_1.2") to specifically match a
1355 versioned recipe.</para></listitem>
1356 </itemizedlist>
1357 </para>
1358 </section>
1359
1360 <section id="other-variables-related-to-commercial-licenses">
1361 <title>Other Variables Related to Commercial Licenses</title>
1362
1363 <para>
1364 Other helpful variables related to commercial
1365 license handling exist and are defined in the
1366 <filename>poky/meta/conf/distro/include/default-distrovars.inc</filename> file:
1367 <literallayout class='monospaced'>
1368 COMMERCIAL_AUDIO_PLUGINS ?= ""
1369 COMMERCIAL_VIDEO_PLUGINS ?= ""
1370 COMMERCIAL_QT = ""
1371 </literallayout>
1372 If you want to enable these components, you can do so by making sure you have
1373 statements similar to the following
1374 in your <filename>local.conf</filename> configuration file:
1375 <literallayout class='monospaced'>
1376 COMMERCIAL_AUDIO_PLUGINS = "gst-plugins-ugly-mad \
1377 gst-plugins-ugly-mpegaudioparse"
1378 COMMERCIAL_VIDEO_PLUGINS = "gst-plugins-ugly-mpeg2dec \
1379 gst-plugins-ugly-mpegstream gst-plugins-bad-mpegvideoparse"
1380 COMMERCIAL_QT ?= "qmmp"
1381 LICENSE_FLAGS_WHITELIST = "commercial_gst-plugins-ugly commercial_gst-plugins-bad commercial_qmmp"
1382 </literallayout>
1383 Of course, you could also create a matching whitelist
1384 for those components using the more general "commercial"
1385 in the whitelist, but that would also enable all the
1386 other packages with <filename>LICENSE_FLAGS</filename> containing
1387 "commercial", which you may or may not want:
1388 <literallayout class='monospaced'>
1389 LICENSE_FLAGS_WHITELIST = "commercial"
1390 </literallayout>
1391 </para>
1392
1393 <para>
1394 Specifying audio and video plug-ins as part of the
1395 <filename>COMMERCIAL_AUDIO_PLUGINS</filename> and
1396 <filename>COMMERCIAL_VIDEO_PLUGINS</filename> statements
1397 or commercial Qt components as part of
1398 the <filename>COMMERCIAL_QT</filename> statement (along
1399 with the enabling <filename>LICENSE_FLAGS_WHITELIST</filename>) includes the
1400 plug-ins or components into built images, thus adding
1401 support for media formats or components.
1402 </para>
1403 </section>
1404 </section>
1405</section>
1406</chapter>
1407<!--
1408vim: expandtab tw=80 ts=4
1409-->
diff --git a/documentation/ref-manual/usingpoky.xml b/documentation/ref-manual/usingpoky.xml
new file mode 100644
index 0000000000..a8a6f3b92a
--- /dev/null
+++ b/documentation/ref-manual/usingpoky.xml
@@ -0,0 +1,882 @@
1<!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='usingpoky'>
6<title>Using the Yocto Project</title>
7
8 <para>
9 This chapter describes common usage for the Yocto Project.
10 The information is introductory in nature as other manuals in the Yocto Project
11 documentation set provide more details on how to use the Yocto Project.
12 </para>
13
14<section id='usingpoky-build'>
15 <title>Running a Build</title>
16
17 <para>
18 This section provides a summary of the build process and provides information
19 for less obvious aspects of the build process.
20 For general information on how to build an image using the OpenEmbedded build
21 system, see the
22 "<ulink url='&YOCTO_DOCS_QS_URL;#building-image'>Building an Image</ulink>"
23 section of the Yocto Project Quick Start.
24 </para>
25
26 <section id='build-overview'>
27 <title>Build Overview</title>
28
29 <para>
30 The first thing you need to do is set up the OpenEmbedded build
31 environment by sourcing an environment setup script
32 (i.e.
33 <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
34 or
35 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>).
36 Here is an example:
37 <literallayout class='monospaced'>
38 $ source &OE_INIT_FILE; [&lt;build_dir&gt;]
39 </literallayout>
40 </para>
41
42 <para>
43 The <filename>build_dir</filename> argument is optional and specifies the directory the
44 OpenEmbedded build system uses for the build -
45 the <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
46 If you do not specify a Build Directory, it defaults to a directory
47 named <filename>build</filename> in your current working directory.
48 A common practice is to use a different Build Directory for different targets.
49 For example, <filename>~/build/x86</filename> for a <filename>qemux86</filename>
50 target, and <filename>~/build/arm</filename> for a <filename>qemuarm</filename> target.
51 </para>
52
53 <para>
54 Once the build environment is set up, you can build a target using:
55 <literallayout class='monospaced'>
56 $ bitbake &lt;target&gt;
57 </literallayout>
58 </para>
59
60 <para>
61 The <filename>target</filename> is the name of the recipe you want to build.
62 Common targets are the images in <filename>meta/recipes-core/images</filename>,
63 <filename>meta/recipes-sato/images</filename>, etc. all found in the
64 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
65 Or, the target can be the name of a recipe for a specific piece of software such as
66 BusyBox.
67 For more details about the images the OpenEmbedded build system supports, see the
68 "<link linkend="ref-images">Images</link>" chapter.
69 </para>
70
71 <note>
72 Building an image without GNU General Public License Version 3 (GPLv3) components
73 is supported for only minimal and base images.
74 See the "<link linkend='ref-images'>Images</link>" chapter for more information.
75 </note>
76 </section>
77
78 <section id='building-an-image-using-gpl-components'>
79 <title>Building an Image Using GPL Components</title>
80
81 <para>
82 When building an image using GPL components, you need to maintain your original
83 settings and not switch back and forth applying different versions of the GNU
84 General Public License.
85 If you rebuild using different versions of GPL, dependency errors might occur
86 due to some components not being rebuilt.
87 </para>
88 </section>
89</section>
90
91<section id='usingpoky-install'>
92 <title>Installing and Using the Result</title>
93
94 <para>
95 Once an image has been built, it often needs to be installed.
96 The images and kernels built by the OpenEmbedded build system are placed in the
97 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink> in
98 <filename class="directory">tmp/deploy/images</filename>.
99 For information on how to run pre-built images such as <filename>qemux86</filename>
100 and <filename>qemuarm</filename>, see the
101 "<ulink url='&YOCTO_DOCS_QS_URL;#using-pre-built'>Using Pre-Built Binaries and QEMU</ulink>"
102 section in the Yocto Project Quick Start.
103 For information about how to install these images, see the documentation for your
104 particular board or machine.
105 </para>
106</section>
107
108<section id='usingpoky-debugging'>
109 <title>Debugging Build Failures</title>
110
111 <para>
112 The exact method for debugging build failures depends on the nature of
113 the problem and on the system's area from which the bug originates.
114 Standard debugging practices such as comparison against the last
115 known working version with examination of the changes and the
116 re-application of steps to identify the one causing the problem are
117 valid for the Yocto Project just as they are for any other system.
118 Even though it is impossible to detail every possible potential failure,
119 this section provides some general tips to aid in debugging.
120 </para>
121
122 <para>
123 A useful feature for debugging is the error reporting tool.
124 Configuring the Yocto Project to use this tool causes the
125 OpenEmbedded build system to produce error reporting commands as
126 part of the console output.
127 You can enter the commands after the build completes
128 to log error information
129 into a common database, that can help you figure out what might be
130 going wrong.
131 For information on how to enable and use this feature, see the
132 "<ulink url='&YOCTO_DOCS_DEV_URL;#using-the-error-reporting-tool'>Using the Error Reporting Tool</ulink>"
133 section in the Yocto Project Development Manual.
134 </para>
135
136 <para>
137 For discussions on debugging, see the
138 "<ulink url='&YOCTO_DOCS_DEV_URL;#platdev-gdb-remotedebug'>Debugging With the GNU Project Debugger (GDB) Remotely</ulink>"
139 and
140 "<ulink url='&YOCTO_DOCS_DEV_URL;#adt-eclipse'>Working within Eclipse</ulink>"
141 sections in the Yocto Project Development Manual.
142 </para>
143
144 <note>
145 The remainder of this section presents many examples of the
146 <filename>bitbake</filename> command.
147 You can learn about BitBake by reading the
148 <ulink url='&YOCTO_DOCS_BB_URL;#bitbake-user-manual'>BitBake User Manual</ulink>.
149 </note>
150
151
152 <section id='usingpoky-debugging-taskfailures'>
153 <title>Task Failures</title>
154
155 <para>The log file for shell tasks is available in
156 <filename>${WORKDIR}/temp/log.do_taskname.pid</filename>.
157 For example, the <filename>compile</filename> task for the QEMU minimal image for the x86
158 machine (<filename>qemux86</filename>) might be
159 <filename>tmp/work/qemux86-poky-linux/core-image-minimal/1.0-r0/temp/log.do_compile.20830</filename>.
160 To see what
161 <ulink url='&YOCTO_DOCS_DEV_URL;#bitbake-term'>BitBake</ulink>
162 runs to generate that log, look at the corresponding
163 <filename>run.do_taskname.pid</filename> file located in the same directory.
164 </para>
165
166 <para>
167 Presently, the output from Python tasks is sent directly to the console.
168 </para>
169 </section>
170
171 <section id='usingpoky-debugging-taskrunning'>
172 <title>Running Specific Tasks</title>
173
174 <para>
175 Any given package consists of a set of tasks.
176 The standard BitBake behavior in most cases is: <filename>fetch</filename>,
177 <filename>unpack</filename>,
178 <filename>patch</filename>, <filename>configure</filename>,
179 <filename>compile</filename>, <filename>install</filename>, <filename>package</filename>,
180 <filename>package_write</filename>, and <filename>build</filename>.
181 The default task is <filename>build</filename> and any tasks on which it depends
182 build first.
183 Some tasks, such as <filename>devshell</filename>, are not part of the
184 default build chain.
185 If you wish to run a task that is not part of the default build chain, you can use the
186 <filename>-c</filename> option in BitBake.
187 Here is an example:
188 <literallayout class='monospaced'>
189 $ bitbake matchbox-desktop -c devshell
190 </literallayout>
191 </para>
192
193 <para>
194 If you wish to rerun a task, use the <filename>-f</filename> force
195 option.
196 For example, the following sequence forces recompilation after
197 changing files in the work directory.
198 <literallayout class='monospaced'>
199 $ bitbake matchbox-desktop
200 .
201 .
202 [make some changes to the source code in the work directory]
203 .
204 .
205 $ bitbake matchbox-desktop -c compile -f
206 $ bitbake matchbox-desktop
207 </literallayout>
208 </para>
209
210 <para>
211 This sequence first builds and then recompiles
212 <filename>matchbox-desktop</filename>.
213 The last command reruns all tasks (basically the packaging tasks) after the compile.
214 BitBake recognizes that the <filename>compile</filename> task was rerun and therefore
215 understands that the other tasks also need to be run again.
216 </para>
217
218 <para>
219 You can view a list of tasks in a given package by running the
220 <filename>listtasks</filename> task as follows:
221 <literallayout class='monospaced'>
222 $ bitbake matchbox-desktop -c listtasks
223 </literallayout>
224 The results appear as output to the console and are also in the
225 file <filename>${WORKDIR}/temp/log.do_listtasks</filename>.
226 </para>
227 </section>
228
229 <section id='usingpoky-debugging-dependencies'>
230 <title>Dependency Graphs</title>
231
232 <para>
233 Sometimes it can be hard to see why BitBake wants to build
234 other packages before building a given package you have specified.
235 The <filename>bitbake -g &lt;targetname&gt;</filename> command
236 creates the <filename>pn-buildlist</filename>,
237 <filename>pn-depends.dot</filename>,
238 <filename>package-depends.dot</filename>, and
239 <filename>task-depends.dot</filename> files in the current
240 directory.
241 These files show what will be built and the package and task
242 dependencies, which are useful for debugging problems.
243 You can use the
244 <filename>bitbake -g -u depexp &lt;targetname&gt;</filename>
245 command to display the results in a more human-readable form.
246 </para>
247 </section>
248
249 <section id='usingpoky-debugging-bitbake'>
250 <title>General BitBake Problems</title>
251
252 <para>
253 You can see debug output from BitBake by using the <filename>-D</filename> option.
254 The debug output gives more information about what BitBake
255 is doing and the reason behind it.
256 Each <filename>-D</filename> option you use increases the logging level.
257 The most common usage is <filename>-DDD</filename>.
258 </para>
259
260 <para>
261 The output from <filename>bitbake -DDD -v targetname</filename> can reveal why
262 BitBake chose a certain version of a package or why BitBake
263 picked a certain provider.
264 This command could also help you in a situation where you think BitBake did something
265 unexpected.
266 </para>
267 </section>
268
269 <section id='development-host-system-issues'>
270 <title>Development Host System Issues</title>
271
272 <para>
273 Sometimes issues on the host development system can cause your
274 build to fail.
275 Following are known, host-specific problems.
276 Be sure to always consult the
277 <ulink url='&YOCTO_RELEASE_NOTES;'>Release Notes</ulink>
278 for a look at all release-related issues.
279 <itemizedlist>
280 <listitem><para><emphasis><filename>eglibc-initial</filename> fails to build</emphasis>:
281 If your development host system has the unpatched
282 <filename>GNU Make 3.82</filename>,
283 the <filename>do_install</filename> task
284 fails for <filename>eglibc-initial</filename> during the
285 build.</para>
286 <para>Typically, every distribution that ships
287 <filename>GNU Make 3.82</filename> as
288 the default already has the patched version.
289 However, some distributions, such as Debian, have
290 <filename>GNU Make 3.82</filename> as an option, which
291 is unpatched.
292 You will see this error on these types of distributions.
293 Switch to <filename>GNU Make 3.81</filename> or patch
294 your <filename>make</filename> to solve the problem.
295 </para></listitem>
296 </itemizedlist>
297 </para>
298 </section>
299
300 <section id='usingpoky-debugging-buildfile'>
301 <title>Building with No Dependencies</title>
302 <para>
303 To build a specific recipe (<filename>.bb</filename> file),
304 you can use the following command form:
305 <literallayout class='monospaced'>
306 $ bitbake -b &lt;somepath/somerecipe.bb&gt;
307 </literallayout>
308 This command form does not check for dependencies.
309 Consequently, you should use it
310 only when you know existing dependencies have been met.
311 <note>
312 You can also specify fragments of the filename.
313 In this case, BitBake checks for a unique match.
314 </note>
315 </para>
316 </section>
317
318 <section id='usingpoky-debugging-variables'>
319 <title>Variables</title>
320 <para>
321 You can use the <filename>-e</filename> BitBake option to
322 display the parsing environment for a configuration.
323 The following displays the general parsing environment:
324 <literallayout class='monospaced'>
325 $ bitbake -e
326 </literallayout>
327 This next example shows the parsing environment for a specific
328 recipe:
329 <literallayout class='monospaced'>
330 $ bitbake -e &lt;recipename&gt;
331 </literallayout>
332 </para>
333 </section>
334
335 <section id='recipe-logging-mechanisms'>
336 <title>Recipe Logging Mechanisms</title>
337 <para>
338 Best practices exist while writing recipes that both log build progress and
339 act on build conditions such as warnings and errors.
340 Both Python and Bash language bindings exist for the logging mechanism:
341 <itemizedlist>
342 <listitem><para><emphasis>Python:</emphasis> For Python functions, BitBake
343 supports several loglevels: <filename>bb.fatal</filename>,
344 <filename>bb.error</filename>, <filename>bb.warn</filename>,
345 <filename>bb.note</filename>, <filename>bb.plain</filename>,
346 and <filename>bb.debug</filename>.</para></listitem>
347 <listitem><para><emphasis>Bash:</emphasis> For Bash functions, the same set
348 of loglevels exist and are accessed with a similar syntax:
349 <filename>bbfatal</filename>, <filename>bberror</filename>,
350 <filename>bbwarn</filename>, <filename>bbnote</filename>,
351 <filename>bbplain</filename>, and <filename>bbdebug</filename>.</para></listitem>
352 </itemizedlist>
353 </para>
354
355 <para>
356 For guidance on how logging is handled in both Python and Bash recipes, see the
357 <filename>logging.bbclass</filename> file in the
358 <filename>meta/classes</filename> folder of the
359 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
360 </para>
361
362 <section id='logging-with-python'>
363 <title>Logging With Python</title>
364 <para>
365 When creating recipes using Python and inserting code that handles build logs,
366 keep in mind the goal is to have informative logs while keeping the console as
367 "silent" as possible.
368 Also, if you want status messages in the log, use the "debug" loglevel.
369 </para>
370
371 <para>
372 Following is an example written in Python.
373 The code handles logging for a function that determines the number of tasks
374 needed to be run:
375 <literallayout class='monospaced'>
376 python do_listtasks() {
377 bb.debug(2, "Starting to figure out the task list")
378 if noteworthy_condition:
379 bb.note("There are 47 tasks to run")
380 bb.debug(2, "Got to point xyz")
381 if warning_trigger:
382 bb.warn("Detected warning_trigger, this might be a problem later.")
383 if recoverable_error:
384 bb.error("Hit recoverable_error, you really need to fix this!")
385 if fatal_error:
386 bb.fatal("fatal_error detected, unable to print the task list")
387 bb.plain("The tasks present are abc")
388 bb.debug(2, "Finished figuring out the tasklist")
389 }
390 </literallayout>
391 </para>
392 </section>
393
394 <section id='logging-with-bash'>
395 <title>Logging With Bash</title>
396 <para>
397 When creating recipes using Bash and inserting code that handles build
398 logs, you have the same goals - informative with minimal console output.
399 The syntax you use for recipes written in Bash is similar to that of
400 recipes written in Python described in the previous section.
401 </para>
402
403 <para>
404 Following is an example written in Bash.
405 The code logs the progress of the <filename>do_my_function</filename> function.
406 <literallayout class='monospaced'>
407 do_my_function() {
408 bbdebug 2 "Running do_my_function"
409 if [ exceptional_condition ]; then
410 bbnote "Hit exceptional_condition"
411 fi
412 bbdebug 2 "Got to point xyz"
413 if [ warning_trigger ]; then
414 bbwarn "Detected warning_trigger, this might cause a problem later."
415 fi
416 if [ recoverable_error ]; then
417 bberror "Hit recoverable_error, correcting"
418 fi
419 if [ fatal_error ]; then
420 bbfatal "fatal_error detected"
421 fi
422 bbdebug 2 "Completed do_my_function"
423 }
424 </literallayout>
425 </para>
426 </section>
427 </section>
428
429 <section id='usingpoky-debugging-others'>
430 <title>Other Tips</title>
431
432 <para>
433 Here are some other tips that you might find useful:
434 <itemizedlist>
435 <listitem><para>When adding new packages, it is worth watching for
436 undesirable items making their way into compiler command lines.
437 For example, you do not want references to local system files like
438 <filename>/usr/lib/</filename> or <filename>/usr/include/</filename>.
439 </para></listitem>
440 <listitem><para>If you want to remove the <filename>psplash</filename>
441 boot splashscreen,
442 add <filename>psplash=false</filename> to the kernel command line.
443 Doing so prevents <filename>psplash</filename> from loading
444 and thus allows you to see the console.
445 It is also possible to switch out of the splashscreen by
446 switching the virtual console (e.g. Fn+Left or Fn+Right on a Zaurus).
447 </para></listitem>
448 </itemizedlist>
449 </para>
450 </section>
451</section>
452
453<section id='maintaining-build-output-quality'>
454 <title>Maintaining Build Output Quality</title>
455
456 <para>
457 Many factors can influence the quality of a build.
458 For example, if you upgrade a recipe to use a new version of an upstream software
459 package or you experiment with some new configuration options, subtle changes
460 can occur that you might not detect until later.
461 Consider the case where your recipe is using a newer version of an upstream package.
462 In this case, a new version of a piece of software might introduce an optional
463 dependency on another library, which is auto-detected.
464 If that library has already been built when the software is building,
465 the software will link to the built library and that library will be pulled
466 into your image along with the new software even if you did not want the
467 library.
468 </para>
469
470 <para>
471 The
472 <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
473 class exists to help you maintain
474 the quality of your build output.
475 You can use the class to highlight unexpected and possibly unwanted
476 changes in the build output.
477 When you enable build history, it records information about the contents of
478 each package and image and then commits that information to a local Git
479 repository where you can examine the information.
480 </para>
481
482 <para>
483 The remainder of this section describes the following:
484 <itemizedlist>
485 <listitem><para>How you can enable and disable
486 build history</para></listitem>
487 <listitem><para>How to understand what the build history contains
488 </para></listitem>
489 <listitem><para>How to limit the information used for build history
490 </para></listitem>
491 <listitem><para>How to examine the build history from both a
492 command-line and web interface</para></listitem>
493 </itemizedlist>
494 </para>
495
496 <section id='enabling-and-disabling-build-history'>
497 <title>Enabling and Disabling Build History</title>
498
499 <para>
500 Build history is disabled by default.
501 To enable it, add the following <filename>INHERIT</filename>
502 statement and set the
503 <link linkend='var-BUILDHISTORY_COMMIT'><filename>BUILDHISTORY_COMMIT</filename></link>
504 variable to "1" at the end of your
505 <filename>conf/local.conf</filename> file found in the
506 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>:
507 <literallayout class='monospaced'>
508 INHERIT += "buildhistory"
509 BUILDHISTORY_COMMIT = "1"
510 </literallayout>
511 Enabling build history as previously described
512 causes the build process to collect build
513 output information and commit it to a local
514 <ulink url='&YOCTO_DOCS_DEV_URL;#git'>Git</ulink> repository.
515 <note>
516 Enabling build history increases your build times slightly,
517 particularly for images, and increases the amount of disk
518 space used during the build.
519 </note>
520 </para>
521
522 <para>
523 You can disable build history by removing the previous statements
524 from your <filename>conf/local.conf</filename> file.
525 </para>
526 </section>
527
528 <section id='understanding-what-the-build-history-contains'>
529 <title>Understanding What the Build History Contains</title>
530
531 <para>
532 Build history information is kept in
533 <filename>$</filename><link linkend='var-TOPDIR'><filename>TOPDIR</filename></link><filename>/buildhistory</filename>
534 in the Build Directory as defined by the
535 <link linkend='var-BUILDHISTORY_DIR'><filename>BUILDHISTORY_DIR</filename></link>
536 variable.
537 The following is an example abbreviated listing:
538 <imagedata fileref="figures/buildhistory.png" align="center" width="6in" depth="4in" />
539 </para>
540
541 <para>
542 At the top level, there is a <filename>metadata-revs</filename> file
543 that lists the revisions of the repositories for the layers enabled
544 when the build was produced.
545 The rest of the data splits into separate
546 <filename>packages</filename>, <filename>images</filename> and
547 <filename>sdk</filename> directories, the contents of which are
548 described below.
549 </para>
550
551 <section id='build-history-package-information'>
552 <title>Build History Package Information</title>
553
554 <para>
555 The history for each package contains a text file that has
556 name-value pairs with information about the package.
557 For example, <filename>buildhistory/packages/core2-poky-linux/busybox/busybox/latest</filename>
558 contains the following:
559 <literallayout class='monospaced'>
560 PV = 1.19.3
561 PR = r3
562 RDEPENDS = update-rc.d eglibc (>= 2.13)
563 RRECOMMENDS = busybox-syslog busybox-udhcpc
564 PKGSIZE = 564701
565 FILES = /usr/bin/* /usr/sbin/* /usr/libexec/* /usr/lib/lib*.so.* \
566 /etc /com /var /bin/* /sbin/* /lib/*.so.* /usr/share/busybox \
567 /usr/lib/busybox/* /usr/share/pixmaps /usr/share/applications \
568 /usr/share/idl /usr/share/omf /usr/share/sounds /usr/lib/bonobo/servers
569 FILELIST = /etc/busybox.links /etc/init.d/hwclock.sh /bin/busybox /bin/sh
570 </literallayout>
571 Most of these name-value pairs correspond to variables used
572 to produce the package.
573 The exceptions are <filename>FILELIST</filename>, which is the
574 actual list of files in the package, and
575 <filename>PKGSIZE</filename>, which is the total size of files
576 in the package in bytes.
577 </para>
578
579 <para>
580 There is also a file corresponding to the recipe from which the
581 package came (e.g.
582 <filename>buildhistory/packages/core2-poky-linux/busybox/latest</filename>):
583 <literallayout class='monospaced'>
584 PV = 1.19.3
585 PR = r3
586 DEPENDS = virtual/i586-poky-linux-gcc virtual/i586-poky-linux-compilerlibs \
587 virtual/libc update-rc.d-native
588 PACKAGES = busybox-httpd busybox-udhcpd busybox-udhcpc busybox-syslog \
589 busybox-mdev busybox-dbg busybox busybox-doc busybox-dev \
590 busybox-staticdev busybox-locale
591 </literallayout>
592 </para>
593
594 <para>
595 Finally, for those recipes fetched from a version control
596 system (e.g., Git), a file exists that lists source revisions
597 that are specified in the recipe and lists the actual revisions
598 used during the build.
599 Listed and actual revisions might differ when
600 <link linkend='var-SRCREV'><filename>SRCREV</filename></link>
601 is set to
602 <filename>${<link linkend='var-AUTOREV'>AUTOREV</link>}</filename>.
603 Here is an example assuming
604 <filename>buildhistory/packages/emenlow-poky-linux/linux-yocto/latest_srcrev</filename>):
605 <literallayout class='monospaced'>
606 # SRCREV_machine = "b5c37fe6e24eec194bb29d22fdd55d73bcc709bf"
607 SRCREV_machine = "b5c37fe6e24eec194bb29d22fdd55d73bcc709bf"
608 # SRCREV_emgd = "caea08c988e0f41103bbe18eafca20348f95da02"
609 SRCREV_emgd = "caea08c988e0f41103bbe18eafca20348f95da02"
610 # SRCREV_meta = "c2ed0f16fdec628242a682897d5d86df4547cf24"
611 SRCREV_meta = "c2ed0f16fdec628242a682897d5d86df4547cf24"
612 </literallayout>
613 You can use the <filename>buildhistory-collect-srcrevs</filename>
614 command to collect the stored <filename>SRCREV</filename> values
615 from build history and report them in a format suitable for use in
616 global configuration (e.g., <filename>local.conf</filename>
617 or a distro include file) to override floating
618 <filename>AUTOREV</filename> values to a fixed set of revisions.
619 Here is some example output from this command:
620 <literallayout class='monospaced'>
621 # emenlow-poky-linux
622 SRCREV_machine_pn-linux-yocto = "b5c37fe6e24eec194bb29d22fdd55d73bcc709bf"
623 SRCREV_emgd_pn-linux-yocto = "caea08c988e0f41103bbe18eafca20348f95da02"
624 SRCREV_meta_pn-linux-yocto = "c2ed0f16fdec628242a682897d5d86df4547cf24"
625 # core2-poky-linux
626 SRCREV_pn-kmod = "62081c0f68905b22f375156d4532fd37fa5c8d33"
627 SRCREV_pn-blktrace = "d6918c8832793b4205ed3bfede78c2f915c23385"
628 SRCREV_pn-opkg = "649"
629 </literallayout>
630 <note>
631 Here are some notes on using the
632 <filename>buildhistory-collect-srcrevs</filename> command:
633 <itemizedlist>
634 <listitem><para>By default, only values where the
635 <filename>SRCREV</filename> was
636 not hardcoded (usually when <filename>AUTOREV</filename>
637 was used) are reported.
638 Use the <filename>-a</filename> option to see all
639 <filename>SRCREV</filename> values.
640 </para></listitem>
641 <listitem><para>The output statements might not have any effect
642 if overrides are applied elsewhere in the build system
643 configuration.
644 Use the <filename>-f</filename> option to add the
645 <filename>forcevariable</filename> override to each output line
646 if you need to work around this restriction.
647 </para></listitem>
648 <listitem><para>The script does apply special handling when
649 building for multiple machines.
650 However, the script does place a
651 comment before each set of values that specifies
652 which triplet to which they belong as shown above
653 (e.g., <filename>emenlow-poky-linux</filename>).
654 </para></listitem>
655 </itemizedlist>
656 </note>
657 </para>
658 </section>
659
660 <section id='build-history-image-information'>
661 <title>Build History Image Information</title>
662
663 <para>
664 The files produced for each image are as follows:
665 <itemizedlist>
666 <listitem><para><filename>image-files:</filename>
667 A directory containing selected files from the root
668 filesystem.
669 The files are defined by
670 <link linkend='var-BUILDHISTORY_IMAGE_FILES'><filename>BUILDHISTORY_IMAGE_FILES</filename></link>.
671 </para></listitem>
672 <listitem><para><filename>build-id:</filename>
673 Human-readable information about the build configuration
674 and metadata source revisions.</para></listitem>
675 <listitem><para><filename>*.dot:</filename>
676 Dependency graphs for the image that are
677 compatible with <filename>graphviz</filename>.
678 </para></listitem>
679 <listitem><para><filename>files-in-image.txt:</filename>
680 A list of files in the image with permissions,
681 owner, group, size, and symlink information.
682 </para></listitem>
683 <listitem><para><filename>image-info.txt:</filename>
684 A text file containing name-value pairs with information
685 about the image.
686 See the following listing example for more information.
687 </para></listitem>
688 <listitem><para><filename>installed-package-names.txt:</filename>
689 A list of installed packages by name only.</para></listitem>
690 <listitem><para><filename>installed-package-sizes.txt:</filename>
691 A list of installed packages ordered by size.
692 </para></listitem>
693 <listitem><para><filename>installed-packages.txt:</filename>
694 A list of installed packages with full package
695 filenames.</para></listitem>
696 </itemizedlist>
697 <note>
698 Installed package information is able to be gathered and
699 produced even if package management is disabled for the final
700 image.
701 </note>
702 </para>
703
704 <para>
705 Here is an example of <filename>image-info.txt</filename>:
706 <literallayout class='monospaced'>
707 DISTRO = poky
708 DISTRO_VERSION = 1.1+snapshot-20120207
709 USER_CLASSES = image-mklibs image-prelink
710 IMAGE_CLASSES = image_types
711 IMAGE_FEATURES = debug-tweaks x11-base apps-x11-core \
712 package-management ssh-server-dropbear package-management
713 IMAGE_LINGUAS = en-us en-gb
714 IMAGE_INSTALL = task-core-boot task-base-extended
715 BAD_RECOMMENDATIONS =
716 ROOTFS_POSTPROCESS_COMMAND = buildhistory_get_image_installed ; rootfs_update_timestamp ;
717 IMAGE_POSTPROCESS_COMMAND = buildhistory_get_imageinfo ;
718 IMAGESIZE = 171816
719 </literallayout>
720 Other than <filename>IMAGESIZE</filename>, which is the
721 total size of the files in the image in Kbytes, the
722 name-value pairs are variables that may have influenced the
723 content of the image.
724 This information is often useful when you are trying to determine
725 why a change in the package or file listings has occurred.
726 </para>
727 </section>
728
729 <section id='using-build-history-to-gather-image-information-only'>
730 <title>Using Build History to Gather Image Information Only</title>
731
732 <para>
733 As you can see, build history produces image information,
734 including dependency graphs, so you can see why something
735 was pulled into the image.
736 If you are just interested in this information and not
737 interested in collecting specific package or SDK information,
738 you can enable writing only image information without
739 any history by adding the following to your
740 <filename>conf/local.conf</filename> file found in the
741 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>:
742 <literallayout class='monospaced'>
743 INHERIT += "buildhistory"
744 BUILDHISTORY_COMMIT = "0"
745 BUILDHISTORY_FEATURES = "image"
746 </literallayout>
747 Here, you set the
748 <link linkend='var-BUILDHISTORY_FEATURES'><filename>BUILDHISTORY_FEATURES</filename></link>
749 variable to use the image feature only.
750 </para>
751 </section>
752
753 <section id='build-history-sdk-information'>
754 <title>Build History SDK Information</title>
755 <para>
756 Build history collects similar information on the contents
757 of SDKs (e.g. <filename>meta-toolchain</filename>
758 or <filename>bitbake -c populate_sdk imagename</filename>)
759 as compared to information it collects for images.
760 The following list shows the files produced for each SDK:
761 <itemizedlist>
762 <listitem><para><filename>files-in-sdk.txt:</filename>
763 A list of files in the SDK with permissions,
764 owner, group, size, and symlink information.
765 This list includes both the host and target parts
766 of the SDK.
767 </para></listitem>
768 <listitem><para><filename>sdk-info.txt:</filename>
769 A text file containing name-value pairs with information
770 about the SDK.
771 See the following listing example for more information.
772 </para></listitem>
773 <listitem><para>The following information appears under
774 each of the <filename>host</filename>
775 and <filename>target</filename> directories
776 for the portions of the SDK that run on the host and
777 on the target, respectively:
778 <itemizedlist>
779 <listitem><para><filename>depends.dot:</filename>
780 Dependency graph for the SDK that is
781 compatible with <filename>graphviz</filename>.
782 </para></listitem>
783 <listitem><para><filename>installed-package-names.txt:</filename>
784 A list of installed packages by name only.
785 </para></listitem>
786 <listitem><para><filename>installed-package-sizes.txt:</filename>
787 A list of installed packages ordered by size.
788 </para></listitem>
789 <listitem><para><filename>installed-packages.txt:</filename>
790 A list of installed packages with full package
791 filenames.</para></listitem>
792 </itemizedlist>
793 </para></listitem>
794 </itemizedlist>
795 </para>
796
797 <para>
798 Here is an example of <filename>sdk-info.txt</filename>:
799 <literallayout class='monospaced'>
800 DISTRO = poky
801 DISTRO_VERSION = 1.3+snapshot-20130327
802 SDK_NAME = poky-eglibc-i686-arm
803 SDK_VERSION = 1.3+snapshot
804 SDKMACHINE =
805 SDKIMAGE_FEATURES = dev-pkgs dbg-pkgs
806 BAD_RECOMMENDATIONS =
807 SDKSIZE = 352712
808 </literallayout>
809 Other than <filename>SDKSIZE</filename>, which is the
810 total size of the files in the SDK in Kbytes, the
811 name-value pairs are variables that might have influenced the
812 content of the SDK.
813 This information is often useful when you are trying to
814 determine why a change in the package or file listings
815 has occurred.
816 </para>
817 </section>
818
819 <section id='examining-build-history-information'>
820 <title>Examining Build History Information</title>
821
822 <para>
823 You can examine build history output from the command line or
824 from a web interface.
825 </para>
826
827 <para>
828 To see any changes that have occurred (assuming you have
829 <link linkend='var-BUILDHISTORY_COMMIT'><filename>BUILDHISTORY_COMMIT = "1"</filename></link>),
830 you can simply
831 use any Git command that allows you to view the history of
832 a repository.
833 Here is one method:
834 <literallayout class='monospaced'>
835 $ git log -p
836 </literallayout>
837 You need to realize, however, that this method does show
838 changes that are not significant (e.g. a package's size
839 changing by a few bytes).
840 </para>
841
842 <para>
843 A command-line tool called <filename>buildhistory-diff</filename>
844 does exist, though, that queries the Git repository and prints just
845 the differences that might be significant in human-readable form.
846 Here is an example:
847 <literallayout class='monospaced'>
848 $ ~/poky/poky/scripts/buildhistory-diff . HEAD^
849 Changes to images/qemux86_64/eglibc/core-image-minimal (files-in-image.txt):
850 /etc/anotherpkg.conf was added
851 /sbin/anotherpkg was added
852 * (installed-package-names.txt):
853 * anotherpkg was added
854 Changes to images/qemux86_64/eglibc/core-image-minimal (installed-package-names.txt):
855 anotherpkg was added
856 packages/qemux86_64-poky-linux/v86d: PACKAGES: added "v86d-extras"
857 * PR changed from "r0" to "r1"
858 * PV changed from "0.1.10" to "0.1.12"
859 packages/qemux86_64-poky-linux/v86d/v86d: PKGSIZE changed from 110579 to 144381 (+30%)
860 * PR changed from "r0" to "r1"
861 * PV changed from "0.1.10" to "0.1.12"
862 </literallayout>
863 </para>
864
865 <para>
866 To see changes to the build history using a web interface, follow
867 the instruction in the <filename>README</filename> file here.
868 <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/buildhistory-web/'></ulink>.
869 </para>
870
871 <para>
872 Here is a sample screenshot of the interface:
873 <imagedata fileref="figures/buildhistory-web.png" align="center" scalefit="1" width="130%" contentdepth="130%" />
874 </para>
875 </section>
876 </section>
877</section>
878
879</chapter>
880<!--
881vim: expandtab tw=80 ts=4
882-->
diff --git a/documentation/template/Vera.ttf b/documentation/template/Vera.ttf
new file mode 100644
index 0000000000..58cd6b5e61
--- /dev/null
+++ b/documentation/template/Vera.ttf
Binary files differ
diff --git a/documentation/template/Vera.xml b/documentation/template/Vera.xml
new file mode 100644
index 0000000000..3c82043e35
--- /dev/null
+++ b/documentation/template/Vera.xml
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><font-metrics type="TYPE0"><font-name>BitstreamVeraSans</font-name><embed/><cap-height>729</cap-height><x-height>546</x-height><ascender>928</ascender><descender>-235</descender><bbox><left>-183</left><bottom>-235</bottom><right>1287</right><top>928</top></bbox><flags>32</flags><stemv>0</stemv><italicangle>0</italicangle><subtype>TYPE0</subtype><multibyte-extras><cid-type>CIDFontType2</cid-type><default-width>0</default-width><bfranges><bf gi="3" ue="126" us="32"/><bf gi="172" ue="160" us="160"/><bf gi="163" ue="161" us="161"/><bf gi="132" ue="163" us="162"/><bf gi="189" ue="164" us="164"/><bf gi="150" ue="165" us="165"/><bf gi="231" ue="166" us="166"/><bf gi="134" ue="167" us="167"/><bf gi="142" ue="168" us="168"/><bf gi="139" ue="169" us="169"/><bf gi="157" ue="170" us="170"/><bf gi="169" ue="171" us="171"/><bf gi="164" ue="172" us="172"/><bf gi="256" ue="173" us="173"/><bf gi="138" ue="174" us="174"/><bf gi="217" ue="175" us="175"/><bf gi="131" ue="176" us="176"/><bf gi="147" ue="177" us="177"/><bf gi="241" ue="179" us="178"/><bf gi="141" ue="180" us="180"/><bf gi="151" ue="181" us="181"/><bf gi="136" ue="182" us="182"/><bf gi="195" ue="183" us="183"/><bf gi="221" ue="184" us="184"/><bf gi="240" ue="185" us="185"/><bf gi="158" ue="186" us="186"/><bf gi="170" ue="187" us="187"/><bf gi="243" ue="190" us="188"/><bf gi="162" ue="191" us="191"/><bf gi="173" ue="192" us="192"/><bf gi="201" ue="193" us="193"/><bf gi="199" ue="194" us="194"/><bf gi="174" ue="195" us="195"/><bf gi="98" ue="197" us="196"/><bf gi="144" ue="198" us="198"/><bf gi="100" ue="199" us="199"/><bf gi="203" ue="200" us="200"/><bf gi="101" ue="201" us="201"/><bf gi="200" ue="202" us="202"/><bf gi="202" ue="203" us="203"/><bf gi="207" ue="204" us="204"/><bf gi="204" ue="207" us="205"/><bf gi="232" ue="208" us="208"/><bf gi="102" ue="209" us="209"/><bf gi="210" ue="210" us="210"/><bf gi="208" ue="212" us="211"/><bf gi="175" ue="213" us="213"/><bf gi="103" ue="214" us="214"/><bf gi="239" ue="215" us="215"/><bf gi="145" ue="216" us="216"/><bf gi="213" ue="217" us="217"/><bf gi="211" ue="219" us="218"/><bf gi="104" ue="220" us="220"/><bf gi="234" ue="221" us="221"/><bf gi="236" ue="222" us="222"/><bf gi="137" ue="223" us="223"/><bf gi="106" ue="224" us="224"/><bf gi="105" ue="225" us="225"/><bf gi="107" ue="226" us="226"/><bf gi="109" ue="227" us="227"/><bf gi="108" ue="228" us="228"/><bf gi="110" ue="229" us="229"/><bf gi="160" ue="230" us="230"/><bf gi="111" ue="231" us="231"/><bf gi="113" ue="232" us="232"/><bf gi="112" ue="233" us="233"/><bf gi="114" ue="235" us="234"/><bf gi="117" ue="236" us="236"/><bf gi="116" ue="237" us="237"/><bf gi="118" ue="239" us="238"/><bf gi="233" ue="240" us="240"/><bf gi="120" ue="241" us="241"/><bf gi="122" ue="242" us="242"/><bf gi="121" ue="243" us="243"/><bf gi="123" ue="244" us="244"/><bf gi="125" ue="245" us="245"/><bf gi="124" ue="246" us="246"/><bf gi="184" ue="247" us="247"/><bf gi="161" ue="248" us="248"/><bf gi="127" ue="249" us="249"/><bf gi="126" ue="250" us="250"/><bf gi="128" ue="252" us="251"/><bf gi="235" ue="253" us="253"/><bf gi="237" ue="254" us="254"/><bf gi="186" ue="255" us="255"/><bf gi="251" ue="263" us="262"/><bf gi="253" ue="269" us="268"/><bf gi="0" ue="270" us="270"/><bf gi="0" ue="271" us="271"/><bf gi="0" ue="272" us="272"/><bf gi="255" ue="273" us="273"/><bf gi="246" ue="287" us="286"/><bf gi="248" ue="304" us="304"/><bf gi="214" ue="305" us="305"/><bf gi="225" ue="322" us="321"/><bf gi="176" ue="339" us="338"/><bf gi="249" ue="351" us="350"/><bf gi="227" ue="353" us="352"/><bf gi="187" ue="376" us="376"/><bf gi="229" ue="382" us="381"/><bf gi="166" ue="402" us="402"/><bf gi="215" ue="710" us="710"/><bf gi="224" ue="711" us="711"/><bf gi="218" ue="730" us="728"/><bf gi="223" ue="731" us="731"/><bf gi="216" ue="732" us="732"/><bf gi="222" ue="733" us="733"/><bf gi="159" ue="937" us="937"/><bf gi="155" ue="960" us="960"/><bf gi="178" ue="8212" us="8211"/><bf gi="0" ue="8213" us="8213"/><bf gi="0" ue="8214" us="8214"/><bf gi="0" ue="8215" us="8215"/><bf gi="182" ue="8217" us="8216"/><bf gi="196" ue="8218" us="8218"/><bf gi="0" ue="8219" us="8219"/><bf gi="180" ue="8221" us="8220"/><bf gi="197" ue="8222" us="8222"/><bf gi="0" ue="8223" us="8223"/><bf gi="130" ue="8224" us="8224"/><bf gi="194" ue="8225" us="8225"/><bf gi="135" ue="8226" us="8226"/><bf gi="0" ue="8227" us="8227"/><bf gi="0" ue="8228" us="8228"/><bf gi="0" ue="8229" us="8229"/><bf gi="171" ue="8230" us="8230"/><bf gi="198" ue="8240" us="8240"/><bf gi="190" ue="8250" us="8249"/><bf gi="258" ue="8364" us="8364"/><bf gi="140" ue="8482" us="8482"/><bf gi="152" ue="8706" us="8706"/><bf gi="0" ue="8707" us="8707"/><bf gi="0" ue="8708" us="8708"/><bf gi="0" ue="8709" us="8709"/><bf gi="168" ue="8710" us="8710"/><bf gi="154" ue="8719" us="8719"/><bf gi="0" ue="8720" us="8720"/><bf gi="153" ue="8721" us="8721"/><bf gi="238" ue="8722" us="8722"/><bf gi="0" ue="8723" us="8723"/><bf gi="0" ue="8724" us="8724"/><bf gi="188" ue="8725" us="8725"/><bf gi="0" ue="8726" us="8726"/><bf gi="0" ue="8727" us="8727"/><bf gi="0" ue="8728" us="8728"/><bf gi="257" ue="8729" us="8729"/><bf gi="165" ue="8730" us="8730"/><bf gi="0" ue="8731" us="8731"/><bf gi="0" ue="8732" us="8732"/><bf gi="0" ue="8733" us="8733"/><bf gi="146" ue="8734" us="8734"/><bf gi="156" ue="8747" us="8747"/><bf gi="167" ue="8776" us="8776"/><bf gi="143" ue="8800" us="8800"/><bf gi="0" ue="8801" us="8801"/><bf gi="0" ue="8802" us="8802"/><bf gi="0" ue="8803" us="8803"/><bf gi="148" ue="8805" us="8804"/><bf gi="185" ue="9674" us="9674"/><bf gi="192" ue="64258" us="64257"/><bf gi="0" ue="65535" us="65535"/></bfranges><cid-widths start-index="0"><wx w="600"/><wx w="0"/><wx w="317"/><wx w="317"/><wx w="400"/><wx w="459"/><wx w="837"/><wx w="636"/><wx w="950"/><wx w="779"/><wx w="274"/><wx w="390"/><wx w="390"/><wx w="500"/><wx w="837"/><wx w="317"/><wx w="360"/><wx w="317"/><wx w="336"/><wx w="636"/><wx w="636"/><wx w="636"/><wx w="636"/><wx w="636"/><wx w="636"/><wx w="636"/><wx w="636"/><wx w="636"/><wx w="636"/><wx w="336"/><wx w="336"/><wx w="837"/><wx w="837"/><wx w="837"/><wx w="530"/><wx w="1000"/><wx w="684"/><wx w="686"/><wx w="698"/><wx w="770"/><wx w="631"/><wx w="575"/><wx w="774"/><wx w="751"/><wx w="294"/><wx w="294"/><wx w="655"/><wx w="557"/><wx w="862"/><wx w="748"/><wx w="787"/><wx w="603"/><wx w="787"/><wx w="694"/><wx w="634"/><wx w="610"/><wx w="731"/><wx w="684"/><wx w="988"/><wx w="685"/><wx w="610"/><wx w="685"/><wx w="390"/><wx w="336"/><wx w="390"/><wx w="837"/><wx w="500"/><wx w="500"/><wx w="612"/><wx w="634"/><wx w="549"/><wx w="634"/><wx w="615"/><wx w="352"/><wx w="634"/><wx w="633"/><wx w="277"/><wx w="277"/><wx w="579"/><wx w="277"/><wx w="974"/><wx w="633"/><wx w="611"/><wx w="634"/><wx w="634"/><wx w="411"/><wx w="520"/><wx w="392"/><wx w="633"/><wx w="591"/><wx w="817"/><wx w="591"/><wx w="591"/><wx w="524"/><wx w="636"/><wx w="336"/><wx w="636"/><wx w="837"/><wx w="684"/><wx w="684"/><wx w="698"/><wx w="631"/><wx w="748"/><wx w="787"/><wx w="731"/><wx w="612"/><wx w="612"/><wx w="612"/><wx w="612"/><wx w="612"/><wx w="612"/><wx w="549"/><wx w="615"/><wx w="615"/><wx w="615"/><wx w="615"/><wx w="277"/><wx w="277"/><wx w="277"/><wx w="277"/><wx w="633"/><wx w="611"/><wx w="611"/><wx w="611"/><wx w="611"/><wx w="611"/><wx w="633"/><wx w="633"/><wx w="633"/><wx w="633"/><wx w="500"/><wx w="500"/><wx w="636"/><wx w="636"/><wx w="500"/><wx w="589"/><wx w="636"/><wx w="629"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="500"/><wx w="500"/><wx w="837"/><wx w="974"/><wx w="787"/><wx w="833"/><wx w="837"/><wx w="837"/><wx w="837"/><wx w="636"/><wx w="636"/><wx w="517"/><wx w="673"/><wx w="756"/><wx w="588"/><wx w="520"/><wx w="471"/><wx w="471"/><wx w="764"/><wx w="981"/><wx w="611"/><wx w="530"/><wx w="400"/><wx w="837"/><wx w="637"/><wx w="636"/><wx w="837"/><wx w="668"/><wx w="611"/><wx w="611"/><wx w="1000"/><wx w="636"/><wx w="684"/><wx w="684"/><wx w="787"/><wx w="1069"/><wx w="1022"/><wx w="500"/><wx w="1000"/><wx w="518"/><wx w="518"/><wx w="317"/><wx w="317"/><wx w="837"/><wx w="494"/><wx w="591"/><wx w="610"/><wx w="166"/><wx w="636"/><wx w="399"/><wx w="399"/><wx w="629"/><wx w="629"/><wx w="500"/><wx w="317"/><wx w="317"/><wx w="518"/><wx w="1341"/><wx w="684"/><wx w="631"/><wx w="684"/><wx w="631"/><wx w="631"/><wx w="294"/><wx w="294"/><wx w="294"/><wx w="294"/><wx w="787"/><wx w="787"/><wx w="787"/><wx w="731"/><wx w="731"/><wx w="731"/><wx w="277"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="562"/><wx w="284"/><wx w="634"/><wx w="520"/><wx w="685"/><wx w="524"/><wx w="336"/><wx w="774"/><wx w="611"/><wx w="610"/><wx w="591"/><wx w="604"/><wx w="634"/><wx w="837"/><wx w="837"/><wx w="400"/><wx w="400"/><wx w="400"/><wx w="969"/><wx w="969"/><wx w="969"/><wx w="774"/><wx w="634"/><wx w="294"/><wx w="634"/><wx w="520"/><wx w="698"/><wx w="549"/><wx w="698"/><wx w="549"/><wx w="634"/><wx w="360"/><wx w="317"/><wx w="636"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="400"/><wx w="500"/><wx w="500"/></cid-widths></multibyte-extras><kerning kpx1="246"><pair kern="-21" kpx2="180"/><pair kern="-17" kpx2="169"/><pair kern="-26" kpx2="197"/><pair kern="-35" kpx2="55"/><pair kern="-49" kpx2="60"/><pair kern="-49" kpx2="187"/><pair kern="-21" kpx2="181"/><pair kern="-17" kpx2="170"/><pair kern="-49" kpx2="234"/></kerning><kerning kpx1="235"><pair kern="-142" kpx2="17"/><pair kern="-17" kpx2="169"/><pair kern="-146" kpx2="197"/><pair kern="-17" kpx2="16"/><pair kern="-72" kpx2="29"/><pair kern="-17" kpx2="170"/></kerning><kerning kpx1="43"><pair kern="-35" kpx2="180"/><pair kern="-17" kpx2="17"/><pair kern="-35" kpx2="197"/><pair kern="-30" kpx2="181"/></kerning><kerning kpx1="16"><pair kern="36" kpx2="246"/><pair kern="-17" kpx2="235"/><pair kern="-21" kpx2="199"/><pair kern="18" kpx2="123"/><pair kern="27" kpx2="208"/><pair kern="-118" kpx2="187"/><pair kern="-49" kpx2="59"/><pair kern="18" kpx2="124"/><pair kern="-21" kpx2="201"/><pair kern="-118" kpx2="60"/><pair kern="36" kpx2="52"/><pair kern="18" kpx2="125"/><pair kern="36" kpx2="42"/><pair kern="-118" kpx2="234"/><pair kern="18" kpx2="122"/><pair kern="27" kpx2="210"/><pair kern="-21" kpx2="36"/><pair kern="18" kpx2="82"/><pair kern="-40" kpx2="58"/><pair kern="-91" kpx2="55"/><pair kern="-17" kpx2="186"/><pair kern="27" kpx2="175"/><pair kern="27" kpx2="50"/><pair kern="27" kpx2="209"/><pair kern="27" kpx2="103"/><pair kern="-21" kpx2="98"/><pair kern="55" kpx2="45"/><pair kern="-21" kpx2="173"/><pair kern="-17" kpx2="92"/><pair kern="-26" kpx2="89"/><pair kern="18" kpx2="121"/><pair kern="-58" kpx2="57"/><pair kern="-35" kpx2="37"/><pair kern="-21" kpx2="174"/></kerning><kerning kpx1="112"><pair kern="-17" kpx2="91"/></kerning><kerning kpx1="123"><pair kern="-72" kpx2="180"/><pair kern="-17" kpx2="17"/><pair kern="-63" kpx2="197"/><pair kern="18" kpx2="16"/><pair kern="-30" kpx2="91"/><pair kern="-35" kpx2="181"/></kerning><kerning kpx1="251"><pair kern="-17" kpx2="169"/><pair kern="-17" kpx2="60"/><pair kern="-17" kpx2="187"/><pair kern="18" kpx2="181"/><pair kern="-17" kpx2="170"/><pair kern="-17" kpx2="234"/></kerning><kerning kpx1="213"><pair kern="-17" kpx2="229"/><pair kern="-17" kpx2="61"/></kerning><kerning kpx1="208"><pair kern="-17" kpx2="36"/><pair kern="-17" kpx2="199"/><pair kern="27" kpx2="16"/><pair kern="-54" kpx2="187"/><pair kern="-17" kpx2="98"/><pair kern="-17" kpx2="181"/><pair kern="-63" kpx2="59"/><pair kern="-40" kpx2="17"/><pair kern="-21" kpx2="180"/><pair kern="-17" kpx2="173"/><pair kern="-17" kpx2="169"/><pair kern="-91" kpx2="197"/><pair kern="-17" kpx2="201"/><pair kern="-54" kpx2="60"/><pair kern="-17" kpx2="29"/><pair kern="-17" kpx2="57"/><pair kern="-17" kpx2="174"/><pair kern="-54" kpx2="234"/></kerning><kerning kpx1="187"><pair kern="-114" kpx2="126"/><pair kern="-137" kpx2="107"/><pair kern="-132" kpx2="72"/><pair kern="-77" kpx2="199"/><pair kern="-118" kpx2="16"/><pair kern="-132" kpx2="123"/><pair kern="-132" kpx2="112"/><pair kern="-54" kpx2="251"/><pair kern="-54" kpx2="208"/><pair kern="-132" kpx2="113"/><pair kern="-54" kpx2="180"/><pair kern="-137" kpx2="105"/><pair kern="-114" kpx2="129"/><pair kern="-132" kpx2="124"/><pair kern="-109" kpx2="169"/><pair kern="-77" kpx2="201"/><pair kern="-54" kpx2="253"/><pair kern="-137" kpx2="106"/><pair kern="-132" kpx2="29"/><pair kern="-132" kpx2="125"/><pair kern="-72" kpx2="170"/><pair kern="-132" kpx2="115"/><pair kern="-114" kpx2="88"/><pair kern="-132" kpx2="122"/><pair kern="-54" kpx2="100"/><pair kern="-137" kpx2="68"/><pair kern="-54" kpx2="210"/><pair kern="-77" kpx2="36"/><pair kern="-132" kpx2="82"/><pair kern="-132" kpx2="114"/><pair kern="-54" kpx2="175"/><pair kern="-114" kpx2="127"/><pair kern="-54" kpx2="50"/><pair kern="-54" kpx2="209"/><pair kern="-54" kpx2="103"/><pair kern="-137" kpx2="108"/><pair kern="-77" kpx2="98"/><pair kern="-35" kpx2="76"/><pair kern="-17" kpx2="181"/><pair kern="-202" kpx2="17"/><pair kern="-114" kpx2="128"/><pair kern="-77" kpx2="173"/><pair kern="-137" kpx2="109"/><pair kern="-128" kpx2="197"/><pair kern="-54" kpx2="38"/><pair kern="-132" kpx2="121"/><pair kern="-137" kpx2="110"/><pair kern="-77" kpx2="174"/></kerning><kerning kpx1="113"><pair kern="-17" kpx2="91"/></kerning><kerning kpx1="144"><pair kern="-40" kpx2="180"/><pair kern="-54" kpx2="197"/><pair kern="-44" kpx2="181"/></kerning><kerning kpx1="59"><pair kern="-72" kpx2="100"/><pair kern="-63" kpx2="210"/><pair kern="-17" kpx2="55"/><pair kern="-44" kpx2="114"/><pair kern="-44" kpx2="72"/><pair kern="-63" kpx2="175"/><pair kern="-49" kpx2="16"/><pair kern="-63" kpx2="50"/><pair kern="-63" kpx2="209"/><pair kern="-44" kpx2="112"/><pair kern="-72" kpx2="251"/><pair kern="-63" kpx2="103"/><pair kern="-63" kpx2="208"/><pair kern="-44" kpx2="113"/><pair kern="-40" kpx2="181"/><pair kern="-77" kpx2="180"/><pair kern="-54" kpx2="169"/><pair kern="-21" kpx2="197"/><pair kern="-72" kpx2="38"/><pair kern="-72" kpx2="253"/><pair kern="-44" kpx2="115"/></kerning><kerning kpx1="73"><pair kern="31" kpx2="180"/><pair kern="-17" kpx2="90"/><pair kern="-72" kpx2="17"/><pair kern="-17" kpx2="235"/><pair kern="-35" kpx2="169"/><pair kern="-114" kpx2="197"/><pair kern="-17" kpx2="186"/><pair kern="-17" kpx2="92"/><pair kern="-17" kpx2="87"/><pair kern="-54" kpx2="16"/><pair kern="-35" kpx2="29"/><pair kern="-17" kpx2="170"/></kerning><kerning kpx1="41"><pair kern="-17" kpx2="227"/><pair kern="-54" kpx2="126"/><pair kern="-91" kpx2="107"/><pair kern="-91" kpx2="235"/><pair kern="-54" kpx2="72"/><pair kern="-91" kpx2="199"/><pair kern="-35" kpx2="123"/><pair kern="-54" kpx2="112"/><pair kern="-54" kpx2="113"/><pair kern="-17" kpx2="54"/><pair kern="-21" kpx2="180"/><pair kern="-91" kpx2="105"/><pair kern="-54" kpx2="129"/><pair kern="-35" kpx2="124"/><pair kern="-91" kpx2="201"/><pair kern="-72" kpx2="85"/><pair kern="-91" kpx2="106"/><pair kern="-77" kpx2="29"/><pair kern="-35" kpx2="125"/><pair kern="-54" kpx2="115"/><pair kern="-54" kpx2="88"/><pair kern="-35" kpx2="122"/><pair kern="-91" kpx2="68"/><pair kern="-91" kpx2="36"/><pair kern="-35" kpx2="82"/><pair kern="-91" kpx2="186"/><pair kern="-17" kpx2="55"/><pair kern="-54" kpx2="114"/><pair kern="-54" kpx2="127"/><pair kern="-91" kpx2="108"/><pair kern="-91" kpx2="98"/><pair kern="-72" kpx2="76"/><pair kern="-160" kpx2="17"/><pair kern="-54" kpx2="128"/><pair kern="-91" kpx2="173"/><pair kern="-91" kpx2="109"/><pair kern="-183" kpx2="197"/><pair kern="-91" kpx2="92"/><pair kern="-35" kpx2="121"/><pair kern="-91" kpx2="110"/><pair kern="-91" kpx2="174"/><pair kern="-17" kpx2="249"/></kerning><kerning kpx1="124"><pair kern="-72" kpx2="180"/><pair kern="-17" kpx2="17"/><pair kern="-63" kpx2="197"/><pair kern="18" kpx2="16"/><pair kern="-30" kpx2="91"/><pair kern="-35" kpx2="181"/></kerning><kerning kpx1="169"><pair kern="-17" kpx2="90"/><pair kern="-17" kpx2="100"/><pair kern="-17" kpx2="246"/><pair kern="-17" kpx2="235"/><pair kern="-17" kpx2="58"/><pair kern="-17" kpx2="186"/><pair kern="-54" kpx2="55"/><pair kern="-17" kpx2="251"/><pair kern="-72" kpx2="187"/><pair kern="-17" kpx2="39"/><pair kern="73" kpx2="144"/><pair kern="-17" kpx2="45"/><pair kern="-17" kpx2="92"/><pair kern="-17" kpx2="38"/><pair kern="-72" kpx2="60"/><pair kern="-17" kpx2="89"/><pair kern="-17" kpx2="253"/><pair kern="-54" kpx2="57"/><pair kern="-17" kpx2="37"/><pair kern="-17" kpx2="42"/><pair kern="-72" kpx2="234"/></kerning><kerning kpx1="201"><pair kern="-17" kpx2="246"/><pair kern="-67" kpx2="235"/><pair kern="-21" kpx2="16"/><pair kern="-17" kpx2="112"/><pair kern="-17" kpx2="123"/><pair kern="-17" kpx2="251"/><pair kern="-17" kpx2="113"/><pair kern="-77" kpx2="187"/><pair kern="-17" kpx2="208"/><pair kern="-35" kpx2="73"/><pair kern="-17" kpx2="124"/><pair kern="-35" kpx2="169"/><pair kern="-17" kpx2="252"/><pair kern="-17" kpx2="70"/><pair kern="-77" kpx2="60"/><pair kern="27" kpx2="201"/><pair kern="-17" kpx2="29"/><pair kern="-77" kpx2="234"/><pair kern="-17" kpx2="100"/><pair kern="-17" kpx2="122"/><pair kern="-17" kpx2="210"/><pair kern="-17" kpx2="82"/><pair kern="-54" kpx2="58"/><pair kern="-67" kpx2="186"/><pair kern="-17" kpx2="175"/><pair kern="-17" kpx2="209"/><pair kern="-17" kpx2="103"/><pair kern="27" kpx2="98"/><pair kern="-123" kpx2="181"/><pair kern="-17" kpx2="17"/><pair kern="-17" kpx2="38"/><pair kern="-17" kpx2="84"/><pair kern="-17" kpx2="121"/><pair kern="-63" kpx2="57"/><pair kern="-17" kpx2="254"/><pair kern="-17" kpx2="87"/><pair kern="-17" kpx2="72"/><pair kern="27" kpx2="199"/><pair kern="-17" kpx2="71"/><pair kern="-128" kpx2="180"/><pair kern="-17" kpx2="253"/><pair kern="-17" kpx2="52"/><pair kern="-17" kpx2="125"/><pair kern="-17" kpx2="42"/><pair kern="-17" kpx2="115"/><pair kern="-40" kpx2="90"/><pair kern="-17" kpx2="111"/><pair kern="27" kpx2="36"/><pair kern="-77" kpx2="55"/><pair kern="-17" kpx2="114"/><pair kern="-17" kpx2="50"/><pair kern="27" kpx2="173"/><pair kern="-67" kpx2="92"/><pair kern="22" kpx2="197"/><pair kern="-58" kpx2="89"/><pair kern="27" kpx2="174"/></kerning><kerning kpx1="60"><pair kern="-114" kpx2="126"/><pair kern="-137" kpx2="107"/><pair kern="-132" kpx2="72"/><pair kern="-77" kpx2="199"/><pair kern="-118" kpx2="16"/><pair kern="-132" kpx2="123"/><pair kern="-132" kpx2="112"/><pair kern="-54" kpx2="251"/><pair kern="-54" kpx2="208"/><pair kern="-132" kpx2="113"/><pair kern="-54" kpx2="180"/><pair kern="-137" kpx2="105"/><pair kern="-114" kpx2="129"/><pair kern="-132" kpx2="124"/><pair kern="-109" kpx2="169"/><pair kern="-77" kpx2="201"/><pair kern="-54" kpx2="253"/><pair kern="-137" kpx2="106"/><pair kern="-132" kpx2="29"/><pair kern="-132" kpx2="125"/><pair kern="-72" kpx2="170"/><pair kern="-132" kpx2="115"/><pair kern="-114" kpx2="88"/><pair kern="-132" kpx2="122"/><pair kern="-54" kpx2="100"/><pair kern="-137" kpx2="68"/><pair kern="-54" kpx2="210"/><pair kern="-77" kpx2="36"/><pair kern="-132" kpx2="82"/><pair kern="-132" kpx2="114"/><pair kern="-54" kpx2="175"/><pair kern="-114" kpx2="127"/><pair kern="-54" kpx2="50"/><pair kern="-54" kpx2="209"/><pair kern="-54" kpx2="103"/><pair kern="-137" kpx2="108"/><pair kern="-77" kpx2="98"/><pair kern="-35" kpx2="76"/><pair kern="-17" kpx2="181"/><pair kern="-202" kpx2="17"/><pair kern="-114" kpx2="128"/><pair kern="-77" kpx2="173"/><pair kern="-137" kpx2="109"/><pair kern="-128" kpx2="197"/><pair kern="-54" kpx2="38"/><pair kern="-132" kpx2="121"/><pair kern="-137" kpx2="110"/><pair kern="-77" kpx2="174"/></kerning><kerning kpx1="85"><pair kern="-21" kpx2="254"/><pair kern="-21" kpx2="72"/><pair kern="-63" kpx2="16"/><pair kern="-21" kpx2="112"/><pair kern="-21" kpx2="123"/><pair kern="-17" kpx2="80"/><pair kern="-21" kpx2="113"/><pair kern="-17" kpx2="71"/><pair kern="-21" kpx2="124"/><pair kern="-35" kpx2="169"/><pair kern="-21" kpx2="252"/><pair kern="-21" kpx2="70"/><pair kern="-17" kpx2="85"/><pair kern="-17" kpx2="29"/><pair kern="-21" kpx2="125"/><pair kern="-21" kpx2="115"/><pair kern="-21" kpx2="111"/><pair kern="-21" kpx2="122"/><pair kern="-21" kpx2="82"/><pair kern="-17" kpx2="75"/><pair kern="-21" kpx2="114"/><pair kern="-26" kpx2="91"/><pair kern="-17" kpx2="81"/><pair kern="41" kpx2="181"/><pair kern="-91" kpx2="17"/><pair kern="-151" kpx2="197"/><pair kern="-17" kpx2="74"/><pair kern="-17" kpx2="84"/><pair kern="-21" kpx2="121"/><pair kern="-17" kpx2="247"/><pair kern="-17" kpx2="120"/></kerning><kerning kpx1="61"><pair kern="-17" kpx2="180"/><pair kern="-17" kpx2="197"/><pair kern="-17" kpx2="16"/><pair kern="-17" kpx2="181"/></kerning><kerning kpx1="234"><pair kern="-114" kpx2="126"/><pair kern="-137" kpx2="107"/><pair kern="-132" kpx2="72"/><pair kern="-77" kpx2="199"/><pair kern="-118" kpx2="16"/><pair kern="-132" kpx2="123"/><pair kern="-132" kpx2="112"/><pair kern="-54" kpx2="251"/><pair kern="-54" kpx2="208"/><pair kern="-132" kpx2="113"/><pair kern="-54" kpx2="180"/><pair kern="-137" kpx2="105"/><pair kern="-114" kpx2="129"/><pair kern="-132" kpx2="124"/><pair kern="-109" kpx2="169"/><pair kern="-77" kpx2="201"/><pair kern="-54" kpx2="253"/><pair kern="-137" kpx2="106"/><pair kern="-132" kpx2="29"/><pair kern="-132" kpx2="125"/><pair kern="-72" kpx2="170"/><pair kern="-132" kpx2="115"/><pair kern="-114" kpx2="88"/><pair kern="-132" kpx2="122"/><pair kern="-54" kpx2="100"/><pair kern="-137" kpx2="68"/><pair kern="-54" kpx2="210"/><pair kern="-77" kpx2="36"/><pair kern="-132" kpx2="82"/><pair kern="-132" kpx2="114"/><pair kern="-54" kpx2="175"/><pair kern="-114" kpx2="127"/><pair kern="-54" kpx2="50"/><pair kern="-54" kpx2="209"/><pair kern="-54" kpx2="103"/><pair kern="-137" kpx2="108"/><pair kern="-77" kpx2="98"/><pair kern="-35" kpx2="76"/><pair kern="-17" kpx2="181"/><pair kern="-202" kpx2="17"/><pair kern="-114" kpx2="128"/><pair kern="-77" kpx2="173"/><pair kern="-137" kpx2="109"/><pair kern="-128" kpx2="197"/><pair kern="-54" kpx2="38"/><pair kern="-132" kpx2="121"/><pair kern="-137" kpx2="110"/><pair kern="-77" kpx2="174"/></kerning><kerning kpx1="100"><pair kern="-17" kpx2="169"/><pair kern="-17" kpx2="60"/><pair kern="-17" kpx2="187"/><pair kern="18" kpx2="181"/><pair kern="-17" kpx2="170"/><pair kern="-17" kpx2="234"/></kerning><kerning kpx1="122"><pair kern="-72" kpx2="180"/><pair kern="-17" kpx2="17"/><pair kern="-63" kpx2="197"/><pair kern="18" kpx2="16"/><pair kern="-30" kpx2="91"/><pair kern="-35" kpx2="181"/></kerning><kerning kpx1="47"><pair kern="-17" kpx2="126"/><pair kern="-91" kpx2="235"/><pair kern="-49" kpx2="104"/><pair kern="-17" kpx2="72"/><pair kern="22" kpx2="199"/><pair kern="-17" kpx2="16"/><pair kern="-17" kpx2="112"/><pair kern="-17" kpx2="123"/><pair kern="-49" kpx2="213"/><pair kern="-35" kpx2="208"/><pair kern="-132" kpx2="187"/><pair kern="-17" kpx2="113"/><pair kern="-202" kpx2="180"/><pair kern="-17" kpx2="129"/><pair kern="-17" kpx2="124"/><pair kern="22" kpx2="201"/><pair kern="-132" kpx2="60"/><pair kern="-49" kpx2="211"/><pair kern="-17" kpx2="125"/><pair kern="-17" kpx2="115"/><pair kern="-132" kpx2="234"/><pair kern="-17" kpx2="88"/><pair kern="-17" kpx2="122"/><pair kern="-35" kpx2="210"/><pair kern="22" kpx2="36"/><pair kern="-17" kpx2="82"/><pair kern="-91" kpx2="58"/><pair kern="-91" kpx2="186"/><pair kern="-137" kpx2="55"/><pair kern="-17" kpx2="114"/><pair kern="-35" kpx2="175"/><pair kern="-17" kpx2="127"/><pair kern="-35" kpx2="50"/><pair kern="-35" kpx2="209"/><pair kern="-35" kpx2="103"/><pair kern="22" kpx2="98"/><pair kern="-262" kpx2="181"/><pair kern="-17" kpx2="128"/><pair kern="22" kpx2="173"/><pair kern="-49" kpx2="212"/><pair kern="-91" kpx2="92"/><pair kern="-17" kpx2="121"/><pair kern="-109" kpx2="57"/><pair kern="22" kpx2="174"/><pair kern="-49" kpx2="56"/></kerning><kerning kpx1="210"><pair kern="-17" kpx2="36"/><pair kern="-17" kpx2="199"/><pair kern="27" kpx2="16"/><pair kern="-54" kpx2="187"/><pair kern="-17" kpx2="98"/><pair kern="-17" kpx2="181"/><pair kern="-63" kpx2="59"/><pair kern="-40" kpx2="17"/><pair kern="-21" kpx2="180"/><pair kern="-17" kpx2="173"/><pair kern="-17" kpx2="169"/><pair kern="-91" kpx2="197"/><pair kern="-17" kpx2="201"/><pair kern="-54" kpx2="60"/><pair kern="-17" kpx2="29"/><pair kern="-17" kpx2="57"/><pair kern="-17" kpx2="174"/><pair kern="-54" kpx2="234"/></kerning><kerning kpx1="58"><pair kern="-35" kpx2="126"/><pair kern="-63" kpx2="107"/><pair kern="-17" kpx2="235"/><pair kern="-58" kpx2="72"/><pair kern="-54" kpx2="199"/><pair kern="-40" kpx2="16"/><pair kern="-58" kpx2="112"/><pair kern="-58" kpx2="123"/><pair kern="-58" kpx2="113"/><pair kern="-17" kpx2="180"/><pair kern="-63" kpx2="105"/><pair kern="-35" kpx2="129"/><pair kern="-58" kpx2="124"/><pair kern="-54" kpx2="169"/><pair kern="-54" kpx2="201"/><pair kern="-44" kpx2="85"/><pair kern="-63" kpx2="106"/><pair kern="-58" kpx2="29"/><pair kern="-58" kpx2="125"/><pair kern="-17" kpx2="170"/><pair kern="-58" kpx2="115"/><pair kern="-35" kpx2="88"/><pair kern="-58" kpx2="122"/><pair kern="-63" kpx2="68"/><pair kern="-54" kpx2="36"/><pair kern="-58" kpx2="82"/><pair kern="-17" kpx2="186"/><pair kern="-58" kpx2="114"/><pair kern="-35" kpx2="127"/><pair kern="-63" kpx2="108"/><pair kern="-54" kpx2="98"/><pair kern="-21" kpx2="76"/><pair kern="-114" kpx2="17"/><pair kern="-35" kpx2="128"/><pair kern="-54" kpx2="173"/><pair kern="-63" kpx2="109"/><pair kern="-128" kpx2="197"/><pair kern="-17" kpx2="92"/><pair kern="-58" kpx2="121"/><pair kern="-63" kpx2="110"/><pair kern="-54" kpx2="174"/></kerning><kerning kpx1="82"><pair kern="-72" kpx2="180"/><pair kern="-17" kpx2="17"/><pair kern="-63" kpx2="197"/><pair kern="18" kpx2="16"/><pair kern="-30" kpx2="91"/><pair kern="-35" kpx2="181"/></kerning><kerning kpx1="186"><pair kern="-142" kpx2="17"/><pair kern="-17" kpx2="169"/><pair kern="-146" kpx2="197"/><pair kern="-17" kpx2="16"/><pair kern="-72" kpx2="29"/><pair kern="-17" kpx2="170"/></kerning><kerning kpx1="175"><pair kern="-17" kpx2="36"/><pair kern="-17" kpx2="199"/><pair kern="27" kpx2="16"/><pair kern="-54" kpx2="187"/><pair kern="-17" kpx2="98"/><pair kern="-17" kpx2="181"/><pair kern="-63" kpx2="59"/><pair kern="-40" kpx2="17"/><pair kern="-21" kpx2="180"/><pair kern="-17" kpx2="173"/><pair kern="-17" kpx2="169"/><pair kern="-91" kpx2="197"/><pair kern="-17" kpx2="201"/><pair kern="-54" kpx2="60"/><pair kern="-17" kpx2="29"/><pair kern="-17" kpx2="57"/><pair kern="-17" kpx2="174"/><pair kern="-54" kpx2="234"/></kerning><kerning kpx1="209"><pair kern="-17" kpx2="36"/><pair kern="-17" kpx2="199"/><pair kern="27" kpx2="16"/><pair kern="-54" kpx2="187"/><pair kern="-17" kpx2="98"/><pair kern="-17" kpx2="181"/><pair kern="-63" kpx2="59"/><pair kern="-40" kpx2="17"/><pair kern="-21" kpx2="180"/><pair kern="-17" kpx2="173"/><pair kern="-17" kpx2="169"/><pair kern="-91" kpx2="197"/><pair kern="-17" kpx2="201"/><pair kern="-54" kpx2="60"/><pair kern="-17" kpx2="29"/><pair kern="-17" kpx2="57"/><pair kern="-17" kpx2="174"/><pair kern="-54" kpx2="234"/></kerning><kerning kpx1="103"><pair kern="-17" kpx2="36"/><pair kern="-17" kpx2="199"/><pair kern="27" kpx2="16"/><pair kern="-54" kpx2="187"/><pair kern="-17" kpx2="98"/><pair kern="-17" kpx2="181"/><pair kern="-63" kpx2="59"/><pair kern="-40" kpx2="17"/><pair kern="-21" kpx2="180"/><pair kern="-17" kpx2="173"/><pair kern="-17" kpx2="169"/><pair kern="-91" kpx2="197"/><pair kern="-17" kpx2="201"/><pair kern="-54" kpx2="60"/><pair kern="-17" kpx2="29"/><pair kern="-17" kpx2="57"/><pair kern="-17" kpx2="174"/><pair kern="-54" kpx2="234"/></kerning><kerning kpx1="81"><pair kern="-72" kpx2="180"/><pair kern="-44" kpx2="197"/><pair kern="-54" kpx2="181"/></kerning><kerning kpx1="98"><pair kern="-17" kpx2="246"/><pair kern="-67" kpx2="235"/><pair kern="-21" kpx2="16"/><pair kern="-17" kpx2="112"/><pair kern="-17" kpx2="123"/><pair kern="-17" kpx2="251"/><pair kern="-17" kpx2="113"/><pair kern="-77" kpx2="187"/><pair kern="-17" kpx2="208"/><pair kern="-35" kpx2="73"/><pair kern="-17" kpx2="124"/><pair kern="-35" kpx2="169"/><pair kern="-17" kpx2="252"/><pair kern="-17" kpx2="70"/><pair kern="-77" kpx2="60"/><pair kern="27" kpx2="201"/><pair kern="-17" kpx2="29"/><pair kern="-77" kpx2="234"/><pair kern="-17" kpx2="100"/><pair kern="-17" kpx2="122"/><pair kern="-17" kpx2="210"/><pair kern="-17" kpx2="82"/><pair kern="-54" kpx2="58"/><pair kern="-67" kpx2="186"/><pair kern="-17" kpx2="175"/><pair kern="-17" kpx2="209"/><pair kern="-17" kpx2="103"/><pair kern="27" kpx2="98"/><pair kern="-123" kpx2="181"/><pair kern="-17" kpx2="17"/><pair kern="-17" kpx2="38"/><pair kern="-17" kpx2="84"/><pair kern="-17" kpx2="121"/><pair kern="-63" kpx2="57"/><pair kern="-17" kpx2="254"/><pair kern="-17" kpx2="87"/><pair kern="-17" kpx2="72"/><pair kern="27" kpx2="199"/><pair kern="-17" kpx2="71"/><pair kern="-128" kpx2="180"/><pair kern="-17" kpx2="253"/><pair kern="-17" kpx2="52"/><pair kern="-17" kpx2="125"/><pair kern="-17" kpx2="42"/><pair kern="-17" kpx2="115"/><pair kern="-40" kpx2="90"/><pair kern="-17" kpx2="111"/><pair kern="27" kpx2="36"/><pair kern="-77" kpx2="55"/><pair kern="-17" kpx2="114"/><pair kern="-17" kpx2="50"/><pair kern="27" kpx2="173"/><pair kern="-67" kpx2="92"/><pair kern="22" kpx2="197"/><pair kern="-58" kpx2="89"/><pair kern="27" kpx2="174"/></kerning><kerning kpx1="212"><pair kern="-17" kpx2="229"/><pair kern="-17" kpx2="61"/></kerning><kerning kpx1="229"><pair kern="-17" kpx2="180"/><pair kern="-17" kpx2="197"/><pair kern="-17" kpx2="16"/><pair kern="-17" kpx2="181"/></kerning><kerning kpx1="38"><pair kern="-17" kpx2="169"/><pair kern="-17" kpx2="60"/><pair kern="-17" kpx2="187"/><pair kern="18" kpx2="181"/><pair kern="-17" kpx2="170"/><pair kern="-17" kpx2="234"/></kerning><kerning kpx1="121"><pair kern="-72" kpx2="180"/><pair kern="-17" kpx2="17"/><pair kern="-63" kpx2="197"/><pair kern="18" kpx2="16"/><pair kern="-30" kpx2="91"/><pair kern="-35" kpx2="181"/></kerning><kerning kpx1="57"><pair kern="-67" kpx2="126"/><pair kern="-77" kpx2="107"/><pair kern="-26" kpx2="235"/><pair kern="-77" kpx2="72"/><pair kern="-63" kpx2="199"/><pair kern="-58" kpx2="16"/><pair kern="-77" kpx2="123"/><pair kern="-77" kpx2="112"/><pair kern="-17" kpx2="208"/><pair kern="-77" kpx2="113"/><pair kern="-77" kpx2="105"/><pair kern="-67" kpx2="129"/><pair kern="-77" kpx2="124"/><pair kern="-86" kpx2="169"/><pair kern="-63" kpx2="201"/><pair kern="-77" kpx2="106"/><pair kern="-81" kpx2="29"/><pair kern="-77" kpx2="125"/><pair kern="-54" kpx2="170"/><pair kern="-77" kpx2="115"/><pair kern="-67" kpx2="88"/><pair kern="-77" kpx2="122"/><pair kern="-77" kpx2="68"/><pair kern="-17" kpx2="210"/><pair kern="-63" kpx2="36"/><pair kern="-77" kpx2="82"/><pair kern="-26" kpx2="186"/><pair kern="-77" kpx2="114"/><pair kern="-17" kpx2="175"/><pair kern="-67" kpx2="127"/><pair kern="-17" kpx2="50"/><pair kern="-17" kpx2="209"/><pair kern="-17" kpx2="103"/><pair kern="-77" kpx2="108"/><pair kern="-63" kpx2="98"/><pair kern="-21" kpx2="76"/><pair kern="-128" kpx2="17"/><pair kern="-67" kpx2="128"/><pair kern="-63" kpx2="173"/><pair kern="-77" kpx2="109"/><pair kern="-137" kpx2="197"/><pair kern="-26" kpx2="92"/><pair kern="-77" kpx2="121"/><pair kern="-77" kpx2="110"/><pair kern="-63" kpx2="174"/></kerning><kerning kpx1="37"><pair kern="-17" kpx2="227"/><pair kern="-17" kpx2="246"/><pair kern="-17" kpx2="251"/><pair kern="-54" kpx2="187"/><pair kern="-17" kpx2="208"/><pair kern="-17" kpx2="54"/><pair kern="-54" kpx2="180"/><pair kern="-30" kpx2="169"/><pair kern="-54" kpx2="60"/><pair kern="-17" kpx2="253"/><pair kern="-17" kpx2="42"/><pair kern="-17" kpx2="170"/><pair kern="-54" kpx2="234"/><pair kern="-17" kpx2="100"/><pair kern="-17" kpx2="210"/><pair kern="-35" kpx2="58"/><pair kern="-17" kpx2="175"/><pair kern="-17" kpx2="50"/><pair kern="-17" kpx2="209"/><pair kern="-17" kpx2="103"/><pair kern="-54" kpx2="181"/><pair kern="-40" kpx2="197"/><pair kern="-17" kpx2="38"/><pair kern="-30" kpx2="57"/><pair kern="-17" kpx2="249"/></kerning><kerning kpx1="120"><pair kern="-72" kpx2="180"/><pair kern="-44" kpx2="197"/><pair kern="-54" kpx2="181"/></kerning><kerning kpx1="249"><pair kern="18" kpx2="173"/><pair kern="18" kpx2="36"/><pair kern="18" kpx2="201"/><pair kern="18" kpx2="199"/><pair kern="18" kpx2="174"/><pair kern="18" kpx2="98"/></kerning><kerning kpx1="227"><pair kern="18" kpx2="173"/><pair kern="18" kpx2="36"/><pair kern="18" kpx2="201"/><pair kern="18" kpx2="199"/><pair kern="18" kpx2="174"/><pair kern="18" kpx2="98"/></kerning><kerning kpx1="51"><pair kern="-17" kpx2="126"/><pair kern="-44" kpx2="107"/><pair kern="-35" kpx2="72"/><pair kern="-63" kpx2="199"/><pair kern="-21" kpx2="16"/><pair kern="-35" kpx2="123"/><pair kern="-35" kpx2="112"/><pair kern="-21" kpx2="187"/><pair kern="-35" kpx2="113"/><pair kern="-17" kpx2="86"/><pair kern="18" kpx2="180"/><pair kern="-44" kpx2="105"/><pair kern="-17" kpx2="129"/><pair kern="-35" kpx2="124"/><pair kern="-17" kpx2="169"/><pair kern="-63" kpx2="201"/><pair kern="-17" kpx2="85"/><pair kern="-21" kpx2="60"/><pair kern="-44" kpx2="106"/><pair kern="-35" kpx2="125"/><pair kern="-35" kpx2="115"/><pair kern="-21" kpx2="234"/><pair kern="-17" kpx2="88"/><pair kern="-35" kpx2="122"/><pair kern="-44" kpx2="68"/><pair kern="-63" kpx2="36"/><pair kern="-35" kpx2="82"/><pair kern="-35" kpx2="114"/><pair kern="-17" kpx2="250"/><pair kern="-17" kpx2="127"/><pair kern="-44" kpx2="108"/><pair kern="-63" kpx2="98"/><pair kern="-17" kpx2="81"/><pair kern="-21" kpx2="76"/><pair kern="18" kpx2="181"/><pair kern="-155" kpx2="17"/><pair kern="-17" kpx2="128"/><pair kern="-63" kpx2="173"/><pair kern="-44" kpx2="109"/><pair kern="-160" kpx2="197"/><pair kern="-35" kpx2="121"/><pair kern="-17" kpx2="228"/><pair kern="-44" kpx2="110"/><pair kern="-63" kpx2="174"/><pair kern="-17" kpx2="120"/></kerning><kerning kpx1="104"><pair kern="-17" kpx2="229"/><pair kern="-17" kpx2="61"/></kerning><kerning kpx1="72"><pair kern="-17" kpx2="91"/></kerning><kerning kpx1="199"><pair kern="-17" kpx2="246"/><pair kern="-67" kpx2="235"/><pair kern="-21" kpx2="16"/><pair kern="-17" kpx2="112"/><pair kern="-17" kpx2="123"/><pair kern="-17" kpx2="251"/><pair kern="-17" kpx2="113"/><pair kern="-77" kpx2="187"/><pair kern="-17" kpx2="208"/><pair kern="-35" kpx2="73"/><pair kern="-17" kpx2="124"/><pair kern="-35" kpx2="169"/><pair kern="-17" kpx2="252"/><pair kern="-17" kpx2="70"/><pair kern="-77" kpx2="60"/><pair kern="27" kpx2="201"/><pair kern="-17" kpx2="29"/><pair kern="-77" kpx2="234"/><pair kern="-17" kpx2="100"/><pair kern="-17" kpx2="122"/><pair kern="-17" kpx2="210"/><pair kern="-17" kpx2="82"/><pair kern="-54" kpx2="58"/><pair kern="-67" kpx2="186"/><pair kern="-17" kpx2="175"/><pair kern="-17" kpx2="209"/><pair kern="-17" kpx2="103"/><pair kern="27" kpx2="98"/><pair kern="-123" kpx2="181"/><pair kern="-17" kpx2="17"/><pair kern="-17" kpx2="38"/><pair kern="-17" kpx2="84"/><pair kern="-17" kpx2="121"/><pair kern="-63" kpx2="57"/><pair kern="-17" kpx2="254"/><pair kern="-17" kpx2="87"/><pair kern="-17" kpx2="72"/><pair kern="27" kpx2="199"/><pair kern="-17" kpx2="71"/><pair kern="-128" kpx2="180"/><pair kern="-17" kpx2="253"/><pair kern="-17" kpx2="52"/><pair kern="-17" kpx2="125"/><pair kern="-17" kpx2="42"/><pair kern="-17" kpx2="115"/><pair kern="-40" kpx2="90"/><pair kern="-17" kpx2="111"/><pair kern="27" kpx2="36"/><pair kern="-77" kpx2="55"/><pair kern="-17" kpx2="114"/><pair kern="-17" kpx2="50"/><pair kern="27" kpx2="173"/><pair kern="-67" kpx2="92"/><pair kern="22" kpx2="197"/><pair kern="-58" kpx2="89"/><pair kern="27" kpx2="174"/></kerning><kerning kpx1="54"><pair kern="18" kpx2="173"/><pair kern="18" kpx2="36"/><pair kern="18" kpx2="201"/><pair kern="18" kpx2="199"/><pair kern="18" kpx2="174"/><pair kern="18" kpx2="98"/></kerning><kerning kpx1="180"><pair kern="-35" kpx2="235"/><pair kern="-35" kpx2="246"/><pair kern="-30" kpx2="43"/><pair kern="-72" kpx2="123"/><pair kern="-35" kpx2="251"/><pair kern="-35" kpx2="208"/><pair kern="-188" kpx2="144"/><pair kern="-58" kpx2="59"/><pair kern="-35" kpx2="73"/><pair kern="-30" kpx2="41"/><pair kern="-72" kpx2="124"/><pair kern="-54" kpx2="85"/><pair kern="-128" kpx2="201"/><pair kern="-17" kpx2="61"/><pair kern="-35" kpx2="100"/><pair kern="-72" kpx2="122"/><pair kern="-30" kpx2="47"/><pair kern="-35" kpx2="210"/><pair kern="-72" kpx2="82"/><pair kern="-35" kpx2="186"/><pair kern="-35" kpx2="175"/><pair kern="-35" kpx2="209"/><pair kern="-35" kpx2="103"/><pair kern="-128" kpx2="98"/><pair kern="-54" kpx2="81"/><pair kern="-17" kpx2="229"/><pair kern="-35" kpx2="38"/><pair kern="-72" kpx2="121"/><pair kern="-30" kpx2="37"/><pair kern="-54" kpx2="120"/><pair kern="-30" kpx2="51"/><pair kern="-128" kpx2="199"/><pair kern="-30" kpx2="53"/><pair kern="-30" kpx2="137"/><pair kern="-35" kpx2="233"/><pair kern="-35" kpx2="253"/><pair kern="-35" kpx2="52"/><pair kern="-72" kpx2="125"/><pair kern="-35" kpx2="42"/><pair kern="-35" kpx2="90"/><pair kern="-128" kpx2="36"/><pair kern="-35" kpx2="50"/><pair kern="-30" kpx2="39"/><pair kern="-30" kpx2="236"/><pair kern="-30" kpx2="45"/><pair kern="-128" kpx2="173"/><pair kern="-35" kpx2="92"/><pair kern="-35" kpx2="89"/><pair kern="-30" kpx2="46"/><pair kern="-128" kpx2="174"/></kerning><kerning kpx1="53"><pair kern="-21" kpx2="107"/><pair kern="-54" kpx2="235"/><pair kern="-40" kpx2="16"/><pair kern="-44" kpx2="112"/><pair kern="-44" kpx2="123"/><pair kern="-49" kpx2="251"/><pair kern="-44" kpx2="113"/><pair kern="-63" kpx2="187"/><pair kern="-44" kpx2="129"/><pair kern="-44" kpx2="124"/><pair kern="-54" kpx2="169"/><pair kern="-63" kpx2="60"/><pair kern="-40" kpx2="201"/><pair kern="-21" kpx2="106"/><pair kern="-30" kpx2="29"/><pair kern="-63" kpx2="234"/><pair kern="-49" kpx2="100"/><pair kern="-44" kpx2="122"/><pair kern="-21" kpx2="68"/><pair kern="-40" kpx2="58"/><pair kern="-44" kpx2="82"/><pair kern="-54" kpx2="186"/><pair kern="-40" kpx2="98"/><pair kern="-63" kpx2="181"/><pair kern="-35" kpx2="17"/><pair kern="-49" kpx2="38"/><pair kern="-44" kpx2="121"/><pair kern="-54" kpx2="57"/><pair kern="-44" kpx2="126"/><pair kern="-44" kpx2="72"/><pair kern="-40" kpx2="199"/><pair kern="-72" kpx2="180"/><pair kern="-21" kpx2="105"/><pair kern="-49" kpx2="253"/><pair kern="-44" kpx2="125"/><pair kern="-44" kpx2="115"/><pair kern="-17" kpx2="170"/><pair kern="-44" kpx2="88"/><pair kern="-40" kpx2="36"/><pair kern="-44" kpx2="114"/><pair kern="-72" kpx2="55"/><pair kern="-44" kpx2="127"/><pair kern="-21" kpx2="108"/><pair kern="-44" kpx2="128"/><pair kern="-40" kpx2="173"/><pair kern="-21" kpx2="109"/><pair kern="-54" kpx2="92"/><pair kern="-17" kpx2="197"/><pair kern="-21" kpx2="110"/><pair kern="-40" kpx2="174"/></kerning><kerning kpx1="137"><pair kern="-54" kpx2="180"/><pair kern="-40" kpx2="197"/><pair kern="18" kpx2="16"/><pair kern="-54" kpx2="181"/></kerning><kerning kpx1="233"><pair kern="-44" kpx2="180"/><pair kern="-35" kpx2="197"/><pair kern="-54" kpx2="181"/></kerning><kerning kpx1="253"><pair kern="-17" kpx2="169"/><pair kern="-17" kpx2="60"/><pair kern="-17" kpx2="187"/><pair kern="18" kpx2="181"/><pair kern="-17" kpx2="170"/><pair kern="-17" kpx2="234"/></kerning><kerning kpx1="211"><pair kern="-17" kpx2="229"/><pair kern="-17" kpx2="61"/></kerning><kerning kpx1="78"><pair kern="-17" kpx2="107"/><pair kern="-30" kpx2="126"/><pair kern="-35" kpx2="235"/><pair kern="-35" kpx2="72"/><pair kern="-35" kpx2="112"/><pair kern="-35" kpx2="123"/><pair kern="-35" kpx2="113"/><pair kern="-17" kpx2="105"/><pair kern="-30" kpx2="129"/><pair kern="-35" kpx2="124"/><pair kern="-17" kpx2="106"/><pair kern="-35" kpx2="125"/><pair kern="-35" kpx2="115"/><pair kern="-30" kpx2="88"/><pair kern="-35" kpx2="122"/><pair kern="-17" kpx2="68"/><pair kern="-35" kpx2="82"/><pair kern="-35" kpx2="114"/><pair kern="-35" kpx2="186"/><pair kern="-30" kpx2="127"/><pair kern="-17" kpx2="108"/><pair kern="-30" kpx2="128"/><pair kern="-17" kpx2="109"/><pair kern="-35" kpx2="92"/><pair kern="-35" kpx2="121"/><pair kern="-17" kpx2="110"/></kerning><kerning kpx1="52"><pair kern="-21" kpx2="180"/><pair kern="-63" kpx2="197"/><pair kern="27" kpx2="16"/><pair kern="-17" kpx2="181"/></kerning><kerning kpx1="125"><pair kern="-72" kpx2="180"/><pair kern="-17" kpx2="17"/><pair kern="-63" kpx2="197"/><pair kern="18" kpx2="16"/><pair kern="-30" kpx2="91"/><pair kern="-35" kpx2="181"/></kerning><kerning kpx1="42"><pair kern="-21" kpx2="180"/><pair kern="-17" kpx2="169"/><pair kern="-26" kpx2="197"/><pair kern="-35" kpx2="55"/><pair kern="-49" kpx2="60"/><pair kern="-49" kpx2="187"/><pair kern="-21" kpx2="181"/><pair kern="-17" kpx2="170"/><pair kern="-49" kpx2="234"/></kerning><kerning kpx1="170"><pair kern="-17" kpx2="235"/><pair kern="-35" kpx2="199"/><pair kern="-17" kpx2="251"/><pair kern="-109" kpx2="187"/><pair kern="-17" kpx2="208"/><pair kern="-54" kpx2="59"/><pair kern="-109" kpx2="60"/><pair kern="-35" kpx2="201"/><pair kern="-17" kpx2="253"/><pair kern="-109" kpx2="234"/><pair kern="-17" kpx2="90"/><pair kern="-17" kpx2="100"/><pair kern="-17" kpx2="210"/><pair kern="-35" kpx2="36"/><pair kern="-54" kpx2="58"/><pair kern="-91" kpx2="55"/><pair kern="-17" kpx2="186"/><pair kern="-17" kpx2="175"/><pair kern="-17" kpx2="50"/><pair kern="-17" kpx2="209"/><pair kern="-17" kpx2="103"/><pair kern="-17" kpx2="39"/><pair kern="-35" kpx2="98"/><pair kern="-17" kpx2="45"/><pair kern="-35" kpx2="173"/><pair kern="-17" kpx2="92"/><pair kern="-17" kpx2="38"/><pair kern="-17" kpx2="89"/><pair kern="-86" kpx2="57"/><pair kern="-35" kpx2="37"/><pair kern="-35" kpx2="174"/></kerning><kerning kpx1="115"><pair kern="-17" kpx2="91"/></kerning><kerning kpx1="90"><pair kern="-91" kpx2="17"/><pair kern="-17" kpx2="169"/><pair kern="-104" kpx2="197"/><pair kern="-54" kpx2="29"/><pair kern="-17" kpx2="170"/></kerning><kerning kpx1="36"><pair kern="-17" kpx2="246"/><pair kern="-67" kpx2="235"/><pair kern="-21" kpx2="16"/><pair kern="-17" kpx2="112"/><pair kern="-17" kpx2="123"/><pair kern="-17" kpx2="251"/><pair kern="-17" kpx2="113"/><pair kern="-77" kpx2="187"/><pair kern="-17" kpx2="208"/><pair kern="-35" kpx2="73"/><pair kern="-17" kpx2="124"/><pair kern="-35" kpx2="169"/><pair kern="-17" kpx2="252"/><pair kern="-17" kpx2="70"/><pair kern="-77" kpx2="60"/><pair kern="27" kpx2="201"/><pair kern="-17" kpx2="29"/><pair kern="-77" kpx2="234"/><pair kern="-17" kpx2="100"/><pair kern="-17" kpx2="122"/><pair kern="-17" kpx2="210"/><pair kern="-17" kpx2="82"/><pair kern="-54" kpx2="58"/><pair kern="-67" kpx2="186"/><pair kern="-17" kpx2="175"/><pair kern="-17" kpx2="209"/><pair kern="-17" kpx2="103"/><pair kern="27" kpx2="98"/><pair kern="-123" kpx2="181"/><pair kern="-17" kpx2="17"/><pair kern="-17" kpx2="38"/><pair kern="-17" kpx2="84"/><pair kern="-17" kpx2="121"/><pair kern="-63" kpx2="57"/><pair kern="-17" kpx2="254"/><pair kern="-17" kpx2="87"/><pair kern="-17" kpx2="72"/><pair kern="27" kpx2="199"/><pair kern="-17" kpx2="71"/><pair kern="-128" kpx2="180"/><pair kern="-17" kpx2="253"/><pair kern="-17" kpx2="52"/><pair kern="-17" kpx2="125"/><pair kern="-17" kpx2="42"/><pair kern="-17" kpx2="115"/><pair kern="-40" kpx2="90"/><pair kern="-17" kpx2="111"/><pair kern="27" kpx2="36"/><pair kern="-77" kpx2="55"/><pair kern="-17" kpx2="114"/><pair kern="-17" kpx2="50"/><pair kern="27" kpx2="173"/><pair kern="-67" kpx2="92"/><pair kern="22" kpx2="197"/><pair kern="-58" kpx2="89"/><pair kern="27" kpx2="174"/></kerning><kerning kpx1="55"><pair kern="-165" kpx2="107"/><pair kern="-155" kpx2="235"/><pair kern="-91" kpx2="16"/><pair kern="-169" kpx2="112"/><pair kern="-169" kpx2="123"/><pair kern="-58" kpx2="251"/><pair kern="-169" kpx2="113"/><pair kern="-165" kpx2="86"/><pair kern="-151" kpx2="129"/><pair kern="-169" kpx2="124"/><pair kern="-91" kpx2="169"/><pair kern="-169" kpx2="252"/><pair kern="-169" kpx2="70"/><pair kern="-146" kpx2="85"/><pair kern="-77" kpx2="201"/><pair kern="-165" kpx2="106"/><pair kern="-109" kpx2="29"/><pair kern="-58" kpx2="100"/><pair kern="-169" kpx2="122"/><pair kern="-165" kpx2="68"/><pair kern="-169" kpx2="82"/><pair kern="-155" kpx2="186"/><pair kern="-165" kpx2="250"/><pair kern="-77" kpx2="98"/><pair kern="-21" kpx2="181"/><pair kern="-118" kpx2="17"/><pair kern="-58" kpx2="38"/><pair kern="-169" kpx2="121"/><pair kern="-165" kpx2="228"/><pair kern="-169" kpx2="254"/><pair kern="-151" kpx2="126"/><pair kern="-169" kpx2="72"/><pair kern="-77" kpx2="199"/><pair kern="-165" kpx2="105"/><pair kern="-58" kpx2="253"/><pair kern="-169" kpx2="125"/><pair kern="-169" kpx2="115"/><pair kern="-54" kpx2="170"/><pair kern="-151" kpx2="88"/><pair kern="-169" kpx2="111"/><pair kern="-165" kpx2="90"/><pair kern="-77" kpx2="36"/><pair kern="-17" kpx2="55"/><pair kern="-169" kpx2="114"/><pair kern="-151" kpx2="127"/><pair kern="-165" kpx2="108"/><pair kern="-30" kpx2="76"/><pair kern="-151" kpx2="128"/><pair kern="-77" kpx2="173"/><pair kern="-165" kpx2="109"/><pair kern="-155" kpx2="92"/><pair kern="-128" kpx2="197"/><pair kern="-165" kpx2="110"/><pair kern="-77" kpx2="174"/></kerning><kerning kpx1="114"><pair kern="-17" kpx2="91"/></kerning><kerning kpx1="50"><pair kern="-17" kpx2="36"/><pair kern="-17" kpx2="199"/><pair kern="27" kpx2="16"/><pair kern="-54" kpx2="187"/><pair kern="-17" kpx2="98"/><pair kern="-17" kpx2="181"/><pair kern="-63" kpx2="59"/><pair kern="-40" kpx2="17"/><pair kern="-21" kpx2="180"/><pair kern="-17" kpx2="173"/><pair kern="-17" kpx2="169"/><pair kern="-91" kpx2="197"/><pair kern="-17" kpx2="201"/><pair kern="-54" kpx2="60"/><pair kern="-17" kpx2="29"/><pair kern="-17" kpx2="57"/><pair kern="-17" kpx2="174"/><pair kern="-54" kpx2="234"/></kerning><kerning kpx1="91"><pair kern="-17" kpx2="254"/><pair kern="-17" kpx2="111"/><pair kern="-30" kpx2="122"/><pair kern="-30" kpx2="82"/><pair kern="-30" kpx2="114"/><pair kern="-30" kpx2="72"/><pair kern="-30" kpx2="112"/><pair kern="-30" kpx2="123"/><pair kern="-30" kpx2="113"/><pair kern="-30" kpx2="124"/><pair kern="-17" kpx2="252"/><pair kern="-17" kpx2="70"/><pair kern="-30" kpx2="121"/><pair kern="-30" kpx2="125"/><pair kern="-30" kpx2="115"/></kerning><kerning kpx1="39"><pair kern="-17" kpx2="36"/><pair kern="-17" kpx2="199"/><pair kern="-17" kpx2="98"/><pair kern="-54" kpx2="187"/><pair kern="-26" kpx2="181"/><pair kern="-21" kpx2="180"/><pair kern="-17" kpx2="173"/><pair kern="-17" kpx2="169"/><pair kern="-91" kpx2="197"/><pair kern="-17" kpx2="201"/><pair kern="-54" kpx2="60"/><pair kern="-17" kpx2="57"/><pair kern="-17" kpx2="174"/><pair kern="-17" kpx2="170"/><pair kern="-54" kpx2="234"/></kerning><kerning kpx1="236"><pair kern="-17" kpx2="180"/><pair kern="-72" kpx2="17"/><pair kern="-91" kpx2="197"/><pair kern="-35" kpx2="29"/></kerning><kerning kpx1="45"><pair kern="-35" kpx2="180"/><pair kern="-17" kpx2="173"/><pair kern="-17" kpx2="36"/><pair kern="-17" kpx2="169"/><pair kern="-54" kpx2="197"/><pair kern="-17" kpx2="201"/><pair kern="-17" kpx2="199"/><pair kern="-35" kpx2="16"/><pair kern="-17" kpx2="174"/><pair kern="-17" kpx2="98"/><pair kern="-30" kpx2="181"/><pair kern="-17" kpx2="170"/></kerning><kerning kpx1="173"><pair kern="-17" kpx2="246"/><pair kern="-67" kpx2="235"/><pair kern="-21" kpx2="16"/><pair kern="-17" kpx2="112"/><pair kern="-17" kpx2="123"/><pair kern="-17" kpx2="251"/><pair kern="-17" kpx2="113"/><pair kern="-77" kpx2="187"/><pair kern="-17" kpx2="208"/><pair kern="-35" kpx2="73"/><pair kern="-17" kpx2="124"/><pair kern="-35" kpx2="169"/><pair kern="-17" kpx2="252"/><pair kern="-17" kpx2="70"/><pair kern="-77" kpx2="60"/><pair kern="27" kpx2="201"/><pair kern="-17" kpx2="29"/><pair kern="-77" kpx2="234"/><pair kern="-17" kpx2="100"/><pair kern="-17" kpx2="122"/><pair kern="-17" kpx2="210"/><pair kern="-17" kpx2="82"/><pair kern="-54" kpx2="58"/><pair kern="-67" kpx2="186"/><pair kern="-17" kpx2="175"/><pair kern="-17" kpx2="209"/><pair kern="-17" kpx2="103"/><pair kern="27" kpx2="98"/><pair kern="-123" kpx2="181"/><pair kern="-17" kpx2="17"/><pair kern="-17" kpx2="38"/><pair kern="-17" kpx2="84"/><pair kern="-17" kpx2="121"/><pair kern="-63" kpx2="57"/><pair kern="-17" kpx2="254"/><pair kern="-17" kpx2="87"/><pair kern="-17" kpx2="72"/><pair kern="27" kpx2="199"/><pair kern="-17" kpx2="71"/><pair kern="-128" kpx2="180"/><pair kern="-17" kpx2="253"/><pair kern="-17" kpx2="52"/><pair kern="-17" kpx2="125"/><pair kern="-17" kpx2="42"/><pair kern="-17" kpx2="115"/><pair kern="-40" kpx2="90"/><pair kern="-17" kpx2="111"/><pair kern="27" kpx2="36"/><pair kern="-77" kpx2="55"/><pair kern="-17" kpx2="114"/><pair kern="-17" kpx2="50"/><pair kern="27" kpx2="173"/><pair kern="-67" kpx2="92"/><pair kern="22" kpx2="197"/><pair kern="-58" kpx2="89"/><pair kern="27" kpx2="174"/></kerning><kerning kpx1="197"><pair kern="-35" kpx2="246"/><pair kern="-54" kpx2="235"/><pair kern="-35" kpx2="43"/><pair kern="-35" kpx2="123"/><pair kern="-54" kpx2="251"/><pair kern="-183" kpx2="187"/><pair kern="-54" kpx2="208"/><pair kern="18" kpx2="144"/><pair kern="-35" kpx2="59"/><pair kern="-17" kpx2="73"/><pair kern="-35" kpx2="41"/><pair kern="-35" kpx2="124"/><pair kern="-35" kpx2="85"/><pair kern="-183" kpx2="60"/><pair kern="18" kpx2="201"/><pair kern="-183" kpx2="234"/><pair kern="-54" kpx2="100"/><pair kern="-35" kpx2="122"/><pair kern="-35" kpx2="47"/><pair kern="-54" kpx2="210"/><pair kern="-35" kpx2="82"/><pair kern="-123" kpx2="58"/><pair kern="-54" kpx2="186"/><pair kern="-54" kpx2="175"/><pair kern="-54" kpx2="209"/><pair kern="-54" kpx2="103"/><pair kern="-35" kpx2="81"/><pair kern="18" kpx2="98"/><pair kern="-54" kpx2="38"/><pair kern="-35" kpx2="121"/><pair kern="-183" kpx2="57"/><pair kern="-35" kpx2="37"/><pair kern="-35" kpx2="120"/><pair kern="-35" kpx2="51"/><pair kern="18" kpx2="199"/><pair kern="-35" kpx2="53"/><pair kern="-35" kpx2="137"/><pair kern="-35" kpx2="233"/><pair kern="-54" kpx2="253"/><pair kern="-54" kpx2="52"/><pair kern="-35" kpx2="125"/><pair kern="-35" kpx2="42"/><pair kern="-95" kpx2="90"/><pair kern="18" kpx2="36"/><pair kern="-137" kpx2="55"/><pair kern="-54" kpx2="50"/><pair kern="-35" kpx2="39"/><pair kern="-35" kpx2="236"/><pair kern="22" kpx2="45"/><pair kern="18" kpx2="173"/><pair kern="-54" kpx2="92"/><pair kern="-114" kpx2="89"/><pair kern="-35" kpx2="46"/><pair kern="18" kpx2="174"/></kerning><kerning kpx1="92"><pair kern="-142" kpx2="17"/><pair kern="-17" kpx2="169"/><pair kern="-146" kpx2="197"/><pair kern="-17" kpx2="16"/><pair kern="-72" kpx2="29"/><pair kern="-17" kpx2="170"/></kerning><kerning kpx1="89"><pair kern="-77" kpx2="17"/><pair kern="-17" kpx2="169"/><pair kern="-132" kpx2="197"/><pair kern="-26" kpx2="16"/><pair kern="-54" kpx2="29"/><pair kern="-17" kpx2="181"/><pair kern="-17" kpx2="170"/></kerning><kerning kpx1="46"><pair kern="-17" kpx2="107"/><pair kern="-72" kpx2="235"/><pair kern="-104" kpx2="16"/><pair kern="-49" kpx2="112"/><pair kern="-49" kpx2="123"/><pair kern="-54" kpx2="251"/><pair kern="-26" kpx2="213"/><pair kern="-49" kpx2="113"/><pair kern="-35" kpx2="187"/><pair kern="-54" kpx2="208"/><pair kern="-49" kpx2="129"/><pair kern="-49" kpx2="124"/><pair kern="-63" kpx2="169"/><pair kern="-35" kpx2="60"/><pair kern="-17" kpx2="201"/><pair kern="-17" kpx2="106"/><pair kern="-35" kpx2="234"/><pair kern="-54" kpx2="100"/><pair kern="-49" kpx2="122"/><pair kern="-17" kpx2="68"/><pair kern="-54" kpx2="210"/><pair kern="-35" kpx2="58"/><pair kern="-49" kpx2="82"/><pair kern="-72" kpx2="186"/><pair kern="-54" kpx2="175"/><pair kern="-54" kpx2="209"/><pair kern="-54" kpx2="103"/><pair kern="-17" kpx2="98"/><pair kern="-30" kpx2="181"/><pair kern="-26" kpx2="212"/><pair kern="-54" kpx2="38"/><pair kern="-49" kpx2="121"/><pair kern="-49" kpx2="126"/><pair kern="-26" kpx2="104"/><pair kern="-49" kpx2="72"/><pair kern="-17" kpx2="199"/><pair kern="-30" kpx2="180"/><pair kern="-17" kpx2="105"/><pair kern="-54" kpx2="253"/><pair kern="-26" kpx2="211"/><pair kern="-49" kpx2="125"/><pair kern="-49" kpx2="115"/><pair kern="-49" kpx2="88"/><pair kern="-17" kpx2="36"/><pair kern="-77" kpx2="55"/><pair kern="-49" kpx2="114"/><pair kern="-54" kpx2="50"/><pair kern="-49" kpx2="127"/><pair kern="-17" kpx2="108"/><pair kern="-49" kpx2="128"/><pair kern="-17" kpx2="173"/><pair kern="-17" kpx2="109"/><pair kern="-72" kpx2="92"/><pair kern="-17" kpx2="110"/><pair kern="-17" kpx2="174"/><pair kern="-26" kpx2="56"/></kerning><kerning kpx1="174"><pair kern="-17" kpx2="246"/><pair kern="-67" kpx2="235"/><pair kern="-21" kpx2="16"/><pair kern="-17" kpx2="112"/><pair kern="-17" kpx2="123"/><pair kern="-17" kpx2="251"/><pair kern="-17" kpx2="113"/><pair kern="-77" kpx2="187"/><pair kern="-17" kpx2="208"/><pair kern="-35" kpx2="73"/><pair kern="-17" kpx2="124"/><pair kern="-35" kpx2="169"/><pair kern="-17" kpx2="252"/><pair kern="-17" kpx2="70"/><pair kern="-77" kpx2="60"/><pair kern="27" kpx2="201"/><pair kern="-17" kpx2="29"/><pair kern="-77" kpx2="234"/><pair kern="-17" kpx2="100"/><pair kern="-17" kpx2="122"/><pair kern="-17" kpx2="210"/><pair kern="-17" kpx2="82"/><pair kern="-54" kpx2="58"/><pair kern="-67" kpx2="186"/><pair kern="-17" kpx2="175"/><pair kern="-17" kpx2="209"/><pair kern="-17" kpx2="103"/><pair kern="27" kpx2="98"/><pair kern="-123" kpx2="181"/><pair kern="-17" kpx2="17"/><pair kern="-17" kpx2="38"/><pair kern="-17" kpx2="84"/><pair kern="-17" kpx2="121"/><pair kern="-63" kpx2="57"/><pair kern="-17" kpx2="254"/><pair kern="-17" kpx2="87"/><pair kern="-17" kpx2="72"/><pair kern="27" kpx2="199"/><pair kern="-17" kpx2="71"/><pair kern="-128" kpx2="180"/><pair kern="-17" kpx2="253"/><pair kern="-17" kpx2="52"/><pair kern="-17" kpx2="125"/><pair kern="-17" kpx2="42"/><pair kern="-17" kpx2="115"/><pair kern="-40" kpx2="90"/><pair kern="-17" kpx2="111"/><pair kern="27" kpx2="36"/><pair kern="-77" kpx2="55"/><pair kern="-17" kpx2="114"/><pair kern="-17" kpx2="50"/><pair kern="27" kpx2="173"/><pair kern="-67" kpx2="92"/><pair kern="22" kpx2="197"/><pair kern="-58" kpx2="89"/><pair kern="27" kpx2="174"/></kerning><kerning kpx1="56"><pair kern="-17" kpx2="229"/><pair kern="-17" kpx2="61"/></kerning></font-metrics> \ No newline at end of file
diff --git a/documentation/template/VeraMoBd.ttf b/documentation/template/VeraMoBd.ttf
new file mode 100644
index 0000000000..9be6547ed6
--- /dev/null
+++ b/documentation/template/VeraMoBd.ttf
Binary files differ
diff --git a/documentation/template/VeraMoBd.xml b/documentation/template/VeraMoBd.xml
new file mode 100644
index 0000000000..9b33107a44
--- /dev/null
+++ b/documentation/template/VeraMoBd.xml
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><font-metrics metrics-version="2" type="TYPE0"><font-name>BitstreamVeraSansMono-Bold</font-name><full-name>Bitstream Vera Sans Mono Bold</full-name><family-name>Bitstream Vera Sans Mono</family-name><embed/><cap-height>729</cap-height><x-height>546</x-height><ascender>759</ascender><descender>-240</descender><bbox><left>-19</left><bottom>-235</bottom><right>605</right><top>928</top></bbox><flags>34</flags><stemv>0</stemv><italicangle>0</italicangle><subtype>TYPE0</subtype><multibyte-extras><cid-type>CIDFontType2</cid-type><default-width>0</default-width><bfranges><bf gi="3" ue="126" us="32"/><bf gi="172" ue="160" us="160"/><bf gi="163" ue="161" us="161"/><bf gi="132" ue="163" us="162"/><bf gi="189" ue="164" us="164"/><bf gi="150" ue="165" us="165"/><bf gi="231" ue="166" us="166"/><bf gi="134" ue="167" us="167"/><bf gi="142" ue="168" us="168"/><bf gi="139" ue="169" us="169"/><bf gi="157" ue="170" us="170"/><bf gi="169" ue="171" us="171"/><bf gi="164" ue="172" us="172"/><bf gi="256" ue="173" us="173"/><bf gi="138" ue="174" us="174"/><bf gi="217" ue="175" us="175"/><bf gi="131" ue="176" us="176"/><bf gi="147" ue="177" us="177"/><bf gi="241" ue="179" us="178"/><bf gi="141" ue="180" us="180"/><bf gi="151" ue="181" us="181"/><bf gi="136" ue="182" us="182"/><bf gi="195" ue="183" us="183"/><bf gi="221" ue="184" us="184"/><bf gi="240" ue="185" us="185"/><bf gi="158" ue="186" us="186"/><bf gi="170" ue="187" us="187"/><bf gi="243" ue="190" us="188"/><bf gi="162" ue="191" us="191"/><bf gi="173" ue="192" us="192"/><bf gi="201" ue="193" us="193"/><bf gi="199" ue="194" us="194"/><bf gi="174" ue="195" us="195"/><bf gi="98" ue="197" us="196"/><bf gi="144" ue="198" us="198"/><bf gi="100" ue="199" us="199"/><bf gi="203" ue="200" us="200"/><bf gi="101" ue="201" us="201"/><bf gi="200" ue="202" us="202"/><bf gi="202" ue="203" us="203"/><bf gi="207" ue="204" us="204"/><bf gi="204" ue="207" us="205"/><bf gi="232" ue="208" us="208"/><bf gi="102" ue="209" us="209"/><bf gi="210" ue="210" us="210"/><bf gi="208" ue="212" us="211"/><bf gi="175" ue="213" us="213"/><bf gi="103" ue="214" us="214"/><bf gi="239" ue="215" us="215"/><bf gi="145" ue="216" us="216"/><bf gi="213" ue="217" us="217"/><bf gi="211" ue="219" us="218"/><bf gi="104" ue="220" us="220"/><bf gi="234" ue="221" us="221"/><bf gi="236" ue="222" us="222"/><bf gi="137" ue="223" us="223"/><bf gi="106" ue="224" us="224"/><bf gi="105" ue="225" us="225"/><bf gi="107" ue="226" us="226"/><bf gi="109" ue="227" us="227"/><bf gi="108" ue="228" us="228"/><bf gi="110" ue="229" us="229"/><bf gi="160" ue="230" us="230"/><bf gi="111" ue="231" us="231"/><bf gi="113" ue="232" us="232"/><bf gi="112" ue="233" us="233"/><bf gi="114" ue="235" us="234"/><bf gi="117" ue="236" us="236"/><bf gi="116" ue="237" us="237"/><bf gi="118" ue="239" us="238"/><bf gi="233" ue="240" us="240"/><bf gi="120" ue="241" us="241"/><bf gi="122" ue="242" us="242"/><bf gi="121" ue="243" us="243"/><bf gi="123" ue="244" us="244"/><bf gi="125" ue="245" us="245"/><bf gi="124" ue="246" us="246"/><bf gi="184" ue="247" us="247"/><bf gi="161" ue="248" us="248"/><bf gi="127" ue="249" us="249"/><bf gi="126" ue="250" us="250"/><bf gi="128" ue="252" us="251"/><bf gi="235" ue="253" us="253"/><bf gi="237" ue="254" us="254"/><bf gi="186" ue="255" us="255"/><bf gi="251" ue="263" us="262"/><bf gi="253" ue="269" us="268"/><bf gi="0" ue="270" us="270"/><bf gi="0" ue="271" us="271"/><bf gi="0" ue="272" us="272"/><bf gi="255" ue="273" us="273"/><bf gi="246" ue="287" us="286"/><bf gi="248" ue="304" us="304"/><bf gi="214" ue="305" us="305"/><bf gi="225" ue="322" us="321"/><bf gi="176" ue="339" us="338"/><bf gi="249" ue="351" us="350"/><bf gi="227" ue="353" us="352"/><bf gi="187" ue="376" us="376"/><bf gi="229" ue="382" us="381"/><bf gi="166" ue="402" us="402"/><bf gi="215" ue="710" us="710"/><bf gi="224" ue="711" us="711"/><bf gi="218" ue="730" us="728"/><bf gi="223" ue="731" us="731"/><bf gi="216" ue="732" us="732"/><bf gi="222" ue="733" us="733"/><bf gi="159" ue="937" us="937"/><bf gi="155" ue="960" us="960"/><bf gi="178" ue="8212" us="8211"/><bf gi="0" ue="8213" us="8213"/><bf gi="0" ue="8214" us="8214"/><bf gi="0" ue="8215" us="8215"/><bf gi="182" ue="8217" us="8216"/><bf gi="196" ue="8218" us="8218"/><bf gi="0" ue="8219" us="8219"/><bf gi="180" ue="8221" us="8220"/><bf gi="197" ue="8222" us="8222"/><bf gi="0" ue="8223" us="8223"/><bf gi="130" ue="8224" us="8224"/><bf gi="194" ue="8225" us="8225"/><bf gi="135" ue="8226" us="8226"/><bf gi="0" ue="8227" us="8227"/><bf gi="0" ue="8228" us="8228"/><bf gi="0" ue="8229" us="8229"/><bf gi="171" ue="8230" us="8230"/><bf gi="198" ue="8240" us="8240"/><bf gi="190" ue="8250" us="8249"/><bf gi="258" ue="8364" us="8364"/><bf gi="140" ue="8482" us="8482"/><bf gi="152" ue="8706" us="8706"/><bf gi="0" ue="8707" us="8707"/><bf gi="0" ue="8708" us="8708"/><bf gi="0" ue="8709" us="8709"/><bf gi="168" ue="8710" us="8710"/><bf gi="154" ue="8719" us="8719"/><bf gi="0" ue="8720" us="8720"/><bf gi="153" ue="8721" us="8721"/><bf gi="238" ue="8722" us="8722"/><bf gi="0" ue="8723" us="8723"/><bf gi="0" ue="8724" us="8724"/><bf gi="188" ue="8725" us="8725"/><bf gi="0" ue="8726" us="8726"/><bf gi="0" ue="8727" us="8727"/><bf gi="0" ue="8728" us="8728"/><bf gi="257" ue="8729" us="8729"/><bf gi="165" ue="8730" us="8730"/><bf gi="0" ue="8731" us="8731"/><bf gi="0" ue="8732" us="8732"/><bf gi="0" ue="8733" us="8733"/><bf gi="146" ue="8734" us="8734"/><bf gi="156" ue="8747" us="8747"/><bf gi="167" ue="8776" us="8776"/><bf gi="143" ue="8800" us="8800"/><bf gi="0" ue="8801" us="8801"/><bf gi="0" ue="8802" us="8802"/><bf gi="0" ue="8803" us="8803"/><bf gi="148" ue="8805" us="8804"/><bf gi="185" ue="9674" us="9674"/><bf gi="192" ue="64258" us="64257"/><bf gi="0" ue="65535" us="65535"/></bfranges><cid-widths start-index="0"><wx w="602"/><wx w="0"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/></cid-widths></multibyte-extras></font-metrics> \ No newline at end of file
diff --git a/documentation/template/VeraMono.ttf b/documentation/template/VeraMono.ttf
new file mode 100644
index 0000000000..139f0b4311
--- /dev/null
+++ b/documentation/template/VeraMono.ttf
Binary files differ
diff --git a/documentation/template/VeraMono.xml b/documentation/template/VeraMono.xml
new file mode 100644
index 0000000000..3a0a86659c
--- /dev/null
+++ b/documentation/template/VeraMono.xml
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><font-metrics metrics-version="2" type="TYPE0"><font-name>BitstreamVeraSansMono-Roman</font-name><full-name>Bitstream Vera Sans Mono</full-name><family-name>Bitstream Vera Sans Mono</family-name><embed/><cap-height>729</cap-height><x-height>546</x-height><ascender>759</ascender><descender>-240</descender><bbox><left>-4</left><bottom>-235</bottom><right>605</right><top>928</top></bbox><flags>34</flags><stemv>0</stemv><italicangle>0</italicangle><subtype>TYPE0</subtype><multibyte-extras><cid-type>CIDFontType2</cid-type><default-width>0</default-width><bfranges><bf gi="3" ue="126" us="32"/><bf gi="172" ue="160" us="160"/><bf gi="163" ue="161" us="161"/><bf gi="132" ue="163" us="162"/><bf gi="189" ue="164" us="164"/><bf gi="150" ue="165" us="165"/><bf gi="231" ue="166" us="166"/><bf gi="134" ue="167" us="167"/><bf gi="142" ue="168" us="168"/><bf gi="139" ue="169" us="169"/><bf gi="157" ue="170" us="170"/><bf gi="169" ue="171" us="171"/><bf gi="164" ue="172" us="172"/><bf gi="256" ue="173" us="173"/><bf gi="138" ue="174" us="174"/><bf gi="217" ue="175" us="175"/><bf gi="131" ue="176" us="176"/><bf gi="147" ue="177" us="177"/><bf gi="241" ue="179" us="178"/><bf gi="141" ue="180" us="180"/><bf gi="151" ue="181" us="181"/><bf gi="136" ue="182" us="182"/><bf gi="195" ue="183" us="183"/><bf gi="221" ue="184" us="184"/><bf gi="240" ue="185" us="185"/><bf gi="158" ue="186" us="186"/><bf gi="170" ue="187" us="187"/><bf gi="243" ue="190" us="188"/><bf gi="162" ue="191" us="191"/><bf gi="173" ue="192" us="192"/><bf gi="201" ue="193" us="193"/><bf gi="199" ue="194" us="194"/><bf gi="174" ue="195" us="195"/><bf gi="98" ue="197" us="196"/><bf gi="144" ue="198" us="198"/><bf gi="100" ue="199" us="199"/><bf gi="203" ue="200" us="200"/><bf gi="101" ue="201" us="201"/><bf gi="200" ue="202" us="202"/><bf gi="202" ue="203" us="203"/><bf gi="207" ue="204" us="204"/><bf gi="204" ue="207" us="205"/><bf gi="232" ue="208" us="208"/><bf gi="102" ue="209" us="209"/><bf gi="210" ue="210" us="210"/><bf gi="208" ue="212" us="211"/><bf gi="175" ue="213" us="213"/><bf gi="103" ue="214" us="214"/><bf gi="239" ue="215" us="215"/><bf gi="145" ue="216" us="216"/><bf gi="213" ue="217" us="217"/><bf gi="211" ue="219" us="218"/><bf gi="104" ue="220" us="220"/><bf gi="234" ue="221" us="221"/><bf gi="236" ue="222" us="222"/><bf gi="137" ue="223" us="223"/><bf gi="106" ue="224" us="224"/><bf gi="105" ue="225" us="225"/><bf gi="107" ue="226" us="226"/><bf gi="109" ue="227" us="227"/><bf gi="108" ue="228" us="228"/><bf gi="110" ue="229" us="229"/><bf gi="160" ue="230" us="230"/><bf gi="111" ue="231" us="231"/><bf gi="113" ue="232" us="232"/><bf gi="112" ue="233" us="233"/><bf gi="114" ue="235" us="234"/><bf gi="117" ue="236" us="236"/><bf gi="116" ue="237" us="237"/><bf gi="118" ue="239" us="238"/><bf gi="233" ue="240" us="240"/><bf gi="120" ue="241" us="241"/><bf gi="122" ue="242" us="242"/><bf gi="121" ue="243" us="243"/><bf gi="123" ue="244" us="244"/><bf gi="125" ue="245" us="245"/><bf gi="124" ue="246" us="246"/><bf gi="184" ue="247" us="247"/><bf gi="161" ue="248" us="248"/><bf gi="127" ue="249" us="249"/><bf gi="126" ue="250" us="250"/><bf gi="128" ue="252" us="251"/><bf gi="235" ue="253" us="253"/><bf gi="237" ue="254" us="254"/><bf gi="186" ue="255" us="255"/><bf gi="251" ue="263" us="262"/><bf gi="253" ue="269" us="268"/><bf gi="0" ue="270" us="270"/><bf gi="0" ue="271" us="271"/><bf gi="0" ue="272" us="272"/><bf gi="255" ue="273" us="273"/><bf gi="246" ue="287" us="286"/><bf gi="248" ue="304" us="304"/><bf gi="214" ue="305" us="305"/><bf gi="225" ue="322" us="321"/><bf gi="176" ue="339" us="338"/><bf gi="249" ue="351" us="350"/><bf gi="227" ue="353" us="352"/><bf gi="187" ue="376" us="376"/><bf gi="229" ue="382" us="381"/><bf gi="166" ue="402" us="402"/><bf gi="215" ue="710" us="710"/><bf gi="224" ue="711" us="711"/><bf gi="218" ue="730" us="728"/><bf gi="223" ue="731" us="731"/><bf gi="216" ue="732" us="732"/><bf gi="222" ue="733" us="733"/><bf gi="159" ue="937" us="937"/><bf gi="155" ue="960" us="960"/><bf gi="178" ue="8212" us="8211"/><bf gi="0" ue="8213" us="8213"/><bf gi="0" ue="8214" us="8214"/><bf gi="0" ue="8215" us="8215"/><bf gi="182" ue="8217" us="8216"/><bf gi="196" ue="8218" us="8218"/><bf gi="0" ue="8219" us="8219"/><bf gi="180" ue="8221" us="8220"/><bf gi="197" ue="8222" us="8222"/><bf gi="0" ue="8223" us="8223"/><bf gi="130" ue="8224" us="8224"/><bf gi="194" ue="8225" us="8225"/><bf gi="135" ue="8226" us="8226"/><bf gi="0" ue="8227" us="8227"/><bf gi="0" ue="8228" us="8228"/><bf gi="0" ue="8229" us="8229"/><bf gi="171" ue="8230" us="8230"/><bf gi="198" ue="8240" us="8240"/><bf gi="190" ue="8250" us="8249"/><bf gi="258" ue="8364" us="8364"/><bf gi="140" ue="8482" us="8482"/><bf gi="152" ue="8706" us="8706"/><bf gi="0" ue="8707" us="8707"/><bf gi="0" ue="8708" us="8708"/><bf gi="0" ue="8709" us="8709"/><bf gi="168" ue="8710" us="8710"/><bf gi="154" ue="8719" us="8719"/><bf gi="0" ue="8720" us="8720"/><bf gi="153" ue="8721" us="8721"/><bf gi="238" ue="8722" us="8722"/><bf gi="0" ue="8723" us="8723"/><bf gi="0" ue="8724" us="8724"/><bf gi="188" ue="8725" us="8725"/><bf gi="0" ue="8726" us="8726"/><bf gi="0" ue="8727" us="8727"/><bf gi="0" ue="8728" us="8728"/><bf gi="257" ue="8729" us="8729"/><bf gi="165" ue="8730" us="8730"/><bf gi="0" ue="8731" us="8731"/><bf gi="0" ue="8732" us="8732"/><bf gi="0" ue="8733" us="8733"/><bf gi="146" ue="8734" us="8734"/><bf gi="156" ue="8747" us="8747"/><bf gi="167" ue="8776" us="8776"/><bf gi="143" ue="8800" us="8800"/><bf gi="0" ue="8801" us="8801"/><bf gi="0" ue="8802" us="8802"/><bf gi="0" ue="8803" us="8803"/><bf gi="148" ue="8805" us="8804"/><bf gi="185" ue="9674" us="9674"/><bf gi="192" ue="64258" us="64257"/><bf gi="0" ue="65535" us="65535"/></bfranges><cid-widths start-index="0"><wx w="602"/><wx w="0"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/><wx w="602"/></cid-widths></multibyte-extras></font-metrics> \ No newline at end of file
diff --git a/documentation/template/draft.png b/documentation/template/draft.png
new file mode 100644
index 0000000000..53051a9ddd
--- /dev/null
+++ b/documentation/template/draft.png
Binary files differ
diff --git a/documentation/template/fop-config.xml b/documentation/template/fop-config.xml
new file mode 100644
index 0000000000..09cc5ca0f5
--- /dev/null
+++ b/documentation/template/fop-config.xml
@@ -0,0 +1,58 @@
1<fop version="1.0">
2
3 <!-- Strict user configuration -->
4 <strict-configuration>true</strict-configuration>
5
6 <!-- Strict FO validation -->
7 <strict-validation>true</strict-validation>
8
9 <!--
10 Set the baseDir so common/openedhand.svg references in plans still
11 work ok. Note, relative file references to current dir should still work.
12 -->
13 <base>../template</base>
14 <font-base>../template</font-base>
15
16 <!-- Source resolution in dpi (dots/pixels per inch) for determining the
17 size of pixels in SVG and bitmap images, default: 72dpi -->
18 <!-- <source-resolution>72</source-resolution> -->
19 <!-- Target resolution in dpi (dots/pixels per inch) for specifying the
20 target resolution for generated bitmaps, default: 72dpi -->
21 <!-- <target-resolution>72</target-resolution> -->
22
23 <!-- default page-height and page-width, in case
24 value is specified as auto -->
25 <default-page-settings height="11in" width="8.26in"/>
26
27 <!-- <use-cache>false</use-cache> -->
28
29 <renderers>
30 <renderer mime="application/pdf">
31 <fonts>
32 <font metrics-file="VeraMono.xml"
33 kerning="yes"
34 embed-url="VeraMono.ttf">
35 <font-triplet name="veramono" style="normal" weight="normal"/>
36 </font>
37
38 <font metrics-file="VeraMoBd.xml"
39 kerning="yes"
40 embed-url="VeraMoBd.ttf">
41 <font-triplet name="veramono" style="normal" weight="bold"/>
42 </font>
43
44 <font metrics-file="Vera.xml"
45 kerning="yes"
46 embed-url="Vera.ttf">
47 <font-triplet name="verasans" style="normal" weight="normal"/>
48 <font-triplet name="verasans" style="normal" weight="bold"/>
49 <font-triplet name="verasans" style="italic" weight="normal"/>
50 <font-triplet name="verasans" style="italic" weight="bold"/>
51 </font>
52
53 <auto-detect/>
54 </fonts>
55 </renderer>
56 </renderers>
57</fop>
58
diff --git a/documentation/template/ohand-color.svg b/documentation/template/ohand-color.svg
new file mode 100644
index 0000000000..e42ff9c6fc
--- /dev/null
+++ b/documentation/template/ohand-color.svg
@@ -0,0 +1,150 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!-- Created with Inkscape (http://www.inkscape.org/) -->
3<svg
4 xmlns:dc="http://purl.org/dc/elements/1.1/"
5 xmlns:cc="http://web.resource.org/cc/"
6 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
7 xmlns:svg="http://www.w3.org/2000/svg"
8 xmlns="http://www.w3.org/2000/svg"
9 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
10 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
11 width="141.17999"
12 height="55.34"
13 id="svg2207"
14 sodipodi:version="0.32"
15 inkscape:version="0.45"
16 version="1.0"
17 sodipodi:docname="ohand-color.svg"
18 inkscape:output_extension="org.inkscape.output.svg.inkscape"
19 sodipodi:docbase="/home/mallum/Projects/admin/oh-doc-tools/common"
20 sodipodi:modified="true">
21 <defs
22 id="defs3" />
23 <sodipodi:namedview
24 id="base"
25 pagecolor="#ffffff"
26 bordercolor="#666666"
27 borderopacity="1.0"
28 inkscape:pageopacity="0.0"
29 inkscape:pageshadow="2"
30 inkscape:zoom="1.2"
31 inkscape:cx="160"
32 inkscape:cy="146.21189"
33 inkscape:document-units="mm"
34 inkscape:current-layer="layer1"
35 height="55.34px"
36 width="141.18px"
37 inkscape:window-width="772"
38 inkscape:window-height="581"
39 inkscape:window-x="5"
40 inkscape:window-y="48" />
41 <metadata
42 id="metadata2211">
43 <rdf:RDF>
44 <cc:Work
45 rdf:about="">
46 <dc:format>image/svg+xml</dc:format>
47 <dc:type
48 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
49 </cc:Work>
50 </rdf:RDF>
51 </metadata>
52 <g
53 inkscape:label="Layer 1"
54 inkscape:groupmode="layer"
55 id="layer1">
56 <g
57 id="g2094"
58 style="fill:#6d6d70;fill-opacity:1"
59 inkscape:export-filename="/home/mallum/Desktop/g2126.png"
60 inkscape:export-xdpi="312.71841"
61 inkscape:export-ydpi="312.71841"
62 transform="matrix(0.5954767,0,0,0.5954767,31.793058,-18.471052)">
63 <g
64 id="g19"
65 style="fill:#6d6d70;fill-opacity:1">
66 <path
67 style="fill:#6d6d70;fill-opacity:1"
68 id="path21"
69 d="M 48.693,50.633 C 40.282,50.633 33.439,57.477 33.439,65.888 L 33.439,81.142 L 41.066,81.142 L 41.066,65.888 C 41.066,61.684 44.486,58.261 48.692,58.261 C 52.897,58.261 56.32,61.684 56.32,65.888 C 56.32,70.093 52.897,73.516 48.692,73.516 C 45.677,73.516 43.065,71.756 41.828,69.211 L 41.828,79.504 C 43.892,80.549 46.224,81.142 48.692,81.142 C 57.103,81.142 63.947,74.3 63.947,65.888 C 63.948,57.477 57.104,50.633 48.693,50.633 z " />
70 </g>
71 <path
72 style="fill:#6d6d70;fill-opacity:1"
73 id="path23"
74 d="M 18.486,50.557 C 26.942,50.557 33.819,57.435 33.819,65.888 C 33.819,74.344 26.942,81.223 18.486,81.223 C 10.032,81.223 3.152,74.344 3.152,65.888 C 3.152,57.435 10.032,50.557 18.486,50.557 z M 18.486,73.556 C 22.713,73.556 26.153,70.118 26.153,65.888 C 26.153,61.661 22.713,58.222 18.486,58.222 C 14.258,58.222 10.819,61.661 10.819,65.888 C 10.82,70.117 14.259,73.556 18.486,73.556 z " />
75 <path
76 style="fill:#6d6d70;fill-opacity:1"
77 id="path25"
78 d="M 94.074,107.465 L 94.074,96.016 C 94.074,87.605 87.233,80.763 78.822,80.763 C 70.41,80.763 63.567,87.605 63.567,96.016 C 63.567,104.427 70.41,111.269 78.822,111.269 C 81.289,111.269 83.621,110.676 85.685,109.631 L 85.685,99.339 C 84.448,101.885 81.836,103.644 78.822,103.644 C 74.615,103.644 71.194,100.221 71.194,96.016 C 71.194,91.81 74.615,88.388 78.822,88.388 C 83.026,88.388 86.448,91.81 86.448,96.016 L 86.448,107.456 C 86.448,109.562 88.156,111.268 90.262,111.268 C 92.364,111.269 94.068,109.566 94.074,107.465 z " />
79 <path
80 style="fill:#6d6d70;fill-opacity:1"
81 id="path27"
82 d="M 124.197,95.814 C 124.088,87.496 117.293,80.762 108.949,80.762 C 100.59,80.762 93.783,87.52 93.697,95.856 L 93.693,95.856 L 93.695,107.456 C 93.695,109.562 95.402,111.268 97.509,111.268 C 99.611,111.268 101.316,109.566 101.321,107.464 L 101.321,95.994 L 101.321,95.994 C 101.333,91.798 104.747,88.388 108.948,88.388 C 113.147,88.388 116.563,91.798 116.575,95.994 L 116.575,107.456 C 116.575,109.562 118.282,111.268 120.387,111.268 C 122.492,111.268 124.201,109.562 124.201,107.456 L 124.201,95.814 L 124.197,95.814 z " />
83 <path
84 style="fill:#6d6d70;fill-opacity:1"
85 id="path29"
86 d="M 63.946,96.005 L 63.946,95.854 L 63.943,95.854 L 63.943,95.815 L 63.942,95.815 C 63.833,87.497 57.037,80.761 48.693,80.761 C 48.682,80.761 48.671,80.763 48.658,80.763 C 48.382,80.763 48.107,80.772 47.833,80.786 C 47.75,80.791 47.668,80.799 47.586,80.806 C 47.378,80.822 47.172,80.838 46.968,80.862 C 46.884,80.873 46.801,80.882 46.719,80.893 C 46.508,80.92 46.298,80.952 46.091,80.987 C 46.024,80.999 45.958,81.01 45.891,81.024 C 45.649,81.068 45.406,81.119 45.168,81.175 C 45.14,81.183 45.112,81.189 45.085,81.195 C 43.656,81.542 42.306,82.092 41.065,82.812 L 41.065,80.761 L 33.438,80.761 L 33.438,95.857 L 33.435,95.857 L 33.435,107.457 C 33.435,109.563 35.142,111.269 37.248,111.269 C 39.093,111.269 40.632,109.958 40.984,108.217 C 41.036,107.963 41.065,107.702 41.065,107.435 L 41.065,95.873 C 41.086,94.732 41.357,93.65 41.828,92.685 L 41.828,92.693 C 42.598,91.106 43.905,89.824 45.511,89.085 C 45.519,89.08 45.529,89.076 45.536,89.073 C 45.849,88.928 46.174,88.807 46.508,88.707 C 46.523,88.704 46.536,88.699 46.55,88.696 C 46.699,88.651 46.85,88.614 47.004,88.576 C 47.025,88.575 47.046,88.567 47.069,88.562 C 47.234,88.527 47.402,88.495 47.572,88.469 C 47.586,88.468 47.6,88.466 47.615,88.463 C 47.763,88.443 47.916,88.427 48.067,88.415 C 48.106,88.41 48.145,88.407 48.186,88.404 C 48.352,88.393 48.52,88.386 48.691,88.386 C 52.888,88.387 56.304,91.797 56.316,95.992 L 56.316,107.454 C 56.316,109.56 58.023,111.266 60.13,111.266 C 61.976,111.266 63.516,109.954 63.867,108.211 C 63.919,107.963 63.946,107.706 63.946,107.442 L 63.946,96.024 C 63.946,96.021 63.947,96.018 63.947,96.015 C 63.948,96.011 63.946,96.008 63.946,96.005 z " />
87 <path
88 style="fill:#6d6d70;fill-opacity:1"
89 id="path31"
90 d="M 180.644,50.633 C 178.539,50.633 176.832,52.341 176.832,54.447 L 176.832,65.887 C 176.832,70.092 173.41,73.513 169.203,73.513 C 164.998,73.513 161.576,70.092 161.576,65.887 C 161.576,61.683 164.998,58.26 169.203,58.26 C 172.219,58.26 174.83,60.019 176.068,62.565 L 176.068,52.271 C 174.004,51.225 171.673,50.632 169.203,50.632 C 160.793,50.632 153.951,57.476 153.951,65.887 C 153.951,74.298 160.793,81.141 169.203,81.141 C 177.615,81.141 184.459,74.298 184.459,65.887 L 184.459,54.447 C 184.458,52.341 182.751,50.633 180.644,50.633 z " />
91 <path
92 style="fill:#6d6d70;fill-opacity:1"
93 id="path33"
94 d="M 124.203,77.339 L 124.203,65.687 L 124.197,65.687 C 124.088,57.371 117.293,50.633 108.949,50.633 C 100.592,50.633 93.783,57.393 93.697,65.731 L 93.695,65.731 L 93.695,65.877 C 93.695,65.882 93.693,65.885 93.693,65.888 C 93.693,65.891 93.695,65.896 93.695,65.899 L 93.695,77.33 C 93.695,79.435 95.402,81.142 97.509,81.142 C 99.614,81.142 101.321,79.435 101.321,77.33 L 101.321,65.868 C 101.333,61.672 104.747,58.261 108.948,58.261 C 113.147,58.261 116.563,61.672 116.575,65.868 L 116.575,65.868 L 116.575,77.329 C 116.575,79.434 118.282,81.141 120.389,81.141 C 122.492,81.142 124.197,79.44 124.203,77.339 z " />
95 <path
96 style="fill:#6d6d70;fill-opacity:1"
97 id="path35"
98 d="M 150.517,80.761 C 148.41,80.761 146.703,82.469 146.703,84.575 L 146.703,96.015 C 146.703,100.22 143.283,103.643 139.076,103.643 C 134.871,103.643 131.449,100.22 131.449,96.015 C 131.449,91.808 134.871,88.387 139.076,88.387 C 142.092,88.387 144.703,90.145 145.941,92.692 L 145.941,82.397 C 143.875,81.353 141.545,80.76 139.076,80.76 C 130.666,80.76 123.822,87.604 123.822,96.015 C 123.822,104.426 130.666,111.268 139.076,111.268 C 147.486,111.268 154.33,104.426 154.33,96.015 L 154.33,84.575 C 154.33,82.469 152.623,80.761 150.517,80.761 z " />
99 <path
100 style="fill:#6d6d70;fill-opacity:1"
101 id="path37"
102 d="M 82.625,77.345 C 82.625,75.247 80.923,73.547 78.826,73.547 L 78.826,81.142 C 80.922,81.142 82.625,79.442 82.625,77.345 z " />
103 <path
104 style="fill:#6d6d70;fill-opacity:1"
105 id="path39"
106 d="M 90.252,69.685 C 92.35,69.685 94.048,67.987 94.048,65.888 L 86.453,65.888 C 86.453,67.986 88.154,69.685 90.252,69.685 z " />
107 <path
108 style="fill:#6d6d70;fill-opacity:1"
109 id="path41"
110 d="M 93.832,77.329 C 93.832,75.223 92.125,73.516 90.018,73.516 L 78.825,73.516 C 74.619,73.516 71.199,70.093 71.199,65.888 C 71.199,61.684 74.619,58.261 78.825,58.261 C 83.032,58.261 86.453,61.684 86.453,65.888 C 86.453,68.904 84.694,71.514 82.149,72.752 L 92.442,72.752 C 93.488,70.689 94.08,68.356 94.08,65.888 C 94.08,57.477 87.237,50.633 78.826,50.633 C 70.415,50.633 63.571,57.477 63.571,65.888 C 63.571,74.3 70.415,81.142 78.826,81.142 L 90.018,81.142 C 92.125,81.142 93.832,79.435 93.832,77.329 z " />
111 <path
112 style="fill:#6d6d70;fill-opacity:1"
113 id="path43"
114 d="M 142.869,77.345 C 142.869,75.247 141.168,73.547 139.07,73.547 L 139.07,81.142 C 141.167,81.142 142.869,79.442 142.869,77.345 z " />
115 <path
116 style="fill:#6d6d70;fill-opacity:1"
117 id="path45"
118 d="M 150.496,69.685 C 152.594,69.685 154.293,67.987 154.293,65.888 L 146.699,65.888 C 146.699,67.986 148.398,69.685 150.496,69.685 z " />
119 <path
120 style="fill:#6d6d70;fill-opacity:1"
121 id="path47"
122 d="M 154.076,77.329 C 154.076,75.223 152.367,73.516 150.262,73.516 L 139.07,73.516 C 134.865,73.516 131.443,70.093 131.443,65.888 C 131.443,61.684 134.865,58.261 139.07,58.261 C 143.275,58.261 146.699,61.684 146.699,65.888 C 146.699,68.904 144.939,71.514 142.392,72.752 L 152.687,72.752 C 153.73,70.689 154.324,68.356 154.324,65.888 C 154.324,57.477 147.48,50.633 139.07,50.633 C 130.66,50.633 123.816,57.477 123.816,65.888 C 123.816,74.3 130.66,81.142 139.07,81.142 L 150.261,81.142 C 152.367,81.142 154.076,79.435 154.076,77.329 z " />
123 </g>
124 <g
125 id="g2126"
126 transform="matrix(0.7679564,0,0,0.7679564,-66.520631,11.42903)"
127 inkscape:export-xdpi="312.71841"
128 inkscape:export-ydpi="312.71841"
129 style="fill:#35992a;fill-opacity:1">
130 <g
131 transform="translate(86.33975,4.23985e-2)"
132 style="fill:#35992a;fill-opacity:1"
133 id="g2114">
134 <g
135 style="fill:#35992a;fill-opacity:1"
136 id="g2116">
137 <path
138 id="path2118"
139 transform="translate(-86.33975,-4.239934e-2)"
140 d="M 89.96875,0.03125 C 87.962748,0.031250001 86.34375,1.6815001 86.34375,3.6875 L 86.34375,17.71875 L 86.34375,19.6875 L 86.34375,28.90625 C 86.343752,39.06825 94.61925,47.34375 104.78125,47.34375 L 113.375,47.34375 L 123.1875,47.34375 L 127.15625,47.34375 C 129.16325,47.343749 130.8125,45.72475 130.8125,43.71875 C 130.8125,41.71275 129.16325,40.09375 127.15625,40.09375 L 123.1875,40.09375 L 123.1875,19.6875 L 123.1875,14.65625 L 123.1875,3.6875 C 123.1875,1.6815 121.5675,0.03125 119.5625,0.03125 C 117.5555,0.031250001 115.9375,1.6815001 115.9375,3.6875 L 115.9375,14.28125 C 115.1185,13.65425 114.26275,13.109 113.34375,12.625 L 113.34375,3.6875 C 113.34475,1.6815 111.6925,0.03125 109.6875,0.03125 C 107.6825,0.031250001 106.0625,1.6815001 106.0625,3.6875 L 106.0625,10.5625 C 105.6305,10.5325 105.22025,10.5 104.78125,10.5 C 104.34125,10.5 103.90075,10.5325 103.46875,10.5625 L 103.46875,3.6875 C 103.46975,1.6815 101.84975,0.03125 99.84375,0.03125 C 97.837749,0.031250001 96.21875,1.6815001 96.21875,3.6875 L 96.21875,12.625 C 95.299754,13.109 94.41375,13.65425 93.59375,14.28125 L 93.59375,3.6875 C 93.59475,1.6815 91.97475,0.03125 89.96875,0.03125 z M 104.78125,14.34375 C 112.80825,14.34375 119.3125,20.87925 119.3125,28.90625 C 119.3125,36.93325 112.80825,43.46875 104.78125,43.46875 C 96.754254,43.46875 90.21875,36.93425 90.21875,28.90625 C 90.218752,20.87825 96.753253,14.34375 104.78125,14.34375 z "
141 style="fill:#35992a;fill-opacity:1" />
142 </g>
143 </g>
144 <path
145 style="fill:#35992a;fill-opacity:1"
146 id="path2122"
147 d="M 112.04875,28.913399 C 112.04875,24.899399 108.78275,21.634399 104.76975,21.634399 C 100.75675,21.634399 97.490753,24.900399 97.490753,28.913399 C 97.490753,32.926399 100.75675,36.192399 104.76975,36.192399 C 108.78275,36.192399 112.04875,32.927399 112.04875,28.913399 z " />
148 </g>
149 </g>
150</svg>
diff --git a/documentation/template/poky-db-pdf.xsl b/documentation/template/poky-db-pdf.xsl
new file mode 100644
index 0000000000..f8a3df103d
--- /dev/null
+++ b/documentation/template/poky-db-pdf.xsl
@@ -0,0 +1,64 @@
1<?xml version='1.0'?>
2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
3
4 <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl" />
5
6 <!-- check project-plan.sh for how this is generated, needed to tweak
7 the cover page
8 -->
9 <xsl:include href="/tmp/titlepage.xsl"/>
10
11 <!-- To force a page break in document, i.e per section add a
12 <?hard-pagebreak?> tag.
13 -->
14 <xsl:template match="processing-instruction('hard-pagebreak')">
15 <fo:block break-before='page' />
16 </xsl:template>
17
18 <!--Fix for defualt indent getting TOC all wierd..
19 See http://sources.redhat.com/ml/docbook-apps/2005-q1/msg00455.html
20 FIXME: must be a better fix
21 -->
22 <xsl:param name="body.start.indent" select="'0'"/>
23 <!--<xsl:param name="title.margin.left" select="'0'"/>-->
24
25 <!-- stop long-ish header titles getting wrapped -->
26 <xsl:param name="header.column.widths">1 10 1</xsl:param>
27
28 <!-- customise headers and footers a little -->
29
30 <xsl:template name="head.sep.rule">
31 <xsl:if test="$header.rule != 0">
32 <xsl:attribute name="border-bottom-width">0.5pt</xsl:attribute>
33 <xsl:attribute name="border-bottom-style">solid</xsl:attribute>
34 <xsl:attribute name="border-bottom-color">#999999</xsl:attribute>
35 </xsl:if>
36 </xsl:template>
37
38 <xsl:template name="foot.sep.rule">
39 <xsl:if test="$footer.rule != 0">
40 <xsl:attribute name="border-top-width">0.5pt</xsl:attribute>
41 <xsl:attribute name="border-top-style">solid</xsl:attribute>
42 <xsl:attribute name="border-top-color">#999999</xsl:attribute>
43 </xsl:if>
44 </xsl:template>
45
46 <xsl:attribute-set name="header.content.properties">
47 <xsl:attribute name="color">#999999</xsl:attribute>
48 </xsl:attribute-set>
49
50 <xsl:attribute-set name="footer.content.properties">
51 <xsl:attribute name="color">#999999</xsl:attribute>
52 </xsl:attribute-set>
53
54
55 <!-- general settings -->
56
57 <xsl:param name="fop1.extensions" select="1"></xsl:param>
58 <xsl:param name="paper.type" select="'A4'"></xsl:param>
59 <xsl:param name="section.autolabel" select="1"></xsl:param>
60 <xsl:param name="body.font.family" select="'verasans'"></xsl:param>
61 <xsl:param name="title.font.family" select="'verasans'"></xsl:param>
62 <xsl:param name="monospace.font.family" select="'veramono'"></xsl:param>
63
64</xsl:stylesheet>
diff --git a/documentation/template/poky-ref-manual.png b/documentation/template/poky-ref-manual.png
new file mode 100644
index 0000000000..2085edb467
--- /dev/null
+++ b/documentation/template/poky-ref-manual.png
Binary files differ
diff --git a/documentation/template/poky.svg b/documentation/template/poky.svg
new file mode 100644
index 0000000000..a4ea5e2f45
--- /dev/null
+++ b/documentation/template/poky.svg
@@ -0,0 +1,163 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!-- Created with Inkscape (http://www.inkscape.org/) -->
3<svg
4 xmlns:svg="http://www.w3.org/2000/svg"
5 xmlns="http://www.w3.org/2000/svg"
6 version="1.0"
7 width="158.56076"
8 height="79.284424"
9 viewBox="-40.981 -92.592 300 300"
10 id="svg2"
11 xml:space="preserve">
12<defs
13 id="defs4">
14</defs>
15<path
16 d="M -36.585379,54.412576 L -36.585379,54.421305 L -36.582469,54.421305 L -36.582469,54.243829 C -36.57956,54.302018 -36.585379,54.357297 -36.585379,54.412576 z "
17 style="fill:#6ac7bd"
18 id="path6" />
19<g
20 transform="matrix(2.9094193,0,0,2.9094193,-179.03055,-86.624435)"
21 style="opacity:0.65"
22 id="g8">
23 <g
24 id="g10">
25 <path
26 d="M 24.482,23.998 L 24.482,23.995 C 10.961,23.994 0,34.955 0,48.476 L 0.001,48.479 L 0.001,48.482 C 0.003,62.001 10.962,72.96 24.482,72.96 L 24.482,72.96 L 0,72.96 L 0,97.442 L 0.003,97.442 C 13.523,97.44 24.482,86.48 24.482,72.961 L 24.485,72.961 C 38.005,72.959 48.963,62 48.963,48.479 L 48.963,48.476 C 48.962,34.957 38.001,23.998 24.482,23.998 z M 24.482,50.928 C 23.13,50.928 22.034,49.832 22.034,48.48 C 22.034,47.128 23.13,46.032 24.482,46.032 C 25.834,46.032 26.93,47.128 26.93,48.48 C 26.93,49.832 25.834,50.928 24.482,50.928 z "
27 style="fill:#ef412a"
28 id="path12" />
29 </g>
30</g>
31<g
32 transform="matrix(2.9094193,0,0,2.9094193,-179.03055,-86.624435)"
33 style="opacity:0.65"
34 id="g14">
35 <g
36 id="g16">
37 <path
38 d="M 119.96,48.842 C 120.024,47.548 121.086,46.516 122.397,46.516 C 123.707,46.516 124.768,47.548 124.833,48.843 C 137.211,47.62 146.879,37.181 146.879,24.483 L 122.397,24.483 C 122.396,10.961 111.435,0 97.915,0 L 97.915,24.485 C 97.917,37.183 107.584,47.619 119.96,48.842 z M 124.833,49.084 C 124.769,50.379 123.707,51.411 122.397,51.411 L 122.396,51.411 L 122.396,73.444 L 146.878,73.444 L 146.878,73.441 C 146.876,60.745 137.208,50.308 124.833,49.084 z M 119.949,48.963 L 97.915,48.963 L 97.915,73.442 L 97.915,73.442 C 110.613,73.442 121.052,63.774 122.275,51.399 C 120.981,51.334 119.949,50.274 119.949,48.963 z "
39 style="fill:#a9c542"
40 id="path18" />
41 </g>
42</g>
43<g
44 transform="matrix(2.9094193,0,0,2.9094193,-179.03055,-86.624435)"
45 style="opacity:0.65"
46 id="g20">
47 <g
48 id="g22">
49 <path
50 d="M 168.912,48.967 C 168.912,47.656 169.945,46.596 171.24,46.531 C 170.018,34.152 159.579,24.482 146.879,24.482 L 146.879,48.963 C 146.879,62.484 157.84,73.444 171.361,73.444 L 171.361,51.414 C 170.007,51.415 168.912,50.319 168.912,48.967 z M 195.841,48.978 C 195.841,48.973 195.842,48.969 195.842,48.964 L 195.842,24.482 L 195.838,24.482 C 183.14,24.484 172.702,34.154 171.482,46.531 C 172.776,46.595 173.808,47.656 173.808,48.967 C 173.808,50.278 172.776,51.339 171.481,51.403 C 172.679,63.59 182.814,73.146 195.244,73.445 L 171.361,73.445 L 171.361,97.927 L 171.364,97.927 C 184.879,97.925 195.834,86.973 195.842,73.46 L 195.844,73.46 L 195.844,48.979 L 195.841,48.978 z M 195.832,48.964 L 195.842,48.964 L 195.842,48.978 L 195.832,48.964 z "
51 style="fill:#f9c759"
52 id="path24" />
53 </g>
54</g>
55<g
56 transform="matrix(2.9094193,0,0,2.9094193,-179.03055,-86.624435)"
57 style="opacity:0.65"
58 id="g26">
59 <g
60 id="g28">
61 <path
62 d="M 70.994,48.479 L 48.962,48.479 L 48.962,48.481 L 70.995,48.481 C 70.995,48.481 70.994,48.48 70.994,48.479 z M 73.44,24.001 L 73.437,24.001 L 73.437,46.032 C 73.439,46.032 73.44,46.032 73.442,46.032 C 74.794,46.032 75.89,47.128 75.89,48.48 C 75.89,49.832 74.794,50.928 73.442,50.928 C 72.091,50.928 70.996,49.834 70.994,48.483 L 48.958,48.483 L 48.958,48.486 C 48.96,62.005 59.919,72.964 73.437,72.964 C 86.955,72.964 97.914,62.005 97.916,48.486 L 97.916,48.483 C 97.916,34.963 86.958,24.003 73.44,24.001 z "
63 style="fill:#6ac7bd"
64 id="path30" />
65 </g>
66</g>
67<g
68 transform="matrix(2.9094193,0,0,2.9094193,-179.03055,-86.624435)"
69 style="opacity:0.65"
70 id="g32">
71 <g
72 id="g34">
73 <path
74 d="M 24.482,23.998 L 24.482,23.995 C 10.961,23.994 0,34.955 0,48.476 L 22.034,48.476 C 22.036,47.125 23.131,46.031 24.482,46.031 C 25.834,46.031 26.93,47.127 26.93,48.479 C 26.93,49.831 25.834,50.927 24.482,50.927 L 24.482,72.937 C 24.469,59.427 13.514,48.479 0,48.479 L 0,72.96 L 24.481,72.96 L 24.481,72.96 L 0,72.96 L 0,97.442 L 0.003,97.442 C 13.523,97.44 24.482,86.48 24.482,72.961 L 24.485,72.961 C 38.005,72.959 48.963,62 48.963,48.479 L 48.963,48.476 C 48.962,34.957 38.001,23.998 24.482,23.998 z "
75 style="fill:#ef412a"
76 id="path36" />
77 </g>
78</g>
79<g
80 transform="matrix(2.9094193,0,0,2.9094193,-179.03055,-86.624435)"
81 style="opacity:0.65"
82 id="g38">
83 <g
84 id="g40">
85 <path
86 d="M 122.397,46.516 C 123.707,46.516 124.768,47.548 124.833,48.843 C 137.211,47.62 146.879,37.181 146.879,24.483 L 122.397,24.483 L 122.397,46.516 L 122.397,46.516 z M 97.915,0 L 97.915,24.482 L 122.396,24.482 C 122.396,10.961 111.435,0 97.915,0 z M 122.275,46.528 C 121.052,34.151 110.613,24.482 97.914,24.482 L 97.914,48.964 L 97.914,48.964 L 97.914,73.443 L 97.914,73.443 C 110.612,73.443 121.051,63.775 122.274,51.4 C 120.98,51.335 119.948,50.275 119.948,48.964 C 119.949,47.653 120.98,46.593 122.275,46.528 z M 124.833,49.084 C 124.769,50.379 123.707,51.411 122.397,51.411 L 122.396,51.411 L 122.396,73.444 L 146.878,73.444 L 146.878,73.441 C 146.876,60.745 137.208,50.308 124.833,49.084 z "
87 style="fill:#a9c542"
88 id="path42" />
89 </g>
90</g>
91<g
92 transform="matrix(2.9094193,0,0,2.9094193,-179.03055,-86.624435)"
93 style="opacity:0.65"
94 id="g44">
95 <g
96 id="g46">
97 <path
98 d="M 173.795,49.1 C 173.724,50.389 172.666,51.415 171.36,51.415 C 170.006,51.415 168.911,50.319 168.911,48.967 C 168.911,47.656 169.944,46.596 171.239,46.531 C 170.017,34.152 159.578,24.482 146.878,24.482 L 146.878,48.963 C 146.878,62.484 157.839,73.444 171.36,73.444 L 171.36,97.926 L 171.363,97.926 C 184.878,97.924 195.833,86.972 195.841,73.459 L 195.842,73.459 L 195.842,73.443 L 195.841,73.443 C 195.833,60.753 186.167,50.322 173.795,49.1 z M 195.838,24.482 C 183.14,24.484 172.702,34.154 171.482,46.531 C 172.775,46.595 173.806,47.655 173.808,48.964 L 195.841,48.964 L 195.841,48.979 C 195.841,48.974 195.842,48.969 195.842,48.964 L 195.842,24.482 L 195.838,24.482 z "
99 style="fill:#f9c759"
100 id="path48" />
101 </g>
102</g>
103<g
104 transform="matrix(2.9094193,0,0,2.9094193,-179.03055,-86.624435)"
105 style="opacity:0.65"
106 id="g50">
107 <g
108 id="g52">
109 <path
110 d="M 71.007,48.347 C 71.075,47.105 72.062,46.117 73.304,46.046 C 72.509,38.02 67.85,31.133 61.201,27.284 C 57.601,25.2 53.424,24 48.965,24 L 48.962,24 C 48.962,28.46 50.161,32.638 52.245,36.24 C 56.093,42.891 62.98,47.552 71.007,48.347 z M 48.962,48.418 C 48.962,48.438 48.961,48.456 48.961,48.476 L 48.961,48.479 L 48.962,48.479 L 48.962,48.418 z M 70.995,48.482 C 70.995,48.481 70.995,48.481 70.995,48.48 L 48.962,48.48 L 48.962,48.482 L 70.995,48.482 z M 73.44,24.001 L 73.437,24.001 L 73.437,46.032 C 73.439,46.032 73.44,46.032 73.442,46.032 C 74.794,46.032 75.89,47.128 75.89,48.48 C 75.89,49.832 74.794,50.928 73.442,50.928 C 72.091,50.928 70.996,49.834 70.994,48.483 L 48.958,48.483 L 48.958,48.486 C 48.96,62.005 59.919,72.964 73.437,72.964 C 86.955,72.964 97.914,62.005 97.916,48.486 L 97.916,48.483 C 97.916,34.963 86.958,24.003 73.44,24.001 z "
111 style="fill:#6ac7bd"
112 id="path54" />
113 </g>
114</g>
115<g
116 transform="matrix(2.9094193,0,0,2.9094193,-179.03055,-86.624435)"
117 style="opacity:0.65"
118 id="g56">
119 <g
120 id="g58">
121 <path
122 d="M 24.482,23.998 L 24.482,23.995 C 10.961,23.994 0,34.955 0,48.476 L 22.034,48.476 C 22.036,47.125 23.131,46.031 24.482,46.031 C 25.834,46.031 26.93,47.127 26.93,48.479 C 26.93,49.831 25.834,50.927 24.482,50.927 C 23.171,50.927 22.11,49.894 22.046,48.6 C 9.669,49.824 0.001,60.262 0.001,72.96 L 0,72.96 L 0,97.442 L 0.003,97.442 C 13.523,97.44 24.482,86.48 24.482,72.961 L 24.485,72.961 C 38.005,72.959 48.963,62 48.963,48.479 L 48.963,48.476 C 48.962,34.957 38.001,23.998 24.482,23.998 z "
123 style="fill:#ef412a"
124 id="path60" />
125 </g>
126</g>
127<g
128 transform="matrix(2.9094193,0,0,2.9094193,-179.03055,-86.624435)"
129 style="opacity:0.65"
130 id="g62">
131 <g
132 id="g64">
133 <path
134 d="M 119.949,48.963 C 119.949,47.611 121.045,46.515 122.397,46.515 C 123.707,46.515 124.768,47.547 124.833,48.842 C 137.211,47.619 146.879,37.18 146.879,24.482 L 122.397,24.482 C 122.396,10.961 111.435,0 97.915,0 L 97.915,24.482 L 122.394,24.482 C 108.874,24.484 97.916,35.444 97.916,48.963 L 97.916,48.963 L 97.916,73.442 L 97.916,73.442 C 110.614,73.442 121.053,63.774 122.276,51.399 C 120.981,51.334 119.949,50.274 119.949,48.963 z M 124.833,49.084 C 124.769,50.379 123.707,51.411 122.397,51.411 L 122.396,51.411 L 122.396,73.444 L 146.878,73.444 L 146.878,73.441 C 146.876,60.745 137.208,50.308 124.833,49.084 z "
135 style="fill:#a9c542"
136 id="path66" />
137 </g>
138</g>
139<g
140 transform="matrix(2.9094193,0,0,2.9094193,-179.03055,-86.624435)"
141 style="opacity:0.65"
142 id="g68">
143 <g
144 id="g70">
145 <path
146 d="M 195.841,48.979 L 195.835,48.964 L 195.841,48.964 L 195.841,48.979 C 195.841,48.974 195.842,48.969 195.842,48.964 L 195.842,24.482 L 195.838,24.482 C 183.14,24.484 172.702,34.154 171.482,46.531 C 172.776,46.595 173.808,47.656 173.808,48.967 C 173.808,50.319 172.712,51.415 171.361,51.415 C 170.007,51.415 168.912,50.319 168.912,48.967 C 168.912,47.656 169.945,46.596 171.24,46.531 C 170.018,34.152 159.579,24.482 146.879,24.482 L 146.879,48.963 C 146.879,62.484 157.84,73.444 171.361,73.444 L 171.361,97.926 L 171.364,97.926 C 184.883,97.924 195.843,86.963 195.843,73.444 L 171.959,73.444 C 185.203,73.126 195.841,62.299 195.841,48.979 z "
147 style="fill:#f9c759"
148 id="path72" />
149 </g>
150</g>
151<g
152 transform="matrix(2.9094193,0,0,2.9094193,-179.03055,-86.624435)"
153 style="opacity:0.65"
154 id="g74">
155 <g
156 id="g76">
157 <path
158 d="M 73.44,24.001 L 73.437,24.001 C 59.919,24.003 48.96,34.959 48.958,48.476 L 48.958,48.479 L 48.961,48.479 L 48.961,48.481 L 48.957,48.482 L 48.957,48.485 C 48.959,62.004 59.918,72.963 73.436,72.963 C 86.954,72.963 97.913,62.004 97.915,48.485 L 97.915,48.482 C 97.916,34.963 86.958,24.003 73.44,24.001 z M 73.442,50.928 C 72.09,50.928 70.994,49.832 70.994,48.48 C 70.994,47.128 72.09,46.032 73.442,46.032 C 74.794,46.032 75.89,47.128 75.89,48.48 C 75.89,49.832 74.794,50.928 73.442,50.928 z "
159 style="fill:#6ac7bd"
160 id="path78" />
161 </g>
162</g>
163</svg> \ No newline at end of file
diff --git a/documentation/template/titlepage.templates.xml b/documentation/template/titlepage.templates.xml
new file mode 100644
index 0000000000..f53f147002
--- /dev/null
+++ b/documentation/template/titlepage.templates.xml
@@ -0,0 +1,1227 @@
1<!DOCTYPE t:templates [
2<!ENTITY hsize0 "10pt">
3<!ENTITY hsize1 "12pt">
4<!ENTITY hsize2 "14.4pt">
5<!ENTITY hsize3 "17.28pt">
6<!ENTITY hsize4 "20.736pt">
7<!ENTITY hsize5 "24.8832pt">
8<!ENTITY hsize0space "7.5pt"> <!-- 0.75 * hsize0 -->
9<!ENTITY hsize1space "9pt"> <!-- 0.75 * hsize1 -->
10<!ENTITY hsize2space "10.8pt"> <!-- 0.75 * hsize2 -->
11<!ENTITY hsize3space "12.96pt"> <!-- 0.75 * hsize3 -->
12<!ENTITY hsize4space "15.552pt"> <!-- 0.75 * hsize4 -->
13<!ENTITY hsize5space "18.6624pt"> <!-- 0.75 * hsize5 -->
14]>
15<t:templates xmlns:t="http://nwalsh.com/docbook/xsl/template/1.0"
16 xmlns:param="http://nwalsh.com/docbook/xsl/template/1.0/param"
17 xmlns:fo="http://www.w3.org/1999/XSL/Format"
18 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
19
20<!-- ********************************************************************
21 $Id: titlepage.templates.xml,v 1.23 2003/12/16 00:30:49 bobstayton Exp $
22 ********************************************************************
23
24 This file is part of the DocBook XSL Stylesheet distribution.
25 See ../README or http://docbook.sf.net/ for copyright
26 and other information.
27
28 ******************************************************************** -->
29
30<!-- ==================================================================== -->
31
32<t:titlepage t:element="article" t:wrapper="fo:block"
33 font-family="{$title.fontset}">
34
35 <t:titlepage-content t:side="recto"
36 text-align="center">
37
38 <mediaobject/>
39
40 <title t:named-template="component.title"
41 param:node="ancestor-or-self::article[1]"
42 keep-with-next="always"
43 font-size="&hsize5;"
44 font-weight="bold"/>
45
46 <subtitle param:node="ancestor-or-self::article[1]"
47 keep-with-next="always"
48 font-size="&hsize3;"
49 font-weight="bold"
50 space-after="0.8em"/>
51
52 <corpauthor space-before="0.5em"
53 font-size="&hsize3;"/>
54 <authorgroup space-before="0.5em"
55 font-size="&hsize2;"/>
56 <author space-before="0.5em"
57 font-size="&hsize2;"
58 space-after="0.8em"/>
59
60 <email font-size="&hsize2;"/>
61
62 <othercredit space-before="0.5em"/>
63 <releaseinfo space-before="0.5em"/>
64 <copyright space-before="0.5em"/>
65 <legalnotice text-align="start"
66 margin-left="0.5in"
67 margin-right="0.5in"
68 font-family="{$body.fontset}"/>
69 <pubdate space-before="0.5em"/>
70 <para></para>
71 <revision space-before="0.5em"/>
72 <revhistory space-before="0.5em"/>
73 <abstract space-before="0.5em"
74 text-align="start"
75 margin-left="0.5in"
76 margin-right="0.5in"
77 font-family="{$body.fontset}"/>
78
79 <para></para>
80 </t:titlepage-content>
81
82 <t:titlepage-content t:side="verso">
83 </t:titlepage-content>
84
85 <t:titlepage-separator>
86 </t:titlepage-separator>
87
88 <t:titlepage-before t:side="recto">
89 </t:titlepage-before>
90
91 <t:titlepage-before t:side="verso">
92 </t:titlepage-before>
93</t:titlepage>
94
95<!-- ==================================================================== -->
96
97<t:titlepage t:element="set" t:wrapper="fo:block">
98 <t:titlepage-content t:side="recto">
99 <title
100 t:named-template="division.title"
101 param:node="ancestor-or-self::set[1]"
102 text-align="center"
103 font-size="&hsize5;"
104 space-before="&hsize5space;"
105 font-weight="bold"
106 font-family="{$title.fontset}"/>
107 <subtitle
108 font-family="{$title.fontset}"
109 text-align="center"/>
110 <corpauthor/>
111 <authorgroup/>
112 <author/>
113 <othercredit/>
114 <releaseinfo/>
115 <copyright/>
116 <legalnotice/>
117 <pubdate/>
118 <revision/>
119 <revhistory/>
120 <abstract/>
121 </t:titlepage-content>
122
123 <t:titlepage-content t:side="verso">
124 </t:titlepage-content>
125
126 <t:titlepage-separator>
127 </t:titlepage-separator>
128
129 <t:titlepage-before t:side="recto">
130 </t:titlepage-before>
131
132 <t:titlepage-before t:side="verso">
133 </t:titlepage-before>
134</t:titlepage>
135
136<!-- ==================================================================== -->
137
138 <t:titlepage t:element="book" t:wrapper="fo:block">
139 <t:titlepage-content t:side="recto">
140
141 <mediaobject/>
142
143 <subtitle
144 text-align="center"
145 font-size="&hsize4;"
146 space-before="&hsize4space;"
147 font-family="{$title.fontset}"/>
148 <corpauthor font-size="&hsize3;"
149 keep-with-next="always"
150 space-before="2in"/>
151 <authorgroup space-before="2in"/>
152 <author font-size="&hsize3;"
153 space-before="&hsize2space;"
154 keep-with-next="always"/>
155 </t:titlepage-content>
156
157 <t:titlepage-content t:side="verso">
158 <corpauthor/>
159 <authorgroup t:named-template="verso.authorgroup"/>
160 <author/>
161 <othercredit/>
162 <pubdate space-before="1em"/>
163 <copyright/>
164 <abstract/>
165 <legalnotice font-size="8pt"/>
166 </t:titlepage-content>
167
168 <t:titlepage-separator>
169 <fo:block break-after="page"/>
170 </t:titlepage-separator>
171
172 <t:titlepage-before t:side="recto">
173 </t:titlepage-before>
174
175 <t:titlepage-before t:side="verso">
176 <fo:block break-after="page"/>
177 </t:titlepage-before>
178</t:titlepage>
179
180<!-- ==================================================================== -->
181
182<t:titlepage t:element="part" t:wrapper="fo:block">
183 <t:titlepage-content t:side="recto">
184 <title
185 t:named-template="division.title"
186 param:node="ancestor-or-self::part[1]"
187 text-align="center"
188 font-size="&hsize5;"
189 space-before="&hsize5space;"
190 font-weight="bold"
191 font-family="{$title.fontset}"/>
192 <subtitle
193 text-align="center"
194 font-size="&hsize4;"
195 space-before="&hsize4space;"
196 font-weight='bold'
197 font-style='italic'
198 font-family="{$title.fontset}"/>
199 </t:titlepage-content>
200
201 <t:titlepage-content t:side="verso">
202 </t:titlepage-content>
203
204 <t:titlepage-separator>
205 </t:titlepage-separator>
206
207 <t:titlepage-before t:side="recto">
208 </t:titlepage-before>
209
210 <t:titlepage-before t:side="verso">
211 </t:titlepage-before>
212</t:titlepage>
213
214<t:titlepage t:element="partintro" t:wrapper="fo:block">
215 <t:titlepage-content t:side="recto">
216 <title
217 text-align="center"
218 font-size="&hsize5;"
219 font-weight="bold"
220 space-before="1em"
221 font-family="{$title.fontset}"/>
222 <subtitle
223 text-align="center"
224 font-size="&hsize2;"
225 font-weight="bold"
226 font-style="italic"
227 font-family="{$title.fontset}"/>
228 <corpauthor/>
229 <authorgroup/>
230 <author/>
231 <othercredit/>
232 <releaseinfo/>
233 <copyright/>
234 <legalnotice/>
235 <pubdate/>
236 <revision/>
237 <revhistory/>
238 <abstract/>
239 </t:titlepage-content>
240
241 <t:titlepage-content t:side="verso">
242 </t:titlepage-content>
243
244 <t:titlepage-separator>
245 </t:titlepage-separator>
246
247 <t:titlepage-before t:side="recto">
248 </t:titlepage-before>
249
250 <t:titlepage-before t:side="verso">
251 </t:titlepage-before>
252</t:titlepage>
253
254<!-- ==================================================================== -->
255
256<t:titlepage t:element="reference" t:wrapper="fo:block">
257 <t:titlepage-content t:side="recto">
258 <title
259 t:named-template="division.title"
260 param:node="ancestor-or-self::reference[1]"
261 text-align="center"
262 font-size="&hsize5;"
263 space-before="&hsize5space;"
264 font-weight="bold"
265 font-family="{$title.fontset}"/>
266 <subtitle
267 font-family="{$title.fontset}"
268 text-align="center"/>
269 <corpauthor/>
270 <authorgroup/>
271 <author/>
272 <othercredit/>
273 <releaseinfo/>
274 <copyright/>
275 <legalnotice/>
276 <pubdate/>
277 <revision/>
278 <revhistory/>
279 <abstract/>
280 </t:titlepage-content>
281
282 <t:titlepage-content t:side="verso">
283 </t:titlepage-content>
284
285 <t:titlepage-separator>
286 </t:titlepage-separator>
287
288 <t:titlepage-before t:side="recto">
289 </t:titlepage-before>
290
291 <t:titlepage-before t:side="verso">
292 </t:titlepage-before>
293</t:titlepage>
294
295<!-- ==================================================================== -->
296
297<t:titlepage t:element="refsynopsisdiv" t:wrapper="fo:block">
298 <t:titlepage-content t:side="recto">
299 <title
300 font-family="{$title.fontset}"/>
301 </t:titlepage-content>
302
303 <t:titlepage-content t:side="verso">
304 </t:titlepage-content>
305
306 <t:titlepage-separator>
307 </t:titlepage-separator>
308
309 <t:titlepage-before t:side="recto">
310 </t:titlepage-before>
311
312 <t:titlepage-before t:side="verso">
313 </t:titlepage-before>
314</t:titlepage>
315
316<!-- ==================================================================== -->
317
318<t:titlepage t:element="refsection" t:wrapper="fo:block">
319 <t:titlepage-content t:side="recto">
320 <title
321 font-family="{$title.fontset}"/>
322 </t:titlepage-content>
323
324 <t:titlepage-content t:side="verso">
325 </t:titlepage-content>
326
327 <t:titlepage-separator>
328 </t:titlepage-separator>
329
330 <t:titlepage-before t:side="recto">
331 </t:titlepage-before>
332
333 <t:titlepage-before t:side="verso">
334 </t:titlepage-before>
335</t:titlepage>
336
337<!-- ==================================================================== -->
338
339<t:titlepage t:element="refsect1" t:wrapper="fo:block">
340 <t:titlepage-content t:side="recto">
341 <title
342 font-family="{$title.fontset}"/>
343 </t:titlepage-content>
344
345 <t:titlepage-content t:side="verso">
346 </t:titlepage-content>
347
348 <t:titlepage-separator>
349 </t:titlepage-separator>
350
351 <t:titlepage-before t:side="recto">
352 </t:titlepage-before>
353
354 <t:titlepage-before t:side="verso">
355 </t:titlepage-before>
356</t:titlepage>
357
358<!-- ==================================================================== -->
359
360<t:titlepage t:element="refsect2" t:wrapper="fo:block">
361 <t:titlepage-content t:side="recto">
362 <title
363 font-family="{$title.fontset}"/>
364 </t:titlepage-content>
365
366 <t:titlepage-content t:side="verso">
367 </t:titlepage-content>
368
369 <t:titlepage-separator>
370 </t:titlepage-separator>
371
372 <t:titlepage-before t:side="recto">
373 </t:titlepage-before>
374
375 <t:titlepage-before t:side="verso">
376 </t:titlepage-before>
377</t:titlepage>
378
379<!-- ==================================================================== -->
380
381<t:titlepage t:element="refsect3" t:wrapper="fo:block">
382 <t:titlepage-content t:side="recto">
383 <title
384 font-family="{$title.fontset}"/>
385 </t:titlepage-content>
386
387 <t:titlepage-content t:side="verso">
388 </t:titlepage-content>
389
390 <t:titlepage-separator>
391 </t:titlepage-separator>
392
393 <t:titlepage-before t:side="recto">
394 </t:titlepage-before>
395
396 <t:titlepage-before t:side="verso">
397 </t:titlepage-before>
398</t:titlepage>
399
400<!-- ==================================================================== -->
401
402 <t:titlepage t:element="dedication" t:wrapper="fo:block">
403 <t:titlepage-content t:side="recto">
404 <title
405 t:force="1"
406 t:named-template="component.title"
407 param:node="ancestor-or-self::dedication[1]"
408 margin-left="{$title.margin.left}"
409 font-size="&hsize5;"
410 font-family="{$title.fontset}"
411 font-weight="bold"/>
412 <subtitle
413 font-family="{$title.fontset}"/>
414 </t:titlepage-content>
415
416 <t:titlepage-content t:side="verso">
417 </t:titlepage-content>
418
419 <t:titlepage-separator>
420 </t:titlepage-separator>
421
422 <t:titlepage-before t:side="recto">
423 </t:titlepage-before>
424
425 <t:titlepage-before t:side="verso">
426 </t:titlepage-before>
427</t:titlepage>
428
429<!-- ==================================================================== -->
430
431 <t:titlepage t:element="preface" t:wrapper="fo:block">
432 <t:titlepage-content t:side="recto">
433 <title
434 t:force="1"
435 t:named-template="component.title"
436 param:node="ancestor-or-self::preface[1]"
437 margin-left="{$title.margin.left}"
438 font-size="&hsize5;"
439 font-family="{$title.fontset}"
440 font-weight="bold"/>
441 <subtitle
442 font-family="{$title.fontset}"/>
443 <corpauthor/>
444 <authorgroup/>
445 <author/>
446 <othercredit/>
447 <releaseinfo/>
448 <copyright/>
449 <legalnotice/>
450 <pubdate/>
451 <revision/>
452 <revhistory/>
453 <abstract/>
454 </t:titlepage-content>
455
456 <t:titlepage-content t:side="verso">
457 </t:titlepage-content>
458
459 <t:titlepage-separator>
460 </t:titlepage-separator>
461
462 <t:titlepage-before t:side="recto">
463 </t:titlepage-before>
464
465 <t:titlepage-before t:side="verso">
466 </t:titlepage-before>
467</t:titlepage>
468
469<!-- ==================================================================== -->
470
471 <t:titlepage t:element="chapter" t:wrapper="fo:block"
472 font-family="{$title.fontset}">
473 <t:titlepage-content t:side="recto" margin-left="{$title.margin.left}">
474 <title t:named-template="component.title"
475 param:node="ancestor-or-self::chapter[1]"
476 font-size="&hsize5;"
477 font-weight="bold"/>
478
479 <subtitle space-before="0.5em"
480 font-style="italic"
481 font-size="&hsize2;"
482 font-weight="bold"/>
483
484 <corpauthor space-before="0.5em"
485 space-after="0.5em"
486 font-size="&hsize2;"/>
487
488 <authorgroup space-before="0.5em"
489 space-after="0.5em"
490 font-size="&hsize2;"/>
491
492 <author space-before="0.5em"
493 space-after="0.5em"
494 font-size="&hsize2;"/>
495
496 <othercredit/>
497 <releaseinfo/>
498 <copyright/>
499 <legalnotice/>
500 <pubdate/>
501 <revision/>
502 <revhistory/>
503 <abstract/>
504 </t:titlepage-content>
505
506 <t:titlepage-content t:side="verso">
507 </t:titlepage-content>
508
509 <t:titlepage-separator>
510 </t:titlepage-separator>
511
512 <t:titlepage-before t:side="recto">
513 </t:titlepage-before>
514
515 <t:titlepage-before t:side="verso">
516 </t:titlepage-before>
517</t:titlepage>
518
519<!-- ==================================================================== -->
520
521 <t:titlepage t:element="appendix" t:wrapper="fo:block">
522 <t:titlepage-content t:side="recto">
523 <title
524 t:named-template="component.title"
525 param:node="ancestor-or-self::appendix[1]"
526 margin-left="{$title.margin.left}"
527 font-size="&hsize5;"
528 font-weight="bold"
529 font-family="{$title.fontset}"/>
530 <subtitle
531 font-family="{$title.fontset}"/>
532 <corpauthor/>
533 <authorgroup/>
534 <author/>
535 <othercredit/>
536 <releaseinfo/>
537 <copyright/>
538 <legalnotice/>
539 <pubdate/>
540 <revision/>
541 <revhistory/>
542 <abstract/>
543 </t:titlepage-content>
544
545 <t:titlepage-content t:side="verso">
546 </t:titlepage-content>
547
548 <t:titlepage-separator>
549 </t:titlepage-separator>
550
551 <t:titlepage-before t:side="recto">
552 </t:titlepage-before>
553
554 <t:titlepage-before t:side="verso">
555 </t:titlepage-before>
556</t:titlepage>
557
558<!-- ==================================================================== -->
559
560<t:titlepage t:element="section" t:wrapper="fo:block">
561 <t:titlepage-content t:side="recto">
562 <title
563 margin-left="{$title.margin.left}"
564 font-family="{$title.fontset}"/>
565 <subtitle
566 font-family="{$title.fontset}"/>
567 <corpauthor/>
568 <authorgroup/>
569 <author/>
570 <othercredit/>
571 <releaseinfo/>
572 <copyright/>
573 <legalnotice/>
574 <pubdate/>
575 <revision/>
576 <revhistory/>
577 <abstract/>
578 </t:titlepage-content>
579
580 <t:titlepage-content t:side="verso">
581 </t:titlepage-content>
582
583 <t:titlepage-separator>
584 </t:titlepage-separator>
585
586 <t:titlepage-before t:side="recto">
587 </t:titlepage-before>
588
589 <t:titlepage-before t:side="verso">
590 </t:titlepage-before>
591</t:titlepage>
592
593<t:titlepage t:element="sect1" t:wrapper="fo:block">
594 <t:titlepage-content t:side="recto">
595 <title
596 margin-left="{$title.margin.left}"
597 font-family="{$title.fontset}"/>
598 <subtitle
599 font-family="{$title.fontset}"/>
600 <corpauthor/>
601 <authorgroup/>
602 <author/>
603 <othercredit/>
604 <releaseinfo/>
605 <copyright/>
606 <legalnotice/>
607 <pubdate/>
608 <revision/>
609 <revhistory/>
610 <abstract/>
611 </t:titlepage-content>
612
613 <t:titlepage-content t:side="verso">
614 </t:titlepage-content>
615
616 <t:titlepage-separator>
617 </t:titlepage-separator>
618
619 <t:titlepage-before t:side="recto">
620 </t:titlepage-before>
621
622 <t:titlepage-before t:side="verso">
623 </t:titlepage-before>
624</t:titlepage>
625
626<t:titlepage t:element="sect2" t:wrapper="fo:block">
627 <t:titlepage-content t:side="recto">
628 <title
629 margin-left="{$title.margin.left}"
630 font-family="{$title.fontset}"/>
631 <subtitle
632 font-family="{$title.fontset}"/>
633 <corpauthor/>
634 <authorgroup/>
635 <author/>
636 <othercredit/>
637 <releaseinfo/>
638 <copyright/>
639 <legalnotice/>
640 <pubdate/>
641 <revision/>
642 <revhistory/>
643 <abstract/>
644 </t:titlepage-content>
645
646 <t:titlepage-content t:side="verso">
647 </t:titlepage-content>
648
649 <t:titlepage-separator>
650 </t:titlepage-separator>
651
652 <t:titlepage-before t:side="recto">
653 </t:titlepage-before>
654
655 <t:titlepage-before t:side="verso">
656 </t:titlepage-before>
657</t:titlepage>
658
659<t:titlepage t:element="sect3" t:wrapper="fo:block">
660 <t:titlepage-content t:side="recto">
661 <title
662 margin-left="{$title.margin.left}"
663 font-family="{$title.fontset}"/>
664 <subtitle
665 font-family="{$title.fontset}"/>
666 <corpauthor/>
667 <authorgroup/>
668 <author/>
669 <othercredit/>
670 <releaseinfo/>
671 <copyright/>
672 <legalnotice/>
673 <pubdate/>
674 <revision/>
675 <revhistory/>
676 <abstract/>
677 </t:titlepage-content>
678
679 <t:titlepage-content t:side="verso">
680 </t:titlepage-content>
681
682 <t:titlepage-separator>
683 </t:titlepage-separator>
684
685 <t:titlepage-before t:side="recto">
686 </t:titlepage-before>
687
688 <t:titlepage-before t:side="verso">
689 </t:titlepage-before>
690</t:titlepage>
691
692<t:titlepage t:element="sect4" t:wrapper="fo:block">
693 <t:titlepage-content t:side="recto">
694 <title
695 margin-left="{$title.margin.left}"
696 font-family="{$title.fontset}"/>
697 <subtitle
698 font-family="{$title.fontset}"/>
699 <corpauthor/>
700 <authorgroup/>
701 <author/>
702 <othercredit/>
703 <releaseinfo/>
704 <copyright/>
705 <legalnotice/>
706 <pubdate/>
707 <revision/>
708 <revhistory/>
709 <abstract/>
710 </t:titlepage-content>
711
712 <t:titlepage-content t:side="verso">
713 </t:titlepage-content>
714
715 <t:titlepage-separator>
716 </t:titlepage-separator>
717
718 <t:titlepage-before t:side="recto">
719 </t:titlepage-before>
720
721 <t:titlepage-before t:side="verso">
722 </t:titlepage-before>
723</t:titlepage>
724
725<t:titlepage t:element="sect5" t:wrapper="fo:block">
726 <t:titlepage-content t:side="recto">
727 <title
728 margin-left="{$title.margin.left}"
729 font-family="{$title.fontset}"/>
730 <subtitle
731 font-family="{$title.fontset}"/>
732 <corpauthor/>
733 <authorgroup/>
734 <author/>
735 <othercredit/>
736 <releaseinfo/>
737 <copyright/>
738 <legalnotice/>
739 <pubdate/>
740 <revision/>
741 <revhistory/>
742 <abstract/>
743 </t:titlepage-content>
744
745 <t:titlepage-content t:side="verso">
746 </t:titlepage-content>
747
748 <t:titlepage-separator>
749 </t:titlepage-separator>
750
751 <t:titlepage-before t:side="recto">
752 </t:titlepage-before>
753
754 <t:titlepage-before t:side="verso">
755 </t:titlepage-before>
756</t:titlepage>
757
758<t:titlepage t:element="simplesect" t:wrapper="fo:block">
759 <t:titlepage-content t:side="recto">
760 <title
761 margin-left="{$title.margin.left}"
762 font-family="{$title.fontset}"/>
763 <subtitle
764 font-family="{$title.fontset}"/>
765 <corpauthor/>
766 <authorgroup/>
767 <author/>
768 <othercredit/>
769 <releaseinfo/>
770 <copyright/>
771 <legalnotice/>
772 <pubdate/>
773 <revision/>
774 <revhistory/>
775 <abstract/>
776 </t:titlepage-content>
777
778 <t:titlepage-content t:side="verso">
779 </t:titlepage-content>
780
781 <t:titlepage-separator>
782 </t:titlepage-separator>
783
784 <t:titlepage-before t:side="recto">
785 </t:titlepage-before>
786
787 <t:titlepage-before t:side="verso">
788 </t:titlepage-before>
789</t:titlepage>
790
791<!-- ==================================================================== -->
792
793 <t:titlepage t:element="bibliography" t:wrapper="fo:block">
794 <t:titlepage-content t:side="recto">
795 <title
796 t:force="1"
797 t:named-template="component.title"
798 param:node="ancestor-or-self::bibliography[1]"
799 margin-left="{$title.margin.left}"
800 font-size="&hsize5;"
801 font-family="{$title.fontset}"
802 font-weight="bold"/>
803 <subtitle
804 font-family="{$title.fontset}"/>
805 </t:titlepage-content>
806
807 <t:titlepage-content t:side="verso">
808 </t:titlepage-content>
809
810 <t:titlepage-separator>
811 </t:titlepage-separator>
812
813 <t:titlepage-before t:side="recto">
814 </t:titlepage-before>
815
816 <t:titlepage-before t:side="verso">
817 </t:titlepage-before>
818 </t:titlepage>
819
820<!-- ==================================================================== -->
821
822 <t:titlepage t:element="bibliodiv" t:wrapper="fo:block">
823 <t:titlepage-content t:side="recto">
824 <title t:named-template="component.title"
825 param:node="ancestor-or-self::bibliodiv[1]"
826 margin-left="{$title.margin.left}"
827 font-size="&hsize4;"
828 font-family="{$title.fontset}"
829 font-weight="bold"/>
830 <subtitle
831 font-family="{$title.fontset}"/>
832 </t:titlepage-content>
833
834 <t:titlepage-content t:side="verso">
835 </t:titlepage-content>
836
837 <t:titlepage-separator>
838 </t:titlepage-separator>
839
840 <t:titlepage-before t:side="recto">
841 </t:titlepage-before>
842
843 <t:titlepage-before t:side="verso">
844 </t:titlepage-before>
845 </t:titlepage>
846
847<!-- ==================================================================== -->
848
849 <t:titlepage t:element="glossary" t:wrapper="fo:block">
850 <t:titlepage-content t:side="recto">
851 <title
852 t:force="1"
853 t:named-template="component.title"
854 param:node="ancestor-or-self::glossary[1]"
855 margin-left="{$title.margin.left}"
856 font-size="&hsize5;"
857 font-family="{$title.fontset}"
858 font-weight="bold"/>
859 <subtitle
860 font-family="{$title.fontset}"/>
861 </t:titlepage-content>
862
863 <t:titlepage-content t:side="verso">
864 </t:titlepage-content>
865
866 <t:titlepage-separator>
867 </t:titlepage-separator>
868
869 <t:titlepage-before t:side="recto">
870 </t:titlepage-before>
871
872 <t:titlepage-before t:side="verso">
873 </t:titlepage-before>
874 </t:titlepage>
875
876<!-- ==================================================================== -->
877
878 <t:titlepage t:element="glossdiv" t:wrapper="fo:block">
879 <t:titlepage-content t:side="recto">
880 <title t:named-template="component.title"
881 param:node="ancestor-or-self::glossdiv[1]"
882 margin-left="{$title.margin.left}"
883 font-size="&hsize4;"
884 font-family="{$title.fontset}"
885 font-weight="bold"/>
886 <subtitle
887 font-family="{$title.fontset}"/>
888 </t:titlepage-content>
889
890 <t:titlepage-content t:side="verso">
891 </t:titlepage-content>
892
893 <t:titlepage-separator>
894 </t:titlepage-separator>
895
896 <t:titlepage-before t:side="recto">
897 </t:titlepage-before>
898
899 <t:titlepage-before t:side="verso">
900 </t:titlepage-before>
901 </t:titlepage>
902
903<!-- ==================================================================== -->
904
905 <t:titlepage t:element="index" t:wrapper="fo:block">
906 <t:titlepage-content t:side="recto">
907 <title
908 t:force="1"
909 t:named-template="component.title"
910 param:node="ancestor-or-self::index[1]"
911 param:pagewide="1"
912 margin-left="0pt"
913 font-size="&hsize5;"
914 font-family="{$title.fontset}"
915 font-weight="bold"/>
916 <subtitle
917 font-family="{$title.fontset}"/>
918 </t:titlepage-content>
919
920 <t:titlepage-content t:side="verso">
921 </t:titlepage-content>
922
923 <t:titlepage-separator>
924 </t:titlepage-separator>
925
926 <t:titlepage-before t:side="recto">
927 </t:titlepage-before>
928
929 <t:titlepage-before t:side="verso">
930 </t:titlepage-before>
931 </t:titlepage>
932
933<!-- ==================================================================== -->
934
935 <!-- The indexdiv.title template is used so that manual and -->
936 <!-- automatically generated indexdiv titles get the same -->
937 <!-- formatting. -->
938
939 <t:titlepage t:element="indexdiv" t:wrapper="fo:block">
940 <t:titlepage-content t:side="recto">
941 <title t:force="1"
942 t:named-template="indexdiv.title"
943 param:title="title"/>
944 <subtitle
945 font-family="{$title.fontset}"/>
946 </t:titlepage-content>
947
948 <t:titlepage-content t:side="verso">
949 </t:titlepage-content>
950
951 <t:titlepage-separator>
952 </t:titlepage-separator>
953
954 <t:titlepage-before t:side="recto">
955 </t:titlepage-before>
956
957 <t:titlepage-before t:side="verso">
958 </t:titlepage-before>
959 </t:titlepage>
960
961<!-- ==================================================================== -->
962
963 <t:titlepage t:element="setindex" t:wrapper="fo:block">
964 <t:titlepage-content t:side="recto">
965 <title
966 t:force="1"
967 t:named-template="component.title"
968 param:node="ancestor-or-self::setindex[1]"
969 param:pagewide="1"
970 margin-left="0pt"
971 font-size="&hsize5;"
972 font-family="{$title.fontset}"
973 font-weight="bold"/>
974 <subtitle
975 font-family="{$title.fontset}"/>
976 </t:titlepage-content>
977
978 <t:titlepage-content t:side="verso">
979 </t:titlepage-content>
980
981 <t:titlepage-separator>
982 </t:titlepage-separator>
983
984 <t:titlepage-before t:side="recto">
985 </t:titlepage-before>
986
987 <t:titlepage-before t:side="verso">
988 </t:titlepage-before>
989 </t:titlepage>
990
991<!-- ==================================================================== -->
992
993 <t:titlepage t:element="colophon" t:wrapper="fo:block">
994 <t:titlepage-content t:side="recto">
995 <title
996 t:force="1"
997 t:named-template="component.title"
998 param:node="ancestor-or-self::colophon[1]"
999 margin-left="{$title.margin.left}"
1000 font-size="&hsize5;"
1001 font-family="{$title.fontset}"
1002 font-weight="bold"/>
1003 <subtitle
1004 font-family="{$title.fontset}"/>
1005 </t:titlepage-content>
1006
1007 <t:titlepage-content t:side="verso">
1008 </t:titlepage-content>
1009
1010 <t:titlepage-separator>
1011 </t:titlepage-separator>
1012
1013 <t:titlepage-before t:side="recto">
1014 </t:titlepage-before>
1015
1016 <t:titlepage-before t:side="verso">
1017 </t:titlepage-before>
1018</t:titlepage>
1019
1020<!-- ==================================================================== -->
1021
1022 <t:titlepage t:element="table.of.contents" t:wrapper="fo:block">
1023 <t:titlepage-content t:side="recto">
1024 <title
1025 t:force="1"
1026 t:named-template="gentext"
1027 param:key="'TableofContents'"
1028 space-before.minimum="1em"
1029 space-before.optimum="1.5em"
1030 space-before.maximum="2em"
1031 space-after="0.5em"
1032 margin-left="{$title.margin.left}"
1033 font-size="&hsize3;"
1034 font-weight="bold"
1035 font-family="{$title.fontset}"/>
1036 </t:titlepage-content>
1037
1038 <t:titlepage-content t:side="verso">
1039 </t:titlepage-content>
1040
1041 <t:titlepage-separator>
1042 </t:titlepage-separator>
1043
1044 <t:titlepage-before t:side="recto">
1045 </t:titlepage-before>
1046
1047 <t:titlepage-before t:side="verso">
1048 </t:titlepage-before>
1049 </t:titlepage>
1050
1051 <t:titlepage t:element="list.of.tables" t:wrapper="fo:block">
1052 <t:titlepage-content t:side="recto">
1053 <title
1054 t:force="1"
1055 t:named-template="gentext"
1056 param:key="'ListofTables'"
1057 space-before.minimum="1em"
1058 space-before.optimum="1.5em"
1059 space-before.maximum="2em"
1060 space-after="0.5em"
1061 margin-left="{$title.margin.left}"
1062 font-size="&hsize3;"
1063 font-weight="bold"
1064 font-family="{$title.fontset}"/>
1065 </t:titlepage-content>
1066
1067 <t:titlepage-content t:side="verso">
1068 </t:titlepage-content>
1069
1070 <t:titlepage-separator>
1071 </t:titlepage-separator>
1072
1073 <t:titlepage-before t:side="recto">
1074 </t:titlepage-before>
1075
1076 <t:titlepage-before t:side="verso">
1077 </t:titlepage-before>
1078 </t:titlepage>
1079
1080 <t:titlepage t:element="list.of.figures" t:wrapper="fo:block">
1081 <t:titlepage-content t:side="recto">
1082 <title
1083 t:force="1"
1084 t:named-template="gentext"
1085 param:key="'ListofFigures'"
1086 space-before.minimum="1em"
1087 space-before.optimum="1.5em"
1088 space-before.maximum="2em"
1089 space-after="0.5em"
1090 margin-left="{$title.margin.left}"
1091 font-size="&hsize3;"
1092 font-weight="bold"
1093 font-family="{$title.fontset}"/>
1094 </t:titlepage-content>
1095
1096 <t:titlepage-content t:side="verso">
1097 </t:titlepage-content>
1098
1099 <t:titlepage-separator>
1100 </t:titlepage-separator>
1101
1102 <t:titlepage-before t:side="recto">
1103 </t:titlepage-before>
1104
1105 <t:titlepage-before t:side="verso">
1106 </t:titlepage-before>
1107 </t:titlepage>
1108
1109 <t:titlepage t:element="list.of.examples" t:wrapper="fo:block">
1110 <t:titlepage-content t:side="recto">
1111 <title
1112 t:force="1"
1113 t:named-template="gentext"
1114 param:key="'ListofExamples'"
1115 space-before.minimum="1em"
1116 space-before.optimum="1.5em"
1117 space-before.maximum="2em"
1118 space-after="0.5em"
1119 margin-left="{$title.margin.left}"
1120 font-size="&hsize3;"
1121 font-weight="bold"
1122 font-family="{$title.fontset}"/>
1123 </t:titlepage-content>
1124
1125 <t:titlepage-content t:side="verso">
1126 </t:titlepage-content>
1127
1128 <t:titlepage-separator>
1129 </t:titlepage-separator>
1130
1131 <t:titlepage-before t:side="recto">
1132 </t:titlepage-before>
1133
1134 <t:titlepage-before t:side="verso">
1135 </t:titlepage-before>
1136 </t:titlepage>
1137
1138 <t:titlepage t:element="list.of.equations" t:wrapper="fo:block">
1139 <t:titlepage-content t:side="recto">
1140 <title
1141 t:force="1"
1142 t:named-template="gentext"
1143 param:key="'ListofEquations'"
1144 space-before.minimum="1em"
1145 space-before.optimum="1.5em"
1146 space-before.maximum="2em"
1147 space-after="0.5em"
1148 margin-left="{$title.margin.left}"
1149 font-size="&hsize3;"
1150 font-weight="bold"
1151 font-family="{$title.fontset}"/>
1152 </t:titlepage-content>
1153
1154 <t:titlepage-content t:side="verso">
1155 </t:titlepage-content>
1156
1157 <t:titlepage-separator>
1158 </t:titlepage-separator>
1159
1160 <t:titlepage-before t:side="recto">
1161 </t:titlepage-before>
1162
1163 <t:titlepage-before t:side="verso">
1164 </t:titlepage-before>
1165 </t:titlepage>
1166
1167 <t:titlepage t:element="list.of.procedures" t:wrapper="fo:block">
1168 <t:titlepage-content t:side="recto">
1169 <title
1170 t:force="1"
1171 t:named-template="gentext"
1172 param:key="'ListofProcedures'"
1173 space-before.minimum="1em"
1174 space-before.optimum="1.5em"
1175 space-before.maximum="2em"
1176 space-after="0.5em"
1177 margin-left="{$title.margin.left}"
1178 font-size="&hsize3;"
1179 font-weight="bold"
1180 font-family="{$title.fontset}"/>
1181 </t:titlepage-content>
1182
1183 <t:titlepage-content t:side="verso">
1184 </t:titlepage-content>
1185
1186 <t:titlepage-separator>
1187 </t:titlepage-separator>
1188
1189 <t:titlepage-before t:side="recto">
1190 </t:titlepage-before>
1191
1192 <t:titlepage-before t:side="verso">
1193 </t:titlepage-before>
1194 </t:titlepage>
1195
1196 <t:titlepage t:element="list.of.unknowns" t:wrapper="fo:block">
1197 <t:titlepage-content t:side="recto">
1198 <title
1199 t:force="1"
1200 t:named-template="gentext"
1201 param:key="'ListofUnknown'"
1202 space-before.minimum="1em"
1203 space-before.optimum="1.5em"
1204 space-before.maximum="2em"
1205 space-after="0.5em"
1206 margin-left="{$title.margin.left}"
1207 font-size="&hsize3;"
1208 font-weight="bold"
1209 font-family="{$title.fontset}"/>
1210 </t:titlepage-content>
1211
1212 <t:titlepage-content t:side="verso">
1213 </t:titlepage-content>
1214
1215 <t:titlepage-separator>
1216 </t:titlepage-separator>
1217
1218 <t:titlepage-before t:side="recto">
1219 </t:titlepage-before>
1220
1221 <t:titlepage-before t:side="verso">
1222 </t:titlepage-before>
1223 </t:titlepage>
1224
1225<!-- ==================================================================== -->
1226
1227</t:templates>
diff --git a/documentation/template/yocto-project-qs.png b/documentation/template/yocto-project-qs.png
new file mode 100644
index 0000000000..333442e0d6
--- /dev/null
+++ b/documentation/template/yocto-project-qs.png
Binary files differ
diff --git a/documentation/tools/eclipse-help.sed b/documentation/tools/eclipse-help.sed
new file mode 100644
index 0000000000..38690bc938
--- /dev/null
+++ b/documentation/tools/eclipse-help.sed
@@ -0,0 +1,18 @@
1# Processes poky-ref-manual and yocto-project-qs manual (<word>-<word>-<word> style)
2# For example:
3# "ulink" href="http://www.yoctoproject.org/docs/1.3/poky-ref-manual/poky-ref-manual.html#faq"
4# -> "link" href="../poky-ref-manual/faq.html"
5s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/[^\/]*\/\([a-z]*-[a-z]*-[a-z]*\)\/[a-z]*-[a-z]*-[a-z]*.html#\([^\"]*\)\"/\"link\" href=\"\.\.\/\1\/\2.html\"/g
6
7# Processes all other manuals (<word>-<word> style)
8# For example:
9# "ulink" href="http://www.yoctoproject.org/docs/1.3/kernel-manual/kernel-manual.html#faq"
10# -> "link" href="../kernel-manual/faq.html"
11s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/[^\/]*\/\([a-z]*-[a-z]*\)\/[a-z]*-[a-z]*.html#\([^\"]*\)\"/\"link\" href=\"\.\.\/\1\/\2.html\"/g
12
13# Process cases where just an external manual is referenced without an id anchor
14# For example:
15# "ulink" href="http://www.yoctoproject.org/docs/1.3/kernel-manual/kernel-manual.html
16# -> "link" href="../kernel-manual/index.html"
17s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/[^\/]*\/\([a-z]*-[a-z]*-[a-z]*\)\/[a-z]*-[a-z]*-[a-z]*.html\"/\"link\" href=\"\.\.\/\1\/index.html\"/g
18s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/[^\/]*\/\([a-z]*-[a-z]*\)\/[a-z]*-[a-z]*.html\"/\"link\" href=\"\.\.\/\1\/index.html\"/g
diff --git a/documentation/tools/mega-manual.sed b/documentation/tools/mega-manual.sed
new file mode 100644
index 0000000000..da0d9c3559
--- /dev/null
+++ b/documentation/tools/mega-manual.sed
@@ -0,0 +1,13 @@
1# Processes ref-manual and yocto-project-qs manual (<word>-<word>-<word> style)
2s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6\/[a-z]*-[a-z]*-[a-z]*\/[a-z]*-[a-z]*-[a-z]*.html#/\"link\" href=\"#/g
3
4# Processes all other manuals (<word>-<word> style)
5s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6\/[a-z]*-[a-z]*\/[a-z]*-[a-z]*.html#/\"link\" href=\"#/g
6
7# Process cases where just an external manual is referenced without an id anchor
8s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6\/yocto-project-qs\/yocto-project-qs.html\" target=\"_top\">Yocto Project Quick Start<\/a>/Yocto Project Quick Start/g
9s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6\/dev-manual\/dev-manual.html\" target=\"_top\">Yocto Project Development Manual<\/a>/Yocto Project Development Manual/g
10s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6\/adt-manual\/adt-manual.html\" target=\"_top\">Yocto Project Application Developer's Guide<\/a>/Yocto Project Application Developer's Guide/g
11s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6\/bsp-guide\/bsp-guide.html\" target=\"_top\">Yocto Project Board Support Package (BSP) Developer's Guide<\/a>/Yocto Project Board Support Package (BSP) Developer's Guide/g
12s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6\/kernel-dev\/kernel-dev.html\" target=\"_top\">Yocto Project Linux Kernel Development Manual<\/a>/Yocto Project Linux Kernel Development Manual/g
13s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.6\/ref-manual\/ref-manual.html\" target=\"_top\">Yocto Project Reference Manual<\/a>/Yocto Project Reference Manual/g
diff --git a/documentation/tools/poky-docbook-to-pdf b/documentation/tools/poky-docbook-to-pdf
new file mode 100755
index 0000000000..f55fd278af
--- /dev/null
+++ b/documentation/tools/poky-docbook-to-pdf
@@ -0,0 +1,51 @@
1#!/bin/sh
2
3if [ -z "$1" -o -z "$2" ]; then
4 echo "usage: [-v] $0 <docbook file> <templatedir>"
5 echo
6 echo "*NOTE* you need xsltproc, fop and nwalsh docbook stylesheets"
7 echo " installed for this to work!"
8 echo
9 exit 0
10fi
11
12FO=`echo $1 | sed s/.xml/.fo/` || exit 1
13PDF=`echo $1 | sed s/.xml/.pdf/` || exit 1
14TEMPLATEDIR=$2
15
16##
17# These URI should be rewritten by your distribution's xml catalog to
18# match your localy installed XSL stylesheets.
19XSL_BASE_URI="http://docbook.sourceforge.net/release/xsl/current"
20
21# Creates a temporary XSL stylesheet based on titlepage.xsl
22xsltproc -o /tmp/titlepage.xsl \
23 --xinclude \
24 $XSL_BASE_URI/template/titlepage.xsl \
25 $TEMPLATEDIR/titlepage.templates.xml || exit 1
26
27# Creates the file needed for FOP
28xsltproc --xinclude \
29 --stringparam hyphenate false \
30 --stringparam formal.title.placement "figure after" \
31 --stringparam ulink.show 1 \
32 --stringparam body.font.master 9 \
33 --stringparam title.font.master 11 \
34 --stringparam draft.watermark.image "$TEMPLATEDIR/draft.png" \
35 --stringparam chapter.autolabel 1 \
36 --stringparam appendix.autolabel A \
37 --stringparam section.autolabel 1 \
38 --stringparam section.label.includes.component.label 1 \
39 --output $FO \
40 $TEMPLATEDIR/poky-db-pdf.xsl \
41 $1 || exit 1
42
43# Invokes the Java version of FOP. Uses the additional configuration file common/fop-config.xml
44fop -c $TEMPLATEDIR/fop-config.xml -fo $FO -pdf $PDF || exit 1
45
46rm -f $FO
47rm -f /tmp/titlepage.xsl
48
49echo
50echo " #### Success! $PDF ready. ####"
51echo
diff --git a/documentation/yocto-project-qs/figures/building-an-image.png b/documentation/yocto-project-qs/figures/building-an-image.png
new file mode 100755
index 0000000000..1fbea5ab00
--- /dev/null
+++ b/documentation/yocto-project-qs/figures/building-an-image.png
Binary files differ
diff --git a/documentation/yocto-project-qs/figures/using-a-pre-built-image.png b/documentation/yocto-project-qs/figures/using-a-pre-built-image.png
new file mode 100644
index 0000000000..b03130d123
--- /dev/null
+++ b/documentation/yocto-project-qs/figures/using-a-pre-built-image.png
Binary files differ
diff --git a/documentation/yocto-project-qs/figures/yocto-environment.png b/documentation/yocto-project-qs/figures/yocto-environment.png
new file mode 100644
index 0000000000..82b7a55a35
--- /dev/null
+++ b/documentation/yocto-project-qs/figures/yocto-environment.png
Binary files differ
diff --git a/documentation/yocto-project-qs/figures/yocto-project-transp.png b/documentation/yocto-project-qs/figures/yocto-project-transp.png
new file mode 100755
index 0000000000..31d2b147fd
--- /dev/null
+++ b/documentation/yocto-project-qs/figures/yocto-project-transp.png
Binary files differ
diff --git a/documentation/yocto-project-qs/qs-style.css b/documentation/yocto-project-qs/qs-style.css
new file mode 100644
index 0000000000..234e432a74
--- /dev/null
+++ b/documentation/yocto-project-qs/qs-style.css
@@ -0,0 +1,979 @@
1/*
2 Generic XHTML / DocBook XHTML CSS Stylesheet.
3
4 Browser wrangling and typographic design by
5 Oyvind Kolas / pippin@gimp.org
6
7 Customised for Poky by
8 Matthew Allum / mallum@o-hand.com
9
10 Thanks to:
11 Liam R. E. Quin
12 William Skaggs
13 Jakub Steiner
14
15 Structure
16 ---------
17
18 The stylesheet is divided into the following sections:
19
20 Positioning
21 Margins, paddings, width, font-size, clearing.
22 Decorations
23 Borders, style
24 Colors
25 Colors
26 Graphics
27 Graphical backgrounds
28 Nasty IE tweaks
29 Workarounds needed to make it work in internet explorer,
30 currently makes the stylesheet non validating, but up until
31 this point it is validating.
32 Mozilla extensions
33 Transparency for footer
34 Rounded corners on boxes
35
36*/
37
38
39 /*************** /
40 / Positioning /
41/ ***************/
42
43body {
44 font-family: Verdana, Sans, sans-serif;
45
46 min-width: 640px;
47 width: 80%;
48 margin: 0em auto;
49 padding: 2em 5em 5em 5em;
50 color: #333;
51}
52
53h1,h2,h3,h4,h5,h6,h7 {
54 font-family: Arial, Sans;
55 color: #00557D;
56 clear: both;
57}
58
59h1 {
60 font-size: 2em;
61 text-align: left;
62 padding: 0em 0em 0em 0em;
63 margin: 2em 0em 0em 0em;
64}
65
66h2.subtitle {
67 margin: 0.10em 0em 3.0em 0em;
68 padding: 0em 0em 0em 0em;
69 font-size: 1.8em;
70 padding-left: 20%;
71 font-weight: normal;
72 font-style: italic;
73}
74
75h2 {
76 margin: 2em 0em 0.66em 0em;
77 padding: 0.5em 0em 0em 0em;
78 font-size: 1.5em;
79 font-weight: bold;
80}
81
82h3.subtitle {
83 margin: 0em 0em 1em 0em;
84 padding: 0em 0em 0em 0em;
85 font-size: 142.14%;
86 text-align: right;
87}
88
89h3 {
90 margin: 1em 0em 0.5em 0em;
91 padding: 1em 0em 0em 0em;
92 font-size: 140%;
93 font-weight: bold;
94}
95
96h4 {
97 margin: 1em 0em 0.5em 0em;
98 padding: 1em 0em 0em 0em;
99 font-size: 120%;
100 font-weight: bold;
101}
102
103h5 {
104 margin: 1em 0em 0.5em 0em;
105 padding: 1em 0em 0em 0em;
106 font-size: 110%;
107 font-weight: bold;
108}
109
110h6 {
111 margin: 1em 0em 0em 0em;
112 padding: 1em 0em 0em 0em;
113 font-size: 110%;
114 font-weight: bold;
115}
116
117.authorgroup {
118 background-color: transparent;
119 background-repeat: no-repeat;
120 padding-top: 256px;
121 background-image: url("../figures/yocto-project-bw.png");
122 background-position: top;
123 margin-top: -256px;
124 padding-right: 50px;
125 margin-left: 50px;
126 text-align: center;
127 width: 600px;
128}
129
130h3.author {
131 margin: 0em 0me 0em 0em;
132 padding: 0em 0em 0em 0em;
133 font-weight: normal;
134 font-size: 100%;
135 color: #333;
136 clear: both;
137}
138
139.author tt.email {
140 font-size: 66%;
141}
142
143.titlepage hr {
144 width: 0em;
145 clear: both;
146}
147
148.revhistory {
149 padding-top: 2em;
150 clear: both;
151}
152
153.toc,
154.list-of-tables,
155.list-of-examples,
156.list-of-figures {
157 padding: 1.33em 0em 2.5em 0em;
158 color: #00557D;
159}
160
161.toc p,
162.list-of-tables p,
163.list-of-figures p,
164.list-of-examples p {
165 padding: 0em 0em 0em 0em;
166 padding: 0em 0em 0.3em;
167 margin: 1.5em 0em 0em 0em;
168}
169
170.toc p b,
171.list-of-tables p b,
172.list-of-figures p b,
173.list-of-examples p b{
174 font-size: 100.0%;
175 font-weight: bold;
176}
177
178.toc dl,
179.list-of-tables dl,
180.list-of-figures dl,
181.list-of-examples dl {
182 margin: 0em 0em 0.5em 0em;
183 padding: 0em 0em 0em 0em;
184}
185
186.toc dt {
187 margin: 0em 0em 0em 0em;
188 padding: 0em 0em 0em 0em;
189}
190
191.toc dd {
192 margin: 0em 0em 0em 2.6em;
193 padding: 0em 0em 0em 0em;
194}
195
196div.glossary dl,
197div.variablelist dl {
198}
199
200.glossary dl dt,
201.variablelist dl dt,
202.variablelist dl dt span.term {
203 font-weight: normal;
204 width: 20em;
205 text-align: right;
206}
207
208.variablelist dl dt {
209 margin-top: 0.5em;
210}
211
212.glossary dl dd,
213.variablelist dl dd {
214 margin-top: -1em;
215 margin-left: 25.5em;
216}
217
218.glossary dd p,
219.variablelist dd p {
220 margin-top: 0em;
221 margin-bottom: 1em;
222}
223
224
225div.calloutlist table td {
226 padding: 0em 0em 0em 0em;
227 margin: 0em 0em 0em 0em;
228}
229
230div.calloutlist table td p {
231 margin-top: 0em;
232 margin-bottom: 1em;
233}
234
235div p.copyright {
236 text-align: left;
237}
238
239div.legalnotice p.legalnotice-title {
240 margin-bottom: 0em;
241}
242
243p {
244 line-height: 1.5em;
245 margin-top: 0em;
246
247}
248
249dl {
250 padding-top: 0em;
251}
252
253hr {
254 border: solid 1px;
255}
256
257
258.mediaobject,
259.mediaobjectco {
260 text-align: center;
261}
262
263img {
264 border: none;
265}
266
267ul {
268 padding: 0em 0em 0em 1.5em;
269}
270
271ul li {
272 padding: 0em 0em 0em 0em;
273}
274
275ul li p {
276 text-align: left;
277}
278
279table {
280 width :100%;
281}
282
283th {
284 padding: 0.25em;
285 text-align: left;
286 font-weight: normal;
287 vertical-align: top;
288}
289
290td {
291 padding: 0.25em;
292 vertical-align: top;
293}
294
295p a[id] {
296 margin: 0px;
297 padding: 0px;
298 display: inline;
299 background-image: none;
300}
301
302a {
303 text-decoration: underline;
304 color: #444;
305}
306
307pre {
308 overflow: auto;
309}
310
311a:hover {
312 text-decoration: underline;
313 /*font-weight: bold;*/
314}
315
316
317div.informalfigure,
318div.informalexample,
319div.informaltable,
320div.figure,
321div.table,
322div.example {
323 margin: 1em 0em;
324 padding: 1em;
325 page-break-inside: avoid;
326}
327
328
329div.informalfigure p.title b,
330div.informalexample p.title b,
331div.informaltable p.title b,
332div.figure p.title b,
333div.example p.title b,
334div.table p.title b{
335 padding-top: 0em;
336 margin-top: 0em;
337 font-size: 100%;
338 font-weight: normal;
339}
340
341.mediaobject .caption,
342.mediaobject .caption p {
343 text-align: center;
344 font-size: 80%;
345 padding-top: 0.5em;
346 padding-bottom: 0.5em;
347}
348
349.epigraph {
350 padding-left: 55%;
351 margin-bottom: 1em;
352}
353
354.epigraph p {
355 text-align: left;
356}
357
358.epigraph .quote {
359 font-style: italic;
360}
361.epigraph .attribution {
362 font-style: normal;
363 text-align: right;
364}
365
366span.application {
367 font-style: italic;
368}
369
370.programlisting {
371 font-family: monospace;
372 font-size: 80%;
373 white-space: pre;
374 margin: 1.33em 0em;
375 padding: 1.33em;
376}
377
378.tip,
379.warning,
380.caution,
381.note {
382 margin-top: 1em;
383 margin-bottom: 1em;
384
385}
386
387/* force full width of table within div */
388.tip table,
389.warning table,
390.caution table,
391.note table {
392 border: none;
393 width: 100%;
394}
395
396
397.tip table th,
398.warning table th,
399.caution table th,
400.note table th {
401 padding: 0.8em 0.0em 0.0em 0.0em;
402 margin : 0em 0em 0em 0em;
403}
404
405.tip p,
406.warning p,
407.caution p,
408.note p {
409 margin-top: 0.5em;
410 margin-bottom: 0.5em;
411 padding-right: 1em;
412 text-align: left;
413}
414
415.acronym {
416 text-transform: uppercase;
417}
418
419b.keycap,
420.keycap {
421 padding: 0.09em 0.3em;
422 margin: 0em;
423}
424
425.itemizedlist li {
426 clear: none;
427}
428
429.filename {
430 font-size: medium;
431 font-family: Courier, monospace;
432}
433
434
435div.navheader, div.heading{
436 position: absolute;
437 left: 0em;
438 top: 0em;
439 width: 100%;
440 background-color: #cdf;
441 width: 100%;
442}
443
444div.navfooter, div.footing{
445 position: fixed;
446 left: 0em;
447 bottom: 0em;
448 background-color: #eee;
449 width: 100%;
450}
451
452
453div.navheader td,
454div.navfooter td {
455 font-size: 66%;
456}
457
458div.navheader table th {
459 /*font-family: Georgia, Times, serif;*/
460 /*font-size: x-large;*/
461 font-size: 80%;
462}
463
464div.navheader table {
465 border-left: 0em;
466 border-right: 0em;
467 border-top: 0em;
468 width: 100%;
469}
470
471div.navfooter table {
472 border-left: 0em;
473 border-right: 0em;
474 border-bottom: 0em;
475 width: 100%;
476}
477
478div.navheader table td a,
479div.navfooter table td a {
480 color: #777;
481 text-decoration: none;
482}
483
484/* normal text in the footer */
485div.navfooter table td {
486 color: black;
487}
488
489div.navheader table td a:visited,
490div.navfooter table td a:visited {
491 color: #444;
492}
493
494
495/* links in header and footer */
496div.navheader table td a:hover,
497div.navfooter table td a:hover {
498 text-decoration: underline;
499 background-color: transparent;
500 color: #33a;
501}
502
503div.navheader hr,
504div.navfooter hr {
505 display: none;
506}
507
508
509.qandaset tr.question td p {
510 margin: 0em 0em 1em 0em;
511 padding: 0em 0em 0em 0em;
512}
513
514.qandaset tr.answer td p {
515 margin: 0em 0em 1em 0em;
516 padding: 0em 0em 0em 0em;
517}
518.answer td {
519 padding-bottom: 1.5em;
520}
521
522.emphasis {
523 font-weight: bold;
524}
525
526
527 /************* /
528 / decorations /
529/ *************/
530
531.titlepage {
532}
533
534.part .title {
535}
536
537.subtitle {
538 border: none;
539}
540
541/*
542h1 {
543 border: none;
544}
545
546h2 {
547 border-top: solid 0.2em;
548 border-bottom: solid 0.06em;
549}
550
551h3 {
552 border-top: 0em;
553 border-bottom: solid 0.06em;
554}
555
556h4 {
557 border: 0em;
558 border-bottom: solid 0.06em;
559}
560
561h5 {
562 border: 0em;
563}
564*/
565
566.programlisting {
567 border: solid 1px;
568}
569
570div.figure,
571div.table,
572div.informalfigure,
573div.informaltable,
574div.informalexample,
575div.example {
576 border: 1px solid;
577}
578
579
580
581.tip,
582.warning,
583.caution,
584.note {
585 border: 1px solid;
586}
587
588.tip table th,
589.warning table th,
590.caution table th,
591.note table th {
592 border-bottom: 1px solid;
593}
594
595.question td {
596 border-top: 1px solid black;
597}
598
599.answer {
600}
601
602
603b.keycap,
604.keycap {
605 border: 1px solid;
606}
607
608
609div.navheader, div.heading{
610 border-bottom: 1px solid;
611}
612
613
614div.navfooter, div.footing{
615 border-top: 1px solid;
616}
617
618 /********* /
619 / colors /
620/ *********/
621
622body {
623 color: #333;
624 background: white;
625}
626
627a {
628 background: transparent;
629}
630
631a:hover {
632 background-color: #dedede;
633}
634
635
636h1,
637h2,
638h3,
639h4,
640h5,
641h6,
642h7,
643h8 {
644 background-color: transparent;
645}
646
647hr {
648 border-color: #aaa;
649}
650
651
652.tip, .warning, .caution, .note {
653 border-color: #fff;
654}
655
656
657.tip table th,
658.warning table th,
659.caution table th,
660.note table th {
661 border-bottom-color: #fff;
662}
663
664
665.warning {
666 background-color: #f0f0f2;
667}
668
669.caution {
670 background-color: #f0f0f2;
671}
672
673.tip {
674 background-color: #f0f0f2;
675}
676
677.note {
678 background-color: #f0f0f2;
679}
680
681.glossary dl dt,
682.variablelist dl dt,
683.variablelist dl dt span.term {
684 color: #044;
685}
686
687div.figure,
688div.table,
689div.example,
690div.informalfigure,
691div.informaltable,
692div.informalexample {
693 border-color: #aaa;
694}
695
696pre.programlisting {
697 color: black;
698 background-color: #fff;
699 border-color: #aaa;
700 border-width: 2px;
701}
702
703.guimenu,
704.guilabel,
705.guimenuitem {
706 background-color: #eee;
707}
708
709
710b.keycap,
711.keycap {
712 background-color: #eee;
713 border-color: #999;
714}
715
716
717div.navheader {
718 border-color: black;
719}
720
721
722div.navfooter {
723 border-color: black;
724}
725
726
727 /*********** /
728 / graphics /
729/ ***********/
730
731/*
732body {
733 background-image: url("images/body_bg.jpg");
734 background-attachment: fixed;
735}
736
737.navheader,
738.note,
739.tip {
740 background-image: url("images/note_bg.jpg");
741 background-attachment: fixed;
742}
743
744.warning,
745.caution {
746 background-image: url("images/warning_bg.jpg");
747 background-attachment: fixed;
748}
749
750.figure,
751.informalfigure,
752.example,
753.informalexample,
754.table,
755.informaltable {
756 background-image: url("images/figure_bg.jpg");
757 background-attachment: fixed;
758}
759
760*/
761h1,
762h2,
763h3,
764h4,
765h5,
766h6,
767h7{
768}
769
770/*
771Example of how to stick an image as part of the title.
772
773div.article .titlepage .title
774{
775 background-image: url("figures/white-on-black.png");
776 background-position: center;
777 background-repeat: repeat-x;
778}
779*/
780
781div.preface .titlepage .title,
782div.colophon .title,
783div.chapter .titlepage .title,
784div.article .titlepage .title
785{
786}
787
788div.section div.section .titlepage .title,
789div.sect2 .titlepage .title {
790 background: none;
791}
792
793
794h1.title {
795 background-color: transparent;
796 background-image: url("figures/yocto-project-bw.png");
797 background-repeat: no-repeat;
798 height: 256px;
799 text-indent: -9000px;
800 overflow:hidden;
801}
802
803h2.subtitle {
804 background-color: transparent;
805 text-indent: -9000px;
806 overflow:hidden;
807 width: 0px;
808 display: none;
809}
810
811 /*************************************** /
812 / pippin.gimp.org specific alterations /
813/ ***************************************/
814
815/*
816div.heading, div.navheader {
817 color: #777;
818 font-size: 80%;
819 padding: 0;
820 margin: 0;
821 text-align: left;
822 position: absolute;
823 top: 0px;
824 left: 0px;
825 width: 100%;
826 height: 50px;
827 background: url('/gfx/heading_bg.png') transparent;
828 background-repeat: repeat-x;
829 background-attachment: fixed;
830 border: none;
831}
832
833div.heading a {
834 color: #444;
835}
836
837div.footing, div.navfooter {
838 border: none;
839 color: #ddd;
840 font-size: 80%;
841 text-align:right;
842
843 width: 100%;
844 padding-top: 10px;
845 position: absolute;
846 bottom: 0px;
847 left: 0px;
848
849 background: url('/gfx/footing_bg.png') transparent;
850}
851*/
852
853
854
855 /****************** /
856 / nasty ie tweaks /
857/ ******************/
858
859/*
860div.heading, div.navheader {
861 width:expression(document.body.clientWidth + "px");
862}
863
864div.footing, div.navfooter {
865 width:expression(document.body.clientWidth + "px");
866 margin-left:expression("-5em");
867}
868body {
869 padding:expression("4em 5em 0em 5em");
870}
871*/
872
873 /**************************************** /
874 / mozilla vendor specific css extensions /
875/ ****************************************/
876/*
877div.navfooter, div.footing{
878 -moz-opacity: 0.8em;
879}
880
881div.figure,
882div.table,
883div.informalfigure,
884div.informaltable,
885div.informalexample,
886div.example,
887.tip,
888.warning,
889.caution,
890.note {
891 -moz-border-radius: 0.5em;
892}
893
894b.keycap,
895.keycap {
896 -moz-border-radius: 0.3em;
897}
898*/
899
900table tr td table tr td {
901 display: none;
902}
903
904
905hr {
906 display: none;
907}
908
909table {
910 border: 0em;
911}
912
913 .photo {
914 float: right;
915 margin-left: 1.5em;
916 margin-bottom: 1.5em;
917 margin-top: 0em;
918 max-width: 17em;
919 border: 1px solid gray;
920 padding: 3px;
921 background: white;
922}
923 .seperator {
924 padding-top: 2em;
925 clear: both;
926 }
927
928 #validators {
929 margin-top: 5em;
930 text-align: right;
931 color: #777;
932 }
933 @media print {
934 body {
935 font-size: 8pt;
936 }
937 .noprint {
938 display: none;
939 }
940 }
941
942
943.tip,
944.note {
945 background: #f0f0f2;
946 color: #333;
947 padding: 20px;
948 margin: 20px;
949}
950
951.tip h3,
952.note h3 {
953 padding: 0em;
954 margin: 0em;
955 font-size: 2em;
956 font-weight: bold;
957 color: #333;
958}
959
960.tip a,
961.note a {
962 color: #333;
963 text-decoration: underline;
964}
965
966.footnote {
967 font-size: small;
968 color: #333;
969}
970
971/* Changes the announcement text */
972.tip h3,
973.warning h3,
974.caution h3,
975.note h3 {
976 font-size:large;
977 color: #00557D;
978}
979
diff --git a/documentation/yocto-project-qs/yocto-project-qs-customization.xsl b/documentation/yocto-project-qs/yocto-project-qs-customization.xsl
new file mode 100644
index 0000000000..bd53ecb0f6
--- /dev/null
+++ b/documentation/yocto-project-qs/yocto-project-qs-customization.xsl
@@ -0,0 +1,9 @@
1<?xml version='1.0'?>
2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
3
4 <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl" />
5 <xsl:import href="yocto-project-qs-titlepage.xsl"/>
6
7 <xsl:param name="generate.toc" select="'article nop'"></xsl:param>
8 <xsl:param name="html.stylesheet" select="'qs-style.css'" />
9</xsl:stylesheet>
diff --git a/documentation/yocto-project-qs/yocto-project-qs-eclipse-customization.xsl b/documentation/yocto-project-qs/yocto-project-qs-eclipse-customization.xsl
new file mode 100644
index 0000000000..f8f8930f27
--- /dev/null
+++ b/documentation/yocto-project-qs/yocto-project-qs-eclipse-customization.xsl
@@ -0,0 +1,25 @@
1<?xml version='1.0'?>
2<xsl:stylesheet
3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4 xmlns="http://www.w3.org/1999/xhtml"
5 xmlns:fo="http://www.w3.org/1999/XSL/Format"
6 version="1.0">
7
8 <xsl:import
9 href="http://docbook.sourceforge.net/release/xsl/current/eclipse/eclipse3.xsl" />
10 <xsl:import href="yocto-project-qs-titlepage.xsl"/>
11
12 <xsl:param name="chunker.output.indent" select="'yes'"/>
13 <xsl:param name="chunk.quietly" select="1"/>
14 <xsl:param name="use.id.as.filename" select="1"/>
15 <xsl:param name="ulink.target" select="'_self'" />
16 <xsl:param name="base.dir" select="'html/yocto-project-qs/'"/>
17 <xsl:param name="chunk.section.depth" select="0"/>
18 <xsl:param name="html.stylesheet" select="'../book.css'"/>
19 <xsl:param name="eclipse.manifest" select="0"/>
20 <xsl:param name="create.plugin.xml" select="0"/>
21 <xsl:param name="suppress.navigation" select="1"/>
22 <xsl:param name="generate.index" select="0"/>
23 <xsl:param name="generate.toc" select="'article nop'"></xsl:param>
24 <xsl:param name="html.stylesheet" select="'style.css'" />
25</xsl:stylesheet>
diff --git a/documentation/yocto-project-qs/yocto-project-qs-titlepage.xsl b/documentation/yocto-project-qs/yocto-project-qs-titlepage.xsl
new file mode 100644
index 0000000000..a435ac77ab
--- /dev/null
+++ b/documentation/yocto-project-qs/yocto-project-qs-titlepage.xsl
@@ -0,0 +1,3820 @@
1<?xml version="1.0"?>
2
3<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" version="1.0" exclude-result-prefixes="exsl">
4
5<!-- This stylesheet was created by template/titlepage.xsl-->
6
7<xsl:template name="article.titlepage.recto">
8 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="articleinfo/abstract"/>
9 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="artheader/abstract"/>
10 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="info/abstract"/>
11 <xsl:choose>
12 <xsl:when test="articleinfo/title">
13 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="articleinfo/title"/>
14 </xsl:when>
15 <xsl:when test="artheader/title">
16 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="artheader/title"/>
17 </xsl:when>
18 <xsl:when test="info/title">
19 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="info/title"/>
20 </xsl:when>
21 <xsl:when test="title">
22 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="title"/>
23 </xsl:when>
24 </xsl:choose>
25
26 <xsl:choose>
27 <xsl:when test="articleinfo/subtitle">
28 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="articleinfo/subtitle"/>
29 </xsl:when>
30 <xsl:when test="artheader/subtitle">
31 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="artheader/subtitle"/>
32 </xsl:when>
33 <xsl:when test="info/subtitle">
34 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="info/subtitle"/>
35 </xsl:when>
36 <xsl:when test="subtitle">
37 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="subtitle"/>
38 </xsl:when>
39 </xsl:choose>
40
41 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="articleinfo/corpauthor"/>
42 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="artheader/corpauthor"/>
43 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="info/corpauthor"/>
44 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="articleinfo/authorgroup"/>
45 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="artheader/authorgroup"/>
46 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="info/authorgroup"/>
47 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="articleinfo/author"/>
48 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="artheader/author"/>
49 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="info/author"/>
50 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="articleinfo/othercredit"/>
51 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="artheader/othercredit"/>
52 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="info/othercredit"/>
53 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="articleinfo/releaseinfo"/>
54 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="artheader/releaseinfo"/>
55 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="info/releaseinfo"/>
56 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="articleinfo/copyright"/>
57 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="artheader/copyright"/>
58 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="info/copyright"/>
59 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="articleinfo/legalnotice"/>
60 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="artheader/legalnotice"/>
61 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="info/legalnotice"/>
62 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="articleinfo/pubdate"/>
63 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="artheader/pubdate"/>
64 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="info/pubdate"/>
65 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="articleinfo/revision"/>
66 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="artheader/revision"/>
67 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="info/revision"/>
68 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="articleinfo/revhistory"/>
69 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="artheader/revhistory"/>
70 <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="info/revhistory"/>
71</xsl:template>
72
73<xsl:template name="article.titlepage.verso">
74</xsl:template>
75
76<xsl:template name="article.titlepage.separator"><hr/>
77</xsl:template>
78
79<xsl:template name="article.titlepage.before.recto">
80</xsl:template>
81
82<xsl:template name="article.titlepage.before.verso">
83</xsl:template>
84
85<xsl:template name="article.titlepage">
86 <div class="titlepage">
87 <xsl:variable name="recto.content">
88 <xsl:call-template name="article.titlepage.before.recto"/>
89 <xsl:call-template name="article.titlepage.recto"/>
90 </xsl:variable>
91 <xsl:variable name="recto.elements.count">
92 <xsl:choose>
93 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
94 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
95 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
96 <xsl:otherwise>1</xsl:otherwise>
97 </xsl:choose>
98 </xsl:variable>
99 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
100 <div><xsl:copy-of select="$recto.content"/></div>
101 </xsl:if>
102 <xsl:variable name="verso.content">
103 <xsl:call-template name="article.titlepage.before.verso"/>
104 <xsl:call-template name="article.titlepage.verso"/>
105 </xsl:variable>
106 <xsl:variable name="verso.elements.count">
107 <xsl:choose>
108 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
109 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
110 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
111 <xsl:otherwise>1</xsl:otherwise>
112 </xsl:choose>
113 </xsl:variable>
114 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
115 <div><xsl:copy-of select="$verso.content"/></div>
116 </xsl:if>
117 <xsl:call-template name="article.titlepage.separator"/>
118 </div>
119</xsl:template>
120
121<xsl:template match="*" mode="article.titlepage.recto.mode">
122 <!-- if an element isn't found in this mode, -->
123 <!-- try the generic titlepage.mode -->
124 <xsl:apply-templates select="." mode="titlepage.mode"/>
125</xsl:template>
126
127<xsl:template match="*" mode="article.titlepage.verso.mode">
128 <!-- if an element isn't found in this mode, -->
129 <!-- try the generic titlepage.mode -->
130 <xsl:apply-templates select="." mode="titlepage.mode"/>
131</xsl:template>
132
133<xsl:template match="abstract" mode="article.titlepage.recto.auto.mode">
134<div xsl:use-attribute-sets="article.titlepage.recto.style">
135 <xsl:call-template name="anchor"/>
136 <xsl:apply-templates/>
137<!-- orignally generated content -->
138<!-- <xsl:apply-templates select="." mode="article.titlepage.recto.mode"/> -->
139</div>
140</xsl:template>
141
142<xsl:template match="title" mode="article.titlepage.recto.auto.mode">
143<div xsl:use-attribute-sets="article.titlepage.recto.style">
144<xsl:apply-templates select="." mode="article.titlepage.recto.mode"/>
145</div>
146</xsl:template>
147
148<xsl:template match="subtitle" mode="article.titlepage.recto.auto.mode">
149<div xsl:use-attribute-sets="article.titlepage.recto.style">
150<xsl:apply-templates select="." mode="article.titlepage.recto.mode"/>
151</div>
152</xsl:template>
153
154<xsl:template match="corpauthor" mode="article.titlepage.recto.auto.mode">
155<div xsl:use-attribute-sets="article.titlepage.recto.style">
156<xsl:apply-templates select="." mode="article.titlepage.recto.mode"/>
157</div>
158</xsl:template>
159
160<xsl:template match="authorgroup" mode="article.titlepage.recto.auto.mode">
161<div xsl:use-attribute-sets="article.titlepage.recto.style">
162<xsl:apply-templates select="." mode="article.titlepage.recto.mode"/>
163</div>
164</xsl:template>
165
166<xsl:template match="author" mode="article.titlepage.recto.auto.mode">
167<div xsl:use-attribute-sets="article.titlepage.recto.style">
168<xsl:apply-templates select="." mode="article.titlepage.recto.mode"/>
169</div>
170</xsl:template>
171
172<xsl:template match="othercredit" mode="article.titlepage.recto.auto.mode">
173<div xsl:use-attribute-sets="article.titlepage.recto.style">
174<xsl:apply-templates select="." mode="article.titlepage.recto.mode"/>
175</div>
176</xsl:template>
177
178<xsl:template match="releaseinfo" mode="article.titlepage.recto.auto.mode">
179<div xsl:use-attribute-sets="article.titlepage.recto.style">
180<xsl:apply-templates select="." mode="article.titlepage.recto.mode"/>
181</div>
182</xsl:template>
183
184<xsl:template match="copyright" mode="article.titlepage.recto.auto.mode">
185<div xsl:use-attribute-sets="article.titlepage.recto.style">
186<xsl:apply-templates select="." mode="article.titlepage.recto.mode"/>
187</div>
188</xsl:template>
189
190<xsl:template match="legalnotice" mode="article.titlepage.recto.auto.mode">
191<div xsl:use-attribute-sets="article.titlepage.recto.style">
192<xsl:apply-templates select="." mode="article.titlepage.recto.mode"/>
193</div>
194</xsl:template>
195
196<xsl:template match="pubdate" mode="article.titlepage.recto.auto.mode">
197<div xsl:use-attribute-sets="article.titlepage.recto.style">
198<xsl:apply-templates select="." mode="article.titlepage.recto.mode"/>
199</div>
200</xsl:template>
201
202<xsl:template match="revision" mode="article.titlepage.recto.auto.mode">
203<div xsl:use-attribute-sets="article.titlepage.recto.style">
204<xsl:apply-templates select="." mode="article.titlepage.recto.mode"/>
205</div>
206</xsl:template>
207
208<xsl:template match="revhistory" mode="article.titlepage.recto.auto.mode">
209<div xsl:use-attribute-sets="article.titlepage.recto.style">
210<xsl:apply-templates select="." mode="article.titlepage.recto.mode"/>
211</div>
212</xsl:template>
213
214<xsl:template name="set.titlepage.recto">
215 <xsl:choose>
216 <xsl:when test="setinfo/title">
217 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="setinfo/title"/>
218 </xsl:when>
219 <xsl:when test="info/title">
220 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="info/title"/>
221 </xsl:when>
222 <xsl:when test="title">
223 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="title"/>
224 </xsl:when>
225 </xsl:choose>
226
227 <xsl:choose>
228 <xsl:when test="setinfo/subtitle">
229 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="setinfo/subtitle"/>
230 </xsl:when>
231 <xsl:when test="info/subtitle">
232 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="info/subtitle"/>
233 </xsl:when>
234 <xsl:when test="subtitle">
235 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="subtitle"/>
236 </xsl:when>
237 </xsl:choose>
238
239 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="setinfo/corpauthor"/>
240 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="info/corpauthor"/>
241 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="setinfo/authorgroup"/>
242 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="info/authorgroup"/>
243 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="setinfo/author"/>
244 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="info/author"/>
245 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="setinfo/othercredit"/>
246 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="info/othercredit"/>
247 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="setinfo/releaseinfo"/>
248 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="info/releaseinfo"/>
249 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="setinfo/copyright"/>
250 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="info/copyright"/>
251 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="setinfo/legalnotice"/>
252 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="info/legalnotice"/>
253 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="setinfo/pubdate"/>
254 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="info/pubdate"/>
255 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="setinfo/revision"/>
256 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="info/revision"/>
257 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="setinfo/revhistory"/>
258 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="info/revhistory"/>
259 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="setinfo/abstract"/>
260 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" select="info/abstract"/>
261</xsl:template>
262
263<xsl:template name="set.titlepage.verso">
264</xsl:template>
265
266<xsl:template name="set.titlepage.separator"><hr/>
267</xsl:template>
268
269<xsl:template name="set.titlepage.before.recto">
270</xsl:template>
271
272<xsl:template name="set.titlepage.before.verso">
273</xsl:template>
274
275<xsl:template name="set.titlepage">
276 <div class="titlepage">
277 <xsl:variable name="recto.content">
278 <xsl:call-template name="set.titlepage.before.recto"/>
279 <xsl:call-template name="set.titlepage.recto"/>
280 </xsl:variable>
281 <xsl:variable name="recto.elements.count">
282 <xsl:choose>
283 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
284 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
285 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
286 <xsl:otherwise>1</xsl:otherwise>
287 </xsl:choose>
288 </xsl:variable>
289 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
290 <div><xsl:copy-of select="$recto.content"/></div>
291 </xsl:if>
292 <xsl:variable name="verso.content">
293 <xsl:call-template name="set.titlepage.before.verso"/>
294 <xsl:call-template name="set.titlepage.verso"/>
295 </xsl:variable>
296 <xsl:variable name="verso.elements.count">
297 <xsl:choose>
298 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
299 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
300 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
301 <xsl:otherwise>1</xsl:otherwise>
302 </xsl:choose>
303 </xsl:variable>
304 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
305 <div><xsl:copy-of select="$verso.content"/></div>
306 </xsl:if>
307 <xsl:call-template name="set.titlepage.separator"/>
308 </div>
309</xsl:template>
310
311<xsl:template match="*" mode="set.titlepage.recto.mode">
312 <!-- if an element isn't found in this mode, -->
313 <!-- try the generic titlepage.mode -->
314 <xsl:apply-templates select="." mode="titlepage.mode"/>
315</xsl:template>
316
317<xsl:template match="*" mode="set.titlepage.verso.mode">
318 <!-- if an element isn't found in this mode, -->
319 <!-- try the generic titlepage.mode -->
320 <xsl:apply-templates select="." mode="titlepage.mode"/>
321</xsl:template>
322
323<xsl:template match="title" mode="set.titlepage.recto.auto.mode">
324<div xsl:use-attribute-sets="set.titlepage.recto.style">
325<xsl:apply-templates select="." mode="set.titlepage.recto.mode"/>
326</div>
327</xsl:template>
328
329<xsl:template match="subtitle" mode="set.titlepage.recto.auto.mode">
330<div xsl:use-attribute-sets="set.titlepage.recto.style">
331<xsl:apply-templates select="." mode="set.titlepage.recto.mode"/>
332</div>
333</xsl:template>
334
335<xsl:template match="corpauthor" mode="set.titlepage.recto.auto.mode">
336<div xsl:use-attribute-sets="set.titlepage.recto.style">
337<xsl:apply-templates select="." mode="set.titlepage.recto.mode"/>
338</div>
339</xsl:template>
340
341<xsl:template match="authorgroup" mode="set.titlepage.recto.auto.mode">
342<div xsl:use-attribute-sets="set.titlepage.recto.style">
343<xsl:apply-templates select="." mode="set.titlepage.recto.mode"/>
344</div>
345</xsl:template>
346
347<xsl:template match="author" mode="set.titlepage.recto.auto.mode">
348<div xsl:use-attribute-sets="set.titlepage.recto.style">
349<xsl:apply-templates select="." mode="set.titlepage.recto.mode"/>
350</div>
351</xsl:template>
352
353<xsl:template match="othercredit" mode="set.titlepage.recto.auto.mode">
354<div xsl:use-attribute-sets="set.titlepage.recto.style">
355<xsl:apply-templates select="." mode="set.titlepage.recto.mode"/>
356</div>
357</xsl:template>
358
359<xsl:template match="releaseinfo" mode="set.titlepage.recto.auto.mode">
360<div xsl:use-attribute-sets="set.titlepage.recto.style">
361<xsl:apply-templates select="." mode="set.titlepage.recto.mode"/>
362</div>
363</xsl:template>
364
365<xsl:template match="copyright" mode="set.titlepage.recto.auto.mode">
366<div xsl:use-attribute-sets="set.titlepage.recto.style">
367<xsl:apply-templates select="." mode="set.titlepage.recto.mode"/>
368</div>
369</xsl:template>
370
371<xsl:template match="legalnotice" mode="set.titlepage.recto.auto.mode">
372<div xsl:use-attribute-sets="set.titlepage.recto.style">
373<xsl:apply-templates select="." mode="set.titlepage.recto.mode"/>
374</div>
375</xsl:template>
376
377<xsl:template match="pubdate" mode="set.titlepage.recto.auto.mode">
378<div xsl:use-attribute-sets="set.titlepage.recto.style">
379<xsl:apply-templates select="." mode="set.titlepage.recto.mode"/>
380</div>
381</xsl:template>
382
383<xsl:template match="revision" mode="set.titlepage.recto.auto.mode">
384<div xsl:use-attribute-sets="set.titlepage.recto.style">
385<xsl:apply-templates select="." mode="set.titlepage.recto.mode"/>
386</div>
387</xsl:template>
388
389<xsl:template match="revhistory" mode="set.titlepage.recto.auto.mode">
390<div xsl:use-attribute-sets="set.titlepage.recto.style">
391<xsl:apply-templates select="." mode="set.titlepage.recto.mode"/>
392</div>
393</xsl:template>
394
395<xsl:template match="abstract" mode="set.titlepage.recto.auto.mode">
396<div xsl:use-attribute-sets="set.titlepage.recto.style">
397<xsl:apply-templates select="." mode="set.titlepage.recto.mode"/>
398</div>
399</xsl:template>
400
401<xsl:template name="book.titlepage.recto">
402 <xsl:choose>
403 <xsl:when test="bookinfo/title">
404 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/title"/>
405 </xsl:when>
406 <xsl:when test="info/title">
407 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/title"/>
408 </xsl:when>
409 <xsl:when test="title">
410 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="title"/>
411 </xsl:when>
412 </xsl:choose>
413
414 <xsl:choose>
415 <xsl:when test="bookinfo/subtitle">
416 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/subtitle"/>
417 </xsl:when>
418 <xsl:when test="info/subtitle">
419 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/subtitle"/>
420 </xsl:when>
421 <xsl:when test="subtitle">
422 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="subtitle"/>
423 </xsl:when>
424 </xsl:choose>
425
426 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/corpauthor"/>
427 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/corpauthor"/>
428 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/authorgroup"/>
429 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/authorgroup"/>
430 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/author"/>
431 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/author"/>
432 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/othercredit"/>
433 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/othercredit"/>
434 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/releaseinfo"/>
435 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/releaseinfo"/>
436 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/copyright"/>
437 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/copyright"/>
438 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/legalnotice"/>
439 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/legalnotice"/>
440 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/pubdate"/>
441 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/pubdate"/>
442 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/revision"/>
443 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/revision"/>
444 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/revhistory"/>
445 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/revhistory"/>
446 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/abstract"/>
447 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/abstract"/>
448</xsl:template>
449
450<xsl:template name="book.titlepage.verso">
451</xsl:template>
452
453<xsl:template name="book.titlepage.separator"><hr/>
454</xsl:template>
455
456<xsl:template name="book.titlepage.before.recto">
457</xsl:template>
458
459<xsl:template name="book.titlepage.before.verso">
460</xsl:template>
461
462<xsl:template name="book.titlepage">
463 <div class="titlepage">
464 <xsl:variable name="recto.content">
465 <xsl:call-template name="book.titlepage.before.recto"/>
466 <xsl:call-template name="book.titlepage.recto"/>
467 </xsl:variable>
468 <xsl:variable name="recto.elements.count">
469 <xsl:choose>
470 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
471 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
472 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
473 <xsl:otherwise>1</xsl:otherwise>
474 </xsl:choose>
475 </xsl:variable>
476 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
477 <div><xsl:copy-of select="$recto.content"/></div>
478 </xsl:if>
479 <xsl:variable name="verso.content">
480 <xsl:call-template name="book.titlepage.before.verso"/>
481 <xsl:call-template name="book.titlepage.verso"/>
482 </xsl:variable>
483 <xsl:variable name="verso.elements.count">
484 <xsl:choose>
485 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
486 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
487 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
488 <xsl:otherwise>1</xsl:otherwise>
489 </xsl:choose>
490 </xsl:variable>
491 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
492 <div><xsl:copy-of select="$verso.content"/></div>
493 </xsl:if>
494 <xsl:call-template name="book.titlepage.separator"/>
495 </div>
496</xsl:template>
497
498<xsl:template match="*" mode="book.titlepage.recto.mode">
499 <!-- if an element isn't found in this mode, -->
500 <!-- try the generic titlepage.mode -->
501 <xsl:apply-templates select="." mode="titlepage.mode"/>
502</xsl:template>
503
504<xsl:template match="*" mode="book.titlepage.verso.mode">
505 <!-- if an element isn't found in this mode, -->
506 <!-- try the generic titlepage.mode -->
507 <xsl:apply-templates select="." mode="titlepage.mode"/>
508</xsl:template>
509
510<xsl:template match="title" mode="book.titlepage.recto.auto.mode">
511<div xsl:use-attribute-sets="book.titlepage.recto.style">
512<xsl:apply-templates select="." mode="book.titlepage.recto.mode"/>
513</div>
514</xsl:template>
515
516<xsl:template match="subtitle" mode="book.titlepage.recto.auto.mode">
517<div xsl:use-attribute-sets="book.titlepage.recto.style">
518<xsl:apply-templates select="." mode="book.titlepage.recto.mode"/>
519</div>
520</xsl:template>
521
522<xsl:template match="corpauthor" mode="book.titlepage.recto.auto.mode">
523<div xsl:use-attribute-sets="book.titlepage.recto.style">
524<xsl:apply-templates select="." mode="book.titlepage.recto.mode"/>
525</div>
526</xsl:template>
527
528<xsl:template match="authorgroup" mode="book.titlepage.recto.auto.mode">
529<div xsl:use-attribute-sets="book.titlepage.recto.style">
530<xsl:apply-templates select="." mode="book.titlepage.recto.mode"/>
531</div>
532</xsl:template>
533
534<xsl:template match="author" mode="book.titlepage.recto.auto.mode">
535<div xsl:use-attribute-sets="book.titlepage.recto.style">
536<xsl:apply-templates select="." mode="book.titlepage.recto.mode"/>
537</div>
538</xsl:template>
539
540<xsl:template match="othercredit" mode="book.titlepage.recto.auto.mode">
541<div xsl:use-attribute-sets="book.titlepage.recto.style">
542<xsl:apply-templates select="." mode="book.titlepage.recto.mode"/>
543</div>
544</xsl:template>
545
546<xsl:template match="releaseinfo" mode="book.titlepage.recto.auto.mode">
547<div xsl:use-attribute-sets="book.titlepage.recto.style">
548<xsl:apply-templates select="." mode="book.titlepage.recto.mode"/>
549</div>
550</xsl:template>
551
552<xsl:template match="copyright" mode="book.titlepage.recto.auto.mode">
553<div xsl:use-attribute-sets="book.titlepage.recto.style">
554<xsl:apply-templates select="." mode="book.titlepage.recto.mode"/>
555</div>
556</xsl:template>
557
558<xsl:template match="legalnotice" mode="book.titlepage.recto.auto.mode">
559<div xsl:use-attribute-sets="book.titlepage.recto.style">
560<xsl:apply-templates select="." mode="book.titlepage.recto.mode"/>
561</div>
562</xsl:template>
563
564<xsl:template match="pubdate" mode="book.titlepage.recto.auto.mode">
565<div xsl:use-attribute-sets="book.titlepage.recto.style">
566<xsl:apply-templates select="." mode="book.titlepage.recto.mode"/>
567</div>
568</xsl:template>
569
570<xsl:template match="revision" mode="book.titlepage.recto.auto.mode">
571<div xsl:use-attribute-sets="book.titlepage.recto.style">
572<xsl:apply-templates select="." mode="book.titlepage.recto.mode"/>
573</div>
574</xsl:template>
575
576<xsl:template match="revhistory" mode="book.titlepage.recto.auto.mode">
577<div xsl:use-attribute-sets="book.titlepage.recto.style">
578<xsl:apply-templates select="." mode="book.titlepage.recto.mode"/>
579</div>
580</xsl:template>
581
582<xsl:template match="abstract" mode="book.titlepage.recto.auto.mode">
583<div xsl:use-attribute-sets="book.titlepage.recto.style">
584<xsl:apply-templates select="." mode="book.titlepage.recto.mode"/>
585</div>
586</xsl:template>
587
588<xsl:template name="part.titlepage.recto">
589 <div xsl:use-attribute-sets="part.titlepage.recto.style">
590<xsl:call-template name="division.title">
591<xsl:with-param name="node" select="ancestor-or-self::part[1]"/>
592</xsl:call-template></div>
593 <xsl:choose>
594 <xsl:when test="partinfo/subtitle">
595 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="partinfo/subtitle"/>
596 </xsl:when>
597 <xsl:when test="docinfo/subtitle">
598 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="docinfo/subtitle"/>
599 </xsl:when>
600 <xsl:when test="info/subtitle">
601 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="info/subtitle"/>
602 </xsl:when>
603 <xsl:when test="subtitle">
604 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="subtitle"/>
605 </xsl:when>
606 </xsl:choose>
607
608 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="partinfo/corpauthor"/>
609 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="docinfo/corpauthor"/>
610 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="info/corpauthor"/>
611 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="partinfo/authorgroup"/>
612 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="docinfo/authorgroup"/>
613 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="info/authorgroup"/>
614 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="partinfo/author"/>
615 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="docinfo/author"/>
616 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="info/author"/>
617 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="partinfo/othercredit"/>
618 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="docinfo/othercredit"/>
619 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="info/othercredit"/>
620 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="partinfo/releaseinfo"/>
621 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="docinfo/releaseinfo"/>
622 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="info/releaseinfo"/>
623 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="partinfo/copyright"/>
624 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="docinfo/copyright"/>
625 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="info/copyright"/>
626 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="partinfo/legalnotice"/>
627 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="docinfo/legalnotice"/>
628 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="info/legalnotice"/>
629 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="partinfo/pubdate"/>
630 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="docinfo/pubdate"/>
631 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="info/pubdate"/>
632 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="partinfo/revision"/>
633 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="docinfo/revision"/>
634 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="info/revision"/>
635 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="partinfo/revhistory"/>
636 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="docinfo/revhistory"/>
637 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="info/revhistory"/>
638 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="partinfo/abstract"/>
639 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="docinfo/abstract"/>
640 <xsl:apply-templates mode="part.titlepage.recto.auto.mode" select="info/abstract"/>
641</xsl:template>
642
643<xsl:template name="part.titlepage.verso">
644</xsl:template>
645
646<xsl:template name="part.titlepage.separator">
647</xsl:template>
648
649<xsl:template name="part.titlepage.before.recto">
650</xsl:template>
651
652<xsl:template name="part.titlepage.before.verso">
653</xsl:template>
654
655<xsl:template name="part.titlepage">
656 <div class="titlepage">
657 <xsl:variable name="recto.content">
658 <xsl:call-template name="part.titlepage.before.recto"/>
659 <xsl:call-template name="part.titlepage.recto"/>
660 </xsl:variable>
661 <xsl:variable name="recto.elements.count">
662 <xsl:choose>
663 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
664 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
665 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
666 <xsl:otherwise>1</xsl:otherwise>
667 </xsl:choose>
668 </xsl:variable>
669 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
670 <div><xsl:copy-of select="$recto.content"/></div>
671 </xsl:if>
672 <xsl:variable name="verso.content">
673 <xsl:call-template name="part.titlepage.before.verso"/>
674 <xsl:call-template name="part.titlepage.verso"/>
675 </xsl:variable>
676 <xsl:variable name="verso.elements.count">
677 <xsl:choose>
678 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
679 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
680 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
681 <xsl:otherwise>1</xsl:otherwise>
682 </xsl:choose>
683 </xsl:variable>
684 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
685 <div><xsl:copy-of select="$verso.content"/></div>
686 </xsl:if>
687 <xsl:call-template name="part.titlepage.separator"/>
688 </div>
689</xsl:template>
690
691<xsl:template match="*" mode="part.titlepage.recto.mode">
692 <!-- if an element isn't found in this mode, -->
693 <!-- try the generic titlepage.mode -->
694 <xsl:apply-templates select="." mode="titlepage.mode"/>
695</xsl:template>
696
697<xsl:template match="*" mode="part.titlepage.verso.mode">
698 <!-- if an element isn't found in this mode, -->
699 <!-- try the generic titlepage.mode -->
700 <xsl:apply-templates select="." mode="titlepage.mode"/>
701</xsl:template>
702
703<xsl:template match="subtitle" mode="part.titlepage.recto.auto.mode">
704<div xsl:use-attribute-sets="part.titlepage.recto.style">
705<xsl:apply-templates select="." mode="part.titlepage.recto.mode"/>
706</div>
707</xsl:template>
708
709<xsl:template match="corpauthor" mode="part.titlepage.recto.auto.mode">
710<div xsl:use-attribute-sets="part.titlepage.recto.style">
711<xsl:apply-templates select="." mode="part.titlepage.recto.mode"/>
712</div>
713</xsl:template>
714
715<xsl:template match="authorgroup" mode="part.titlepage.recto.auto.mode">
716<div xsl:use-attribute-sets="part.titlepage.recto.style">
717<xsl:apply-templates select="." mode="part.titlepage.recto.mode"/>
718</div>
719</xsl:template>
720
721<xsl:template match="author" mode="part.titlepage.recto.auto.mode">
722<div xsl:use-attribute-sets="part.titlepage.recto.style">
723<xsl:apply-templates select="." mode="part.titlepage.recto.mode"/>
724</div>
725</xsl:template>
726
727<xsl:template match="othercredit" mode="part.titlepage.recto.auto.mode">
728<div xsl:use-attribute-sets="part.titlepage.recto.style">
729<xsl:apply-templates select="." mode="part.titlepage.recto.mode"/>
730</div>
731</xsl:template>
732
733<xsl:template match="releaseinfo" mode="part.titlepage.recto.auto.mode">
734<div xsl:use-attribute-sets="part.titlepage.recto.style">
735<xsl:apply-templates select="." mode="part.titlepage.recto.mode"/>
736</div>
737</xsl:template>
738
739<xsl:template match="copyright" mode="part.titlepage.recto.auto.mode">
740<div xsl:use-attribute-sets="part.titlepage.recto.style">
741<xsl:apply-templates select="." mode="part.titlepage.recto.mode"/>
742</div>
743</xsl:template>
744
745<xsl:template match="legalnotice" mode="part.titlepage.recto.auto.mode">
746<div xsl:use-attribute-sets="part.titlepage.recto.style">
747<xsl:apply-templates select="." mode="part.titlepage.recto.mode"/>
748</div>
749</xsl:template>
750
751<xsl:template match="pubdate" mode="part.titlepage.recto.auto.mode">
752<div xsl:use-attribute-sets="part.titlepage.recto.style">
753<xsl:apply-templates select="." mode="part.titlepage.recto.mode"/>
754</div>
755</xsl:template>
756
757<xsl:template match="revision" mode="part.titlepage.recto.auto.mode">
758<div xsl:use-attribute-sets="part.titlepage.recto.style">
759<xsl:apply-templates select="." mode="part.titlepage.recto.mode"/>
760</div>
761</xsl:template>
762
763<xsl:template match="revhistory" mode="part.titlepage.recto.auto.mode">
764<div xsl:use-attribute-sets="part.titlepage.recto.style">
765<xsl:apply-templates select="." mode="part.titlepage.recto.mode"/>
766</div>
767</xsl:template>
768
769<xsl:template match="abstract" mode="part.titlepage.recto.auto.mode">
770<div xsl:use-attribute-sets="part.titlepage.recto.style">
771<xsl:apply-templates select="." mode="part.titlepage.recto.mode"/>
772</div>
773</xsl:template>
774
775<xsl:template name="partintro.titlepage.recto">
776 <xsl:choose>
777 <xsl:when test="partintroinfo/title">
778 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="partintroinfo/title"/>
779 </xsl:when>
780 <xsl:when test="docinfo/title">
781 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="docinfo/title"/>
782 </xsl:when>
783 <xsl:when test="info/title">
784 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="info/title"/>
785 </xsl:when>
786 <xsl:when test="title">
787 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="title"/>
788 </xsl:when>
789 </xsl:choose>
790
791 <xsl:choose>
792 <xsl:when test="partintroinfo/subtitle">
793 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="partintroinfo/subtitle"/>
794 </xsl:when>
795 <xsl:when test="docinfo/subtitle">
796 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="docinfo/subtitle"/>
797 </xsl:when>
798 <xsl:when test="info/subtitle">
799 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="info/subtitle"/>
800 </xsl:when>
801 <xsl:when test="subtitle">
802 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="subtitle"/>
803 </xsl:when>
804 </xsl:choose>
805
806 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="partintroinfo/corpauthor"/>
807 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="docinfo/corpauthor"/>
808 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="info/corpauthor"/>
809 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="partintroinfo/authorgroup"/>
810 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="docinfo/authorgroup"/>
811 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="info/authorgroup"/>
812 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="partintroinfo/author"/>
813 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="docinfo/author"/>
814 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="info/author"/>
815 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="partintroinfo/othercredit"/>
816 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="docinfo/othercredit"/>
817 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="info/othercredit"/>
818 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="partintroinfo/releaseinfo"/>
819 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="docinfo/releaseinfo"/>
820 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="info/releaseinfo"/>
821 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="partintroinfo/copyright"/>
822 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="docinfo/copyright"/>
823 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="info/copyright"/>
824 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="partintroinfo/legalnotice"/>
825 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="docinfo/legalnotice"/>
826 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="info/legalnotice"/>
827 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="partintroinfo/pubdate"/>
828 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="docinfo/pubdate"/>
829 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="info/pubdate"/>
830 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="partintroinfo/revision"/>
831 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="docinfo/revision"/>
832 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="info/revision"/>
833 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="partintroinfo/revhistory"/>
834 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="docinfo/revhistory"/>
835 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="info/revhistory"/>
836 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="partintroinfo/abstract"/>
837 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="docinfo/abstract"/>
838 <xsl:apply-templates mode="partintro.titlepage.recto.auto.mode" select="info/abstract"/>
839</xsl:template>
840
841<xsl:template name="partintro.titlepage.verso">
842</xsl:template>
843
844<xsl:template name="partintro.titlepage.separator">
845</xsl:template>
846
847<xsl:template name="partintro.titlepage.before.recto">
848</xsl:template>
849
850<xsl:template name="partintro.titlepage.before.verso">
851</xsl:template>
852
853<xsl:template name="partintro.titlepage">
854 <div>
855 <xsl:variable name="recto.content">
856 <xsl:call-template name="partintro.titlepage.before.recto"/>
857 <xsl:call-template name="partintro.titlepage.recto"/>
858 </xsl:variable>
859 <xsl:variable name="recto.elements.count">
860 <xsl:choose>
861 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
862 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
863 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
864 <xsl:otherwise>1</xsl:otherwise>
865 </xsl:choose>
866 </xsl:variable>
867 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
868 <div><xsl:copy-of select="$recto.content"/></div>
869 </xsl:if>
870 <xsl:variable name="verso.content">
871 <xsl:call-template name="partintro.titlepage.before.verso"/>
872 <xsl:call-template name="partintro.titlepage.verso"/>
873 </xsl:variable>
874 <xsl:variable name="verso.elements.count">
875 <xsl:choose>
876 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
877 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
878 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
879 <xsl:otherwise>1</xsl:otherwise>
880 </xsl:choose>
881 </xsl:variable>
882 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
883 <div><xsl:copy-of select="$verso.content"/></div>
884 </xsl:if>
885 <xsl:call-template name="partintro.titlepage.separator"/>
886 </div>
887</xsl:template>
888
889<xsl:template match="*" mode="partintro.titlepage.recto.mode">
890 <!-- if an element isn't found in this mode, -->
891 <!-- try the generic titlepage.mode -->
892 <xsl:apply-templates select="." mode="titlepage.mode"/>
893</xsl:template>
894
895<xsl:template match="*" mode="partintro.titlepage.verso.mode">
896 <!-- if an element isn't found in this mode, -->
897 <!-- try the generic titlepage.mode -->
898 <xsl:apply-templates select="." mode="titlepage.mode"/>
899</xsl:template>
900
901<xsl:template match="title" mode="partintro.titlepage.recto.auto.mode">
902<div xsl:use-attribute-sets="partintro.titlepage.recto.style">
903<xsl:apply-templates select="." mode="partintro.titlepage.recto.mode"/>
904</div>
905</xsl:template>
906
907<xsl:template match="subtitle" mode="partintro.titlepage.recto.auto.mode">
908<div xsl:use-attribute-sets="partintro.titlepage.recto.style">
909<xsl:apply-templates select="." mode="partintro.titlepage.recto.mode"/>
910</div>
911</xsl:template>
912
913<xsl:template match="corpauthor" mode="partintro.titlepage.recto.auto.mode">
914<div xsl:use-attribute-sets="partintro.titlepage.recto.style">
915<xsl:apply-templates select="." mode="partintro.titlepage.recto.mode"/>
916</div>
917</xsl:template>
918
919<xsl:template match="authorgroup" mode="partintro.titlepage.recto.auto.mode">
920<div xsl:use-attribute-sets="partintro.titlepage.recto.style">
921<xsl:apply-templates select="." mode="partintro.titlepage.recto.mode"/>
922</div>
923</xsl:template>
924
925<xsl:template match="author" mode="partintro.titlepage.recto.auto.mode">
926<div xsl:use-attribute-sets="partintro.titlepage.recto.style">
927<xsl:apply-templates select="." mode="partintro.titlepage.recto.mode"/>
928</div>
929</xsl:template>
930
931<xsl:template match="othercredit" mode="partintro.titlepage.recto.auto.mode">
932<div xsl:use-attribute-sets="partintro.titlepage.recto.style">
933<xsl:apply-templates select="." mode="partintro.titlepage.recto.mode"/>
934</div>
935</xsl:template>
936
937<xsl:template match="releaseinfo" mode="partintro.titlepage.recto.auto.mode">
938<div xsl:use-attribute-sets="partintro.titlepage.recto.style">
939<xsl:apply-templates select="." mode="partintro.titlepage.recto.mode"/>
940</div>
941</xsl:template>
942
943<xsl:template match="copyright" mode="partintro.titlepage.recto.auto.mode">
944<div xsl:use-attribute-sets="partintro.titlepage.recto.style">
945<xsl:apply-templates select="." mode="partintro.titlepage.recto.mode"/>
946</div>
947</xsl:template>
948
949<xsl:template match="legalnotice" mode="partintro.titlepage.recto.auto.mode">
950<div xsl:use-attribute-sets="partintro.titlepage.recto.style">
951<xsl:apply-templates select="." mode="partintro.titlepage.recto.mode"/>
952</div>
953</xsl:template>
954
955<xsl:template match="pubdate" mode="partintro.titlepage.recto.auto.mode">
956<div xsl:use-attribute-sets="partintro.titlepage.recto.style">
957<xsl:apply-templates select="." mode="partintro.titlepage.recto.mode"/>
958</div>
959</xsl:template>
960
961<xsl:template match="revision" mode="partintro.titlepage.recto.auto.mode">
962<div xsl:use-attribute-sets="partintro.titlepage.recto.style">
963<xsl:apply-templates select="." mode="partintro.titlepage.recto.mode"/>
964</div>
965</xsl:template>
966
967<xsl:template match="revhistory" mode="partintro.titlepage.recto.auto.mode">
968<div xsl:use-attribute-sets="partintro.titlepage.recto.style">
969<xsl:apply-templates select="." mode="partintro.titlepage.recto.mode"/>
970</div>
971</xsl:template>
972
973<xsl:template match="abstract" mode="partintro.titlepage.recto.auto.mode">
974<div xsl:use-attribute-sets="partintro.titlepage.recto.style">
975<xsl:apply-templates select="." mode="partintro.titlepage.recto.mode"/>
976</div>
977</xsl:template>
978
979<xsl:template name="reference.titlepage.recto">
980 <xsl:choose>
981 <xsl:when test="referenceinfo/title">
982 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="referenceinfo/title"/>
983 </xsl:when>
984 <xsl:when test="docinfo/title">
985 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="docinfo/title"/>
986 </xsl:when>
987 <xsl:when test="info/title">
988 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="info/title"/>
989 </xsl:when>
990 <xsl:when test="title">
991 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="title"/>
992 </xsl:when>
993 </xsl:choose>
994
995 <xsl:choose>
996 <xsl:when test="referenceinfo/subtitle">
997 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="referenceinfo/subtitle"/>
998 </xsl:when>
999 <xsl:when test="docinfo/subtitle">
1000 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="docinfo/subtitle"/>
1001 </xsl:when>
1002 <xsl:when test="info/subtitle">
1003 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="info/subtitle"/>
1004 </xsl:when>
1005 <xsl:when test="subtitle">
1006 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="subtitle"/>
1007 </xsl:when>
1008 </xsl:choose>
1009
1010 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="referenceinfo/corpauthor"/>
1011 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="docinfo/corpauthor"/>
1012 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="info/corpauthor"/>
1013 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="referenceinfo/authorgroup"/>
1014 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="docinfo/authorgroup"/>
1015 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="info/authorgroup"/>
1016 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="referenceinfo/author"/>
1017 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="docinfo/author"/>
1018 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="info/author"/>
1019 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="referenceinfo/othercredit"/>
1020 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="docinfo/othercredit"/>
1021 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="info/othercredit"/>
1022 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="referenceinfo/releaseinfo"/>
1023 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="docinfo/releaseinfo"/>
1024 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="info/releaseinfo"/>
1025 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="referenceinfo/copyright"/>
1026 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="docinfo/copyright"/>
1027 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="info/copyright"/>
1028 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="referenceinfo/legalnotice"/>
1029 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="docinfo/legalnotice"/>
1030 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="info/legalnotice"/>
1031 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="referenceinfo/pubdate"/>
1032 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="docinfo/pubdate"/>
1033 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="info/pubdate"/>
1034 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="referenceinfo/revision"/>
1035 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="docinfo/revision"/>
1036 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="info/revision"/>
1037 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="referenceinfo/revhistory"/>
1038 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="docinfo/revhistory"/>
1039 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="info/revhistory"/>
1040 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="referenceinfo/abstract"/>
1041 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="docinfo/abstract"/>
1042 <xsl:apply-templates mode="reference.titlepage.recto.auto.mode" select="info/abstract"/>
1043</xsl:template>
1044
1045<xsl:template name="reference.titlepage.verso">
1046</xsl:template>
1047
1048<xsl:template name="reference.titlepage.separator"><hr/>
1049</xsl:template>
1050
1051<xsl:template name="reference.titlepage.before.recto">
1052</xsl:template>
1053
1054<xsl:template name="reference.titlepage.before.verso">
1055</xsl:template>
1056
1057<xsl:template name="reference.titlepage">
1058 <div class="titlepage">
1059 <xsl:variable name="recto.content">
1060 <xsl:call-template name="reference.titlepage.before.recto"/>
1061 <xsl:call-template name="reference.titlepage.recto"/>
1062 </xsl:variable>
1063 <xsl:variable name="recto.elements.count">
1064 <xsl:choose>
1065 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
1066 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
1067 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
1068 <xsl:otherwise>1</xsl:otherwise>
1069 </xsl:choose>
1070 </xsl:variable>
1071 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
1072 <div><xsl:copy-of select="$recto.content"/></div>
1073 </xsl:if>
1074 <xsl:variable name="verso.content">
1075 <xsl:call-template name="reference.titlepage.before.verso"/>
1076 <xsl:call-template name="reference.titlepage.verso"/>
1077 </xsl:variable>
1078 <xsl:variable name="verso.elements.count">
1079 <xsl:choose>
1080 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
1081 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
1082 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
1083 <xsl:otherwise>1</xsl:otherwise>
1084 </xsl:choose>
1085 </xsl:variable>
1086 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
1087 <div><xsl:copy-of select="$verso.content"/></div>
1088 </xsl:if>
1089 <xsl:call-template name="reference.titlepage.separator"/>
1090 </div>
1091</xsl:template>
1092
1093<xsl:template match="*" mode="reference.titlepage.recto.mode">
1094 <!-- if an element isn't found in this mode, -->
1095 <!-- try the generic titlepage.mode -->
1096 <xsl:apply-templates select="." mode="titlepage.mode"/>
1097</xsl:template>
1098
1099<xsl:template match="*" mode="reference.titlepage.verso.mode">
1100 <!-- if an element isn't found in this mode, -->
1101 <!-- try the generic titlepage.mode -->
1102 <xsl:apply-templates select="." mode="titlepage.mode"/>
1103</xsl:template>
1104
1105<xsl:template match="title" mode="reference.titlepage.recto.auto.mode">
1106<div xsl:use-attribute-sets="reference.titlepage.recto.style">
1107<xsl:apply-templates select="." mode="reference.titlepage.recto.mode"/>
1108</div>
1109</xsl:template>
1110
1111<xsl:template match="subtitle" mode="reference.titlepage.recto.auto.mode">
1112<div xsl:use-attribute-sets="reference.titlepage.recto.style">
1113<xsl:apply-templates select="." mode="reference.titlepage.recto.mode"/>
1114</div>
1115</xsl:template>
1116
1117<xsl:template match="corpauthor" mode="reference.titlepage.recto.auto.mode">
1118<div xsl:use-attribute-sets="reference.titlepage.recto.style">
1119<xsl:apply-templates select="." mode="reference.titlepage.recto.mode"/>
1120</div>
1121</xsl:template>
1122
1123<xsl:template match="authorgroup" mode="reference.titlepage.recto.auto.mode">
1124<div xsl:use-attribute-sets="reference.titlepage.recto.style">
1125<xsl:apply-templates select="." mode="reference.titlepage.recto.mode"/>
1126</div>
1127</xsl:template>
1128
1129<xsl:template match="author" mode="reference.titlepage.recto.auto.mode">
1130<div xsl:use-attribute-sets="reference.titlepage.recto.style">
1131<xsl:apply-templates select="." mode="reference.titlepage.recto.mode"/>
1132</div>
1133</xsl:template>
1134
1135<xsl:template match="othercredit" mode="reference.titlepage.recto.auto.mode">
1136<div xsl:use-attribute-sets="reference.titlepage.recto.style">
1137<xsl:apply-templates select="." mode="reference.titlepage.recto.mode"/>
1138</div>
1139</xsl:template>
1140
1141<xsl:template match="releaseinfo" mode="reference.titlepage.recto.auto.mode">
1142<div xsl:use-attribute-sets="reference.titlepage.recto.style">
1143<xsl:apply-templates select="." mode="reference.titlepage.recto.mode"/>
1144</div>
1145</xsl:template>
1146
1147<xsl:template match="copyright" mode="reference.titlepage.recto.auto.mode">
1148<div xsl:use-attribute-sets="reference.titlepage.recto.style">
1149<xsl:apply-templates select="." mode="reference.titlepage.recto.mode"/>
1150</div>
1151</xsl:template>
1152
1153<xsl:template match="legalnotice" mode="reference.titlepage.recto.auto.mode">
1154<div xsl:use-attribute-sets="reference.titlepage.recto.style">
1155<xsl:apply-templates select="." mode="reference.titlepage.recto.mode"/>
1156</div>
1157</xsl:template>
1158
1159<xsl:template match="pubdate" mode="reference.titlepage.recto.auto.mode">
1160<div xsl:use-attribute-sets="reference.titlepage.recto.style">
1161<xsl:apply-templates select="." mode="reference.titlepage.recto.mode"/>
1162</div>
1163</xsl:template>
1164
1165<xsl:template match="revision" mode="reference.titlepage.recto.auto.mode">
1166<div xsl:use-attribute-sets="reference.titlepage.recto.style">
1167<xsl:apply-templates select="." mode="reference.titlepage.recto.mode"/>
1168</div>
1169</xsl:template>
1170
1171<xsl:template match="revhistory" mode="reference.titlepage.recto.auto.mode">
1172<div xsl:use-attribute-sets="reference.titlepage.recto.style">
1173<xsl:apply-templates select="." mode="reference.titlepage.recto.mode"/>
1174</div>
1175</xsl:template>
1176
1177<xsl:template match="abstract" mode="reference.titlepage.recto.auto.mode">
1178<div xsl:use-attribute-sets="reference.titlepage.recto.style">
1179<xsl:apply-templates select="." mode="reference.titlepage.recto.mode"/>
1180</div>
1181</xsl:template>
1182
1183<xsl:template name="refentry.titlepage.recto">
1184</xsl:template>
1185
1186<xsl:template name="refentry.titlepage.verso">
1187</xsl:template>
1188
1189<xsl:template name="refentry.titlepage.separator">
1190</xsl:template>
1191
1192<xsl:template name="refentry.titlepage.before.recto">
1193</xsl:template>
1194
1195<xsl:template name="refentry.titlepage.before.verso">
1196</xsl:template>
1197
1198<xsl:template name="refentry.titlepage">
1199 <div class="titlepage">
1200 <xsl:variable name="recto.content">
1201 <xsl:call-template name="refentry.titlepage.before.recto"/>
1202 <xsl:call-template name="refentry.titlepage.recto"/>
1203 </xsl:variable>
1204 <xsl:variable name="recto.elements.count">
1205 <xsl:choose>
1206 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
1207 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
1208 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
1209 <xsl:otherwise>1</xsl:otherwise>
1210 </xsl:choose>
1211 </xsl:variable>
1212 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
1213 <div><xsl:copy-of select="$recto.content"/></div>
1214 </xsl:if>
1215 <xsl:variable name="verso.content">
1216 <xsl:call-template name="refentry.titlepage.before.verso"/>
1217 <xsl:call-template name="refentry.titlepage.verso"/>
1218 </xsl:variable>
1219 <xsl:variable name="verso.elements.count">
1220 <xsl:choose>
1221 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
1222 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
1223 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
1224 <xsl:otherwise>1</xsl:otherwise>
1225 </xsl:choose>
1226 </xsl:variable>
1227 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
1228 <div><xsl:copy-of select="$verso.content"/></div>
1229 </xsl:if>
1230 <xsl:call-template name="refentry.titlepage.separator"/>
1231 </div>
1232</xsl:template>
1233
1234<xsl:template match="*" mode="refentry.titlepage.recto.mode">
1235 <!-- if an element isn't found in this mode, -->
1236 <!-- try the generic titlepage.mode -->
1237 <xsl:apply-templates select="." mode="titlepage.mode"/>
1238</xsl:template>
1239
1240<xsl:template match="*" mode="refentry.titlepage.verso.mode">
1241 <!-- if an element isn't found in this mode, -->
1242 <!-- try the generic titlepage.mode -->
1243 <xsl:apply-templates select="." mode="titlepage.mode"/>
1244</xsl:template>
1245
1246<xsl:template name="dedication.titlepage.recto">
1247 <div xsl:use-attribute-sets="dedication.titlepage.recto.style">
1248<xsl:call-template name="component.title">
1249<xsl:with-param name="node" select="ancestor-or-self::dedication[1]"/>
1250</xsl:call-template></div>
1251 <xsl:choose>
1252 <xsl:when test="dedicationinfo/subtitle">
1253 <xsl:apply-templates mode="dedication.titlepage.recto.auto.mode" select="dedicationinfo/subtitle"/>
1254 </xsl:when>
1255 <xsl:when test="docinfo/subtitle">
1256 <xsl:apply-templates mode="dedication.titlepage.recto.auto.mode" select="docinfo/subtitle"/>
1257 </xsl:when>
1258 <xsl:when test="info/subtitle">
1259 <xsl:apply-templates mode="dedication.titlepage.recto.auto.mode" select="info/subtitle"/>
1260 </xsl:when>
1261 <xsl:when test="subtitle">
1262 <xsl:apply-templates mode="dedication.titlepage.recto.auto.mode" select="subtitle"/>
1263 </xsl:when>
1264 </xsl:choose>
1265
1266</xsl:template>
1267
1268<xsl:template name="dedication.titlepage.verso">
1269</xsl:template>
1270
1271<xsl:template name="dedication.titlepage.separator">
1272</xsl:template>
1273
1274<xsl:template name="dedication.titlepage.before.recto">
1275</xsl:template>
1276
1277<xsl:template name="dedication.titlepage.before.verso">
1278</xsl:template>
1279
1280<xsl:template name="dedication.titlepage">
1281 <div class="titlepage">
1282 <xsl:variable name="recto.content">
1283 <xsl:call-template name="dedication.titlepage.before.recto"/>
1284 <xsl:call-template name="dedication.titlepage.recto"/>
1285 </xsl:variable>
1286 <xsl:variable name="recto.elements.count">
1287 <xsl:choose>
1288 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
1289 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
1290 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
1291 <xsl:otherwise>1</xsl:otherwise>
1292 </xsl:choose>
1293 </xsl:variable>
1294 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
1295 <div><xsl:copy-of select="$recto.content"/></div>
1296 </xsl:if>
1297 <xsl:variable name="verso.content">
1298 <xsl:call-template name="dedication.titlepage.before.verso"/>
1299 <xsl:call-template name="dedication.titlepage.verso"/>
1300 </xsl:variable>
1301 <xsl:variable name="verso.elements.count">
1302 <xsl:choose>
1303 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
1304 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
1305 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
1306 <xsl:otherwise>1</xsl:otherwise>
1307 </xsl:choose>
1308 </xsl:variable>
1309 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
1310 <div><xsl:copy-of select="$verso.content"/></div>
1311 </xsl:if>
1312 <xsl:call-template name="dedication.titlepage.separator"/>
1313 </div>
1314</xsl:template>
1315
1316<xsl:template match="*" mode="dedication.titlepage.recto.mode">
1317 <!-- if an element isn't found in this mode, -->
1318 <!-- try the generic titlepage.mode -->
1319 <xsl:apply-templates select="." mode="titlepage.mode"/>
1320</xsl:template>
1321
1322<xsl:template match="*" mode="dedication.titlepage.verso.mode">
1323 <!-- if an element isn't found in this mode, -->
1324 <!-- try the generic titlepage.mode -->
1325 <xsl:apply-templates select="." mode="titlepage.mode"/>
1326</xsl:template>
1327
1328<xsl:template match="subtitle" mode="dedication.titlepage.recto.auto.mode">
1329<div xsl:use-attribute-sets="dedication.titlepage.recto.style">
1330<xsl:apply-templates select="." mode="dedication.titlepage.recto.mode"/>
1331</div>
1332</xsl:template>
1333
1334<xsl:template name="acknowledgements.titlepage.recto">
1335 <div xsl:use-attribute-sets="acknowledgements.titlepage.recto.style">
1336<xsl:call-template name="component.title">
1337<xsl:with-param name="node" select="ancestor-or-self::acknowledgements[1]"/>
1338</xsl:call-template></div>
1339 <xsl:choose>
1340 <xsl:when test="acknowledgementsinfo/subtitle">
1341 <xsl:apply-templates mode="acknowledgements.titlepage.recto.auto.mode" select="acknowledgementsinfo/subtitle"/>
1342 </xsl:when>
1343 <xsl:when test="docinfo/subtitle">
1344 <xsl:apply-templates mode="acknowledgements.titlepage.recto.auto.mode" select="docinfo/subtitle"/>
1345 </xsl:when>
1346 <xsl:when test="info/subtitle">
1347 <xsl:apply-templates mode="acknowledgements.titlepage.recto.auto.mode" select="info/subtitle"/>
1348 </xsl:when>
1349 <xsl:when test="subtitle">
1350 <xsl:apply-templates mode="acknowledgements.titlepage.recto.auto.mode" select="subtitle"/>
1351 </xsl:when>
1352 </xsl:choose>
1353
1354</xsl:template>
1355
1356<xsl:template name="acknowledgements.titlepage.verso">
1357</xsl:template>
1358
1359<xsl:template name="acknowledgements.titlepage.separator">
1360</xsl:template>
1361
1362<xsl:template name="acknowledgements.titlepage.before.recto">
1363</xsl:template>
1364
1365<xsl:template name="acknowledgements.titlepage.before.verso">
1366</xsl:template>
1367
1368<xsl:template name="acknowledgements.titlepage">
1369 <div class="titlepage">
1370 <xsl:variable name="recto.content">
1371 <xsl:call-template name="acknowledgements.titlepage.before.recto"/>
1372 <xsl:call-template name="acknowledgements.titlepage.recto"/>
1373 </xsl:variable>
1374 <xsl:variable name="recto.elements.count">
1375 <xsl:choose>
1376 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
1377 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
1378 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
1379 <xsl:otherwise>1</xsl:otherwise>
1380 </xsl:choose>
1381 </xsl:variable>
1382 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
1383 <div><xsl:copy-of select="$recto.content"/></div>
1384 </xsl:if>
1385 <xsl:variable name="verso.content">
1386 <xsl:call-template name="acknowledgements.titlepage.before.verso"/>
1387 <xsl:call-template name="acknowledgements.titlepage.verso"/>
1388 </xsl:variable>
1389 <xsl:variable name="verso.elements.count">
1390 <xsl:choose>
1391 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
1392 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
1393 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
1394 <xsl:otherwise>1</xsl:otherwise>
1395 </xsl:choose>
1396 </xsl:variable>
1397 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
1398 <div><xsl:copy-of select="$verso.content"/></div>
1399 </xsl:if>
1400 <xsl:call-template name="acknowledgements.titlepage.separator"/>
1401 </div>
1402</xsl:template>
1403
1404<xsl:template match="*" mode="acknowledgements.titlepage.recto.mode">
1405 <!-- if an element isn't found in this mode, -->
1406 <!-- try the generic titlepage.mode -->
1407 <xsl:apply-templates select="." mode="titlepage.mode"/>
1408</xsl:template>
1409
1410<xsl:template match="*" mode="acknowledgements.titlepage.verso.mode">
1411 <!-- if an element isn't found in this mode, -->
1412 <!-- try the generic titlepage.mode -->
1413 <xsl:apply-templates select="." mode="titlepage.mode"/>
1414</xsl:template>
1415
1416<xsl:template match="subtitle" mode="acknowledgements.titlepage.recto.auto.mode">
1417<div xsl:use-attribute-sets="acknowledgements.titlepage.recto.style">
1418<xsl:apply-templates select="." mode="acknowledgements.titlepage.recto.mode"/>
1419</div>
1420</xsl:template>
1421
1422<xsl:template name="preface.titlepage.recto">
1423 <xsl:choose>
1424 <xsl:when test="prefaceinfo/title">
1425 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="prefaceinfo/title"/>
1426 </xsl:when>
1427 <xsl:when test="docinfo/title">
1428 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="docinfo/title"/>
1429 </xsl:when>
1430 <xsl:when test="info/title">
1431 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="info/title"/>
1432 </xsl:when>
1433 <xsl:when test="title">
1434 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="title"/>
1435 </xsl:when>
1436 </xsl:choose>
1437
1438 <xsl:choose>
1439 <xsl:when test="prefaceinfo/subtitle">
1440 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="prefaceinfo/subtitle"/>
1441 </xsl:when>
1442 <xsl:when test="docinfo/subtitle">
1443 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="docinfo/subtitle"/>
1444 </xsl:when>
1445 <xsl:when test="info/subtitle">
1446 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="info/subtitle"/>
1447 </xsl:when>
1448 <xsl:when test="subtitle">
1449 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="subtitle"/>
1450 </xsl:when>
1451 </xsl:choose>
1452
1453 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="prefaceinfo/corpauthor"/>
1454 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="docinfo/corpauthor"/>
1455 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="info/corpauthor"/>
1456 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="prefaceinfo/authorgroup"/>
1457 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="docinfo/authorgroup"/>
1458 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="info/authorgroup"/>
1459 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="prefaceinfo/author"/>
1460 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="docinfo/author"/>
1461 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="info/author"/>
1462 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="prefaceinfo/othercredit"/>
1463 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="docinfo/othercredit"/>
1464 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="info/othercredit"/>
1465 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="prefaceinfo/releaseinfo"/>
1466 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="docinfo/releaseinfo"/>
1467 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="info/releaseinfo"/>
1468 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="prefaceinfo/copyright"/>
1469 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="docinfo/copyright"/>
1470 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="info/copyright"/>
1471 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="prefaceinfo/legalnotice"/>
1472 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="docinfo/legalnotice"/>
1473 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="info/legalnotice"/>
1474 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="prefaceinfo/pubdate"/>
1475 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="docinfo/pubdate"/>
1476 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="info/pubdate"/>
1477 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="prefaceinfo/revision"/>
1478 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="docinfo/revision"/>
1479 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="info/revision"/>
1480 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="prefaceinfo/revhistory"/>
1481 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="docinfo/revhistory"/>
1482 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="info/revhistory"/>
1483 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="prefaceinfo/abstract"/>
1484 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="docinfo/abstract"/>
1485 <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="info/abstract"/>
1486</xsl:template>
1487
1488<xsl:template name="preface.titlepage.verso">
1489</xsl:template>
1490
1491<xsl:template name="preface.titlepage.separator">
1492</xsl:template>
1493
1494<xsl:template name="preface.titlepage.before.recto">
1495</xsl:template>
1496
1497<xsl:template name="preface.titlepage.before.verso">
1498</xsl:template>
1499
1500<xsl:template name="preface.titlepage">
1501 <div class="titlepage">
1502 <xsl:variable name="recto.content">
1503 <xsl:call-template name="preface.titlepage.before.recto"/>
1504 <xsl:call-template name="preface.titlepage.recto"/>
1505 </xsl:variable>
1506 <xsl:variable name="recto.elements.count">
1507 <xsl:choose>
1508 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
1509 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
1510 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
1511 <xsl:otherwise>1</xsl:otherwise>
1512 </xsl:choose>
1513 </xsl:variable>
1514 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
1515 <div><xsl:copy-of select="$recto.content"/></div>
1516 </xsl:if>
1517 <xsl:variable name="verso.content">
1518 <xsl:call-template name="preface.titlepage.before.verso"/>
1519 <xsl:call-template name="preface.titlepage.verso"/>
1520 </xsl:variable>
1521 <xsl:variable name="verso.elements.count">
1522 <xsl:choose>
1523 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
1524 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
1525 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
1526 <xsl:otherwise>1</xsl:otherwise>
1527 </xsl:choose>
1528 </xsl:variable>
1529 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
1530 <div><xsl:copy-of select="$verso.content"/></div>
1531 </xsl:if>
1532 <xsl:call-template name="preface.titlepage.separator"/>
1533 </div>
1534</xsl:template>
1535
1536<xsl:template match="*" mode="preface.titlepage.recto.mode">
1537 <!-- if an element isn't found in this mode, -->
1538 <!-- try the generic titlepage.mode -->
1539 <xsl:apply-templates select="." mode="titlepage.mode"/>
1540</xsl:template>
1541
1542<xsl:template match="*" mode="preface.titlepage.verso.mode">
1543 <!-- if an element isn't found in this mode, -->
1544 <!-- try the generic titlepage.mode -->
1545 <xsl:apply-templates select="." mode="titlepage.mode"/>
1546</xsl:template>
1547
1548<xsl:template match="title" mode="preface.titlepage.recto.auto.mode">
1549<div xsl:use-attribute-sets="preface.titlepage.recto.style">
1550<xsl:apply-templates select="." mode="preface.titlepage.recto.mode"/>
1551</div>
1552</xsl:template>
1553
1554<xsl:template match="subtitle" mode="preface.titlepage.recto.auto.mode">
1555<div xsl:use-attribute-sets="preface.titlepage.recto.style">
1556<xsl:apply-templates select="." mode="preface.titlepage.recto.mode"/>
1557</div>
1558</xsl:template>
1559
1560<xsl:template match="corpauthor" mode="preface.titlepage.recto.auto.mode">
1561<div xsl:use-attribute-sets="preface.titlepage.recto.style">
1562<xsl:apply-templates select="." mode="preface.titlepage.recto.mode"/>
1563</div>
1564</xsl:template>
1565
1566<xsl:template match="authorgroup" mode="preface.titlepage.recto.auto.mode">
1567<div xsl:use-attribute-sets="preface.titlepage.recto.style">
1568<xsl:apply-templates select="." mode="preface.titlepage.recto.mode"/>
1569</div>
1570</xsl:template>
1571
1572<xsl:template match="author" mode="preface.titlepage.recto.auto.mode">
1573<div xsl:use-attribute-sets="preface.titlepage.recto.style">
1574<xsl:apply-templates select="." mode="preface.titlepage.recto.mode"/>
1575</div>
1576</xsl:template>
1577
1578<xsl:template match="othercredit" mode="preface.titlepage.recto.auto.mode">
1579<div xsl:use-attribute-sets="preface.titlepage.recto.style">
1580<xsl:apply-templates select="." mode="preface.titlepage.recto.mode"/>
1581</div>
1582</xsl:template>
1583
1584<xsl:template match="releaseinfo" mode="preface.titlepage.recto.auto.mode">
1585<div xsl:use-attribute-sets="preface.titlepage.recto.style">
1586<xsl:apply-templates select="." mode="preface.titlepage.recto.mode"/>
1587</div>
1588</xsl:template>
1589
1590<xsl:template match="copyright" mode="preface.titlepage.recto.auto.mode">
1591<div xsl:use-attribute-sets="preface.titlepage.recto.style">
1592<xsl:apply-templates select="." mode="preface.titlepage.recto.mode"/>
1593</div>
1594</xsl:template>
1595
1596<xsl:template match="legalnotice" mode="preface.titlepage.recto.auto.mode">
1597<div xsl:use-attribute-sets="preface.titlepage.recto.style">
1598<xsl:apply-templates select="." mode="preface.titlepage.recto.mode"/>
1599</div>
1600</xsl:template>
1601
1602<xsl:template match="pubdate" mode="preface.titlepage.recto.auto.mode">
1603<div xsl:use-attribute-sets="preface.titlepage.recto.style">
1604<xsl:apply-templates select="." mode="preface.titlepage.recto.mode"/>
1605</div>
1606</xsl:template>
1607
1608<xsl:template match="revision" mode="preface.titlepage.recto.auto.mode">
1609<div xsl:use-attribute-sets="preface.titlepage.recto.style">
1610<xsl:apply-templates select="." mode="preface.titlepage.recto.mode"/>
1611</div>
1612</xsl:template>
1613
1614<xsl:template match="revhistory" mode="preface.titlepage.recto.auto.mode">
1615<div xsl:use-attribute-sets="preface.titlepage.recto.style">
1616<xsl:apply-templates select="." mode="preface.titlepage.recto.mode"/>
1617</div>
1618</xsl:template>
1619
1620<xsl:template match="abstract" mode="preface.titlepage.recto.auto.mode">
1621<div xsl:use-attribute-sets="preface.titlepage.recto.style">
1622<xsl:apply-templates select="." mode="preface.titlepage.recto.mode"/>
1623</div>
1624</xsl:template>
1625
1626<xsl:template name="chapter.titlepage.recto">
1627 <xsl:choose>
1628 <xsl:when test="chapterinfo/title">
1629 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="chapterinfo/title"/>
1630 </xsl:when>
1631 <xsl:when test="docinfo/title">
1632 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="docinfo/title"/>
1633 </xsl:when>
1634 <xsl:when test="info/title">
1635 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="info/title"/>
1636 </xsl:when>
1637 <xsl:when test="title">
1638 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="title"/>
1639 </xsl:when>
1640 </xsl:choose>
1641
1642 <xsl:choose>
1643 <xsl:when test="chapterinfo/subtitle">
1644 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="chapterinfo/subtitle"/>
1645 </xsl:when>
1646 <xsl:when test="docinfo/subtitle">
1647 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="docinfo/subtitle"/>
1648 </xsl:when>
1649 <xsl:when test="info/subtitle">
1650 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="info/subtitle"/>
1651 </xsl:when>
1652 <xsl:when test="subtitle">
1653 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="subtitle"/>
1654 </xsl:when>
1655 </xsl:choose>
1656
1657 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="chapterinfo/corpauthor"/>
1658 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="docinfo/corpauthor"/>
1659 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="info/corpauthor"/>
1660 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="chapterinfo/authorgroup"/>
1661 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="docinfo/authorgroup"/>
1662 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="info/authorgroup"/>
1663 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="chapterinfo/author"/>
1664 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="docinfo/author"/>
1665 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="info/author"/>
1666 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="chapterinfo/othercredit"/>
1667 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="docinfo/othercredit"/>
1668 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="info/othercredit"/>
1669 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="chapterinfo/releaseinfo"/>
1670 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="docinfo/releaseinfo"/>
1671 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="info/releaseinfo"/>
1672 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="chapterinfo/copyright"/>
1673 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="docinfo/copyright"/>
1674 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="info/copyright"/>
1675 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="chapterinfo/legalnotice"/>
1676 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="docinfo/legalnotice"/>
1677 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="info/legalnotice"/>
1678 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="chapterinfo/pubdate"/>
1679 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="docinfo/pubdate"/>
1680 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="info/pubdate"/>
1681 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="chapterinfo/revision"/>
1682 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="docinfo/revision"/>
1683 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="info/revision"/>
1684 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="chapterinfo/revhistory"/>
1685 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="docinfo/revhistory"/>
1686 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="info/revhistory"/>
1687 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="chapterinfo/abstract"/>
1688 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="docinfo/abstract"/>
1689 <xsl:apply-templates mode="chapter.titlepage.recto.auto.mode" select="info/abstract"/>
1690</xsl:template>
1691
1692<xsl:template name="chapter.titlepage.verso">
1693</xsl:template>
1694
1695<xsl:template name="chapter.titlepage.separator">
1696</xsl:template>
1697
1698<xsl:template name="chapter.titlepage.before.recto">
1699</xsl:template>
1700
1701<xsl:template name="chapter.titlepage.before.verso">
1702</xsl:template>
1703
1704<xsl:template name="chapter.titlepage">
1705 <div class="titlepage">
1706 <xsl:variable name="recto.content">
1707 <xsl:call-template name="chapter.titlepage.before.recto"/>
1708 <xsl:call-template name="chapter.titlepage.recto"/>
1709 </xsl:variable>
1710 <xsl:variable name="recto.elements.count">
1711 <xsl:choose>
1712 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
1713 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
1714 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
1715 <xsl:otherwise>1</xsl:otherwise>
1716 </xsl:choose>
1717 </xsl:variable>
1718 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
1719 <div><xsl:copy-of select="$recto.content"/></div>
1720 </xsl:if>
1721 <xsl:variable name="verso.content">
1722 <xsl:call-template name="chapter.titlepage.before.verso"/>
1723 <xsl:call-template name="chapter.titlepage.verso"/>
1724 </xsl:variable>
1725 <xsl:variable name="verso.elements.count">
1726 <xsl:choose>
1727 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
1728 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
1729 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
1730 <xsl:otherwise>1</xsl:otherwise>
1731 </xsl:choose>
1732 </xsl:variable>
1733 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
1734 <div><xsl:copy-of select="$verso.content"/></div>
1735 </xsl:if>
1736 <xsl:call-template name="chapter.titlepage.separator"/>
1737 </div>
1738</xsl:template>
1739
1740<xsl:template match="*" mode="chapter.titlepage.recto.mode">
1741 <!-- if an element isn't found in this mode, -->
1742 <!-- try the generic titlepage.mode -->
1743 <xsl:apply-templates select="." mode="titlepage.mode"/>
1744</xsl:template>
1745
1746<xsl:template match="*" mode="chapter.titlepage.verso.mode">
1747 <!-- if an element isn't found in this mode, -->
1748 <!-- try the generic titlepage.mode -->
1749 <xsl:apply-templates select="." mode="titlepage.mode"/>
1750</xsl:template>
1751
1752<xsl:template match="title" mode="chapter.titlepage.recto.auto.mode">
1753<div xsl:use-attribute-sets="chapter.titlepage.recto.style">
1754<xsl:apply-templates select="." mode="chapter.titlepage.recto.mode"/>
1755</div>
1756</xsl:template>
1757
1758<xsl:template match="subtitle" mode="chapter.titlepage.recto.auto.mode">
1759<div xsl:use-attribute-sets="chapter.titlepage.recto.style">
1760<xsl:apply-templates select="." mode="chapter.titlepage.recto.mode"/>
1761</div>
1762</xsl:template>
1763
1764<xsl:template match="corpauthor" mode="chapter.titlepage.recto.auto.mode">
1765<div xsl:use-attribute-sets="chapter.titlepage.recto.style">
1766<xsl:apply-templates select="." mode="chapter.titlepage.recto.mode"/>
1767</div>
1768</xsl:template>
1769
1770<xsl:template match="authorgroup" mode="chapter.titlepage.recto.auto.mode">
1771<div xsl:use-attribute-sets="chapter.titlepage.recto.style">
1772<xsl:apply-templates select="." mode="chapter.titlepage.recto.mode"/>
1773</div>
1774</xsl:template>
1775
1776<xsl:template match="author" mode="chapter.titlepage.recto.auto.mode">
1777<div xsl:use-attribute-sets="chapter.titlepage.recto.style">
1778<xsl:apply-templates select="." mode="chapter.titlepage.recto.mode"/>
1779</div>
1780</xsl:template>
1781
1782<xsl:template match="othercredit" mode="chapter.titlepage.recto.auto.mode">
1783<div xsl:use-attribute-sets="chapter.titlepage.recto.style">
1784<xsl:apply-templates select="." mode="chapter.titlepage.recto.mode"/>
1785</div>
1786</xsl:template>
1787
1788<xsl:template match="releaseinfo" mode="chapter.titlepage.recto.auto.mode">
1789<div xsl:use-attribute-sets="chapter.titlepage.recto.style">
1790<xsl:apply-templates select="." mode="chapter.titlepage.recto.mode"/>
1791</div>
1792</xsl:template>
1793
1794<xsl:template match="copyright" mode="chapter.titlepage.recto.auto.mode">
1795<div xsl:use-attribute-sets="chapter.titlepage.recto.style">
1796<xsl:apply-templates select="." mode="chapter.titlepage.recto.mode"/>
1797</div>
1798</xsl:template>
1799
1800<xsl:template match="legalnotice" mode="chapter.titlepage.recto.auto.mode">
1801<div xsl:use-attribute-sets="chapter.titlepage.recto.style">
1802<xsl:apply-templates select="." mode="chapter.titlepage.recto.mode"/>
1803</div>
1804</xsl:template>
1805
1806<xsl:template match="pubdate" mode="chapter.titlepage.recto.auto.mode">
1807<div xsl:use-attribute-sets="chapter.titlepage.recto.style">
1808<xsl:apply-templates select="." mode="chapter.titlepage.recto.mode"/>
1809</div>
1810</xsl:template>
1811
1812<xsl:template match="revision" mode="chapter.titlepage.recto.auto.mode">
1813<div xsl:use-attribute-sets="chapter.titlepage.recto.style">
1814<xsl:apply-templates select="." mode="chapter.titlepage.recto.mode"/>
1815</div>
1816</xsl:template>
1817
1818<xsl:template match="revhistory" mode="chapter.titlepage.recto.auto.mode">
1819<div xsl:use-attribute-sets="chapter.titlepage.recto.style">
1820<xsl:apply-templates select="." mode="chapter.titlepage.recto.mode"/>
1821</div>
1822</xsl:template>
1823
1824<xsl:template match="abstract" mode="chapter.titlepage.recto.auto.mode">
1825<div xsl:use-attribute-sets="chapter.titlepage.recto.style">
1826<xsl:apply-templates select="." mode="chapter.titlepage.recto.mode"/>
1827</div>
1828</xsl:template>
1829
1830<xsl:template name="appendix.titlepage.recto">
1831 <xsl:choose>
1832 <xsl:when test="appendixinfo/title">
1833 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="appendixinfo/title"/>
1834 </xsl:when>
1835 <xsl:when test="docinfo/title">
1836 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="docinfo/title"/>
1837 </xsl:when>
1838 <xsl:when test="info/title">
1839 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="info/title"/>
1840 </xsl:when>
1841 <xsl:when test="title">
1842 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="title"/>
1843 </xsl:when>
1844 </xsl:choose>
1845
1846 <xsl:choose>
1847 <xsl:when test="appendixinfo/subtitle">
1848 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="appendixinfo/subtitle"/>
1849 </xsl:when>
1850 <xsl:when test="docinfo/subtitle">
1851 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="docinfo/subtitle"/>
1852 </xsl:when>
1853 <xsl:when test="info/subtitle">
1854 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="info/subtitle"/>
1855 </xsl:when>
1856 <xsl:when test="subtitle">
1857 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="subtitle"/>
1858 </xsl:when>
1859 </xsl:choose>
1860
1861 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="appendixinfo/corpauthor"/>
1862 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="docinfo/corpauthor"/>
1863 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="info/corpauthor"/>
1864 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="appendixinfo/authorgroup"/>
1865 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="docinfo/authorgroup"/>
1866 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="info/authorgroup"/>
1867 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="appendixinfo/author"/>
1868 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="docinfo/author"/>
1869 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="info/author"/>
1870 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="appendixinfo/othercredit"/>
1871 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="docinfo/othercredit"/>
1872 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="info/othercredit"/>
1873 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="appendixinfo/releaseinfo"/>
1874 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="docinfo/releaseinfo"/>
1875 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="info/releaseinfo"/>
1876 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="appendixinfo/copyright"/>
1877 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="docinfo/copyright"/>
1878 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="info/copyright"/>
1879 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="appendixinfo/legalnotice"/>
1880 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="docinfo/legalnotice"/>
1881 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="info/legalnotice"/>
1882 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="appendixinfo/pubdate"/>
1883 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="docinfo/pubdate"/>
1884 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="info/pubdate"/>
1885 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="appendixinfo/revision"/>
1886 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="docinfo/revision"/>
1887 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="info/revision"/>
1888 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="appendixinfo/revhistory"/>
1889 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="docinfo/revhistory"/>
1890 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="info/revhistory"/>
1891 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="appendixinfo/abstract"/>
1892 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="docinfo/abstract"/>
1893 <xsl:apply-templates mode="appendix.titlepage.recto.auto.mode" select="info/abstract"/>
1894</xsl:template>
1895
1896<xsl:template name="appendix.titlepage.verso">
1897</xsl:template>
1898
1899<xsl:template name="appendix.titlepage.separator">
1900</xsl:template>
1901
1902<xsl:template name="appendix.titlepage.before.recto">
1903</xsl:template>
1904
1905<xsl:template name="appendix.titlepage.before.verso">
1906</xsl:template>
1907
1908<xsl:template name="appendix.titlepage">
1909 <div class="titlepage">
1910 <xsl:variable name="recto.content">
1911 <xsl:call-template name="appendix.titlepage.before.recto"/>
1912 <xsl:call-template name="appendix.titlepage.recto"/>
1913 </xsl:variable>
1914 <xsl:variable name="recto.elements.count">
1915 <xsl:choose>
1916 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
1917 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
1918 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
1919 <xsl:otherwise>1</xsl:otherwise>
1920 </xsl:choose>
1921 </xsl:variable>
1922 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
1923 <div><xsl:copy-of select="$recto.content"/></div>
1924 </xsl:if>
1925 <xsl:variable name="verso.content">
1926 <xsl:call-template name="appendix.titlepage.before.verso"/>
1927 <xsl:call-template name="appendix.titlepage.verso"/>
1928 </xsl:variable>
1929 <xsl:variable name="verso.elements.count">
1930 <xsl:choose>
1931 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
1932 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
1933 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
1934 <xsl:otherwise>1</xsl:otherwise>
1935 </xsl:choose>
1936 </xsl:variable>
1937 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
1938 <div><xsl:copy-of select="$verso.content"/></div>
1939 </xsl:if>
1940 <xsl:call-template name="appendix.titlepage.separator"/>
1941 </div>
1942</xsl:template>
1943
1944<xsl:template match="*" mode="appendix.titlepage.recto.mode">
1945 <!-- if an element isn't found in this mode, -->
1946 <!-- try the generic titlepage.mode -->
1947 <xsl:apply-templates select="." mode="titlepage.mode"/>
1948</xsl:template>
1949
1950<xsl:template match="*" mode="appendix.titlepage.verso.mode">
1951 <!-- if an element isn't found in this mode, -->
1952 <!-- try the generic titlepage.mode -->
1953 <xsl:apply-templates select="." mode="titlepage.mode"/>
1954</xsl:template>
1955
1956<xsl:template match="title" mode="appendix.titlepage.recto.auto.mode">
1957<div xsl:use-attribute-sets="appendix.titlepage.recto.style">
1958<xsl:apply-templates select="." mode="appendix.titlepage.recto.mode"/>
1959</div>
1960</xsl:template>
1961
1962<xsl:template match="subtitle" mode="appendix.titlepage.recto.auto.mode">
1963<div xsl:use-attribute-sets="appendix.titlepage.recto.style">
1964<xsl:apply-templates select="." mode="appendix.titlepage.recto.mode"/>
1965</div>
1966</xsl:template>
1967
1968<xsl:template match="corpauthor" mode="appendix.titlepage.recto.auto.mode">
1969<div xsl:use-attribute-sets="appendix.titlepage.recto.style">
1970<xsl:apply-templates select="." mode="appendix.titlepage.recto.mode"/>
1971</div>
1972</xsl:template>
1973
1974<xsl:template match="authorgroup" mode="appendix.titlepage.recto.auto.mode">
1975<div xsl:use-attribute-sets="appendix.titlepage.recto.style">
1976<xsl:apply-templates select="." mode="appendix.titlepage.recto.mode"/>
1977</div>
1978</xsl:template>
1979
1980<xsl:template match="author" mode="appendix.titlepage.recto.auto.mode">
1981<div xsl:use-attribute-sets="appendix.titlepage.recto.style">
1982<xsl:apply-templates select="." mode="appendix.titlepage.recto.mode"/>
1983</div>
1984</xsl:template>
1985
1986<xsl:template match="othercredit" mode="appendix.titlepage.recto.auto.mode">
1987<div xsl:use-attribute-sets="appendix.titlepage.recto.style">
1988<xsl:apply-templates select="." mode="appendix.titlepage.recto.mode"/>
1989</div>
1990</xsl:template>
1991
1992<xsl:template match="releaseinfo" mode="appendix.titlepage.recto.auto.mode">
1993<div xsl:use-attribute-sets="appendix.titlepage.recto.style">
1994<xsl:apply-templates select="." mode="appendix.titlepage.recto.mode"/>
1995</div>
1996</xsl:template>
1997
1998<xsl:template match="copyright" mode="appendix.titlepage.recto.auto.mode">
1999<div xsl:use-attribute-sets="appendix.titlepage.recto.style">
2000<xsl:apply-templates select="." mode="appendix.titlepage.recto.mode"/>
2001</div>
2002</xsl:template>
2003
2004<xsl:template match="legalnotice" mode="appendix.titlepage.recto.auto.mode">
2005<div xsl:use-attribute-sets="appendix.titlepage.recto.style">
2006<xsl:apply-templates select="." mode="appendix.titlepage.recto.mode"/>
2007</div>
2008</xsl:template>
2009
2010<xsl:template match="pubdate" mode="appendix.titlepage.recto.auto.mode">
2011<div xsl:use-attribute-sets="appendix.titlepage.recto.style">
2012<xsl:apply-templates select="." mode="appendix.titlepage.recto.mode"/>
2013</div>
2014</xsl:template>
2015
2016<xsl:template match="revision" mode="appendix.titlepage.recto.auto.mode">
2017<div xsl:use-attribute-sets="appendix.titlepage.recto.style">
2018<xsl:apply-templates select="." mode="appendix.titlepage.recto.mode"/>
2019</div>
2020</xsl:template>
2021
2022<xsl:template match="revhistory" mode="appendix.titlepage.recto.auto.mode">
2023<div xsl:use-attribute-sets="appendix.titlepage.recto.style">
2024<xsl:apply-templates select="." mode="appendix.titlepage.recto.mode"/>
2025</div>
2026</xsl:template>
2027
2028<xsl:template match="abstract" mode="appendix.titlepage.recto.auto.mode">
2029<div xsl:use-attribute-sets="appendix.titlepage.recto.style">
2030<xsl:apply-templates select="." mode="appendix.titlepage.recto.mode"/>
2031</div>
2032</xsl:template>
2033
2034<xsl:template name="section.titlepage.recto">
2035 <xsl:choose>
2036 <xsl:when test="sectioninfo/title">
2037 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="sectioninfo/title"/>
2038 </xsl:when>
2039 <xsl:when test="info/title">
2040 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="info/title"/>
2041 </xsl:when>
2042 <xsl:when test="title">
2043 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="title"/>
2044 </xsl:when>
2045 </xsl:choose>
2046
2047 <xsl:choose>
2048 <xsl:when test="sectioninfo/subtitle">
2049 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="sectioninfo/subtitle"/>
2050 </xsl:when>
2051 <xsl:when test="info/subtitle">
2052 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="info/subtitle"/>
2053 </xsl:when>
2054 <xsl:when test="subtitle">
2055 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="subtitle"/>
2056 </xsl:when>
2057 </xsl:choose>
2058
2059 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="sectioninfo/corpauthor"/>
2060 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="info/corpauthor"/>
2061 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="sectioninfo/authorgroup"/>
2062 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="info/authorgroup"/>
2063 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="sectioninfo/author"/>
2064 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="info/author"/>
2065 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="sectioninfo/othercredit"/>
2066 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="info/othercredit"/>
2067 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="sectioninfo/releaseinfo"/>
2068 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="info/releaseinfo"/>
2069 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="sectioninfo/copyright"/>
2070 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="info/copyright"/>
2071 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="sectioninfo/legalnotice"/>
2072 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="info/legalnotice"/>
2073 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="sectioninfo/pubdate"/>
2074 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="info/pubdate"/>
2075 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="sectioninfo/revision"/>
2076 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="info/revision"/>
2077 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="sectioninfo/revhistory"/>
2078 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="info/revhistory"/>
2079 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="sectioninfo/abstract"/>
2080 <xsl:apply-templates mode="section.titlepage.recto.auto.mode" select="info/abstract"/>
2081</xsl:template>
2082
2083<xsl:template name="section.titlepage.verso">
2084</xsl:template>
2085
2086<xsl:template name="section.titlepage.separator"><xsl:if test="count(parent::*)='0'"><hr/></xsl:if>
2087</xsl:template>
2088
2089<xsl:template name="section.titlepage.before.recto">
2090</xsl:template>
2091
2092<xsl:template name="section.titlepage.before.verso">
2093</xsl:template>
2094
2095<xsl:template name="section.titlepage">
2096 <div class="titlepage">
2097 <xsl:variable name="recto.content">
2098 <xsl:call-template name="section.titlepage.before.recto"/>
2099 <xsl:call-template name="section.titlepage.recto"/>
2100 </xsl:variable>
2101 <xsl:variable name="recto.elements.count">
2102 <xsl:choose>
2103 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
2104 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
2105 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
2106 <xsl:otherwise>1</xsl:otherwise>
2107 </xsl:choose>
2108 </xsl:variable>
2109 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
2110 <div><xsl:copy-of select="$recto.content"/></div>
2111 </xsl:if>
2112 <xsl:variable name="verso.content">
2113 <xsl:call-template name="section.titlepage.before.verso"/>
2114 <xsl:call-template name="section.titlepage.verso"/>
2115 </xsl:variable>
2116 <xsl:variable name="verso.elements.count">
2117 <xsl:choose>
2118 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
2119 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
2120 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
2121 <xsl:otherwise>1</xsl:otherwise>
2122 </xsl:choose>
2123 </xsl:variable>
2124 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
2125 <div><xsl:copy-of select="$verso.content"/></div>
2126 </xsl:if>
2127 <xsl:call-template name="section.titlepage.separator"/>
2128 </div>
2129</xsl:template>
2130
2131<xsl:template match="*" mode="section.titlepage.recto.mode">
2132 <!-- if an element isn't found in this mode, -->
2133 <!-- try the generic titlepage.mode -->
2134 <xsl:apply-templates select="." mode="titlepage.mode"/>
2135</xsl:template>
2136
2137<xsl:template match="*" mode="section.titlepage.verso.mode">
2138 <!-- if an element isn't found in this mode, -->
2139 <!-- try the generic titlepage.mode -->
2140 <xsl:apply-templates select="." mode="titlepage.mode"/>
2141</xsl:template>
2142
2143<xsl:template match="title" mode="section.titlepage.recto.auto.mode">
2144<div xsl:use-attribute-sets="section.titlepage.recto.style">
2145<xsl:apply-templates select="." mode="section.titlepage.recto.mode"/>
2146</div>
2147</xsl:template>
2148
2149<xsl:template match="subtitle" mode="section.titlepage.recto.auto.mode">
2150<div xsl:use-attribute-sets="section.titlepage.recto.style">
2151<xsl:apply-templates select="." mode="section.titlepage.recto.mode"/>
2152</div>
2153</xsl:template>
2154
2155<xsl:template match="corpauthor" mode="section.titlepage.recto.auto.mode">
2156<div xsl:use-attribute-sets="section.titlepage.recto.style">
2157<xsl:apply-templates select="." mode="section.titlepage.recto.mode"/>
2158</div>
2159</xsl:template>
2160
2161<xsl:template match="authorgroup" mode="section.titlepage.recto.auto.mode">
2162<div xsl:use-attribute-sets="section.titlepage.recto.style">
2163<xsl:apply-templates select="." mode="section.titlepage.recto.mode"/>
2164</div>
2165</xsl:template>
2166
2167<xsl:template match="author" mode="section.titlepage.recto.auto.mode">
2168<div xsl:use-attribute-sets="section.titlepage.recto.style">
2169<xsl:apply-templates select="." mode="section.titlepage.recto.mode"/>
2170</div>
2171</xsl:template>
2172
2173<xsl:template match="othercredit" mode="section.titlepage.recto.auto.mode">
2174<div xsl:use-attribute-sets="section.titlepage.recto.style">
2175<xsl:apply-templates select="." mode="section.titlepage.recto.mode"/>
2176</div>
2177</xsl:template>
2178
2179<xsl:template match="releaseinfo" mode="section.titlepage.recto.auto.mode">
2180<div xsl:use-attribute-sets="section.titlepage.recto.style">
2181<xsl:apply-templates select="." mode="section.titlepage.recto.mode"/>
2182</div>
2183</xsl:template>
2184
2185<xsl:template match="copyright" mode="section.titlepage.recto.auto.mode">
2186<div xsl:use-attribute-sets="section.titlepage.recto.style">
2187<xsl:apply-templates select="." mode="section.titlepage.recto.mode"/>
2188</div>
2189</xsl:template>
2190
2191<xsl:template match="legalnotice" mode="section.titlepage.recto.auto.mode">
2192<div xsl:use-attribute-sets="section.titlepage.recto.style">
2193<xsl:apply-templates select="." mode="section.titlepage.recto.mode"/>
2194</div>
2195</xsl:template>
2196
2197<xsl:template match="pubdate" mode="section.titlepage.recto.auto.mode">
2198<div xsl:use-attribute-sets="section.titlepage.recto.style">
2199<xsl:apply-templates select="." mode="section.titlepage.recto.mode"/>
2200</div>
2201</xsl:template>
2202
2203<xsl:template match="revision" mode="section.titlepage.recto.auto.mode">
2204<div xsl:use-attribute-sets="section.titlepage.recto.style">
2205<xsl:apply-templates select="." mode="section.titlepage.recto.mode"/>
2206</div>
2207</xsl:template>
2208
2209<xsl:template match="revhistory" mode="section.titlepage.recto.auto.mode">
2210<div xsl:use-attribute-sets="section.titlepage.recto.style">
2211<xsl:apply-templates select="." mode="section.titlepage.recto.mode"/>
2212</div>
2213</xsl:template>
2214
2215<xsl:template match="abstract" mode="section.titlepage.recto.auto.mode">
2216<div xsl:use-attribute-sets="section.titlepage.recto.style">
2217<xsl:apply-templates select="." mode="section.titlepage.recto.mode"/>
2218</div>
2219</xsl:template>
2220
2221<xsl:template name="sect1.titlepage.recto">
2222 <xsl:choose>
2223 <xsl:when test="sect1info/title">
2224 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="sect1info/title"/>
2225 </xsl:when>
2226 <xsl:when test="info/title">
2227 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="info/title"/>
2228 </xsl:when>
2229 <xsl:when test="title">
2230 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="title"/>
2231 </xsl:when>
2232 </xsl:choose>
2233
2234 <xsl:choose>
2235 <xsl:when test="sect1info/subtitle">
2236 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="sect1info/subtitle"/>
2237 </xsl:when>
2238 <xsl:when test="info/subtitle">
2239 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="info/subtitle"/>
2240 </xsl:when>
2241 <xsl:when test="subtitle">
2242 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="subtitle"/>
2243 </xsl:when>
2244 </xsl:choose>
2245
2246 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="sect1info/corpauthor"/>
2247 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="info/corpauthor"/>
2248 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="sect1info/authorgroup"/>
2249 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="info/authorgroup"/>
2250 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="sect1info/author"/>
2251 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="info/author"/>
2252 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="sect1info/othercredit"/>
2253 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="info/othercredit"/>
2254 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="sect1info/releaseinfo"/>
2255 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="info/releaseinfo"/>
2256 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="sect1info/copyright"/>
2257 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="info/copyright"/>
2258 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="sect1info/legalnotice"/>
2259 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="info/legalnotice"/>
2260 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="sect1info/pubdate"/>
2261 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="info/pubdate"/>
2262 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="sect1info/revision"/>
2263 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="info/revision"/>
2264 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="sect1info/revhistory"/>
2265 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="info/revhistory"/>
2266 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="sect1info/abstract"/>
2267 <xsl:apply-templates mode="sect1.titlepage.recto.auto.mode" select="info/abstract"/>
2268</xsl:template>
2269
2270<xsl:template name="sect1.titlepage.verso">
2271</xsl:template>
2272
2273<xsl:template name="sect1.titlepage.separator"><xsl:if test="count(parent::*)='0'"><hr/></xsl:if>
2274</xsl:template>
2275
2276<xsl:template name="sect1.titlepage.before.recto">
2277</xsl:template>
2278
2279<xsl:template name="sect1.titlepage.before.verso">
2280</xsl:template>
2281
2282<xsl:template name="sect1.titlepage">
2283 <div class="titlepage">
2284 <xsl:variable name="recto.content">
2285 <xsl:call-template name="sect1.titlepage.before.recto"/>
2286 <xsl:call-template name="sect1.titlepage.recto"/>
2287 </xsl:variable>
2288 <xsl:variable name="recto.elements.count">
2289 <xsl:choose>
2290 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
2291 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
2292 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
2293 <xsl:otherwise>1</xsl:otherwise>
2294 </xsl:choose>
2295 </xsl:variable>
2296 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
2297 <div><xsl:copy-of select="$recto.content"/></div>
2298 </xsl:if>
2299 <xsl:variable name="verso.content">
2300 <xsl:call-template name="sect1.titlepage.before.verso"/>
2301 <xsl:call-template name="sect1.titlepage.verso"/>
2302 </xsl:variable>
2303 <xsl:variable name="verso.elements.count">
2304 <xsl:choose>
2305 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
2306 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
2307 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
2308 <xsl:otherwise>1</xsl:otherwise>
2309 </xsl:choose>
2310 </xsl:variable>
2311 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
2312 <div><xsl:copy-of select="$verso.content"/></div>
2313 </xsl:if>
2314 <xsl:call-template name="sect1.titlepage.separator"/>
2315 </div>
2316</xsl:template>
2317
2318<xsl:template match="*" mode="sect1.titlepage.recto.mode">
2319 <!-- if an element isn't found in this mode, -->
2320 <!-- try the generic titlepage.mode -->
2321 <xsl:apply-templates select="." mode="titlepage.mode"/>
2322</xsl:template>
2323
2324<xsl:template match="*" mode="sect1.titlepage.verso.mode">
2325 <!-- if an element isn't found in this mode, -->
2326 <!-- try the generic titlepage.mode -->
2327 <xsl:apply-templates select="." mode="titlepage.mode"/>
2328</xsl:template>
2329
2330<xsl:template match="title" mode="sect1.titlepage.recto.auto.mode">
2331<div xsl:use-attribute-sets="sect1.titlepage.recto.style">
2332<xsl:apply-templates select="." mode="sect1.titlepage.recto.mode"/>
2333</div>
2334</xsl:template>
2335
2336<xsl:template match="subtitle" mode="sect1.titlepage.recto.auto.mode">
2337<div xsl:use-attribute-sets="sect1.titlepage.recto.style">
2338<xsl:apply-templates select="." mode="sect1.titlepage.recto.mode"/>
2339</div>
2340</xsl:template>
2341
2342<xsl:template match="corpauthor" mode="sect1.titlepage.recto.auto.mode">
2343<div xsl:use-attribute-sets="sect1.titlepage.recto.style">
2344<xsl:apply-templates select="." mode="sect1.titlepage.recto.mode"/>
2345</div>
2346</xsl:template>
2347
2348<xsl:template match="authorgroup" mode="sect1.titlepage.recto.auto.mode">
2349<div xsl:use-attribute-sets="sect1.titlepage.recto.style">
2350<xsl:apply-templates select="." mode="sect1.titlepage.recto.mode"/>
2351</div>
2352</xsl:template>
2353
2354<xsl:template match="author" mode="sect1.titlepage.recto.auto.mode">
2355<div xsl:use-attribute-sets="sect1.titlepage.recto.style">
2356<xsl:apply-templates select="." mode="sect1.titlepage.recto.mode"/>
2357</div>
2358</xsl:template>
2359
2360<xsl:template match="othercredit" mode="sect1.titlepage.recto.auto.mode">
2361<div xsl:use-attribute-sets="sect1.titlepage.recto.style">
2362<xsl:apply-templates select="." mode="sect1.titlepage.recto.mode"/>
2363</div>
2364</xsl:template>
2365
2366<xsl:template match="releaseinfo" mode="sect1.titlepage.recto.auto.mode">
2367<div xsl:use-attribute-sets="sect1.titlepage.recto.style">
2368<xsl:apply-templates select="." mode="sect1.titlepage.recto.mode"/>
2369</div>
2370</xsl:template>
2371
2372<xsl:template match="copyright" mode="sect1.titlepage.recto.auto.mode">
2373<div xsl:use-attribute-sets="sect1.titlepage.recto.style">
2374<xsl:apply-templates select="." mode="sect1.titlepage.recto.mode"/>
2375</div>
2376</xsl:template>
2377
2378<xsl:template match="legalnotice" mode="sect1.titlepage.recto.auto.mode">
2379<div xsl:use-attribute-sets="sect1.titlepage.recto.style">
2380<xsl:apply-templates select="." mode="sect1.titlepage.recto.mode"/>
2381</div>
2382</xsl:template>
2383
2384<xsl:template match="pubdate" mode="sect1.titlepage.recto.auto.mode">
2385<div xsl:use-attribute-sets="sect1.titlepage.recto.style">
2386<xsl:apply-templates select="." mode="sect1.titlepage.recto.mode"/>
2387</div>
2388</xsl:template>
2389
2390<xsl:template match="revision" mode="sect1.titlepage.recto.auto.mode">
2391<div xsl:use-attribute-sets="sect1.titlepage.recto.style">
2392<xsl:apply-templates select="." mode="sect1.titlepage.recto.mode"/>
2393</div>
2394</xsl:template>
2395
2396<xsl:template match="revhistory" mode="sect1.titlepage.recto.auto.mode">
2397<div xsl:use-attribute-sets="sect1.titlepage.recto.style">
2398<xsl:apply-templates select="." mode="sect1.titlepage.recto.mode"/>
2399</div>
2400</xsl:template>
2401
2402<xsl:template match="abstract" mode="sect1.titlepage.recto.auto.mode">
2403<div xsl:use-attribute-sets="sect1.titlepage.recto.style">
2404<xsl:apply-templates select="." mode="sect1.titlepage.recto.mode"/>
2405</div>
2406</xsl:template>
2407
2408<xsl:template name="sect2.titlepage.recto">
2409 <xsl:choose>
2410 <xsl:when test="sect2info/title">
2411 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="sect2info/title"/>
2412 </xsl:when>
2413 <xsl:when test="info/title">
2414 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="info/title"/>
2415 </xsl:when>
2416 <xsl:when test="title">
2417 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="title"/>
2418 </xsl:when>
2419 </xsl:choose>
2420
2421 <xsl:choose>
2422 <xsl:when test="sect2info/subtitle">
2423 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="sect2info/subtitle"/>
2424 </xsl:when>
2425 <xsl:when test="info/subtitle">
2426 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="info/subtitle"/>
2427 </xsl:when>
2428 <xsl:when test="subtitle">
2429 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="subtitle"/>
2430 </xsl:when>
2431 </xsl:choose>
2432
2433 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="sect2info/corpauthor"/>
2434 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="info/corpauthor"/>
2435 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="sect2info/authorgroup"/>
2436 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="info/authorgroup"/>
2437 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="sect2info/author"/>
2438 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="info/author"/>
2439 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="sect2info/othercredit"/>
2440 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="info/othercredit"/>
2441 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="sect2info/releaseinfo"/>
2442 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="info/releaseinfo"/>
2443 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="sect2info/copyright"/>
2444 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="info/copyright"/>
2445 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="sect2info/legalnotice"/>
2446 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="info/legalnotice"/>
2447 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="sect2info/pubdate"/>
2448 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="info/pubdate"/>
2449 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="sect2info/revision"/>
2450 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="info/revision"/>
2451 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="sect2info/revhistory"/>
2452 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="info/revhistory"/>
2453 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="sect2info/abstract"/>
2454 <xsl:apply-templates mode="sect2.titlepage.recto.auto.mode" select="info/abstract"/>
2455</xsl:template>
2456
2457<xsl:template name="sect2.titlepage.verso">
2458</xsl:template>
2459
2460<xsl:template name="sect2.titlepage.separator"><xsl:if test="count(parent::*)='0'"><hr/></xsl:if>
2461</xsl:template>
2462
2463<xsl:template name="sect2.titlepage.before.recto">
2464</xsl:template>
2465
2466<xsl:template name="sect2.titlepage.before.verso">
2467</xsl:template>
2468
2469<xsl:template name="sect2.titlepage">
2470 <div class="titlepage">
2471 <xsl:variable name="recto.content">
2472 <xsl:call-template name="sect2.titlepage.before.recto"/>
2473 <xsl:call-template name="sect2.titlepage.recto"/>
2474 </xsl:variable>
2475 <xsl:variable name="recto.elements.count">
2476 <xsl:choose>
2477 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
2478 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
2479 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
2480 <xsl:otherwise>1</xsl:otherwise>
2481 </xsl:choose>
2482 </xsl:variable>
2483 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
2484 <div><xsl:copy-of select="$recto.content"/></div>
2485 </xsl:if>
2486 <xsl:variable name="verso.content">
2487 <xsl:call-template name="sect2.titlepage.before.verso"/>
2488 <xsl:call-template name="sect2.titlepage.verso"/>
2489 </xsl:variable>
2490 <xsl:variable name="verso.elements.count">
2491 <xsl:choose>
2492 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
2493 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
2494 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
2495 <xsl:otherwise>1</xsl:otherwise>
2496 </xsl:choose>
2497 </xsl:variable>
2498 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
2499 <div><xsl:copy-of select="$verso.content"/></div>
2500 </xsl:if>
2501 <xsl:call-template name="sect2.titlepage.separator"/>
2502 </div>
2503</xsl:template>
2504
2505<xsl:template match="*" mode="sect2.titlepage.recto.mode">
2506 <!-- if an element isn't found in this mode, -->
2507 <!-- try the generic titlepage.mode -->
2508 <xsl:apply-templates select="." mode="titlepage.mode"/>
2509</xsl:template>
2510
2511<xsl:template match="*" mode="sect2.titlepage.verso.mode">
2512 <!-- if an element isn't found in this mode, -->
2513 <!-- try the generic titlepage.mode -->
2514 <xsl:apply-templates select="." mode="titlepage.mode"/>
2515</xsl:template>
2516
2517<xsl:template match="title" mode="sect2.titlepage.recto.auto.mode">
2518<div xsl:use-attribute-sets="sect2.titlepage.recto.style">
2519<xsl:apply-templates select="." mode="sect2.titlepage.recto.mode"/>
2520</div>
2521</xsl:template>
2522
2523<xsl:template match="subtitle" mode="sect2.titlepage.recto.auto.mode">
2524<div xsl:use-attribute-sets="sect2.titlepage.recto.style">
2525<xsl:apply-templates select="." mode="sect2.titlepage.recto.mode"/>
2526</div>
2527</xsl:template>
2528
2529<xsl:template match="corpauthor" mode="sect2.titlepage.recto.auto.mode">
2530<div xsl:use-attribute-sets="sect2.titlepage.recto.style">
2531<xsl:apply-templates select="." mode="sect2.titlepage.recto.mode"/>
2532</div>
2533</xsl:template>
2534
2535<xsl:template match="authorgroup" mode="sect2.titlepage.recto.auto.mode">
2536<div xsl:use-attribute-sets="sect2.titlepage.recto.style">
2537<xsl:apply-templates select="." mode="sect2.titlepage.recto.mode"/>
2538</div>
2539</xsl:template>
2540
2541<xsl:template match="author" mode="sect2.titlepage.recto.auto.mode">
2542<div xsl:use-attribute-sets="sect2.titlepage.recto.style">
2543<xsl:apply-templates select="." mode="sect2.titlepage.recto.mode"/>
2544</div>
2545</xsl:template>
2546
2547<xsl:template match="othercredit" mode="sect2.titlepage.recto.auto.mode">
2548<div xsl:use-attribute-sets="sect2.titlepage.recto.style">
2549<xsl:apply-templates select="." mode="sect2.titlepage.recto.mode"/>
2550</div>
2551</xsl:template>
2552
2553<xsl:template match="releaseinfo" mode="sect2.titlepage.recto.auto.mode">
2554<div xsl:use-attribute-sets="sect2.titlepage.recto.style">
2555<xsl:apply-templates select="." mode="sect2.titlepage.recto.mode"/>
2556</div>
2557</xsl:template>
2558
2559<xsl:template match="copyright" mode="sect2.titlepage.recto.auto.mode">
2560<div xsl:use-attribute-sets="sect2.titlepage.recto.style">
2561<xsl:apply-templates select="." mode="sect2.titlepage.recto.mode"/>
2562</div>
2563</xsl:template>
2564
2565<xsl:template match="legalnotice" mode="sect2.titlepage.recto.auto.mode">
2566<div xsl:use-attribute-sets="sect2.titlepage.recto.style">
2567<xsl:apply-templates select="." mode="sect2.titlepage.recto.mode"/>
2568</div>
2569</xsl:template>
2570
2571<xsl:template match="pubdate" mode="sect2.titlepage.recto.auto.mode">
2572<div xsl:use-attribute-sets="sect2.titlepage.recto.style">
2573<xsl:apply-templates select="." mode="sect2.titlepage.recto.mode"/>
2574</div>
2575</xsl:template>
2576
2577<xsl:template match="revision" mode="sect2.titlepage.recto.auto.mode">
2578<div xsl:use-attribute-sets="sect2.titlepage.recto.style">
2579<xsl:apply-templates select="." mode="sect2.titlepage.recto.mode"/>
2580</div>
2581</xsl:template>
2582
2583<xsl:template match="revhistory" mode="sect2.titlepage.recto.auto.mode">
2584<div xsl:use-attribute-sets="sect2.titlepage.recto.style">
2585<xsl:apply-templates select="." mode="sect2.titlepage.recto.mode"/>
2586</div>
2587</xsl:template>
2588
2589<xsl:template match="abstract" mode="sect2.titlepage.recto.auto.mode">
2590<div xsl:use-attribute-sets="sect2.titlepage.recto.style">
2591<xsl:apply-templates select="." mode="sect2.titlepage.recto.mode"/>
2592</div>
2593</xsl:template>
2594
2595<xsl:template name="sect3.titlepage.recto">
2596 <xsl:choose>
2597 <xsl:when test="sect3info/title">
2598 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="sect3info/title"/>
2599 </xsl:when>
2600 <xsl:when test="info/title">
2601 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="info/title"/>
2602 </xsl:when>
2603 <xsl:when test="title">
2604 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="title"/>
2605 </xsl:when>
2606 </xsl:choose>
2607
2608 <xsl:choose>
2609 <xsl:when test="sect3info/subtitle">
2610 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="sect3info/subtitle"/>
2611 </xsl:when>
2612 <xsl:when test="info/subtitle">
2613 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="info/subtitle"/>
2614 </xsl:when>
2615 <xsl:when test="subtitle">
2616 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="subtitle"/>
2617 </xsl:when>
2618 </xsl:choose>
2619
2620 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="sect3info/corpauthor"/>
2621 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="info/corpauthor"/>
2622 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="sect3info/authorgroup"/>
2623 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="info/authorgroup"/>
2624 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="sect3info/author"/>
2625 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="info/author"/>
2626 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="sect3info/othercredit"/>
2627 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="info/othercredit"/>
2628 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="sect3info/releaseinfo"/>
2629 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="info/releaseinfo"/>
2630 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="sect3info/copyright"/>
2631 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="info/copyright"/>
2632 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="sect3info/legalnotice"/>
2633 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="info/legalnotice"/>
2634 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="sect3info/pubdate"/>
2635 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="info/pubdate"/>
2636 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="sect3info/revision"/>
2637 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="info/revision"/>
2638 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="sect3info/revhistory"/>
2639 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="info/revhistory"/>
2640 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="sect3info/abstract"/>
2641 <xsl:apply-templates mode="sect3.titlepage.recto.auto.mode" select="info/abstract"/>
2642</xsl:template>
2643
2644<xsl:template name="sect3.titlepage.verso">
2645</xsl:template>
2646
2647<xsl:template name="sect3.titlepage.separator"><xsl:if test="count(parent::*)='0'"><hr/></xsl:if>
2648</xsl:template>
2649
2650<xsl:template name="sect3.titlepage.before.recto">
2651</xsl:template>
2652
2653<xsl:template name="sect3.titlepage.before.verso">
2654</xsl:template>
2655
2656<xsl:template name="sect3.titlepage">
2657 <div class="titlepage">
2658 <xsl:variable name="recto.content">
2659 <xsl:call-template name="sect3.titlepage.before.recto"/>
2660 <xsl:call-template name="sect3.titlepage.recto"/>
2661 </xsl:variable>
2662 <xsl:variable name="recto.elements.count">
2663 <xsl:choose>
2664 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
2665 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
2666 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
2667 <xsl:otherwise>1</xsl:otherwise>
2668 </xsl:choose>
2669 </xsl:variable>
2670 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
2671 <div><xsl:copy-of select="$recto.content"/></div>
2672 </xsl:if>
2673 <xsl:variable name="verso.content">
2674 <xsl:call-template name="sect3.titlepage.before.verso"/>
2675 <xsl:call-template name="sect3.titlepage.verso"/>
2676 </xsl:variable>
2677 <xsl:variable name="verso.elements.count">
2678 <xsl:choose>
2679 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
2680 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
2681 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
2682 <xsl:otherwise>1</xsl:otherwise>
2683 </xsl:choose>
2684 </xsl:variable>
2685 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
2686 <div><xsl:copy-of select="$verso.content"/></div>
2687 </xsl:if>
2688 <xsl:call-template name="sect3.titlepage.separator"/>
2689 </div>
2690</xsl:template>
2691
2692<xsl:template match="*" mode="sect3.titlepage.recto.mode">
2693 <!-- if an element isn't found in this mode, -->
2694 <!-- try the generic titlepage.mode -->
2695 <xsl:apply-templates select="." mode="titlepage.mode"/>
2696</xsl:template>
2697
2698<xsl:template match="*" mode="sect3.titlepage.verso.mode">
2699 <!-- if an element isn't found in this mode, -->
2700 <!-- try the generic titlepage.mode -->
2701 <xsl:apply-templates select="." mode="titlepage.mode"/>
2702</xsl:template>
2703
2704<xsl:template match="title" mode="sect3.titlepage.recto.auto.mode">
2705<div xsl:use-attribute-sets="sect3.titlepage.recto.style">
2706<xsl:apply-templates select="." mode="sect3.titlepage.recto.mode"/>
2707</div>
2708</xsl:template>
2709
2710<xsl:template match="subtitle" mode="sect3.titlepage.recto.auto.mode">
2711<div xsl:use-attribute-sets="sect3.titlepage.recto.style">
2712<xsl:apply-templates select="." mode="sect3.titlepage.recto.mode"/>
2713</div>
2714</xsl:template>
2715
2716<xsl:template match="corpauthor" mode="sect3.titlepage.recto.auto.mode">
2717<div xsl:use-attribute-sets="sect3.titlepage.recto.style">
2718<xsl:apply-templates select="." mode="sect3.titlepage.recto.mode"/>
2719</div>
2720</xsl:template>
2721
2722<xsl:template match="authorgroup" mode="sect3.titlepage.recto.auto.mode">
2723<div xsl:use-attribute-sets="sect3.titlepage.recto.style">
2724<xsl:apply-templates select="." mode="sect3.titlepage.recto.mode"/>
2725</div>
2726</xsl:template>
2727
2728<xsl:template match="author" mode="sect3.titlepage.recto.auto.mode">
2729<div xsl:use-attribute-sets="sect3.titlepage.recto.style">
2730<xsl:apply-templates select="." mode="sect3.titlepage.recto.mode"/>
2731</div>
2732</xsl:template>
2733
2734<xsl:template match="othercredit" mode="sect3.titlepage.recto.auto.mode">
2735<div xsl:use-attribute-sets="sect3.titlepage.recto.style">
2736<xsl:apply-templates select="." mode="sect3.titlepage.recto.mode"/>
2737</div>
2738</xsl:template>
2739
2740<xsl:template match="releaseinfo" mode="sect3.titlepage.recto.auto.mode">
2741<div xsl:use-attribute-sets="sect3.titlepage.recto.style">
2742<xsl:apply-templates select="." mode="sect3.titlepage.recto.mode"/>
2743</div>
2744</xsl:template>
2745
2746<xsl:template match="copyright" mode="sect3.titlepage.recto.auto.mode">
2747<div xsl:use-attribute-sets="sect3.titlepage.recto.style">
2748<xsl:apply-templates select="." mode="sect3.titlepage.recto.mode"/>
2749</div>
2750</xsl:template>
2751
2752<xsl:template match="legalnotice" mode="sect3.titlepage.recto.auto.mode">
2753<div xsl:use-attribute-sets="sect3.titlepage.recto.style">
2754<xsl:apply-templates select="." mode="sect3.titlepage.recto.mode"/>
2755</div>
2756</xsl:template>
2757
2758<xsl:template match="pubdate" mode="sect3.titlepage.recto.auto.mode">
2759<div xsl:use-attribute-sets="sect3.titlepage.recto.style">
2760<xsl:apply-templates select="." mode="sect3.titlepage.recto.mode"/>
2761</div>
2762</xsl:template>
2763
2764<xsl:template match="revision" mode="sect3.titlepage.recto.auto.mode">
2765<div xsl:use-attribute-sets="sect3.titlepage.recto.style">
2766<xsl:apply-templates select="." mode="sect3.titlepage.recto.mode"/>
2767</div>
2768</xsl:template>
2769
2770<xsl:template match="revhistory" mode="sect3.titlepage.recto.auto.mode">
2771<div xsl:use-attribute-sets="sect3.titlepage.recto.style">
2772<xsl:apply-templates select="." mode="sect3.titlepage.recto.mode"/>
2773</div>
2774</xsl:template>
2775
2776<xsl:template match="abstract" mode="sect3.titlepage.recto.auto.mode">
2777<div xsl:use-attribute-sets="sect3.titlepage.recto.style">
2778<xsl:apply-templates select="." mode="sect3.titlepage.recto.mode"/>
2779</div>
2780</xsl:template>
2781
2782<xsl:template name="sect4.titlepage.recto">
2783 <xsl:choose>
2784 <xsl:when test="sect4info/title">
2785 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="sect4info/title"/>
2786 </xsl:when>
2787 <xsl:when test="info/title">
2788 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="info/title"/>
2789 </xsl:when>
2790 <xsl:when test="title">
2791 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="title"/>
2792 </xsl:when>
2793 </xsl:choose>
2794
2795 <xsl:choose>
2796 <xsl:when test="sect4info/subtitle">
2797 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="sect4info/subtitle"/>
2798 </xsl:when>
2799 <xsl:when test="info/subtitle">
2800 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="info/subtitle"/>
2801 </xsl:when>
2802 <xsl:when test="subtitle">
2803 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="subtitle"/>
2804 </xsl:when>
2805 </xsl:choose>
2806
2807 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="sect4info/corpauthor"/>
2808 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="info/corpauthor"/>
2809 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="sect4info/authorgroup"/>
2810 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="info/authorgroup"/>
2811 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="sect4info/author"/>
2812 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="info/author"/>
2813 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="sect4info/othercredit"/>
2814 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="info/othercredit"/>
2815 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="sect4info/releaseinfo"/>
2816 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="info/releaseinfo"/>
2817 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="sect4info/copyright"/>
2818 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="info/copyright"/>
2819 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="sect4info/legalnotice"/>
2820 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="info/legalnotice"/>
2821 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="sect4info/pubdate"/>
2822 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="info/pubdate"/>
2823 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="sect4info/revision"/>
2824 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="info/revision"/>
2825 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="sect4info/revhistory"/>
2826 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="info/revhistory"/>
2827 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="sect4info/abstract"/>
2828 <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="info/abstract"/>
2829</xsl:template>
2830
2831<xsl:template name="sect4.titlepage.verso">
2832</xsl:template>
2833
2834<xsl:template name="sect4.titlepage.separator"><xsl:if test="count(parent::*)='0'"><hr/></xsl:if>
2835</xsl:template>
2836
2837<xsl:template name="sect4.titlepage.before.recto">
2838</xsl:template>
2839
2840<xsl:template name="sect4.titlepage.before.verso">
2841</xsl:template>
2842
2843<xsl:template name="sect4.titlepage">
2844 <div class="titlepage">
2845 <xsl:variable name="recto.content">
2846 <xsl:call-template name="sect4.titlepage.before.recto"/>
2847 <xsl:call-template name="sect4.titlepage.recto"/>
2848 </xsl:variable>
2849 <xsl:variable name="recto.elements.count">
2850 <xsl:choose>
2851 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
2852 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
2853 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
2854 <xsl:otherwise>1</xsl:otherwise>
2855 </xsl:choose>
2856 </xsl:variable>
2857 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
2858 <div><xsl:copy-of select="$recto.content"/></div>
2859 </xsl:if>
2860 <xsl:variable name="verso.content">
2861 <xsl:call-template name="sect4.titlepage.before.verso"/>
2862 <xsl:call-template name="sect4.titlepage.verso"/>
2863 </xsl:variable>
2864 <xsl:variable name="verso.elements.count">
2865 <xsl:choose>
2866 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
2867 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
2868 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
2869 <xsl:otherwise>1</xsl:otherwise>
2870 </xsl:choose>
2871 </xsl:variable>
2872 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
2873 <div><xsl:copy-of select="$verso.content"/></div>
2874 </xsl:if>
2875 <xsl:call-template name="sect4.titlepage.separator"/>
2876 </div>
2877</xsl:template>
2878
2879<xsl:template match="*" mode="sect4.titlepage.recto.mode">
2880 <!-- if an element isn't found in this mode, -->
2881 <!-- try the generic titlepage.mode -->
2882 <xsl:apply-templates select="." mode="titlepage.mode"/>
2883</xsl:template>
2884
2885<xsl:template match="*" mode="sect4.titlepage.verso.mode">
2886 <!-- if an element isn't found in this mode, -->
2887 <!-- try the generic titlepage.mode -->
2888 <xsl:apply-templates select="." mode="titlepage.mode"/>
2889</xsl:template>
2890
2891<xsl:template match="title" mode="sect4.titlepage.recto.auto.mode">
2892<div xsl:use-attribute-sets="sect4.titlepage.recto.style">
2893<xsl:apply-templates select="." mode="sect4.titlepage.recto.mode"/>
2894</div>
2895</xsl:template>
2896
2897<xsl:template match="subtitle" mode="sect4.titlepage.recto.auto.mode">
2898<div xsl:use-attribute-sets="sect4.titlepage.recto.style">
2899<xsl:apply-templates select="." mode="sect4.titlepage.recto.mode"/>
2900</div>
2901</xsl:template>
2902
2903<xsl:template match="corpauthor" mode="sect4.titlepage.recto.auto.mode">
2904<div xsl:use-attribute-sets="sect4.titlepage.recto.style">
2905<xsl:apply-templates select="." mode="sect4.titlepage.recto.mode"/>
2906</div>
2907</xsl:template>
2908
2909<xsl:template match="authorgroup" mode="sect4.titlepage.recto.auto.mode">
2910<div xsl:use-attribute-sets="sect4.titlepage.recto.style">
2911<xsl:apply-templates select="." mode="sect4.titlepage.recto.mode"/>
2912</div>
2913</xsl:template>
2914
2915<xsl:template match="author" mode="sect4.titlepage.recto.auto.mode">
2916<div xsl:use-attribute-sets="sect4.titlepage.recto.style">
2917<xsl:apply-templates select="." mode="sect4.titlepage.recto.mode"/>
2918</div>
2919</xsl:template>
2920
2921<xsl:template match="othercredit" mode="sect4.titlepage.recto.auto.mode">
2922<div xsl:use-attribute-sets="sect4.titlepage.recto.style">
2923<xsl:apply-templates select="." mode="sect4.titlepage.recto.mode"/>
2924</div>
2925</xsl:template>
2926
2927<xsl:template match="releaseinfo" mode="sect4.titlepage.recto.auto.mode">
2928<div xsl:use-attribute-sets="sect4.titlepage.recto.style">
2929<xsl:apply-templates select="." mode="sect4.titlepage.recto.mode"/>
2930</div>
2931</xsl:template>
2932
2933<xsl:template match="copyright" mode="sect4.titlepage.recto.auto.mode">
2934<div xsl:use-attribute-sets="sect4.titlepage.recto.style">
2935<xsl:apply-templates select="." mode="sect4.titlepage.recto.mode"/>
2936</div>
2937</xsl:template>
2938
2939<xsl:template match="legalnotice" mode="sect4.titlepage.recto.auto.mode">
2940<div xsl:use-attribute-sets="sect4.titlepage.recto.style">
2941<xsl:apply-templates select="." mode="sect4.titlepage.recto.mode"/>
2942</div>
2943</xsl:template>
2944
2945<xsl:template match="pubdate" mode="sect4.titlepage.recto.auto.mode">
2946<div xsl:use-attribute-sets="sect4.titlepage.recto.style">
2947<xsl:apply-templates select="." mode="sect4.titlepage.recto.mode"/>
2948</div>
2949</xsl:template>
2950
2951<xsl:template match="revision" mode="sect4.titlepage.recto.auto.mode">
2952<div xsl:use-attribute-sets="sect4.titlepage.recto.style">
2953<xsl:apply-templates select="." mode="sect4.titlepage.recto.mode"/>
2954</div>
2955</xsl:template>
2956
2957<xsl:template match="revhistory" mode="sect4.titlepage.recto.auto.mode">
2958<div xsl:use-attribute-sets="sect4.titlepage.recto.style">
2959<xsl:apply-templates select="." mode="sect4.titlepage.recto.mode"/>
2960</div>
2961</xsl:template>
2962
2963<xsl:template match="abstract" mode="sect4.titlepage.recto.auto.mode">
2964<div xsl:use-attribute-sets="sect4.titlepage.recto.style">
2965<xsl:apply-templates select="." mode="sect4.titlepage.recto.mode"/>
2966</div>
2967</xsl:template>
2968
2969<xsl:template name="sect5.titlepage.recto">
2970 <xsl:choose>
2971 <xsl:when test="sect5info/title">
2972 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="sect5info/title"/>
2973 </xsl:when>
2974 <xsl:when test="info/title">
2975 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="info/title"/>
2976 </xsl:when>
2977 <xsl:when test="title">
2978 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="title"/>
2979 </xsl:when>
2980 </xsl:choose>
2981
2982 <xsl:choose>
2983 <xsl:when test="sect5info/subtitle">
2984 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="sect5info/subtitle"/>
2985 </xsl:when>
2986 <xsl:when test="info/subtitle">
2987 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="info/subtitle"/>
2988 </xsl:when>
2989 <xsl:when test="subtitle">
2990 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="subtitle"/>
2991 </xsl:when>
2992 </xsl:choose>
2993
2994 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="sect5info/corpauthor"/>
2995 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="info/corpauthor"/>
2996 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="sect5info/authorgroup"/>
2997 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="info/authorgroup"/>
2998 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="sect5info/author"/>
2999 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="info/author"/>
3000 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="sect5info/othercredit"/>
3001 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="info/othercredit"/>
3002 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="sect5info/releaseinfo"/>
3003 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="info/releaseinfo"/>
3004 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="sect5info/copyright"/>
3005 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="info/copyright"/>
3006 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="sect5info/legalnotice"/>
3007 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="info/legalnotice"/>
3008 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="sect5info/pubdate"/>
3009 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="info/pubdate"/>
3010 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="sect5info/revision"/>
3011 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="info/revision"/>
3012 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="sect5info/revhistory"/>
3013 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="info/revhistory"/>
3014 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="sect5info/abstract"/>
3015 <xsl:apply-templates mode="sect5.titlepage.recto.auto.mode" select="info/abstract"/>
3016</xsl:template>
3017
3018<xsl:template name="sect5.titlepage.verso">
3019</xsl:template>
3020
3021<xsl:template name="sect5.titlepage.separator"><xsl:if test="count(parent::*)='0'"><hr/></xsl:if>
3022</xsl:template>
3023
3024<xsl:template name="sect5.titlepage.before.recto">
3025</xsl:template>
3026
3027<xsl:template name="sect5.titlepage.before.verso">
3028</xsl:template>
3029
3030<xsl:template name="sect5.titlepage">
3031 <div class="titlepage">
3032 <xsl:variable name="recto.content">
3033 <xsl:call-template name="sect5.titlepage.before.recto"/>
3034 <xsl:call-template name="sect5.titlepage.recto"/>
3035 </xsl:variable>
3036 <xsl:variable name="recto.elements.count">
3037 <xsl:choose>
3038 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
3039 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
3040 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
3041 <xsl:otherwise>1</xsl:otherwise>
3042 </xsl:choose>
3043 </xsl:variable>
3044 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
3045 <div><xsl:copy-of select="$recto.content"/></div>
3046 </xsl:if>
3047 <xsl:variable name="verso.content">
3048 <xsl:call-template name="sect5.titlepage.before.verso"/>
3049 <xsl:call-template name="sect5.titlepage.verso"/>
3050 </xsl:variable>
3051 <xsl:variable name="verso.elements.count">
3052 <xsl:choose>
3053 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
3054 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
3055 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
3056 <xsl:otherwise>1</xsl:otherwise>
3057 </xsl:choose>
3058 </xsl:variable>
3059 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
3060 <div><xsl:copy-of select="$verso.content"/></div>
3061 </xsl:if>
3062 <xsl:call-template name="sect5.titlepage.separator"/>
3063 </div>
3064</xsl:template>
3065
3066<xsl:template match="*" mode="sect5.titlepage.recto.mode">
3067 <!-- if an element isn't found in this mode, -->
3068 <!-- try the generic titlepage.mode -->
3069 <xsl:apply-templates select="." mode="titlepage.mode"/>
3070</xsl:template>
3071
3072<xsl:template match="*" mode="sect5.titlepage.verso.mode">
3073 <!-- if an element isn't found in this mode, -->
3074 <!-- try the generic titlepage.mode -->
3075 <xsl:apply-templates select="." mode="titlepage.mode"/>
3076</xsl:template>
3077
3078<xsl:template match="title" mode="sect5.titlepage.recto.auto.mode">
3079<div xsl:use-attribute-sets="sect5.titlepage.recto.style">
3080<xsl:apply-templates select="." mode="sect5.titlepage.recto.mode"/>
3081</div>
3082</xsl:template>
3083
3084<xsl:template match="subtitle" mode="sect5.titlepage.recto.auto.mode">
3085<div xsl:use-attribute-sets="sect5.titlepage.recto.style">
3086<xsl:apply-templates select="." mode="sect5.titlepage.recto.mode"/>
3087</div>
3088</xsl:template>
3089
3090<xsl:template match="corpauthor" mode="sect5.titlepage.recto.auto.mode">
3091<div xsl:use-attribute-sets="sect5.titlepage.recto.style">
3092<xsl:apply-templates select="." mode="sect5.titlepage.recto.mode"/>
3093</div>
3094</xsl:template>
3095
3096<xsl:template match="authorgroup" mode="sect5.titlepage.recto.auto.mode">
3097<div xsl:use-attribute-sets="sect5.titlepage.recto.style">
3098<xsl:apply-templates select="." mode="sect5.titlepage.recto.mode"/>
3099</div>
3100</xsl:template>
3101
3102<xsl:template match="author" mode="sect5.titlepage.recto.auto.mode">
3103<div xsl:use-attribute-sets="sect5.titlepage.recto.style">
3104<xsl:apply-templates select="." mode="sect5.titlepage.recto.mode"/>
3105</div>
3106</xsl:template>
3107
3108<xsl:template match="othercredit" mode="sect5.titlepage.recto.auto.mode">
3109<div xsl:use-attribute-sets="sect5.titlepage.recto.style">
3110<xsl:apply-templates select="." mode="sect5.titlepage.recto.mode"/>
3111</div>
3112</xsl:template>
3113
3114<xsl:template match="releaseinfo" mode="sect5.titlepage.recto.auto.mode">
3115<div xsl:use-attribute-sets="sect5.titlepage.recto.style">
3116<xsl:apply-templates select="." mode="sect5.titlepage.recto.mode"/>
3117</div>
3118</xsl:template>
3119
3120<xsl:template match="copyright" mode="sect5.titlepage.recto.auto.mode">
3121<div xsl:use-attribute-sets="sect5.titlepage.recto.style">
3122<xsl:apply-templates select="." mode="sect5.titlepage.recto.mode"/>
3123</div>
3124</xsl:template>
3125
3126<xsl:template match="legalnotice" mode="sect5.titlepage.recto.auto.mode">
3127<div xsl:use-attribute-sets="sect5.titlepage.recto.style">
3128<xsl:apply-templates select="." mode="sect5.titlepage.recto.mode"/>
3129</div>
3130</xsl:template>
3131
3132<xsl:template match="pubdate" mode="sect5.titlepage.recto.auto.mode">
3133<div xsl:use-attribute-sets="sect5.titlepage.recto.style">
3134<xsl:apply-templates select="." mode="sect5.titlepage.recto.mode"/>
3135</div>
3136</xsl:template>
3137
3138<xsl:template match="revision" mode="sect5.titlepage.recto.auto.mode">
3139<div xsl:use-attribute-sets="sect5.titlepage.recto.style">
3140<xsl:apply-templates select="." mode="sect5.titlepage.recto.mode"/>
3141</div>
3142</xsl:template>
3143
3144<xsl:template match="revhistory" mode="sect5.titlepage.recto.auto.mode">
3145<div xsl:use-attribute-sets="sect5.titlepage.recto.style">
3146<xsl:apply-templates select="." mode="sect5.titlepage.recto.mode"/>
3147</div>
3148</xsl:template>
3149
3150<xsl:template match="abstract" mode="sect5.titlepage.recto.auto.mode">
3151<div xsl:use-attribute-sets="sect5.titlepage.recto.style">
3152<xsl:apply-templates select="." mode="sect5.titlepage.recto.mode"/>
3153</div>
3154</xsl:template>
3155
3156<xsl:template name="simplesect.titlepage.recto">
3157 <xsl:choose>
3158 <xsl:when test="simplesectinfo/title">
3159 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="simplesectinfo/title"/>
3160 </xsl:when>
3161 <xsl:when test="docinfo/title">
3162 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="docinfo/title"/>
3163 </xsl:when>
3164 <xsl:when test="info/title">
3165 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="info/title"/>
3166 </xsl:when>
3167 <xsl:when test="title">
3168 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="title"/>
3169 </xsl:when>
3170 </xsl:choose>
3171
3172 <xsl:choose>
3173 <xsl:when test="simplesectinfo/subtitle">
3174 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="simplesectinfo/subtitle"/>
3175 </xsl:when>
3176 <xsl:when test="docinfo/subtitle">
3177 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="docinfo/subtitle"/>
3178 </xsl:when>
3179 <xsl:when test="info/subtitle">
3180 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="info/subtitle"/>
3181 </xsl:when>
3182 <xsl:when test="subtitle">
3183 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="subtitle"/>
3184 </xsl:when>
3185 </xsl:choose>
3186
3187 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="simplesectinfo/corpauthor"/>
3188 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="docinfo/corpauthor"/>
3189 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="info/corpauthor"/>
3190 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="simplesectinfo/authorgroup"/>
3191 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="docinfo/authorgroup"/>
3192 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="info/authorgroup"/>
3193 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="simplesectinfo/author"/>
3194 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="docinfo/author"/>
3195 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="info/author"/>
3196 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="simplesectinfo/othercredit"/>
3197 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="docinfo/othercredit"/>
3198 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="info/othercredit"/>
3199 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="simplesectinfo/releaseinfo"/>
3200 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="docinfo/releaseinfo"/>
3201 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="info/releaseinfo"/>
3202 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="simplesectinfo/copyright"/>
3203 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="docinfo/copyright"/>
3204 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="info/copyright"/>
3205 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="simplesectinfo/legalnotice"/>
3206 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="docinfo/legalnotice"/>
3207 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="info/legalnotice"/>
3208 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="simplesectinfo/pubdate"/>
3209 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="docinfo/pubdate"/>
3210 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="info/pubdate"/>
3211 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="simplesectinfo/revision"/>
3212 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="docinfo/revision"/>
3213 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="info/revision"/>
3214 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="simplesectinfo/revhistory"/>
3215 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="docinfo/revhistory"/>
3216 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="info/revhistory"/>
3217 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="simplesectinfo/abstract"/>
3218 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="docinfo/abstract"/>
3219 <xsl:apply-templates mode="simplesect.titlepage.recto.auto.mode" select="info/abstract"/>
3220</xsl:template>
3221
3222<xsl:template name="simplesect.titlepage.verso">
3223</xsl:template>
3224
3225<xsl:template name="simplesect.titlepage.separator"><xsl:if test="count(parent::*)='0'"><hr/></xsl:if>
3226</xsl:template>
3227
3228<xsl:template name="simplesect.titlepage.before.recto">
3229</xsl:template>
3230
3231<xsl:template name="simplesect.titlepage.before.verso">
3232</xsl:template>
3233
3234<xsl:template name="simplesect.titlepage">
3235 <div class="titlepage">
3236 <xsl:variable name="recto.content">
3237 <xsl:call-template name="simplesect.titlepage.before.recto"/>
3238 <xsl:call-template name="simplesect.titlepage.recto"/>
3239 </xsl:variable>
3240 <xsl:variable name="recto.elements.count">
3241 <xsl:choose>
3242 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
3243 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
3244 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
3245 <xsl:otherwise>1</xsl:otherwise>
3246 </xsl:choose>
3247 </xsl:variable>
3248 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
3249 <div><xsl:copy-of select="$recto.content"/></div>
3250 </xsl:if>
3251 <xsl:variable name="verso.content">
3252 <xsl:call-template name="simplesect.titlepage.before.verso"/>
3253 <xsl:call-template name="simplesect.titlepage.verso"/>
3254 </xsl:variable>
3255 <xsl:variable name="verso.elements.count">
3256 <xsl:choose>
3257 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
3258 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
3259 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
3260 <xsl:otherwise>1</xsl:otherwise>
3261 </xsl:choose>
3262 </xsl:variable>
3263 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
3264 <div><xsl:copy-of select="$verso.content"/></div>
3265 </xsl:if>
3266 <xsl:call-template name="simplesect.titlepage.separator"/>
3267 </div>
3268</xsl:template>
3269
3270<xsl:template match="*" mode="simplesect.titlepage.recto.mode">
3271 <!-- if an element isn't found in this mode, -->
3272 <!-- try the generic titlepage.mode -->
3273 <xsl:apply-templates select="." mode="titlepage.mode"/>
3274</xsl:template>
3275
3276<xsl:template match="*" mode="simplesect.titlepage.verso.mode">
3277 <!-- if an element isn't found in this mode, -->
3278 <!-- try the generic titlepage.mode -->
3279 <xsl:apply-templates select="." mode="titlepage.mode"/>
3280</xsl:template>
3281
3282<xsl:template match="title" mode="simplesect.titlepage.recto.auto.mode">
3283<div xsl:use-attribute-sets="simplesect.titlepage.recto.style">
3284<xsl:apply-templates select="." mode="simplesect.titlepage.recto.mode"/>
3285</div>
3286</xsl:template>
3287
3288<xsl:template match="subtitle" mode="simplesect.titlepage.recto.auto.mode">
3289<div xsl:use-attribute-sets="simplesect.titlepage.recto.style">
3290<xsl:apply-templates select="." mode="simplesect.titlepage.recto.mode"/>
3291</div>
3292</xsl:template>
3293
3294<xsl:template match="corpauthor" mode="simplesect.titlepage.recto.auto.mode">
3295<div xsl:use-attribute-sets="simplesect.titlepage.recto.style">
3296<xsl:apply-templates select="." mode="simplesect.titlepage.recto.mode"/>
3297</div>
3298</xsl:template>
3299
3300<xsl:template match="authorgroup" mode="simplesect.titlepage.recto.auto.mode">
3301<div xsl:use-attribute-sets="simplesect.titlepage.recto.style">
3302<xsl:apply-templates select="." mode="simplesect.titlepage.recto.mode"/>
3303</div>
3304</xsl:template>
3305
3306<xsl:template match="author" mode="simplesect.titlepage.recto.auto.mode">
3307<div xsl:use-attribute-sets="simplesect.titlepage.recto.style">
3308<xsl:apply-templates select="." mode="simplesect.titlepage.recto.mode"/>
3309</div>
3310</xsl:template>
3311
3312<xsl:template match="othercredit" mode="simplesect.titlepage.recto.auto.mode">
3313<div xsl:use-attribute-sets="simplesect.titlepage.recto.style">
3314<xsl:apply-templates select="." mode="simplesect.titlepage.recto.mode"/>
3315</div>
3316</xsl:template>
3317
3318<xsl:template match="releaseinfo" mode="simplesect.titlepage.recto.auto.mode">
3319<div xsl:use-attribute-sets="simplesect.titlepage.recto.style">
3320<xsl:apply-templates select="." mode="simplesect.titlepage.recto.mode"/>
3321</div>
3322</xsl:template>
3323
3324<xsl:template match="copyright" mode="simplesect.titlepage.recto.auto.mode">
3325<div xsl:use-attribute-sets="simplesect.titlepage.recto.style">
3326<xsl:apply-templates select="." mode="simplesect.titlepage.recto.mode"/>
3327</div>
3328</xsl:template>
3329
3330<xsl:template match="legalnotice" mode="simplesect.titlepage.recto.auto.mode">
3331<div xsl:use-attribute-sets="simplesect.titlepage.recto.style">
3332<xsl:apply-templates select="." mode="simplesect.titlepage.recto.mode"/>
3333</div>
3334</xsl:template>
3335
3336<xsl:template match="pubdate" mode="simplesect.titlepage.recto.auto.mode">
3337<div xsl:use-attribute-sets="simplesect.titlepage.recto.style">
3338<xsl:apply-templates select="." mode="simplesect.titlepage.recto.mode"/>
3339</div>
3340</xsl:template>
3341
3342<xsl:template match="revision" mode="simplesect.titlepage.recto.auto.mode">
3343<div xsl:use-attribute-sets="simplesect.titlepage.recto.style">
3344<xsl:apply-templates select="." mode="simplesect.titlepage.recto.mode"/>
3345</div>
3346</xsl:template>
3347
3348<xsl:template match="revhistory" mode="simplesect.titlepage.recto.auto.mode">
3349<div xsl:use-attribute-sets="simplesect.titlepage.recto.style">
3350<xsl:apply-templates select="." mode="simplesect.titlepage.recto.mode"/>
3351</div>
3352</xsl:template>
3353
3354<xsl:template match="abstract" mode="simplesect.titlepage.recto.auto.mode">
3355<div xsl:use-attribute-sets="simplesect.titlepage.recto.style">
3356<xsl:apply-templates select="." mode="simplesect.titlepage.recto.mode"/>
3357</div>
3358</xsl:template>
3359
3360<xsl:template name="bibliography.titlepage.recto">
3361 <div xsl:use-attribute-sets="bibliography.titlepage.recto.style">
3362<xsl:call-template name="component.title">
3363<xsl:with-param name="node" select="ancestor-or-self::bibliography[1]"/>
3364</xsl:call-template></div>
3365 <xsl:choose>
3366 <xsl:when test="bibliographyinfo/subtitle">
3367 <xsl:apply-templates mode="bibliography.titlepage.recto.auto.mode" select="bibliographyinfo/subtitle"/>
3368 </xsl:when>
3369 <xsl:when test="docinfo/subtitle">
3370 <xsl:apply-templates mode="bibliography.titlepage.recto.auto.mode" select="docinfo/subtitle"/>
3371 </xsl:when>
3372 <xsl:when test="info/subtitle">
3373 <xsl:apply-templates mode="bibliography.titlepage.recto.auto.mode" select="info/subtitle"/>
3374 </xsl:when>
3375 <xsl:when test="subtitle">
3376 <xsl:apply-templates mode="bibliography.titlepage.recto.auto.mode" select="subtitle"/>
3377 </xsl:when>
3378 </xsl:choose>
3379
3380</xsl:template>
3381
3382<xsl:template name="bibliography.titlepage.verso">
3383</xsl:template>
3384
3385<xsl:template name="bibliography.titlepage.separator">
3386</xsl:template>
3387
3388<xsl:template name="bibliography.titlepage.before.recto">
3389</xsl:template>
3390
3391<xsl:template name="bibliography.titlepage.before.verso">
3392</xsl:template>
3393
3394<xsl:template name="bibliography.titlepage">
3395 <div class="titlepage">
3396 <xsl:variable name="recto.content">
3397 <xsl:call-template name="bibliography.titlepage.before.recto"/>
3398 <xsl:call-template name="bibliography.titlepage.recto"/>
3399 </xsl:variable>
3400 <xsl:variable name="recto.elements.count">
3401 <xsl:choose>
3402 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
3403 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
3404 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
3405 <xsl:otherwise>1</xsl:otherwise>
3406 </xsl:choose>
3407 </xsl:variable>
3408 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
3409 <div><xsl:copy-of select="$recto.content"/></div>
3410 </xsl:if>
3411 <xsl:variable name="verso.content">
3412 <xsl:call-template name="bibliography.titlepage.before.verso"/>
3413 <xsl:call-template name="bibliography.titlepage.verso"/>
3414 </xsl:variable>
3415 <xsl:variable name="verso.elements.count">
3416 <xsl:choose>
3417 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
3418 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
3419 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
3420 <xsl:otherwise>1</xsl:otherwise>
3421 </xsl:choose>
3422 </xsl:variable>
3423 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
3424 <div><xsl:copy-of select="$verso.content"/></div>
3425 </xsl:if>
3426 <xsl:call-template name="bibliography.titlepage.separator"/>
3427 </div>
3428</xsl:template>
3429
3430<xsl:template match="*" mode="bibliography.titlepage.recto.mode">
3431 <!-- if an element isn't found in this mode, -->
3432 <!-- try the generic titlepage.mode -->
3433 <xsl:apply-templates select="." mode="titlepage.mode"/>
3434</xsl:template>
3435
3436<xsl:template match="*" mode="bibliography.titlepage.verso.mode">
3437 <!-- if an element isn't found in this mode, -->
3438 <!-- try the generic titlepage.mode -->
3439 <xsl:apply-templates select="." mode="titlepage.mode"/>
3440</xsl:template>
3441
3442<xsl:template match="subtitle" mode="bibliography.titlepage.recto.auto.mode">
3443<div xsl:use-attribute-sets="bibliography.titlepage.recto.style">
3444<xsl:apply-templates select="." mode="bibliography.titlepage.recto.mode"/>
3445</div>
3446</xsl:template>
3447
3448<xsl:template name="glossary.titlepage.recto">
3449 <div xsl:use-attribute-sets="glossary.titlepage.recto.style">
3450<xsl:call-template name="component.title">
3451<xsl:with-param name="node" select="ancestor-or-self::glossary[1]"/>
3452</xsl:call-template></div>
3453 <xsl:choose>
3454 <xsl:when test="glossaryinfo/subtitle">
3455 <xsl:apply-templates mode="glossary.titlepage.recto.auto.mode" select="glossaryinfo/subtitle"/>
3456 </xsl:when>
3457 <xsl:when test="docinfo/subtitle">
3458 <xsl:apply-templates mode="glossary.titlepage.recto.auto.mode" select="docinfo/subtitle"/>
3459 </xsl:when>
3460 <xsl:when test="info/subtitle">
3461 <xsl:apply-templates mode="glossary.titlepage.recto.auto.mode" select="info/subtitle"/>
3462 </xsl:when>
3463 <xsl:when test="subtitle">
3464 <xsl:apply-templates mode="glossary.titlepage.recto.auto.mode" select="subtitle"/>
3465 </xsl:when>
3466 </xsl:choose>
3467
3468</xsl:template>
3469
3470<xsl:template name="glossary.titlepage.verso">
3471</xsl:template>
3472
3473<xsl:template name="glossary.titlepage.separator">
3474</xsl:template>
3475
3476<xsl:template name="glossary.titlepage.before.recto">
3477</xsl:template>
3478
3479<xsl:template name="glossary.titlepage.before.verso">
3480</xsl:template>
3481
3482<xsl:template name="glossary.titlepage">
3483 <div class="titlepage">
3484 <xsl:variable name="recto.content">
3485 <xsl:call-template name="glossary.titlepage.before.recto"/>
3486 <xsl:call-template name="glossary.titlepage.recto"/>
3487 </xsl:variable>
3488 <xsl:variable name="recto.elements.count">
3489 <xsl:choose>
3490 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
3491 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
3492 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
3493 <xsl:otherwise>1</xsl:otherwise>
3494 </xsl:choose>
3495 </xsl:variable>
3496 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
3497 <div><xsl:copy-of select="$recto.content"/></div>
3498 </xsl:if>
3499 <xsl:variable name="verso.content">
3500 <xsl:call-template name="glossary.titlepage.before.verso"/>
3501 <xsl:call-template name="glossary.titlepage.verso"/>
3502 </xsl:variable>
3503 <xsl:variable name="verso.elements.count">
3504 <xsl:choose>
3505 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
3506 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
3507 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
3508 <xsl:otherwise>1</xsl:otherwise>
3509 </xsl:choose>
3510 </xsl:variable>
3511 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
3512 <div><xsl:copy-of select="$verso.content"/></div>
3513 </xsl:if>
3514 <xsl:call-template name="glossary.titlepage.separator"/>
3515 </div>
3516</xsl:template>
3517
3518<xsl:template match="*" mode="glossary.titlepage.recto.mode">
3519 <!-- if an element isn't found in this mode, -->
3520 <!-- try the generic titlepage.mode -->
3521 <xsl:apply-templates select="." mode="titlepage.mode"/>
3522</xsl:template>
3523
3524<xsl:template match="*" mode="glossary.titlepage.verso.mode">
3525 <!-- if an element isn't found in this mode, -->
3526 <!-- try the generic titlepage.mode -->
3527 <xsl:apply-templates select="." mode="titlepage.mode"/>
3528</xsl:template>
3529
3530<xsl:template match="subtitle" mode="glossary.titlepage.recto.auto.mode">
3531<div xsl:use-attribute-sets="glossary.titlepage.recto.style">
3532<xsl:apply-templates select="." mode="glossary.titlepage.recto.mode"/>
3533</div>
3534</xsl:template>
3535
3536<xsl:template name="index.titlepage.recto">
3537 <div xsl:use-attribute-sets="index.titlepage.recto.style">
3538<xsl:call-template name="component.title">
3539<xsl:with-param name="node" select="ancestor-or-self::index[1]"/>
3540</xsl:call-template></div>
3541 <xsl:choose>
3542 <xsl:when test="indexinfo/subtitle">
3543 <xsl:apply-templates mode="index.titlepage.recto.auto.mode" select="indexinfo/subtitle"/>
3544 </xsl:when>
3545 <xsl:when test="docinfo/subtitle">
3546 <xsl:apply-templates mode="index.titlepage.recto.auto.mode" select="docinfo/subtitle"/>
3547 </xsl:when>
3548 <xsl:when test="info/subtitle">
3549 <xsl:apply-templates mode="index.titlepage.recto.auto.mode" select="info/subtitle"/>
3550 </xsl:when>
3551 <xsl:when test="subtitle">
3552 <xsl:apply-templates mode="index.titlepage.recto.auto.mode" select="subtitle"/>
3553 </xsl:when>
3554 </xsl:choose>
3555
3556</xsl:template>
3557
3558<xsl:template name="index.titlepage.verso">
3559</xsl:template>
3560
3561<xsl:template name="index.titlepage.separator">
3562</xsl:template>
3563
3564<xsl:template name="index.titlepage.before.recto">
3565</xsl:template>
3566
3567<xsl:template name="index.titlepage.before.verso">
3568</xsl:template>
3569
3570<xsl:template name="index.titlepage">
3571 <div class="titlepage">
3572 <xsl:variable name="recto.content">
3573 <xsl:call-template name="index.titlepage.before.recto"/>
3574 <xsl:call-template name="index.titlepage.recto"/>
3575 </xsl:variable>
3576 <xsl:variable name="recto.elements.count">
3577 <xsl:choose>
3578 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
3579 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
3580 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
3581 <xsl:otherwise>1</xsl:otherwise>
3582 </xsl:choose>
3583 </xsl:variable>
3584 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
3585 <div><xsl:copy-of select="$recto.content"/></div>
3586 </xsl:if>
3587 <xsl:variable name="verso.content">
3588 <xsl:call-template name="index.titlepage.before.verso"/>
3589 <xsl:call-template name="index.titlepage.verso"/>
3590 </xsl:variable>
3591 <xsl:variable name="verso.elements.count">
3592 <xsl:choose>
3593 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
3594 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
3595 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
3596 <xsl:otherwise>1</xsl:otherwise>
3597 </xsl:choose>
3598 </xsl:variable>
3599 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
3600 <div><xsl:copy-of select="$verso.content"/></div>
3601 </xsl:if>
3602 <xsl:call-template name="index.titlepage.separator"/>
3603 </div>
3604</xsl:template>
3605
3606<xsl:template match="*" mode="index.titlepage.recto.mode">
3607 <!-- if an element isn't found in this mode, -->
3608 <!-- try the generic titlepage.mode -->
3609 <xsl:apply-templates select="." mode="titlepage.mode"/>
3610</xsl:template>
3611
3612<xsl:template match="*" mode="index.titlepage.verso.mode">
3613 <!-- if an element isn't found in this mode, -->
3614 <!-- try the generic titlepage.mode -->
3615 <xsl:apply-templates select="." mode="titlepage.mode"/>
3616</xsl:template>
3617
3618<xsl:template match="subtitle" mode="index.titlepage.recto.auto.mode">
3619<div xsl:use-attribute-sets="index.titlepage.recto.style">
3620<xsl:apply-templates select="." mode="index.titlepage.recto.mode"/>
3621</div>
3622</xsl:template>
3623
3624<xsl:template name="setindex.titlepage.recto">
3625 <div xsl:use-attribute-sets="setindex.titlepage.recto.style">
3626<xsl:call-template name="component.title">
3627<xsl:with-param name="node" select="ancestor-or-self::setindex[1]"/>
3628</xsl:call-template></div>
3629 <xsl:choose>
3630 <xsl:when test="setindexinfo/subtitle">
3631 <xsl:apply-templates mode="setindex.titlepage.recto.auto.mode" select="setindexinfo/subtitle"/>
3632 </xsl:when>
3633 <xsl:when test="docinfo/subtitle">
3634 <xsl:apply-templates mode="setindex.titlepage.recto.auto.mode" select="docinfo/subtitle"/>
3635 </xsl:when>
3636 <xsl:when test="info/subtitle">
3637 <xsl:apply-templates mode="setindex.titlepage.recto.auto.mode" select="info/subtitle"/>
3638 </xsl:when>
3639 <xsl:when test="subtitle">
3640 <xsl:apply-templates mode="setindex.titlepage.recto.auto.mode" select="subtitle"/>
3641 </xsl:when>
3642 </xsl:choose>
3643
3644</xsl:template>
3645
3646<xsl:template name="setindex.titlepage.verso">
3647</xsl:template>
3648
3649<xsl:template name="setindex.titlepage.separator">
3650</xsl:template>
3651
3652<xsl:template name="setindex.titlepage.before.recto">
3653</xsl:template>
3654
3655<xsl:template name="setindex.titlepage.before.verso">
3656</xsl:template>
3657
3658<xsl:template name="setindex.titlepage">
3659 <div class="titlepage">
3660 <xsl:variable name="recto.content">
3661 <xsl:call-template name="setindex.titlepage.before.recto"/>
3662 <xsl:call-template name="setindex.titlepage.recto"/>
3663 </xsl:variable>
3664 <xsl:variable name="recto.elements.count">
3665 <xsl:choose>
3666 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
3667 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
3668 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
3669 <xsl:otherwise>1</xsl:otherwise>
3670 </xsl:choose>
3671 </xsl:variable>
3672 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
3673 <div><xsl:copy-of select="$recto.content"/></div>
3674 </xsl:if>
3675 <xsl:variable name="verso.content">
3676 <xsl:call-template name="setindex.titlepage.before.verso"/>
3677 <xsl:call-template name="setindex.titlepage.verso"/>
3678 </xsl:variable>
3679 <xsl:variable name="verso.elements.count">
3680 <xsl:choose>
3681 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
3682 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
3683 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
3684 <xsl:otherwise>1</xsl:otherwise>
3685 </xsl:choose>
3686 </xsl:variable>
3687 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
3688 <div><xsl:copy-of select="$verso.content"/></div>
3689 </xsl:if>
3690 <xsl:call-template name="setindex.titlepage.separator"/>
3691 </div>
3692</xsl:template>
3693
3694<xsl:template match="*" mode="setindex.titlepage.recto.mode">
3695 <!-- if an element isn't found in this mode, -->
3696 <!-- try the generic titlepage.mode -->
3697 <xsl:apply-templates select="." mode="titlepage.mode"/>
3698</xsl:template>
3699
3700<xsl:template match="*" mode="setindex.titlepage.verso.mode">
3701 <!-- if an element isn't found in this mode, -->
3702 <!-- try the generic titlepage.mode -->
3703 <xsl:apply-templates select="." mode="titlepage.mode"/>
3704</xsl:template>
3705
3706<xsl:template match="subtitle" mode="setindex.titlepage.recto.auto.mode">
3707<div xsl:use-attribute-sets="setindex.titlepage.recto.style">
3708<xsl:apply-templates select="." mode="setindex.titlepage.recto.mode"/>
3709</div>
3710</xsl:template>
3711
3712<xsl:template name="sidebar.titlepage.recto">
3713 <xsl:choose>
3714 <xsl:when test="sidebarinfo/title">
3715 <xsl:apply-templates mode="sidebar.titlepage.recto.auto.mode" select="sidebarinfo/title"/>
3716 </xsl:when>
3717 <xsl:when test="docinfo/title">
3718 <xsl:apply-templates mode="sidebar.titlepage.recto.auto.mode" select="docinfo/title"/>
3719 </xsl:when>
3720 <xsl:when test="info/title">
3721 <xsl:apply-templates mode="sidebar.titlepage.recto.auto.mode" select="info/title"/>
3722 </xsl:when>
3723 <xsl:when test="title">
3724 <xsl:apply-templates mode="sidebar.titlepage.recto.auto.mode" select="title"/>
3725 </xsl:when>
3726 </xsl:choose>
3727
3728 <xsl:choose>
3729 <xsl:when test="sidebarinfo/subtitle">
3730 <xsl:apply-templates mode="sidebar.titlepage.recto.auto.mode" select="sidebarinfo/subtitle"/>
3731 </xsl:when>
3732 <xsl:when test="docinfo/subtitle">
3733 <xsl:apply-templates mode="sidebar.titlepage.recto.auto.mode" select="docinfo/subtitle"/>
3734 </xsl:when>
3735 <xsl:when test="info/subtitle">
3736 <xsl:apply-templates mode="sidebar.titlepage.recto.auto.mode" select="info/subtitle"/>
3737 </xsl:when>
3738 <xsl:when test="subtitle">
3739 <xsl:apply-templates mode="sidebar.titlepage.recto.auto.mode" select="subtitle"/>
3740 </xsl:when>
3741 </xsl:choose>
3742
3743</xsl:template>
3744
3745<xsl:template name="sidebar.titlepage.verso">
3746</xsl:template>
3747
3748<xsl:template name="sidebar.titlepage.separator">
3749</xsl:template>
3750
3751<xsl:template name="sidebar.titlepage.before.recto">
3752</xsl:template>
3753
3754<xsl:template name="sidebar.titlepage.before.verso">
3755</xsl:template>
3756
3757<xsl:template name="sidebar.titlepage">
3758 <div class="titlepage">
3759 <xsl:variable name="recto.content">
3760 <xsl:call-template name="sidebar.titlepage.before.recto"/>
3761 <xsl:call-template name="sidebar.titlepage.recto"/>
3762 </xsl:variable>
3763 <xsl:variable name="recto.elements.count">
3764 <xsl:choose>
3765 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
3766 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
3767 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when>
3768 <xsl:otherwise>1</xsl:otherwise>
3769 </xsl:choose>
3770 </xsl:variable>
3771 <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count &gt; 0)">
3772 <div><xsl:copy-of select="$recto.content"/></div>
3773 </xsl:if>
3774 <xsl:variable name="verso.content">
3775 <xsl:call-template name="sidebar.titlepage.before.verso"/>
3776 <xsl:call-template name="sidebar.titlepage.verso"/>
3777 </xsl:variable>
3778 <xsl:variable name="verso.elements.count">
3779 <xsl:choose>
3780 <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
3781 <xsl:when test="contains(system-property('xsl:vendor'), 'Apache Software Foundation')">
3782 <!--Xalan quirk--><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when>
3783 <xsl:otherwise>1</xsl:otherwise>
3784 </xsl:choose>
3785 </xsl:variable>
3786 <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count &gt; 0)">
3787 <div><xsl:copy-of select="$verso.content"/></div>
3788 </xsl:if>
3789 <xsl:call-template name="sidebar.titlepage.separator"/>
3790 </div>
3791</xsl:template>
3792
3793<xsl:template match="*" mode="sidebar.titlepage.recto.mode">
3794 <!-- if an element isn't found in this mode, -->
3795 <!-- try the generic titlepage.mode -->
3796 <xsl:apply-templates select="." mode="titlepage.mode"/>
3797</xsl:template>
3798
3799<xsl:template match="*" mode="sidebar.titlepage.verso.mode">
3800 <!-- if an element isn't found in this mode, -->
3801 <!-- try the generic titlepage.mode -->
3802 <xsl:apply-templates select="." mode="titlepage.mode"/>
3803</xsl:template>
3804
3805<xsl:template match="title" mode="sidebar.titlepage.recto.auto.mode">
3806<div xsl:use-attribute-sets="sidebar.titlepage.recto.style">
3807<xsl:call-template name="formal.object.heading">
3808<xsl:with-param name="object" select="ancestor-or-self::sidebar[1]"/>
3809</xsl:call-template>
3810</div>
3811</xsl:template>
3812
3813<xsl:template match="subtitle" mode="sidebar.titlepage.recto.auto.mode">
3814<div xsl:use-attribute-sets="sidebar.titlepage.recto.style">
3815<xsl:apply-templates select="." mode="sidebar.titlepage.recto.mode"/>
3816</div>
3817</xsl:template>
3818
3819</xsl:stylesheet>
3820
diff --git a/documentation/yocto-project-qs/yocto-project-qs.xml b/documentation/yocto-project-qs/yocto-project-qs.xml
new file mode 100644
index 0000000000..5ffe674230
--- /dev/null
+++ b/documentation/yocto-project-qs/yocto-project-qs.xml
@@ -0,0 +1,998 @@
1<!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<article id='intro'>
6 <articleinfo>
7 <title>Yocto Project Quick Start</title>
8
9 <copyright>
10 <year>&COPYRIGHT_YEAR;</year>
11 <holder>Linux Foundation</holder>
12 </copyright>
13
14 <legalnotice>
15 <para>
16 Permission is granted to copy, distribute and/or modify this document under
17 the terms of the <ulink type="http" url="http://creativecommons.org/licenses/by-sa/2.0/uk/">Creative Commons Attribution-Share Alike 2.0 UK: England &amp; Wales</ulink> as published by Creative Commons.
18 </para>
19 <note>
20 For the latest version of this manual associated with this
21 Yocto Project release, see the
22 <ulink url='&YOCTO_DOCS_QS_URL;'>Yocto Project Quick Start</ulink>
23 from the Yocto Project website.
24 </note>
25 </legalnotice>
26
27
28 <abstract>
29 <imagedata fileref="figures/yocto-project-transp.png"
30 width="6in" depth="1in"
31 align="right" scale="25" />
32 </abstract>
33 </articleinfo>
34
35<section id='welcome'>
36 <title>Welcome!</title>
37 <para>
38 Welcome to the Yocto Project!
39 The Yocto Project is an open-source collaboration project focused on
40 embedded Linux developers.
41 Among other things, the Yocto Project uses a build system based on the
42 OpenEmbedded (OE) project, which uses the
43 <ulink url='&YOCTO_DOCS_DEV_URL;#bitbake-term'>BitBake</ulink>
44 tool, to construct complete Linux images.
45 The BitBake and OE components are combined together to form
46 <ulink url='&YOCTO_DOCS_DEV_URL;#poky'>Poky</ulink>,
47 a reference build system.
48 </para>
49
50 <para>
51 If you don't have a system that runs Linux and you want to give the Yocto Project a test run,
52 you might consider using the Yocto Project Build Appliance.
53 The Build Appliance allows you to build and boot a custom embedded Linux image with the Yocto
54 Project using a non-Linux development system.
55 See the <ulink url='https://www.yoctoproject.org/tools-resources/projects/build-appliance'>Yocto
56 Project Build Appliance</ulink> for more information.
57 </para>
58
59 <para>
60 On the other hand, if you know all about open-source development, Linux development environments,
61 Git source repositories and the like and you just want some quick information that lets you try out
62 the Yocto Project on your Linux system, skip right to the
63 "<link linkend='super-user'>Super User</link>" section at the end of this quick start.
64 </para>
65
66 <para>
67 For the rest of you, this short document will give you some basic information about the environment and
68 let you experience it in its simplest form.
69 After reading this document, you will have a basic understanding of what the Yocto Project is
70 and how to use some of its core components.
71 This document steps you through a simple example showing you how to build a small image
72 and run it using the Quick EMUlator (QEMU emulator).
73 </para>
74
75 <para>
76 For more detailed information on the Yocto Project, you should check out these resources:
77 <itemizedlist>
78 <listitem><para><emphasis>Website:</emphasis> The <ulink url='&YOCTO_HOME_URL;'>Yocto Project Website</ulink>
79 provides the latest builds, breaking news, full development documentation, and a rich Yocto
80 Project Development Community into which you can tap.
81 </para></listitem>
82 <listitem><para><emphasis>FAQs:</emphasis> Lists commonly asked Yocto Project questions and answers.
83 You can find two FAQs: <ulink url='&YOCTO_WIKI_URL;/wiki/FAQ'>Yocto Project FAQ</ulink> on
84 a wiki, and the
85 "<ulink url='&YOCTO_DOCS_REF_URL;#faq'>FAQ</ulink>" chapter in
86 the Yocto Project Reference Manual.
87 </para></listitem>
88 <listitem><para><emphasis>Developer Screencast:</emphasis> The
89 <ulink url='http://vimeo.com/36450321'>Getting Started with the Yocto Project - New
90 Developer Screencast Tutorial</ulink> provides a 30-minute video
91 created for users unfamiliar with the Yocto Project but familiar
92 with Linux build systems.</para></listitem>
93 </itemizedlist>
94 </para>
95</section>
96
97<section id='yp-intro'>
98 <title>Introducing the Yocto Project Development Environment</title>
99 <para>
100 The Yocto Project through the OpenEmbedded build system provides an open source development
101 environment targeting the ARM, MIPS, PowerPC and x86 architectures for a variety of
102 platforms including x86-64 and emulated ones.
103 You can use components from the Yocto Project to design, develop, build, debug, simulate,
104 and test the complete software stack using Linux, the X Window System, GNOME Mobile-based
105 application frameworks, and Qt frameworks.
106 </para>
107
108 <mediaobject>
109 <imageobject>
110 <imagedata fileref="figures/yocto-environment.png"
111 format="PNG" align='center' scalefit='1' width="100%"/>
112 </imageobject>
113 <caption>
114 <para>The Yocto Project Development Environment</para>
115 </caption>
116 </mediaobject>
117
118 <para>
119 Here are some highlights for the Yocto Project:
120 </para>
121
122 <itemizedlist>
123 <listitem>
124 <para>Provides a recent Linux kernel along with a set of system commands and libraries suitable for the embedded environment.</para>
125 </listitem>
126 <listitem>
127 <para>Makes available system components such as X11, GTK+, Qt, Clutter, and SDL
128 (among others) so you can create a rich user experience on devices
129 that have display hardware.
130 For devices that do not have a display or where you wish to use alternative UI
131 frameworks, these components need not be installed.</para>
132 </listitem>
133 <listitem>
134 <para>Creates a focused and stable core compatible with the OpenEmbedded
135 project with which you can easily and reliably build and develop.</para>
136 </listitem>
137 <listitem>
138 <para>Fully supports a wide range of hardware and device emulation through the QEMU
139 Emulator.</para>
140 </listitem>
141 </itemizedlist>
142
143 <para>
144 The Yocto Project can generate images for many kinds of devices.
145 However, the standard example machines target QEMU full-system emulation for x86, x86-64, ARM, MIPS,
146 and PPC-based architectures as well as specific hardware such as the
147 <trademark class='registered'>Intel</trademark> Desktop Board DH55TC.
148 Because an image developed with the Yocto Project can boot inside a QEMU emulator, the
149 development environment works nicely as a test platform for developing embedded software.
150 </para>
151
152 <para>
153 Another important Yocto Project feature is the Sato reference User Interface.
154 This optional GNOME mobile-based UI, which is intended for devices with
155 restricted screen sizes, sits neatly on top of a device using the
156 GNOME Mobile Stack and provides a well-defined user experience.
157 Implemented in its own layer, it makes it clear to developers how they can implement
158 their own user interface on top of a Linux image created with the Yocto Project.
159 </para>
160</section>
161
162<section id='yp-resources'>
163 <title>What You Need and How You Get It</title>
164
165 <para>
166 You need these things to develop projects in the Yocto Project
167 environment:
168 </para>
169
170 <itemizedlist>
171 <listitem>
172 <para>A host system running a supported Linux distribution
173 (i.e. recent releases of Fedora, openSUSE, CentOS, Debian,
174 and Ubuntu).
175 If the host system supports multiple cores and threads, you can configure the
176 Yocto Project build system to decrease the time needed to build images
177 significantly.
178 </para>
179 </listitem>
180 <listitem>
181 <para>The right packages.</para>
182 </listitem>
183 <listitem>
184 <para>A release of the Yocto Project.</para>
185 </listitem>
186 </itemizedlist>
187
188 <section id='the-linux-distro'>
189 <title>The Linux Distribution</title>
190
191 <para>
192 The Yocto Project team is continually verifying more and more Linux
193 distributions with each release.
194 In general, if you have the current release minus one of the following
195 distributions you should have no problems.
196 <itemizedlist>
197 <listitem><para>Ubuntu</para></listitem>
198 <listitem><para>Fedora</para></listitem>
199 <listitem><para>openSUSE</para></listitem>
200 <listitem><para>CentOS</para></listitem>
201 <listitem><para>Debian</para></listitem>
202 </itemizedlist>
203 For a more detailed list of distributions that support the Yocto Project,
204 see the
205 "<ulink url='&YOCTO_DOCS_REF_URL;#detailed-supported-distros'>Supported Linux Distributions</ulink>" section
206 in the Yocto Project Reference Manual.
207 </para>
208 <para>
209 The OpenEmbedded build system should be able to run on any modern
210 distribution that has the following versions for Git, tar, and
211 Python.
212 <itemizedlist>
213 <listitem><para>Git 1.7.5 or greater</para></listitem>
214 <listitem><para>tar 1.24 or greater</para></listitem>
215 <listitem><para>Python 2.7.3 or greater excluding Python
216 3.x, which is not supported.</para></listitem>
217 </itemizedlist>
218 Earlier releases of Python are known to not work and the
219 system does not support Python 3 at this time.
220 If your system does not meet any of these three listed
221 version requirements, you can
222 take steps to prepare the system so that you can still use the build
223 system.
224 See the
225 "<ulink url='&YOCTO_DOCS_REF_URL;#required-git-tar-and-python-versions'>Required Git, tar, and Python Versions</ulink>"
226 section in the Yocto Project Reference Manual for information.
227 </para>
228 <para>
229 This document assumes you are running one of the previously noted
230 distributions on your Linux-based host systems.
231 </para>
232 <note>
233 <para>
234 If you attempt to use a distribution not in the above list,
235 you may or may not have success.
236 Yocto Project releases are tested against the stable Linux
237 distributions listed in the
238 "<ulink url='&YOCTO_DOCS_REF_URL;#detailed-supported-distros'>Supported Linux Distributions</ulink>"
239 section of the Yocto Project Reference Manual.
240 If you encounter problems, please go to
241 <ulink url='&YOCTO_BUGZILLA_URL;'>Yocto Project Bugzilla</ulink>
242 and submit a bug.
243 We are interested in hearing about your experience.
244 </para>
245 </note>
246 </section>
247
248 <section id='packages'>
249 <title>The Packages</title>
250
251 <para>
252 Packages and package installation vary depending on your development system
253 and on your intent.
254 For example, if you want to build an image that can run
255 on QEMU in graphical mode (a minimal, basic build
256 requirement), then the number of packages is different than if you want to
257 build an image on a headless system or build out the Yocto Project
258 documentation set.
259 Collectively, the number of required packages is large
260 if you want to be able to cover all cases.
261 <note>In general, you need to have root access and then install the
262 required packages.
263 Thus, the commands in the following section may or may not work
264 depending on whether or not your Linux distribution has
265 <filename>sudo</filename> installed.</note>
266 </para>
267
268 <para>
269 The next few sections list, by supported Linux Distributions, the required
270 packages needed to build an image that runs on QEMU in graphical mode
271 (e.g. essential plus graphics support).
272 </para>
273
274 <para>
275 For lists of required packages for other scenarios, see the
276 "<ulink url='&YOCTO_DOCS_REF_URL;#required-packages-for-the-host-development-system'>Required Packages for the Host Development System</ulink>"
277 section in the Yocto Project Reference Manual.
278 </para>
279
280 <section id='ubuntu'>
281 <title>Ubuntu and Debian</title>
282
283 <para>
284 The essential and graphical support packages you need for a
285 supported Ubuntu or Debian distribution are shown in the
286 following command:
287 <literallayout class='monospaced'>
288 $ sudo apt-get install &UBUNTU_HOST_PACKAGES_ESSENTIAL; libsdl1.2-dev xterm
289 </literallayout>
290 </para>
291 </section>
292
293 <section id='fedora'>
294 <title>Fedora</title>
295
296 <para>
297 The essential and graphical packages you need for a supported
298 Fedora distribution are shown in the following command:
299 <literallayout class='monospaced'>
300 $ sudo yum install &FEDORA_HOST_PACKAGES_ESSENTIAL; SDL-devel xterm
301 </literallayout>
302 </para>
303 </section>
304
305 <section id='opensuse'>
306 <title>OpenSUSE</title>
307
308 <para>
309 The essential and graphical packages you need for a supported
310 OpenSUSE distribution are shown in the following command:
311 <literallayout class='monospaced'>
312 $ sudo zypper install &OPENSUSE_HOST_PACKAGES_ESSENTIAL; libSDL-devel xterm
313 </literallayout>
314 </para>
315 </section>
316
317 <section id='centos'>
318 <title>CentOS</title>
319
320 <para>
321 The essential and graphical packages you need for a supported
322 CentOS distribution are shown in the following command:
323 <literallayout class='monospaced'>
324 $ sudo yum install &CENTOS_HOST_PACKAGES_ESSENTIAL; SDL-devel xterm
325 </literallayout>
326 <note>Depending on the CentOS version you are using, other requirements
327 and dependencies might exist.
328 For details, you should look at the CentOS sections on the
329 <ulink url='https://wiki.yoctoproject.org/wiki/Poky/GettingStarted/Dependencies'>Poky/GettingStarted/Dependencies</ulink>
330 wiki page.</note>
331 </para>
332 </section>
333 </section>
334
335 <section id='releases'>
336 <title>Yocto Project Release</title>
337
338 <para>
339 It is recommended that you get the latest Yocto Project files
340 by setting up (cloning in
341 <ulink url='&YOCTO_DOCS_DEV_URL;#git'>Git</ulink> terms) a local
342 copy of the
343 <filename>poky</filename> Git repository on your host development
344 system.
345 Doing so allows you to contribute back to the Yocto Project project.
346 For information on how to get set up using this method, see the
347 "<ulink url='&YOCTO_DOCS_DEV_URL;#local-yp-release'>Yocto
348 Project Release</ulink>" item in the Yocto Project Development Manual.
349 </para>
350
351 <para>
352 You can also get the Yocto Project Files by downloading
353 Yocto Project releases from the
354 <ulink url="&YOCTO_HOME_URL;">Yocto Project website</ulink>.
355 From the website, you just click "Downloads" in the navigation pane
356 to the left to display all Yocto Project downloads.
357 Current and archived releases are available for download.
358 Nightly and developmental builds are also maintained at
359 <ulink url="&YOCTO_AB_NIGHTLY_URL;"></ulink>.
360 However, for this document a released version of Yocto Project is used.
361 </para>
362
363 </section>
364</section>
365
366<section id='test-run'>
367 <title>A Quick Test Run</title>
368
369 <para>
370 Now that you have your system requirements in order, you can give the Yocto Project a try.
371 This section presents some steps that let you do the following:
372 </para>
373
374 <itemizedlist>
375 <listitem>
376 <para>
377 Build an image and run it in the QEMU emulator.
378 </para>
379 </listitem>
380 <listitem>
381 <para>
382 Use a pre-built image and run it in the QEMU emulator.
383 </para>
384 </listitem>
385 </itemizedlist>
386
387 <section id='building-image'>
388 <title>Building an Image</title>
389
390 <para>
391 In the development environment you will need to build an image whenever you change hardware
392 support, add or change system libraries, or add or change services that have dependencies.
393 </para>
394
395 <mediaobject>
396 <imageobject>
397 <imagedata fileref="figures/building-an-image.png" format="PNG" align='center' scalefit='1'/>
398 </imageobject>
399 <caption>
400 <para>Building an Image</para>
401 </caption>
402 </mediaobject>
403
404 <para>
405 Use the following commands to build your image.
406 The OpenEmbedded build process creates an entire Linux distribution, including the toolchain,
407 from source.
408 </para>
409
410 <note><para>
411 The build process using Sato currently consumes about 50GB of disk space.
412 To allow for variations in the build process and for future package expansion, we
413 recommend having at least 50 Gbytes of free disk space.
414 </para></note>
415
416 <note>
417 <para>
418 By default, the build process searches for source code using
419 a pre-determined order through a set of locations.
420 If you encounter problems with the build process finding and
421 downloading source code, see the
422 "<ulink url='&YOCTO_DOCS_REF_URL;#how-does-the-yocto-project-obtain-source-code-and-will-it-work-behind-my-firewall-or-proxy-server'>How does the OpenEmbedded build system obtain source code and will it work behind my firewall or proxy server?</ulink>"
423 entry in the Yocto Project Reference Manual FAQ.
424 </para>
425 </note>
426
427 <para>
428 <literallayout class='monospaced'>
429 $ git clone &YOCTO_GIT_URL;/git/poky
430 $ cd poky
431 $ git checkout -b &DISTRO_NAME; origin/&DISTRO_NAME;
432 $ source &OE_INIT_FILE;
433 </literallayout>
434 </para>
435
436 <tip>
437 <para>
438 To help conserve disk space during builds, you can add the
439 following statement to your project's configuration file,
440 which for this example is
441 <filename>poky/build/conf/local.conf</filename>.
442 Adding this statement deletes the work directory used for
443 building a package once the package is built.
444 <literallayout class='monospaced'>
445 INHERIT += "rm_work"
446 </literallayout>
447 </para>
448 </tip>
449
450 <itemizedlist>
451 <listitem><para>In the previous example, the first command uses
452 <ulink url='&YOCTO_DOCS_DEV_URL;#git'>Git</ulink> to create
453 a local repository named <filename>poky</filename> that is a
454 clone of the upstream Yocto Project
455 <filename>poky</filename> repository.</para></listitem>
456 <listitem><para>The third command checks out a local branch and
457 names it <filename>&DISTRO_NAME;</filename>.
458 The local branch tracks the upstream branch of the same name.
459 Creating your own branch based on the released branch ensures
460 you are using the latest files for that release.
461 </para></listitem>
462 <listitem><para>
463 The final command runs the Yocto Project
464 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
465 environment setup script.
466 Running this script defines OpenEmbedded build environment
467 settings needed to complete the build.
468 The script also creates the
469 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>,
470 which is <filename>build</filename> in this case and is located
471 in the
472 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
473 After the script runs, your current working directory is set
474 to the Build Directory.
475 Later, when the build completes, the Build Directory contains
476 all the files created during the build.
477 <note>
478 For information on running a memory-resident
479 <ulink url='&YOCTO_DOCS_REF_URL;#usingpoky-components-bitbake'>BitBake</ulink>,
480 see the
481 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>
482 setup script.
483 </note></para></listitem>
484 </itemizedlist>
485 <para>
486 Take some time to examine your <filename>local.conf</filename> file
487 in your project's configuration directory, which is found in the Build Directory.
488 The defaults in that file should work fine.
489 However, there are some variables of interest at which you might look.
490 </para>
491
492 <para>
493 By default, the target architecture for the build is <filename>qemux86</filename>,
494 which produces an image that can be used in the QEMU emulator and is targeted at an
495 <trademark class='registered'>Intel</trademark> 32-bit based architecture.
496 To change this default, edit the value of the
497 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
498 variable in the configuration file before launching the build.
499 </para>
500
501 <para>
502 Another couple of variables of interest are the
503 <ulink url='&YOCTO_DOCS_REF_URL;#var-BB_NUMBER_THREADS'><filename>BB_NUMBER_THREADS</filename></ulink> and the
504 <ulink url='&YOCTO_DOCS_REF_URL;#var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></ulink> variables.
505 By default, these variables are set to how ever many processor
506 cores your build host uses.
507 However, if your build host uses multiple processor cores,
508 you should increase these settings to twice the number of
509 cores used.
510 Doing so can significantly shorten your build time.
511 </para>
512
513 <para>
514 Another consideration before you build is the package manager used when creating
515 the image.
516 By default, the OpenEmbedded build system uses the RPM package manager.
517 You can control this configuration by using the
518 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></ulink></filename> variable.
519 For additional package manager selection information, see the
520 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-package'><filename>package*.bbclass</filename></ulink>"
521 section in the Yocto Project Reference Manual.
522 </para>
523
524 <para>
525 Continue with the following command to build an OS image for the target, which is
526 <filename>core-image-sato</filename> in this example.
527 For information on the <filename>-k</filename> option use the
528 <filename>bitbake --help</filename> command, see the
529 "<ulink url='&YOCTO_DOCS_REF_URL;#usingpoky-components-bitbake'>BitBake</ulink>"
530 section in the Yocto Project Reference Manual, or see the
531 "<ulink url='&YOCTO_DOCS_BB_URL;#user-manual-command'>BitBake Command</ulink>"
532 section in the BitBake User Manual.
533 <literallayout class='monospaced'>
534 $ bitbake -k core-image-sato
535 </literallayout>
536 <note>
537 BitBake requires Python 2.6 or 2.7. For more information on
538 this requirement, see the
539 "<ulink url='&YOCTO_DOCS_REF_URL;#required-git-tar-and-python-versions'>Required Git, tar, and Python</ulink>"
540 section in the Yocto Project Reference Manual.
541 </note>
542 The final command runs the image:
543 <literallayout class='monospaced'>
544 $ runqemu qemux86
545 </literallayout>
546 <note>
547 <para>
548 Depending on the number of processors and cores, the amount
549 of RAM, the speed of your Internet connection and other
550 factors, the build process could take several hours the
551 first time you run it.
552 Subsequent builds run much faster since parts of the build
553 are cached.
554 </para>
555 </note>
556 </para>
557 </section>
558
559 <section id='using-pre-built'>
560 <title>Using Pre-Built Binaries and QEMU</title>
561
562 <para>
563 If hardware, libraries and services are stable, you can get started by using a pre-built binary
564 of the filesystem image, kernel, and toolchain and run it using the QEMU emulator.
565 This scenario is useful for developing application software.
566 </para>
567
568 <mediaobject>
569 <imageobject>
570 <imagedata fileref="figures/using-a-pre-built-image.png" format="PNG" align='center' scalefit='1'/>
571 </imageobject>
572 <caption>
573 <para>Using a Pre-Built Image</para>
574 </caption>
575 </mediaobject>
576
577 <para>
578 For this scenario, you need to do several things:
579 </para>
580
581 <itemizedlist>
582 <listitem><para>Install the appropriate stand-alone toolchain tarball.</para></listitem>
583 <listitem><para>Download the pre-built image that will boot with QEMU.
584 You need to be sure to get the QEMU image that matches your target machine’s
585 architecture (e.g. x86, ARM, etc.).</para></listitem>
586 <listitem><para>Download the filesystem image for your target machine's architecture.
587 </para></listitem>
588 <listitem><para>Set up the environment to emulate the hardware and then start the QEMU emulator.
589 </para></listitem>
590 </itemizedlist>
591
592 <section id='installing-the-toolchain'>
593 <title>Installing the Toolchain</title>
594
595 <para>
596 You can download a tarball installer, which includes the
597 pre-built toolchain, the <filename>runqemu</filename>
598 script, and support files from the appropriate directory under
599 <ulink url='&YOCTO_TOOLCHAIN_DL_URL;'></ulink>.
600 Toolchains are available for 32-bit and 64-bit x86 development
601 systems from the <filename>i686</filename> and
602 <filename>x86_64</filename> directories, respectively.
603 The toolchains the Yocto Project provides are based off the
604 <filename>core-image-sato</filename> image and contain
605 libraries appropriate for developing against that image.
606 Each type of development system supports five or more target
607 architectures.
608 </para>
609
610 <para>
611 The names of the tarball installer scripts are such that a
612 string representing the host system appears first in the
613 filename and then is immediately followed by a string
614 representing the target architecture.
615 </para>
616
617 <literallayout class='monospaced'>
618 poky-eglibc-&lt;<emphasis>host_system</emphasis>&gt;-&lt;<emphasis>image_type</emphasis>&gt;-&lt;<emphasis>arch</emphasis>&gt;-toolchain-&lt;<emphasis>release_version</emphasis>&gt;.sh
619
620 Where:
621 &lt;<emphasis>host_system</emphasis>&gt; is a string representing your development system:
622
623 i686 or x86_64.
624
625 &lt;<emphasis>image_type</emphasis>&gt; is a string representing the image you wish to
626 develop a Software Development Toolkit (SDK) for use against.
627 The Yocto Project builds toolchain installers using the
628 following BitBake command:
629
630 bitbake core-image-sato -c populate_sdk
631
632 &lt;<emphasis>arch</emphasis>&gt; is a string representing the tuned target architecture:
633
634 i586, x86_64, powerpc, mips, armv7a or armv5te
635
636 &lt;<emphasis>release_version</emphasis>&gt; is a string representing the release number of the
637 Yocto Project:
638
639 &DISTRO;, &DISTRO;+snapshot
640 </literallayout>
641
642 <para>
643 For example, the following toolchain installer is for a 64-bit
644 development host system and a i586-tuned target architecture
645 based off the SDK for <filename>core-image-sato</filename>:
646 <literallayout class='monospaced'>
647 poky-eglibc-x86_64-core-image-sato-i586-toolchain-&DISTRO;.sh
648 </literallayout>
649 </para>
650
651 <para>
652 Toolchains are self-contained and by default are installed into
653 <filename>/opt/poky</filename>.
654 However, when you run the toolchain installer, you can choose an
655 installation directory.
656 </para>
657
658 <para>
659 The following command shows how to run the installer given a toolchain tarball
660 for a 64-bit x86 development host system and a 32-bit x86 target architecture.
661 You must change the permissions on the toolchain
662 installer script so that it is executable.
663 </para>
664
665 <para>
666 The example assumes the toolchain installer is located in <filename>~/Downloads/</filename>.
667 <note>
668 If you do not have write permissions for the directory into which you are installing
669 the toolchain, the toolchain installer notifies you and exits.
670 Be sure you have write permissions in the directory and run the installer again.
671 </note>
672 </para>
673
674 <para>
675 <literallayout class='monospaced'>
676 $ ~/Downloads/poky-eglibc-x86_64-core-image-sato-i586-toolchain-&DISTRO;.sh
677 </literallayout>
678 </para>
679
680 <para>
681 For more information on how to install tarballs, see the
682 "<ulink url='&YOCTO_DOCS_ADT_URL;#using-an-existing-toolchain-tarball'>Using a Cross-Toolchain Tarball</ulink>" and
683 "<ulink url='&YOCTO_DOCS_ADT_URL;#using-the-toolchain-from-within-the-build-tree'>Using BitBake and the Build Directory</ulink>" sections in the Yocto Project Application Developer's Guide.
684 </para>
685 </section>
686
687 <section id='downloading-the-pre-built-linux-kernel'>
688 <title>Downloading the Pre-Built Linux Kernel</title>
689
690 <para>
691 You can download the pre-built Linux kernel suitable for running in the QEMU emulator from
692 <ulink url='&YOCTO_QEMU_DL_URL;'></ulink>.
693 Be sure to use the kernel that matches the architecture you want to simulate.
694 Download areas exist for the five supported machine architectures:
695 <filename>qemuarm</filename>, <filename>qemumips</filename>, <filename>qemuppc</filename>,
696 <filename>qemux86</filename>, and <filename>qemux86-64</filename>.
697 </para>
698
699 <para>
700 Most kernel files have one of the following forms:
701 <literallayout class='monospaced'>
702 *zImage-qemu&lt;<emphasis>arch</emphasis>&gt;.bin
703 vmlinux-qemu&lt;<emphasis>arch</emphasis>&gt;.bin
704
705 Where:
706 &lt;<emphasis>arch</emphasis>&gt; is a string representing the target architecture:
707 x86, x86-64, ppc, mips, or arm.
708 </literallayout>
709 </para>
710
711 <para>
712 You can learn more about downloading a Yocto Project kernel in the
713 "<ulink url='&YOCTO_DOCS_DEV_URL;#local-kernel-files'>Yocto Project Kernel</ulink>"
714 bulleted item in the Yocto Project Development Manual.
715 </para>
716 </section>
717
718 <section id='downloading-the-filesystem'>
719 <title>Downloading the Filesystem</title>
720
721 <para>
722 You can also download the filesystem image suitable for your target architecture from
723 <ulink url='&YOCTO_QEMU_DL_URL;'></ulink>.
724 Again, be sure to use the filesystem that matches the architecture you want
725 to simulate.
726 </para>
727
728 <para>
729 The filesystem image has two tarball forms: <filename>ext3</filename> and
730 <filename>tar</filename>.
731 You must use the <filename>ext3</filename> form when booting an image using the
732 QEMU emulator.
733 The <filename>tar</filename> form can be flattened out in your host development system
734 and used for build purposes with the Yocto Project.
735 <literallayout class='monospaced'>
736 core-image-&lt;<emphasis>profile</emphasis>&gt;-qemu&lt;<emphasis>arch</emphasis>&gt;.ext3
737 core-image-&lt;<emphasis>profile</emphasis>&gt;-qemu&lt;<emphasis>arch</emphasis>&gt;.tar.bz2
738
739 Where:
740 &lt;<emphasis>profile</emphasis>&gt; is the filesystem image's profile:
741 lsb, lsb-dev, lsb-sdk, lsb-qt3, minimal, minimal-dev, sato,
742 sato-dev, or sato-sdk. For information on these types of image
743 profiles, see the "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>" chapter in the Yocto Project
744 Reference Manual.
745
746 &lt;<emphasis>arch</emphasis>&gt; is a string representing the target architecture:
747 x86, x86-64, ppc, mips, or arm.
748 </literallayout>
749 </para>
750 </section>
751
752 <section id='setting-up-the-environment-and-starting-the-qemu-emulator'>
753 <title>Setting Up the Environment and Starting the QEMU Emulator</title>
754
755 <para>
756 Before you start the QEMU emulator, you need to set up the emulation environment.
757 The following command form sets up the emulation environment.
758 <literallayout class='monospaced'>
759 $ source &YOCTO_ADTPATH_DIR;/environment-setup-&lt;<emphasis>arch</emphasis>&gt;-poky-linux-&lt;<emphasis>if</emphasis>&gt;
760
761 Where:
762 &lt;<emphasis>arch</emphasis>&gt; is a string representing the target architecture:
763 i586, x86_64, ppc603e, mips, or armv5te.
764
765 &lt;<emphasis>if</emphasis>&gt; is a string representing an embedded application binary interface.
766 Not all setup scripts include this string.
767 </literallayout>
768 </para>
769
770 <para>
771 Finally, this command form invokes the QEMU emulator
772 <literallayout class='monospaced'>
773 $ runqemu &lt;<emphasis>qemuarch</emphasis>&gt; &lt;<emphasis>kernel-image</emphasis>&gt; &lt;<emphasis>filesystem-image</emphasis>&gt;
774
775 Where:
776 &lt;<emphasis>qemuarch</emphasis>&gt; is a string representing the target architecture: qemux86, qemux86-64,
777 qemuppc, qemumips, or qemuarm.
778
779 &lt;<emphasis>kernel-image</emphasis>&gt; is the architecture-specific kernel image.
780
781 &lt;<emphasis>filesystem-image</emphasis>&gt; is the .ext3 filesystem image.
782
783 </literallayout>
784 </para>
785
786 <para>
787 Continuing with the example, the following two commands setup the emulation
788 environment and launch QEMU.
789 This example assumes the root filesystem (<filename>.ext3</filename> file) and
790 the pre-built kernel image file both reside in your home directory.
791 The kernel and filesystem are for a 32-bit target architecture.
792 <literallayout class='monospaced'>
793 $ cd $HOME
794 $ source &YOCTO_ADTPATH_DIR;/environment-setup-i586-poky-linux
795 $ runqemu qemux86 bzImage-qemux86.bin \
796 core-image-sato-qemux86.ext3
797 </literallayout>
798 </para>
799
800 <para>
801 The environment in which QEMU launches varies depending on the filesystem image and on the
802 target architecture.
803 For example, if you source the environment for the ARM target
804 architecture and then boot the minimal QEMU image, the emulator comes up in a new
805 shell in command-line mode.
806 However, if you boot the SDK image, QEMU comes up with a GUI.
807 <note>Booting the PPC image results in QEMU launching in the same shell in
808 command-line mode.</note>
809 </para>
810 </section>
811 </section>
812</section>
813
814<section id='super-user'>
815 <title>Super User
816</title>
817
818 <para>
819 This section
820 <footnote>
821 <para>
822 Kudos and thanks to Robert P. J. Day of
823 <ulink url='http://www.crashcourse.ca'>CrashCourse</ulink> for providing the basis
824 for this "expert" section with information from one of his
825 <ulink url='http://www.crashcourse.ca/wiki/index.php/Yocto_Project_Quick_Start'>wiki</ulink>
826 pages.
827 </para>
828 </footnote>
829 gives you a minimal description of how to use the Yocto Project to build
830 images for Beaglebone hardware starting from scratch.
831 The steps were performed on a 64-bit Ubuntu 12.04 system that
832 has four cores.
833 </para>
834
835 <section id='getting-yocto'>
836 <title>Getting the Yocto Project</title>
837
838 <para>
839 Set up your
840 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
841 by using Git to clone the <filename>poky</filename>
842 repository and then check out the release branch:
843 <literallayout class='monospaced'>
844 $ cd ~
845 $ git clone git://git.yoctoproject.org/poky
846 $ cd poky
847 $ git checkout -b &DISTRO_NAME; origin/&DISTRO_NAME;
848 </literallayout>
849 </para>
850 </section>
851
852 <section id='setting-up-your-host'>
853 <title>Setting Up Your Host</title>
854
855 <para>
856 You need some packages for everything to work.
857 Rather than duplicate them here, look at the
858 "<link linkend='packages'>The Packages</link>"
859 section earlier in this quick start.
860 </para>
861 </section>
862
863 <section id='initializing-the-build-environment'>
864 <title>Initializing the Build Environment</title>
865
866 <para>
867 From the root directory of your
868 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>,
869 initialize your environment and provide a meaningful
870 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
871 name:
872 <literallayout class='monospaced'>
873 $ source &OE_INIT_FILE; mybuilds
874 </literallayout>
875 At this point, the <filename>mybuilds</filename> directory has
876 been created for you and it is now your current working directory.
877 If you do not provide your own directory name,
878 it defaults to <filename>build</filename>,
879 which is inside the Source Directory.
880 </para>
881 </section>
882
883 <section id='configuring-the-local.conf-file'>
884 <title>Configuring the local.conf File</title>
885
886 <para>
887 Initializing the build environment creates a
888 <filename>conf/local.conf</filename> configuration file
889 in the Build Directory.
890 You need to manually edit this file to specify the machine you
891 are building and to optimize your build time.
892 Here are the minimal changes to make:
893 <literallayout class='monospaced'>
894 BB_NUMBER_THREADS = "8"
895 PARALLEL_MAKE = "-j 8"
896 MACHINE ?= "beaglebone"
897 </literallayout>
898 Briefly, set
899 <ulink url='&YOCTO_DOCS_REF_URL;#var-BB_NUMBER_THREADS'><filename>BB_NUMBER_THREADS</filename></ulink>
900 and
901 <ulink url='&YOCTO_DOCS_REF_URL;#var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></ulink> to
902 twice your host processor's number of cores.
903 </para>
904
905 <para>
906 A good deal that goes into a Yocto Project build is simply
907 downloading all of the source tarballs.
908 Maybe you have been working with another build system
909 (OpenEmbedded or Angstrom) for which you have built up a sizable
910 directory of source tarballs.
911 Or, perhaps someone else has such a directory for which you have
912 read access.
913 If so, you can save time by adding statements to your
914 configuration file so that the build process checks local
915 directories first for existing tarballs before checking the
916 Internet.
917 Here is an efficient way to set it up in your
918 <filename>local.conf</filename> file:
919 <literallayout class='monospaced'>
920 SOURCE_MIRROR_URL ?= "file:///home/you/your-download-dir/"
921 INHERIT += "own-mirrors"
922 BB_GENERATE_MIRROR_TARBALLS = "1"
923 # BB_NO_NETWORK = "1"
924 </literallayout>
925 </para>
926
927 <para>
928 In the previous example, the
929 <ulink url='&YOCTO_DOCS_REF_URL;#var-BB_GENERATE_MIRROR_TARBALLS'><filename>BB_GENERATE_MIRROR_TARBALLS</filename></ulink>
930 variable causes the OpenEmbedded build system to generate tarballs
931 of the Git repositories and store them in the
932 <ulink url='&YOCTO_DOCS_REF_URL;#var-DL_DIR'><filename>DL_DIR</filename></ulink>
933 directory.
934 Due to performance reasons, generating and storing these tarballs
935 is not the build system's default behavior.
936 </para>
937
938 <para>
939 You can also use the
940 <ulink url='&YOCTO_DOCS_REF_URL;#var-PREMIRRORS'><filename>PREMIRRORS</filename></ulink>
941 variable.
942 For an example, see the variable's glossary entry in the
943 Yocto Project Reference Manual.
944 </para>
945 </section>
946
947 <section id='building-the-image'>
948 <title>Building the Image</title>
949
950 <para>
951 At this point, you need to select an image to build for the
952 Beaglebone hardware.
953 If this is your first build using the Yocto Project, you should try
954 the smallest and simplest image:
955 <literallayout class='monospaced'>
956 $ bitbake core-image-minimal
957 </literallayout>
958 Now you just wait for the build to finish.
959 </para>
960
961 <para>
962 Here are some variations on the build process that could be helpful:
963 <itemizedlist>
964 <listitem><para>Fetch all the necessary sources without starting
965 the build:
966 <literallayout class='monospaced'>
967 $ bitbake -c fetchall core-image-minimal
968 </literallayout>
969 This variation guarantees that you have all the sources for
970 that BitBake target should you disconnect from the net and
971 want to do the build later offline.</para></listitem>
972 <listitem><para>Specify to continue the build even if BitBake
973 encounters an error.
974 By default, BitBake aborts the build when it encounters an
975 error.
976 This command keeps a faulty build going:
977 <literallayout class='monospaced'>
978 $ bitbake -k core-image-minimal
979 </literallayout></para></listitem>
980 </itemizedlist>
981 </para>
982
983 <para>
984 Once you have your image, you can take steps to load and boot it on
985 the target hardware.
986 </para>
987
988 <para>
989 You can learn about BitBake in general by reading the
990 <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
991 </para>
992 </section>
993</section>
994
995</article>
996<!--
997vim: expandtab tw=80 ts=4
998-->