summaryrefslogtreecommitdiffstats
path: root/documentation
diff options
context:
space:
mode:
authorTudor Florea <tudor.florea@enea.com>2015-10-09 22:59:03 +0200
committerTudor Florea <tudor.florea@enea.com>2015-10-09 22:59:03 +0200
commit972dcfcdbfe75dcfeb777150c136576cf1a71e99 (patch)
tree97a61cd7e293d7ae9d56ef7ed0f81253365bb026 /documentation
downloadpoky-972dcfcdbfe75dcfeb777150c136576cf1a71e99.tar.gz
initial commit for Enea Linux 5.0 arm
Signed-off-by: Tudor Florea <tudor.florea@enea.com>
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.xsl19
-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.xml135
-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.css984
-rw-r--r--documentation/adt-manual/figures/adt-title.pngbin0 -> 13498 bytes
-rw-r--r--documentation/bsp-guide/bsp-guide-customization.xsl19
-rw-r--r--documentation/bsp-guide/bsp-guide-eclipse-customization.xsl27
-rw-r--r--documentation/bsp-guide/bsp-guide.xml138
-rw-r--r--documentation/bsp-guide/bsp-style.css984
-rw-r--r--documentation/bsp-guide/bsp.xml1527
-rw-r--r--documentation/bsp-guide/figures/bsp-title.pngbin0 -> 17388 bytes
-rw-r--r--documentation/dev-manual/dev-manual-common-tasks.xml9738
-rw-r--r--documentation/dev-manual/dev-manual-customization.xsl19
-rw-r--r--documentation/dev-manual/dev-manual-eclipse-customization.xsl27
-rw-r--r--documentation/dev-manual/dev-manual-intro.xml240
-rw-r--r--documentation/dev-manual/dev-manual-model.xml2112
-rw-r--r--documentation/dev-manual/dev-manual-newbie.xml1692
-rw-r--r--documentation/dev-manual/dev-manual-qemu.xml419
-rw-r--r--documentation/dev-manual/dev-manual-start.xml418
-rw-r--r--documentation/dev-manual/dev-manual.xml124
-rw-r--r--documentation/dev-manual/dev-style.css984
-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 -> 230971 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.xml1074
-rw-r--r--documentation/kernel-dev/kernel-dev-common.xml915
-rw-r--r--documentation/kernel-dev/kernel-dev-concepts-appx.xml253
-rw-r--r--documentation/kernel-dev/kernel-dev-customization.xsl18
-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.xml140
-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.css984
-rw-r--r--documentation/kernel-dev/kernel-dev.xml115
-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 -> 44913 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 -> 230971 bytes
-rw-r--r--documentation/mega-manual/mega-manual-customization.xsl34
-rw-r--r--documentation/mega-manual/mega-manual.xml53
-rw-r--r--documentation/mega-manual/mega-style.css983
-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.xsl19
-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.css984
-rw-r--r--documentation/profile-manual/profile-manual-usage.xml3695
-rw-r--r--documentation/profile-manual/profile-manual.xml105
-rw-r--r--documentation/ref-manual/TODO11
-rw-r--r--documentation/ref-manual/closer-look.xml1304
-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.xml799
-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 -> 44913 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.xml572
-rw-r--r--documentation/ref-manual/migration.xml2019
-rw-r--r--documentation/ref-manual/ref-bitbake.xml472
-rw-r--r--documentation/ref-manual/ref-classes.xml3489
-rw-r--r--documentation/ref-manual/ref-features.xml420
-rw-r--r--documentation/ref-manual/ref-images.xml169
-rw-r--r--documentation/ref-manual/ref-manual-customization.xsl21
-rw-r--r--documentation/ref-manual/ref-manual-eclipse-customization.xsl27
-rw-r--r--documentation/ref-manual/ref-manual.xml160
-rw-r--r--documentation/ref-manual/ref-qa-checks.xml1217
-rw-r--r--documentation/ref-manual/ref-structure.xml1129
-rw-r--r--documentation/ref-manual/ref-style.css985
-rw-r--r--documentation/ref-manual/ref-tasks.xml695
-rw-r--r--documentation/ref-manual/ref-variables.xml10284
-rw-r--r--documentation/ref-manual/ref-varlocality.xml196
-rw-r--r--documentation/ref-manual/resources.xml130
-rw-r--r--documentation/ref-manual/technical-details.xml1421
-rw-r--r--documentation/ref-manual/usingpoky.xml915
-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/component.title.xsl39
-rw-r--r--documentation/template/division.title.xsl24
-rw-r--r--documentation/template/draft.pngbin0 -> 24847 bytes
-rw-r--r--documentation/template/fop-config.xml58
-rw-r--r--documentation/template/formal.object.heading.xsl21
-rw-r--r--documentation/template/gloss-permalinks.xsl14
-rw-r--r--documentation/template/ohand-color.svg150
-rw-r--r--documentation/template/permalinks.xsl25
-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/qa-code-permalinks.xsl23
-rw-r--r--documentation/template/section.title.xsl55
-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.sed31
-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.css983
-rw-r--r--documentation/yocto-project-qs/yocto-project-qs-customization.xsl15
-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.xml968
241 files changed, 66564 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..164b1efbff
--- /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=<replaceable>sysroot-dir</replaceable>
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=</filename><replaceable>sysroot-dir</replaceable> 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 <replaceable>dir_containing_your_project-specific_m4_macros</replaceable>]
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..f08087d93f
--- /dev/null
+++ b/documentation/adt-manual/adt-manual-customization.xsl
@@ -0,0 +1,19 @@
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/1.76.1/xhtml/docbook.xsl" />
5
6 <xsl:include href="../template/permalinks.xsl"/>
7 <xsl:include href="../template/section.title.xsl"/>
8 <xsl:include href="../template/component.title.xsl"/>
9 <xsl:include href="../template/division.title.xsl"/>
10 <xsl:include href="../template/formal.object.heading.xsl"/>
11
12 <xsl:param name="html.stylesheet" select="'adt-style.css'" />
13 <xsl:param name="chapter.autolabel" select="1" />
14 <xsl:param name="appendix.autolabel" select="A" />
15 <xsl:param name="section.autolabel" select="1" />
16 <xsl:param name="section.label.includes.component.label" select="1" />
17 <xsl:param name="generate.id.attributes" select="1" />
18
19</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..57ca64ed17
--- /dev/null
+++ b/documentation/adt-manual/adt-manual.xml
@@ -0,0 +1,135 @@
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 <revision>
80 <revnumber>1.7</revnumber>
81 <date>October 2014</date>
82 <revremark>Released with the Yocto Project 1.7 Release.</revremark>
83 </revision>
84 <revision>
85 <revnumber>1.7.1</revnumber>
86 <date>January 2015</date>
87 <revremark>Released with the Yocto Project 1.7.1 Release.</revremark>
88 </revision>
89 <revision>
90 <revnumber>1.7.2</revnumber>
91 <date>June 2015</date>
92 <revremark>Released with the Yocto Project 1.7.2 Release.</revremark>
93 </revision>
94 </revhistory>
95
96 <copyright>
97 <year>&COPYRIGHT_YEAR;</year>
98 <holder>Linux Foundation</holder>
99 </copyright>
100
101 <legalnotice>
102 <para>
103 Permission is granted to copy, distribute and/or modify this document under
104 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.
105 </para>
106 <note>
107 For the latest version of this manual associated with this
108 Yocto Project release, see the
109 <ulink url='&YOCTO_DOCS_ADT_URL;'>Yocto Project Application Developer's Guide</ulink>
110 from the Yocto Project website.
111 </note>
112
113 </legalnotice>
114
115 </bookinfo>
116
117 <xi:include href="adt-manual-intro.xml"/>
118
119 <xi:include href="adt-intro.xml"/>
120
121 <xi:include href="adt-prepare.xml"/>
122
123 <xi:include href="adt-package.xml"/>
124
125 <xi:include href="adt-command.xml"/>
126
127<!-- <index id='index'>
128 <title>Index</title>
129 </index>
130-->
131
132</book>
133<!--
134vim: expandtab tw=80 ts=4
135-->
diff --git a/documentation/adt-manual/adt-package.xml b/documentation/adt-manual/adt-package.xml
new file mode 100644
index 0000000000..5c3196ea91
--- /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 <replaceable>sysroot_dir</replaceable>.
84 Finally, have an OPKG configuration file <replaceable>conf_file</replaceable>
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 <replaceable>conf_file</replaceable> -o <replaceable>sysroot_dir</replaceable> update
89 $ opkg-cl –f <replaceable>cconf_file</replaceable> -o <replaceable>sysroot_dir</replaceable> \
90 --force-overwrite install libglade
91 $ opkg-cl –f <replaceable>cconf_file</replaceable> -o <replaceable>sysroot_dir</replaceable> \
92 --force-overwrite install libglade-dbg
93 $ opkg-cl –f <replaceable>conf_file&gt; -o </replaceable>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..3810568730
--- /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_</filename><replaceable>arch</replaceable>: 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_</filename><replaceable>arch</replaceable>: 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_</filename><replaceable>arch</replaceable>.
193 For example, if you downloaded both <filename>minimal</filename> and
194 <filename>sato-sdk</filename> images by setting
195 <filename>YOCTOADT_ROOTFS_</filename><replaceable>arch</replaceable>
196 to "minimal sato-sdk", then <filename>YOCTOADT_ROOTFS_</filename><replaceable>arch</replaceable>
197 must be set to either "minimal" or "sato-sdk".
198 </para></listitem>
199 <listitem><para><filename>YOCTOADT_TARGET_SYSROOT_LOC_</filename><replaceable>arch</replaceable>: 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/</filename><replaceable>release</replaceable>.
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_</filename><replaceable>arch</replaceable>
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-glibc-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-glibc-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</filename> <replaceable>image</replaceable> <filename>-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>glibc</filename> static
660 development libraries:
661 <literallayout class='monospaced'>
662 IMAGE_INSTALL_append = " glibc-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..d722ad4b7f
--- /dev/null
+++ b/documentation/adt-manual/adt-style.css
@@ -0,0 +1,984 @@
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/* This style defines how the permalink character
317 appears by itself and when hovered over with
318 the mouse. */
319
320[alt='Permalink'] { color: #eee; }
321[alt='Permalink']:hover { color: black; }
322
323
324div.informalfigure,
325div.informalexample,
326div.informaltable,
327div.figure,
328div.table,
329div.example {
330 margin: 1em 0em;
331 padding: 1em;
332 page-break-inside: avoid;
333}
334
335
336div.informalfigure p.title b,
337div.informalexample p.title b,
338div.informaltable p.title b,
339div.figure p.title b,
340div.example p.title b,
341div.table p.title b{
342 padding-top: 0em;
343 margin-top: 0em;
344 font-size: 100%;
345 font-weight: normal;
346}
347
348.mediaobject .caption,
349.mediaobject .caption p {
350 text-align: center;
351 font-size: 80%;
352 padding-top: 0.5em;
353 padding-bottom: 0.5em;
354}
355
356.epigraph {
357 padding-left: 55%;
358 margin-bottom: 1em;
359}
360
361.epigraph p {
362 text-align: left;
363}
364
365.epigraph .quote {
366 font-style: italic;
367}
368.epigraph .attribution {
369 font-style: normal;
370 text-align: right;
371}
372
373span.application {
374 font-style: italic;
375}
376
377.programlisting {
378 font-family: monospace;
379 font-size: 80%;
380 white-space: pre;
381 margin: 1.33em 0em;
382 padding: 1.33em;
383}
384
385.tip,
386.warning,
387.caution,
388.note {
389 margin-top: 1em;
390 margin-bottom: 1em;
391
392}
393
394/* force full width of table within div */
395.tip table,
396.warning table,
397.caution table,
398.note table {
399 border: none;
400 width: 100%;
401}
402
403
404.tip table th,
405.warning table th,
406.caution table th,
407.note table th {
408 padding: 0.8em 0.0em 0.0em 0.0em;
409 margin : 0em 0em 0em 0em;
410}
411
412.tip p,
413.warning p,
414.caution p,
415.note p {
416 margin-top: 0.5em;
417 margin-bottom: 0.5em;
418 padding-right: 1em;
419 text-align: left;
420}
421
422.acronym {
423 text-transform: uppercase;
424}
425
426b.keycap,
427.keycap {
428 padding: 0.09em 0.3em;
429 margin: 0em;
430}
431
432.itemizedlist li {
433 clear: none;
434}
435
436.filename {
437 font-size: medium;
438 font-family: Courier, monospace;
439}
440
441
442div.navheader, div.heading{
443 position: absolute;
444 left: 0em;
445 top: 0em;
446 width: 100%;
447 background-color: #cdf;
448 width: 100%;
449}
450
451div.navfooter, div.footing{
452 position: fixed;
453 left: 0em;
454 bottom: 0em;
455 background-color: #eee;
456 width: 100%;
457}
458
459
460div.navheader td,
461div.navfooter td {
462 font-size: 66%;
463}
464
465div.navheader table th {
466 /*font-family: Georgia, Times, serif;*/
467 /*font-size: x-large;*/
468 font-size: 80%;
469}
470
471div.navheader table {
472 border-left: 0em;
473 border-right: 0em;
474 border-top: 0em;
475 width: 100%;
476}
477
478div.navfooter table {
479 border-left: 0em;
480 border-right: 0em;
481 border-bottom: 0em;
482 width: 100%;
483}
484
485div.navheader table td a,
486div.navfooter table td a {
487 color: #777;
488 text-decoration: none;
489}
490
491/* normal text in the footer */
492div.navfooter table td {
493 color: black;
494}
495
496div.navheader table td a:visited,
497div.navfooter table td a:visited {
498 color: #444;
499}
500
501
502/* links in header and footer */
503div.navheader table td a:hover,
504div.navfooter table td a:hover {
505 text-decoration: underline;
506 background-color: transparent;
507 color: #33a;
508}
509
510div.navheader hr,
511div.navfooter hr {
512 display: none;
513}
514
515
516.qandaset tr.question td p {
517 margin: 0em 0em 1em 0em;
518 padding: 0em 0em 0em 0em;
519}
520
521.qandaset tr.answer td p {
522 margin: 0em 0em 1em 0em;
523 padding: 0em 0em 0em 0em;
524}
525.answer td {
526 padding-bottom: 1.5em;
527}
528
529.emphasis {
530 font-weight: bold;
531}
532
533
534 /************* /
535 / decorations /
536/ *************/
537
538.titlepage {
539}
540
541.part .title {
542}
543
544.subtitle {
545 border: none;
546}
547
548/*
549h1 {
550 border: none;
551}
552
553h2 {
554 border-top: solid 0.2em;
555 border-bottom: solid 0.06em;
556}
557
558h3 {
559 border-top: 0em;
560 border-bottom: solid 0.06em;
561}
562
563h4 {
564 border: 0em;
565 border-bottom: solid 0.06em;
566}
567
568h5 {
569 border: 0em;
570}
571*/
572
573.programlisting {
574 border: solid 1px;
575}
576
577div.figure,
578div.table,
579div.informalfigure,
580div.informaltable,
581div.informalexample,
582div.example {
583 border: 1px solid;
584}
585
586
587
588.tip,
589.warning,
590.caution,
591.note {
592 border: 1px solid;
593}
594
595.tip table th,
596.warning table th,
597.caution table th,
598.note table th {
599 border-bottom: 1px solid;
600}
601
602.question td {
603 border-top: 1px solid black;
604}
605
606.answer {
607}
608
609
610b.keycap,
611.keycap {
612 border: 1px solid;
613}
614
615
616div.navheader, div.heading{
617 border-bottom: 1px solid;
618}
619
620
621div.navfooter, div.footing{
622 border-top: 1px solid;
623}
624
625 /********* /
626 / colors /
627/ *********/
628
629body {
630 color: #333;
631 background: white;
632}
633
634a {
635 background: transparent;
636}
637
638a:hover {
639 background-color: #dedede;
640}
641
642
643h1,
644h2,
645h3,
646h4,
647h5,
648h6,
649h7,
650h8 {
651 background-color: transparent;
652}
653
654hr {
655 border-color: #aaa;
656}
657
658
659.tip, .warning, .caution, .note {
660 border-color: #fff;
661}
662
663
664.tip table th,
665.warning table th,
666.caution table th,
667.note table th {
668 border-bottom-color: #fff;
669}
670
671
672.warning {
673 background-color: #f0f0f2;
674}
675
676.caution {
677 background-color: #f0f0f2;
678}
679
680.tip {
681 background-color: #f0f0f2;
682}
683
684.note {
685 background-color: #f0f0f2;
686}
687
688.glossary dl dt,
689.variablelist dl dt,
690.variablelist dl dt span.term {
691 color: #044;
692}
693
694div.figure,
695div.table,
696div.example,
697div.informalfigure,
698div.informaltable,
699div.informalexample {
700 border-color: #aaa;
701}
702
703pre.programlisting {
704 color: black;
705 background-color: #fff;
706 border-color: #aaa;
707 border-width: 2px;
708}
709
710.guimenu,
711.guilabel,
712.guimenuitem {
713 background-color: #eee;
714}
715
716
717b.keycap,
718.keycap {
719 background-color: #eee;
720 border-color: #999;
721}
722
723
724div.navheader {
725 border-color: black;
726}
727
728
729div.navfooter {
730 border-color: black;
731}
732
733
734 /*********** /
735 / graphics /
736/ ***********/
737
738/*
739body {
740 background-image: url("images/body_bg.jpg");
741 background-attachment: fixed;
742}
743
744.navheader,
745.note,
746.tip {
747 background-image: url("images/note_bg.jpg");
748 background-attachment: fixed;
749}
750
751.warning,
752.caution {
753 background-image: url("images/warning_bg.jpg");
754 background-attachment: fixed;
755}
756
757.figure,
758.informalfigure,
759.example,
760.informalexample,
761.table,
762.informaltable {
763 background-image: url("images/figure_bg.jpg");
764 background-attachment: fixed;
765}
766
767*/
768h1,
769h2,
770h3,
771h4,
772h5,
773h6,
774h7{
775}
776
777/*
778Example of how to stick an image as part of the title.
779
780div.article .titlepage .title
781{
782 background-image: url("figures/white-on-black.png");
783 background-position: center;
784 background-repeat: repeat-x;
785}
786*/
787
788div.preface .titlepage .title,
789div.colophon .title,
790div.chapter .titlepage .title,
791div.article .titlepage .title
792{
793}
794
795div.section div.section .titlepage .title,
796div.sect2 .titlepage .title {
797 background: none;
798}
799
800
801h1.title {
802 background-color: transparent;
803 background-repeat: no-repeat;
804 height: 256px;
805 text-indent: -9000px;
806 overflow:hidden;
807}
808
809h2.subtitle {
810 background-color: transparent;
811 text-indent: -9000px;
812 overflow:hidden;
813 width: 0px;
814 display: none;
815}
816
817 /*************************************** /
818 / pippin.gimp.org specific alterations /
819/ ***************************************/
820
821/*
822div.heading, div.navheader {
823 color: #777;
824 font-size: 80%;
825 padding: 0;
826 margin: 0;
827 text-align: left;
828 position: absolute;
829 top: 0px;
830 left: 0px;
831 width: 100%;
832 height: 50px;
833 background: url('/gfx/heading_bg.png') transparent;
834 background-repeat: repeat-x;
835 background-attachment: fixed;
836 border: none;
837}
838
839div.heading a {
840 color: #444;
841}
842
843div.footing, div.navfooter {
844 border: none;
845 color: #ddd;
846 font-size: 80%;
847 text-align:right;
848
849 width: 100%;
850 padding-top: 10px;
851 position: absolute;
852 bottom: 0px;
853 left: 0px;
854
855 background: url('/gfx/footing_bg.png') transparent;
856}
857*/
858
859
860
861 /****************** /
862 / nasty ie tweaks /
863/ ******************/
864
865/*
866div.heading, div.navheader {
867 width:expression(document.body.clientWidth + "px");
868}
869
870div.footing, div.navfooter {
871 width:expression(document.body.clientWidth + "px");
872 margin-left:expression("-5em");
873}
874body {
875 padding:expression("4em 5em 0em 5em");
876}
877*/
878
879 /**************************************** /
880 / mozilla vendor specific css extensions /
881/ ****************************************/
882/*
883div.navfooter, div.footing{
884 -moz-opacity: 0.8em;
885}
886
887div.figure,
888div.table,
889div.informalfigure,
890div.informaltable,
891div.informalexample,
892div.example,
893.tip,
894.warning,
895.caution,
896.note {
897 -moz-border-radius: 0.5em;
898}
899
900b.keycap,
901.keycap {
902 -moz-border-radius: 0.3em;
903}
904*/
905
906table tr td table tr td {
907 display: none;
908}
909
910
911hr {
912 display: none;
913}
914
915table {
916 border: 0em;
917}
918
919 .photo {
920 float: right;
921 margin-left: 1.5em;
922 margin-bottom: 1.5em;
923 margin-top: 0em;
924 max-width: 17em;
925 border: 1px solid gray;
926 padding: 3px;
927 background: white;
928}
929 .seperator {
930 padding-top: 2em;
931 clear: both;
932 }
933
934 #validators {
935 margin-top: 5em;
936 text-align: right;
937 color: #777;
938 }
939 @media print {
940 body {
941 font-size: 8pt;
942 }
943 .noprint {
944 display: none;
945 }
946 }
947
948
949.tip,
950.note {
951 background: #f0f0f2;
952 color: #333;
953 padding: 20px;
954 margin: 20px;
955}
956
957.tip h3,
958.note h3 {
959 padding: 0em;
960 margin: 0em;
961 font-size: 2em;
962 font-weight: bold;
963 color: #333;
964}
965
966.tip a,
967.note a {
968 color: #333;
969 text-decoration: underline;
970}
971
972.footnote {
973 font-size: small;
974 color: #333;
975}
976
977/* Changes the announcement text */
978.tip h3,
979.warning h3,
980.caution h3,
981.note h3 {
982 font-size:large;
983 color: #00557D;
984}
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..3da37be06f
--- /dev/null
+++ b/documentation/bsp-guide/bsp-guide-customization.xsl
@@ -0,0 +1,19 @@
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/1.76.1/xhtml/docbook.xsl" />
5
6 <xsl:include href="../template/permalinks.xsl"/>
7 <xsl:include href="../template/section.title.xsl"/>
8 <xsl:include href="../template/component.title.xsl"/>
9 <xsl:include href="../template/division.title.xsl"/>
10 <xsl:include href="../template/formal.object.heading.xsl"/>
11
12 <xsl:param name="html.stylesheet" select="'bsp-style.css'" />
13 <xsl:param name="chapter.autolabel" select="1" />
14 <xsl:param name="appendix.autolabel" select="A" />
15 <xsl:param name="section.autolabel" select="1" />
16 <xsl:param name="section.label.includes.component.label" select="1" />
17 <xsl:param name="generate.id.attributes" select="1" />
18
19</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..637a51211a
--- /dev/null
+++ b/documentation/bsp-guide/bsp-guide.xml
@@ -0,0 +1,138 @@
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 <revision>
92 <revnumber>1.7</revnumber>
93 <date>October 2014</date>
94 <revremark>Released with the Yocto Project 1.7 Release.</revremark>
95 </revision>
96 <revision>
97 <revnumber>1.7.1</revnumber>
98 <date>January 2015</date>
99 <revremark>Released with the Yocto Project 1.7.1 Release.</revremark>
100 </revision>
101 <revision>
102 <revnumber>1.7.2</revnumber>
103 <date>June 2015</date>
104 <revremark>Released with the Yocto Project 1.7.2 Release.</revremark>
105 </revision>
106 </revhistory>
107
108 <copyright>
109 <year>&COPYRIGHT_YEAR;</year>
110 <holder>Linux Foundation</holder>
111 </copyright>
112
113 <legalnotice>
114 <para>
115 Permission is granted to copy, distribute and/or modify this document under
116 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.
117 </para>
118 <note>
119 For the latest version of this manual associated with this
120 Yocto Project release, see the
121 <ulink url='&YOCTO_DOCS_BSP_URL;'>Yocto Project Board Support Package (BSP) Developer's Guide</ulink>
122 from the Yocto Project website.
123 </note>
124 </legalnotice>
125
126 </bookinfo>
127
128 <xi:include href="bsp.xml"/>
129
130<!-- <index id='index'>
131 <title>Index</title>
132 </index>
133-->
134
135</book>
136<!--
137vim: expandtab tw=80 ts=4
138-->
diff --git a/documentation/bsp-guide/bsp-style.css b/documentation/bsp-guide/bsp-style.css
new file mode 100644
index 0000000000..e407ca4a72
--- /dev/null
+++ b/documentation/bsp-guide/bsp-style.css
@@ -0,0 +1,984 @@
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/* This style defines how the permalink character
317 appears by itself and when hovered over with
318 the mouse. */
319
320[alt='Permalink'] { color: #eee; }
321[alt='Permalink']:hover { color: black; }
322
323
324div.informalfigure,
325div.informalexample,
326div.informaltable,
327div.figure,
328div.table,
329div.example {
330 margin: 1em 0em;
331 padding: 1em;
332 page-break-inside: avoid;
333}
334
335
336div.informalfigure p.title b,
337div.informalexample p.title b,
338div.informaltable p.title b,
339div.figure p.title b,
340div.example p.title b,
341div.table p.title b{
342 padding-top: 0em;
343 margin-top: 0em;
344 font-size: 100%;
345 font-weight: normal;
346}
347
348.mediaobject .caption,
349.mediaobject .caption p {
350 text-align: center;
351 font-size: 80%;
352 padding-top: 0.5em;
353 padding-bottom: 0.5em;
354}
355
356.epigraph {
357 padding-left: 55%;
358 margin-bottom: 1em;
359}
360
361.epigraph p {
362 text-align: left;
363}
364
365.epigraph .quote {
366 font-style: italic;
367}
368.epigraph .attribution {
369 font-style: normal;
370 text-align: right;
371}
372
373span.application {
374 font-style: italic;
375}
376
377.programlisting {
378 font-family: monospace;
379 font-size: 80%;
380 white-space: pre;
381 margin: 1.33em 0em;
382 padding: 1.33em;
383}
384
385.tip,
386.warning,
387.caution,
388.note {
389 margin-top: 1em;
390 margin-bottom: 1em;
391
392}
393
394/* force full width of table within div */
395.tip table,
396.warning table,
397.caution table,
398.note table {
399 border: none;
400 width: 100%;
401}
402
403
404.tip table th,
405.warning table th,
406.caution table th,
407.note table th {
408 padding: 0.8em 0.0em 0.0em 0.0em;
409 margin : 0em 0em 0em 0em;
410}
411
412.tip p,
413.warning p,
414.caution p,
415.note p {
416 margin-top: 0.5em;
417 margin-bottom: 0.5em;
418 padding-right: 1em;
419 text-align: left;
420}
421
422.acronym {
423 text-transform: uppercase;
424}
425
426b.keycap,
427.keycap {
428 padding: 0.09em 0.3em;
429 margin: 0em;
430}
431
432.itemizedlist li {
433 clear: none;
434}
435
436.filename {
437 font-size: medium;
438 font-family: Courier, monospace;
439}
440
441
442div.navheader, div.heading{
443 position: absolute;
444 left: 0em;
445 top: 0em;
446 width: 100%;
447 background-color: #cdf;
448 width: 100%;
449}
450
451div.navfooter, div.footing{
452 position: fixed;
453 left: 0em;
454 bottom: 0em;
455 background-color: #eee;
456 width: 100%;
457}
458
459
460div.navheader td,
461div.navfooter td {
462 font-size: 66%;
463}
464
465div.navheader table th {
466 /*font-family: Georgia, Times, serif;*/
467 /*font-size: x-large;*/
468 font-size: 80%;
469}
470
471div.navheader table {
472 border-left: 0em;
473 border-right: 0em;
474 border-top: 0em;
475 width: 100%;
476}
477
478div.navfooter table {
479 border-left: 0em;
480 border-right: 0em;
481 border-bottom: 0em;
482 width: 100%;
483}
484
485div.navheader table td a,
486div.navfooter table td a {
487 color: #777;
488 text-decoration: none;
489}
490
491/* normal text in the footer */
492div.navfooter table td {
493 color: black;
494}
495
496div.navheader table td a:visited,
497div.navfooter table td a:visited {
498 color: #444;
499}
500
501
502/* links in header and footer */
503div.navheader table td a:hover,
504div.navfooter table td a:hover {
505 text-decoration: underline;
506 background-color: transparent;
507 color: #33a;
508}
509
510div.navheader hr,
511div.navfooter hr {
512 display: none;
513}
514
515
516.qandaset tr.question td p {
517 margin: 0em 0em 1em 0em;
518 padding: 0em 0em 0em 0em;
519}
520
521.qandaset tr.answer td p {
522 margin: 0em 0em 1em 0em;
523 padding: 0em 0em 0em 0em;
524}
525.answer td {
526 padding-bottom: 1.5em;
527}
528
529.emphasis {
530 font-weight: bold;
531}
532
533
534 /************* /
535 / decorations /
536/ *************/
537
538.titlepage {
539}
540
541.part .title {
542}
543
544.subtitle {
545 border: none;
546}
547
548/*
549h1 {
550 border: none;
551}
552
553h2 {
554 border-top: solid 0.2em;
555 border-bottom: solid 0.06em;
556}
557
558h3 {
559 border-top: 0em;
560 border-bottom: solid 0.06em;
561}
562
563h4 {
564 border: 0em;
565 border-bottom: solid 0.06em;
566}
567
568h5 {
569 border: 0em;
570}
571*/
572
573.programlisting {
574 border: solid 1px;
575}
576
577div.figure,
578div.table,
579div.informalfigure,
580div.informaltable,
581div.informalexample,
582div.example {
583 border: 1px solid;
584}
585
586
587
588.tip,
589.warning,
590.caution,
591.note {
592 border: 1px solid;
593}
594
595.tip table th,
596.warning table th,
597.caution table th,
598.note table th {
599 border-bottom: 1px solid;
600}
601
602.question td {
603 border-top: 1px solid black;
604}
605
606.answer {
607}
608
609
610b.keycap,
611.keycap {
612 border: 1px solid;
613}
614
615
616div.navheader, div.heading{
617 border-bottom: 1px solid;
618}
619
620
621div.navfooter, div.footing{
622 border-top: 1px solid;
623}
624
625 /********* /
626 / colors /
627/ *********/
628
629body {
630 color: #333;
631 background: white;
632}
633
634a {
635 background: transparent;
636}
637
638a:hover {
639 background-color: #dedede;
640}
641
642
643h1,
644h2,
645h3,
646h4,
647h5,
648h6,
649h7,
650h8 {
651 background-color: transparent;
652}
653
654hr {
655 border-color: #aaa;
656}
657
658
659.tip, .warning, .caution, .note {
660 border-color: #fff;
661}
662
663
664.tip table th,
665.warning table th,
666.caution table th,
667.note table th {
668 border-bottom-color: #fff;
669}
670
671
672.warning {
673 background-color: #f0f0f2;
674}
675
676.caution {
677 background-color: #f0f0f2;
678}
679
680.tip {
681 background-color: #f0f0f2;
682}
683
684.note {
685 background-color: #f0f0f2;
686}
687
688.glossary dl dt,
689.variablelist dl dt,
690.variablelist dl dt span.term {
691 color: #044;
692}
693
694div.figure,
695div.table,
696div.example,
697div.informalfigure,
698div.informaltable,
699div.informalexample {
700 border-color: #aaa;
701}
702
703pre.programlisting {
704 color: black;
705 background-color: #fff;
706 border-color: #aaa;
707 border-width: 2px;
708}
709
710.guimenu,
711.guilabel,
712.guimenuitem {
713 background-color: #eee;
714}
715
716
717b.keycap,
718.keycap {
719 background-color: #eee;
720 border-color: #999;
721}
722
723
724div.navheader {
725 border-color: black;
726}
727
728
729div.navfooter {
730 border-color: black;
731}
732
733
734 /*********** /
735 / graphics /
736/ ***********/
737
738/*
739body {
740 background-image: url("images/body_bg.jpg");
741 background-attachment: fixed;
742}
743
744.navheader,
745.note,
746.tip {
747 background-image: url("images/note_bg.jpg");
748 background-attachment: fixed;
749}
750
751.warning,
752.caution {
753 background-image: url("images/warning_bg.jpg");
754 background-attachment: fixed;
755}
756
757.figure,
758.informalfigure,
759.example,
760.informalexample,
761.table,
762.informaltable {
763 background-image: url("images/figure_bg.jpg");
764 background-attachment: fixed;
765}
766
767*/
768h1,
769h2,
770h3,
771h4,
772h5,
773h6,
774h7{
775}
776
777/*
778Example of how to stick an image as part of the title.
779
780div.article .titlepage .title
781{
782 background-image: url("figures/white-on-black.png");
783 background-position: center;
784 background-repeat: repeat-x;
785}
786*/
787
788div.preface .titlepage .title,
789div.colophon .title,
790div.chapter .titlepage .title {
791 background-position: bottom;
792 background-repeat: repeat-x;
793}
794
795div.section div.section .titlepage .title,
796div.sect2 .titlepage .title {
797 background: none;
798}
799
800
801h1.title {
802 background-color: transparent;
803 background-repeat: no-repeat;
804 height: 256px;
805 text-indent: -9000px;
806 overflow:hidden;
807}
808
809h2.subtitle {
810 background-color: transparent;
811 text-indent: -9000px;
812 overflow:hidden;
813 width: 0px;
814 display: none;
815}
816
817 /*************************************** /
818 / pippin.gimp.org specific alterations /
819/ ***************************************/
820
821/*
822div.heading, div.navheader {
823 color: #777;
824 font-size: 80%;
825 padding: 0;
826 margin: 0;
827 text-align: left;
828 position: absolute;
829 top: 0px;
830 left: 0px;
831 width: 100%;
832 height: 50px;
833 background: url('/gfx/heading_bg.png') transparent;
834 background-repeat: repeat-x;
835 background-attachment: fixed;
836 border: none;
837}
838
839div.heading a {
840 color: #444;
841}
842
843div.footing, div.navfooter {
844 border: none;
845 color: #ddd;
846 font-size: 80%;
847 text-align:right;
848
849 width: 100%;
850 padding-top: 10px;
851 position: absolute;
852 bottom: 0px;
853 left: 0px;
854
855 background: url('/gfx/footing_bg.png') transparent;
856}
857*/
858
859
860
861 /****************** /
862 / nasty ie tweaks /
863/ ******************/
864
865/*
866div.heading, div.navheader {
867 width:expression(document.body.clientWidth + "px");
868}
869
870div.footing, div.navfooter {
871 width:expression(document.body.clientWidth + "px");
872 margin-left:expression("-5em");
873}
874body {
875 padding:expression("4em 5em 0em 5em");
876}
877*/
878
879 /**************************************** /
880 / mozilla vendor specific css extensions /
881/ ****************************************/
882/*
883div.navfooter, div.footing{
884 -moz-opacity: 0.8em;
885}
886
887div.figure,
888div.table,
889div.informalfigure,
890div.informaltable,
891div.informalexample,
892div.example,
893.tip,
894.warning,
895.caution,
896.note {
897 -moz-border-radius: 0.5em;
898}
899
900b.keycap,
901.keycap {
902 -moz-border-radius: 0.3em;
903}
904*/
905
906table tr td table tr td {
907 display: none;
908}
909
910
911hr {
912 display: none;
913}
914
915table {
916 border: 0em;
917}
918
919 .photo {
920 float: right;
921 margin-left: 1.5em;
922 margin-bottom: 1.5em;
923 margin-top: 0em;
924 max-width: 17em;
925 border: 1px solid gray;
926 padding: 3px;
927 background: white;
928}
929 .seperator {
930 padding-top: 2em;
931 clear: both;
932 }
933
934 #validators {
935 margin-top: 5em;
936 text-align: right;
937 color: #777;
938 }
939 @media print {
940 body {
941 font-size: 8pt;
942 }
943 .noprint {
944 display: none;
945 }
946 }
947
948
949.tip,
950.note {
951 background: #f0f0f2;
952 color: #333;
953 padding: 20px;
954 margin: 20px;
955}
956
957.tip h3,
958.note h3 {
959 padding: 0em;
960 margin: 0em;
961 font-size: 2em;
962 font-weight: bold;
963 color: #333;
964}
965
966.tip a,
967.note a {
968 color: #333;
969 text-decoration: underline;
970}
971
972.footnote {
973 font-size: small;
974 color: #333;
975}
976
977/* Changes the announcement text */
978.tip h3,
979.warning h3,
980.caution h3,
981.note h3 {
982 font-size:large;
983 color: #00557D;
984}
diff --git a/documentation/bsp-guide/bsp.xml b/documentation/bsp-guide/bsp.xml
new file mode 100644
index 0000000000..d4850234d1
--- /dev/null
+++ b/documentation/bsp-guide/bsp.xml
@@ -0,0 +1,1527 @@
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 A BSP consists of a file structure inside a base directory.
35 Collectively, you can think of the base directory, its file structure,
36 and the contents 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-<replaceable>bsp_name</replaceable>
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 To help understand the BSP layer concept, consider the BSPs that the
48 Yocto Project supports and provides with each release.
49 You can see the layers in the
50 <ulink url='&YOCTO_DOCS_DEV_URL;#yocto-project-repositories'>Yocto Project Source Repositories</ulink>
51 through a web interface at
52 <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi'></ulink>.
53 If you go to that interface, you will find near the bottom of the list
54 under "Yocto Metadata Layers" several BSP layers all of which are
55 supported by the Yocto Project (e.g. <filename>meta-minnow</filename>,
56 <filename>meta-raspberrypi</filename>, and
57 <filename>meta-intel</filename>).
58 Each of these layers is a repository unto itself and clicking on a
59 layer reveals information that includes two links from which you can choose
60 to set up a clone of the layer's repository on your local host system.
61 Here is an example that clones the Minnow Board BSP layer:
62 <literallayout class='monospaced'>
63 $ git clone git://git.yoctoproject.org/meta-minnow
64 </literallayout>
65 For information on the BSP development workflow, see the
66 "<ulink url='&YOCTO_DOCS_DEV_URL;#developing-a-board-support-package-bsp'>Developing a Board Support Package (BSP)</ulink>"
67 section in the Yocto Project Development Manual.
68 For more information on how to set up a local copy of source files
69 from a Git repository, see the
70 "<ulink url='&YOCTO_DOCS_DEV_URL;#getting-setup'>Getting Set Up</ulink>"
71 section also in the Yocto Project Development Manual.
72 </para>
73
74 <para>
75 The layer's base directory (<filename>meta-<replaceable>bsp_name</replaceable></filename>) is the root
76 of the BSP Layer.
77 This root is what you add to the
78 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBLAYERS'><filename>BBLAYERS</filename></ulink>
79 variable in the <filename>conf/bblayers.conf</filename> file found in the
80 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>,
81 which is established after you run one of the OpenEmbedded build environment
82 setup scripts (i.e.
83 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
84 and
85 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>).
86 Adding the root allows the OpenEmbedded build system to recognize the BSP
87 definition and from it build an image.
88 Here is an example:
89 <literallayout class='monospaced'>
90 BBLAYERS ?= " \
91 /usr/local/src/yocto/meta \
92 /usr/local/src/yocto/meta-yocto \
93 /usr/local/src/yocto/meta-yocto-bsp \
94 /usr/local/src/yocto/meta-mylayer \
95 "
96
97 BBLAYERS_NON_REMOVABLE ?= " \
98 /usr/local/src/yocto/meta \
99 /usr/local/src/yocto/meta-yocto \
100 "
101 </literallayout>
102 </para>
103
104 <para>
105 Some BSPs require additional layers on
106 top of the BSP's root layer in order to be functional.
107 For these cases, you also need to add those layers to the
108 <filename>BBLAYERS</filename> variable in order to build the BSP.
109 You must also specify in the "Dependencies" section of the BSP's
110 <filename>README</filename> file any requirements for additional
111 layers and, preferably, any
112 build instructions that might be contained elsewhere
113 in the <filename>README</filename> file.
114 </para>
115
116 <para>
117 Some layers function as a layer to hold other BSP layers.
118 An example of this type of layer is the <filename>meta-intel</filename> layer.
119 The <filename>meta-intel</filename> layer contains many individual BSP layers.
120 </para>
121
122 <para>
123 For more detailed information on layers, see the
124 "<ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>Understanding and Creating Layers</ulink>"
125 section of the Yocto Project Development Manual.
126 </para>
127 </section>
128
129
130 <section id="bsp-filelayout">
131 <title>Example Filesystem Layout</title>
132
133 <para>
134 Providing a common form allows end-users to understand and become familiar
135 with the layout.
136 A common format also encourages standardization of software support of hardware.
137 </para>
138
139 <para>
140 The proposed form does have elements that are specific to the
141 OpenEmbedded build system.
142 It is intended that this information can be
143 used by other build systems besides the OpenEmbedded build system
144 and that it will be simple
145 to extract information and convert it to other formats if required.
146 The OpenEmbedded build system, through its standard layers mechanism, can directly
147 accept the format described as a layer.
148 The BSP captures all
149 the hardware-specific details in one place in a standard format, which is
150 useful for any person wishing to use the hardware platform regardless of
151 the build system they are using.
152 </para>
153
154 <para>
155 The BSP specification does not include a build system or other tools -
156 it is concerned with the hardware-specific components only.
157 At the end-distribution point, you can ship the BSP combined with a build system
158 and other tools.
159 However, it is important to maintain the distinction that these
160 are separate components that happen to be combined in certain end products.
161 </para>
162
163 <para>
164 Before looking at the common form for the file structure inside a BSP Layer,
165 you should be aware that some requirements do exist in order for a BSP to
166 be considered compliant with the Yocto Project.
167 For that list of requirements, see the
168 "<link linkend='released-bsp-requirements'>Released BSP Requirements</link>"
169 section.
170 </para>
171
172 <para>
173 Below is the common form for the file structure inside a BSP Layer.
174 While you can use this basic form for the standard, realize that the actual structures
175 for specific BSPs could differ.
176
177 <literallayout class='monospaced'>
178 meta-<replaceable>bsp_name</replaceable>/
179 meta-<replaceable>bsp_name</replaceable>/<replaceable>bsp_license_file</replaceable>
180 meta-<replaceable>bsp_name</replaceable>/README
181 meta-<replaceable>bsp_name</replaceable>/README.sources
182 meta-<replaceable>bsp_name</replaceable>/binary/<replaceable>bootable_images</replaceable>
183 meta-<replaceable>bsp_name</replaceable>/conf/layer.conf
184 meta-<replaceable>bsp_name</replaceable>/conf/machine/*.conf
185 meta-<replaceable>bsp_name</replaceable>/recipes-bsp/*
186 meta-<replaceable>bsp_name</replaceable>/recipes-core/*
187 meta-<replaceable>bsp_name</replaceable>/recipes-graphics/*
188 meta-<replaceable>bsp_name</replaceable>/recipes-kernel/linux/linux-yocto_<replaceable>kernel_rev</replaceable>.bbappend
189 </literallayout>
190 </para>
191
192 <para>
193 Below is an example of the Crown Bay BSP:
194
195 <literallayout class='monospaced'>
196 meta-crownbay/COPYING.MIT
197 meta-crownbay/README
198 meta-crownbay/README.sources
199 meta-crownbay/binary/
200 meta-crownbay/conf/
201 meta-crownbay/conf/layer.conf
202 meta-crownbay/conf/machine/
203 meta-crownbay/conf/machine/crownbay.conf
204 meta-crownbay/conf/machine/crownbay-noemgd.conf
205 meta-crownbay/recipes-bsp/
206 meta-crownbay/recipes-bsp/formfactor/
207 meta-crownbay/recipes-bsp/formfactor/formfactor_0.0.bbappend
208 meta-crownbay/recipes-bsp/formfactor/formfactor/
209 meta-crownbay/recipes-bsp/formfactor/formfactor/crownbay/
210 meta-crownbay/recipes-bsp/formfactor/formfactor/crownbay/machconfig
211 meta-crownbay/recipes-bsp/formfactor/formfactor/crownbay-noemgd/
212 meta-crownbay/recipes-bsp/formfactor/formfactor/crownbay-noemgd/machconfig
213 meta-crownbay/recipes-graphics/
214 meta-crownbay/recipes-graphics/xorg-xserver/
215 meta-crownbay/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bbappend
216 meta-crownbay/recipes-graphics/xorg-xserver/xserver-xf86-config/
217 meta-crownbay/recipes-graphics/xorg-xserver/xserver-xf86-config/crownbay/
218 meta-crownbay/recipes-graphics/xorg-xserver/xserver-xf86-config/crownbay/xorg.conf
219 meta-crownbay/recipes-kernel/
220 meta-crownbay/recipes-kernel/linux/
221 meta-crownbay/recipes-kernel/linux/linux-yocto-dev.bbappend
222 meta-crownbay/recipes-kernel/linux/linux-yocto-rt_3.10.bbappend
223 meta-crownbay/recipes-kernel/linux/linux-yocto_3.10.bbappend
224 </literallayout>
225 </para>
226
227 <para>
228 The following sections describe each part of the proposed BSP format.
229 </para>
230
231 <section id="bsp-filelayout-license">
232 <title>License Files</title>
233
234 <para>
235 You can find these files in the BSP Layer at:
236 <literallayout class='monospaced'>
237 meta-<replaceable>bsp_name</replaceable>/<replaceable>bsp_license_file</replaceable>
238 </literallayout>
239 </para>
240
241 <para>
242 These optional files satisfy licensing requirements for the BSP.
243 The type or types of files here can vary depending on the licensing requirements.
244 For example, in the Crown Bay BSP all licensing requirements are handled with the
245 <filename>COPYING.MIT</filename> file.
246 </para>
247
248 <para>
249 Licensing files can be MIT, BSD, GPLv*, and so forth.
250 These files are recommended for the BSP but are optional and totally up to the BSP developer.
251 </para>
252 </section>
253
254 <section id="bsp-filelayout-readme">
255 <title>README File</title>
256 <para>
257 You can find this file in the BSP Layer at:
258 <literallayout class='monospaced'>
259 meta-<replaceable>bsp_name</replaceable>/README
260 </literallayout>
261 </para>
262
263 <para>
264 This file provides information on how to boot the live images that are optionally
265 included in the <filename>binary/</filename> directory.
266 The <filename>README</filename> file also provides special information needed for
267 building the image.
268 </para>
269
270 <para>
271 At a minimum, the <filename>README</filename> file must
272 contain a list of dependencies, such as the names of
273 any other layers on which the BSP depends and the name of
274 the BSP maintainer with his or her contact information.
275 </para>
276 </section>
277
278 <section id="bsp-filelayout-readme-sources">
279 <title>README.sources File</title>
280 <para>
281 You can find this file in the BSP Layer at:
282 <literallayout class='monospaced'>
283 meta-<replaceable>bsp_name</replaceable>/README.sources
284 </literallayout>
285 </para>
286
287 <para>
288 This file provides information on where to locate the BSP source files.
289 For example, information provides where to find the sources that comprise
290 the images shipped with the BSP.
291 Information is also included to help you find the
292 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
293 used to generate the images that ship with the BSP.
294 </para>
295 </section>
296
297 <section id="bsp-filelayout-binary">
298 <title>Pre-built User Binaries</title>
299 <para>
300 You can find these files in the BSP Layer at:
301 <literallayout class='monospaced'>
302 meta-<replaceable>bsp_name</replaceable>/binary/<replaceable>bootable_images</replaceable>
303 </literallayout>
304 </para>
305
306 <para>
307 This optional area contains useful pre-built kernels and user-space filesystem
308 images appropriate to the target system.
309 This directory typically contains graphical (e.g. Sato) and minimal live images
310 when the BSP tarball has been created and made available in the
311 <ulink url='&YOCTO_HOME_URL;'>Yocto Project</ulink> website.
312 You can use these kernels and images to get a system running and quickly get started
313 on development tasks.
314 </para>
315
316 <para>
317 The exact types of binaries present are highly hardware-dependent.
318 However, a <filename>README</filename> file should be present in the BSP Layer that explains how to use
319 the kernels and images with the target hardware.
320 If pre-built binaries are present, source code to meet licensing requirements must also
321 exist in some form.
322 </para>
323 </section>
324
325 <section id='bsp-filelayout-layer'>
326 <title>Layer Configuration File</title>
327 <para>
328 You can find this file in the BSP Layer at:
329 <literallayout class='monospaced'>
330 meta-<replaceable>bsp_name</replaceable>/conf/layer.conf
331 </literallayout>
332 </para>
333
334 <para>
335 The <filename>conf/layer.conf</filename> file identifies the file structure as a
336 layer, identifies the
337 contents of the layer, and contains information about how the build
338 system should use it.
339 Generally, a standard boilerplate file such as the following works.
340 In the following example, you would replace "<replaceable>bsp</replaceable>" and
341 "<replaceable>_bsp</replaceable>" with the actual name
342 of the BSP (i.e. <replaceable>bsp_name</replaceable> from the example template).
343 </para>
344
345 <para>
346 <literallayout class='monospaced'>
347 # We have a conf and classes directory, add to BBPATH
348 BBPATH .= ":${LAYERDIR}"
349
350 # We have a recipes directory, add to BBFILES
351 BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
352 ${LAYERDIR}/recipes-*/*/*.bbappend"
353
354 BBFILE_COLLECTIONS += "bsp"
355 BBFILE_PATTERN_bsp = "^${LAYERDIR}/"
356 BBFILE_PRIORITY_bsp = "6"
357 </literallayout>
358 </para>
359
360 <para>
361 To illustrate the string substitutions, here are the corresponding statements
362 from the Crown Bay <filename>conf/layer.conf</filename> file:
363 <literallayout class='monospaced'>
364 BBFILE_COLLECTIONS += "crownbay"
365 BBFILE_PATTERN_crownbay = "^${LAYERDIR}/"
366 BBFILE_PRIORITY_crownbay = "6"
367 </literallayout>
368 </para>
369
370 <para>
371 This file simply makes
372 <ulink url='&YOCTO_DOCS_DEV_URL;#bitbake-term'>BitBake</ulink>
373 aware of the recipes and configuration directories.
374 The file must exist so that the OpenEmbedded build system can recognize the BSP.
375 </para>
376 </section>
377
378 <section id="bsp-filelayout-machine">
379 <title>Hardware Configuration Options</title>
380 <para>
381 You can find these files in the BSP Layer at:
382 <literallayout class='monospaced'>
383 meta-<replaceable>bsp_name</replaceable>/conf/machine/*.conf
384 </literallayout>
385 </para>
386
387 <para>
388 The machine files bind together all the information contained elsewhere
389 in the BSP into a format that the build system can understand.
390 If the BSP supports multiple machines, multiple machine configuration files
391 can be present.
392 These filenames correspond to the values to which users have set the
393 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink> variable.
394 </para>
395
396 <para>
397 These files define things such as the kernel package to use
398 (<ulink url='&YOCTO_DOCS_REF_URL;#var-PREFERRED_PROVIDER'><filename>PREFERRED_PROVIDER</filename></ulink>
399 of virtual/kernel), the hardware drivers to
400 include in different types of images, any special software components
401 that are needed, any bootloader information, and also any special image
402 format requirements.
403 </para>
404
405 <para>
406 Each BSP Layer requires at least one machine file.
407 However, you can supply more than one file.
408 </para>
409
410 <para>
411 This <filename>crownbay.conf</filename> file could also include
412 a hardware "tuning" file that is commonly used to
413 define the package architecture and specify
414 optimization flags, which are carefully chosen to give best
415 performance on a given processor.
416 </para>
417
418 <para>
419 Tuning files are found in the <filename>meta/conf/machine/include</filename>
420 directory within the
421 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
422 For example, the <filename>ia32-base.inc</filename> file resides in the
423 <filename>meta/conf/machine/include</filename> directory.
424 </para>
425
426 <para>
427 To use an include file, you simply include them in the machine configuration file.
428 For example, the Crown Bay BSP <filename>crownbay.conf</filename> contains the
429 following statements:
430 <literallayout class='monospaced'>
431 require conf/machine/include/intel-core2-32-common.inc
432 require conf/machine/include/meta-intel.inc
433 require conf/machine/include/meta-intel-emgd.inc
434 </literallayout>
435 </para>
436 </section>
437
438 <section id='bsp-filelayout-misc-recipes'>
439 <title>Miscellaneous BSP-Specific Recipe Files</title>
440 <para>
441 You can find these files in the BSP Layer at:
442 <literallayout class='monospaced'>
443 meta-<replaceable>bsp_name</replaceable>/recipes-bsp/*
444 </literallayout>
445 </para>
446
447 <para>
448 This optional directory contains miscellaneous recipe files for the BSP.
449 Most notably would be the formfactor files.
450 For example, in the Crown Bay BSP there is the
451 <filename>formfactor_0.0.bbappend</filename> file, which is an
452 append file used to augment the recipe that starts the build.
453 Furthermore, there are machine-specific settings used during the
454 build that are defined by the <filename>machconfig</filename> file.
455 In the Crown Bay example, two <filename>machconfig</filename> files
456 exist: one that supports the Intel® Embedded Media and Graphics
457 Driver (Intel® EMGD) and one that does not:
458 <literallayout class='monospaced'>
459 meta-crownbay/recipes-bsp/formfactor/formfactor/crownbay/machconfig
460 meta-crownbay/recipes-bsp/formfactor/formfactor/crownbay-noemgd/machconfig
461 meta-crownbay/recipes-bsp/formfactor/formfactor_0.0.bbappend
462 </literallayout>
463 </para>
464
465 <note><para>
466 If a BSP does not have a formfactor entry, defaults are established according to
467 the formfactor configuration file that is installed by the main
468 formfactor recipe
469 <filename>meta/recipes-bsp/formfactor/formfactor_0.0.bb</filename>,
470 which is found in the
471 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
472 </para></note>
473 </section>
474
475 <section id='bsp-filelayout-recipes-graphics'>
476 <title>Display Support Files</title>
477 <para>
478 You can find these files in the BSP Layer at:
479 <literallayout class='monospaced'>
480 meta-<replaceable>bsp_name</replaceable>/recipes-graphics/*
481 </literallayout>
482 </para>
483
484 <para>
485 This optional directory contains recipes for the BSP if it has
486 special requirements for graphics support.
487 All files that are needed for the BSP to support a display are kept here.
488 For example, the Crown Bay BSP's <filename>xorg.conf</filename> file
489 detects the graphics support needed (i.e. the Intel® Embedded Media
490 Graphics Driver (EMGD) or the Video Electronics Standards Association
491 (VESA) graphics):
492 <literallayout class='monospaced'>
493 meta-crownbay/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bbappend
494 meta-crownbay/recipes-graphics/xorg-xserver/xserver-xf86-config/crownbay/xorg.conf
495 </literallayout>
496 </para>
497 </section>
498
499 <section id='bsp-filelayout-kernel'>
500 <title>Linux Kernel Configuration</title>
501 <para>
502 You can find these files in the BSP Layer at:
503 <literallayout class='monospaced'>
504 meta-<replaceable>bsp_name</replaceable>/recipes-kernel/linux/linux-yocto_*.bbappend
505 </literallayout>
506 </para>
507
508 <para>
509 These files append your specific changes to the main kernel recipe you are using.
510 </para>
511 <para>
512 For your BSP, you typically want to use an existing Yocto Project kernel recipe found in the
513 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
514 at <filename>meta/recipes-kernel/linux</filename>.
515 You can append your specific changes to the kernel recipe by using a
516 similarly named append file, which is located in the BSP Layer (e.g.
517 the <filename>meta-<replaceable>bsp_name</replaceable>/recipes-kernel/linux</filename> directory).
518 </para>
519 <para>
520 Suppose you are using the <filename>linux-yocto_3.10.bb</filename> recipe to build
521 the kernel.
522 In other words, you have selected the kernel in your
523 <replaceable>bsp_name</replaceable><filename>.conf</filename> file by adding these types
524 of statements:
525 <literallayout class='monospaced'>
526 PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
527 PREFERRED_VERSION_linux-yocto ?= "3.10%"
528 </literallayout>
529 <note>
530 When the preferred provider is assumed by default, the
531 <filename>PREFERRED_PROVIDER</filename> statement does not appear in the
532 <replaceable>bsp_name</replaceable><filename>.conf</filename> file.
533 </note>
534 You would use the <filename>linux-yocto_3.10.bbappend</filename> file to append
535 specific BSP settings to the kernel, thus configuring the kernel for your particular BSP.
536 </para>
537 <para>
538 As an example, look at the existing Crown Bay BSP.
539 The append file used is:
540 <literallayout class='monospaced'>
541 meta-crownbay/recipes-kernel/linux/linux-yocto_3.10.bbappend
542 </literallayout>
543 The following listing shows the file.
544 Be aware that the actual commit ID strings in this example listing might be different
545 than the actual strings in the file from the <filename>meta-intel</filename>
546 Git source repository.
547 <literallayout class='monospaced'>
548 FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
549
550
551 COMPATIBLE_MACHINE_crownbay = "crownbay"
552 KMACHINE_crownbay = "crownbay"
553 KBRANCH_crownbay = "standard/crownbay"
554 KERNEL_FEATURES_append_crownbay = " features/drm-emgd/drm-emgd-1.18 cfg/vesafb"
555
556 COMPATIBLE_MACHINE_crownbay-noemgd = "crownbay-noemgd"
557 KMACHINE_crownbay-noemgd = "crownbay"
558 KBRANCH_crownbay-noemgd = "standard/crownbay"
559 KERNEL_FEATURES_append_crownbay-noemgd = " cfg/vesafb"
560
561 LINUX_VERSION_crownbay = "3.10.35"
562 SRCREV_meta_crownbay = "b6e58b33dd427fe471f8827c83e311acdf4558a4"
563 SRCREV_machine_crownbay = "cee957655fe67826b2e827e2db41f156fa8f0cc4"
564 SRCREV_emgd_crownbay = "42d5e4548e8e79e094fa8697949eed4cf6af00a3"
565
566 LINUX_VERSION_crownbay-noemgd = "3.10.35"
567 SRCREV_meta_crownbay-noemgd = "b6e58b33dd427fe471f8827c83e311acdf4558a4"
568 SRCREV_machine_crownbay-noemgd = "cee957655fe67826b2e827e2db41f156fa8f0cc4"
569
570 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"
571 </literallayout>
572 This append file contains statements used to support the Crown Bay BSP.
573 The file defines machines using the
574 <ulink url='&YOCTO_DOCS_REF_URL;#var-COMPATIBLE_MACHINE'><filename>COMPATIBLE_MACHINE</filename></ulink>
575 variable and uses the
576 <ulink url='&YOCTO_DOCS_REF_URL;#var-KMACHINE'><filename>KMACHINE</filename></ulink> variable to
577 ensure the machine name used by the OpenEmbedded build system maps to the
578 machine name used by the Linux Yocto kernel.
579 The file also uses the optional
580 <ulink url='&YOCTO_DOCS_REF_URL;#var-KBRANCH'><filename>KBRANCH</filename></ulink> variable
581 to ensure the build process uses the <filename>standard/crownbay</filename>
582 kernel branch.
583 The
584 <ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_FEATURES'><filename>KERNEL_FEATURES</filename></ulink>
585 variable enables features specific to the kernel
586 (e.g. graphics support in this case).
587 The append file points to specific commits in the
588 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink> Git
589 repository and the <filename>meta</filename> Git repository branches to identify the
590 exact kernel needed to build the Crown Bay BSP.
591 Finally, the file includes the
592 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
593 statement to locate the source files.
594 </para>
595
596 <para>
597 One thing missing in this particular BSP, which you will typically need when
598 developing a BSP, is the kernel configuration file (<filename>.config</filename>) for your BSP.
599 When developing a BSP, you probably have a kernel configuration file or a set of kernel
600 configuration files that, when taken together, define the kernel configuration for your BSP.
601 You can accomplish this definition by putting the configurations in a file or a set of files
602 inside a directory located at the same level as your kernel's append file and having the same
603 name as the kernel's main recipe file.
604 With all these conditions met, simply reference those files in the
605 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
606 statement in the append file.
607 </para>
608
609 <para>
610 For example, suppose you had some configuration options in a file called
611 <filename>network_configs.cfg</filename>.
612 You can place that file inside a directory named <filename>linux-yocto</filename> and then add
613 a <filename>SRC_URI</filename> statement such as the following to the append file.
614 When the OpenEmbedded build system builds the kernel, the configuration options are
615 picked up and applied.
616 <literallayout class='monospaced'>
617 SRC_URI += "file://network_configs.cfg"
618 </literallayout>
619 </para>
620
621 <para>
622 To group related configurations into multiple files, you perform a similar procedure.
623 Here is an example that groups separate configurations specifically for Ethernet and graphics
624 into their own files and adds the configurations
625 by using a <filename>SRC_URI</filename> statement like the following in your append file:
626 <literallayout class='monospaced'>
627 SRC_URI += "file://myconfig.cfg \
628 file://eth.cfg \
629 file://gfx.cfg"
630 </literallayout>
631 </para>
632
633 <para>
634 The <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
635 variable is in boilerplate form in the
636 previous example in order to make it easy to do that.
637 This variable must be in your layer or BitBake will not find the patches or
638 configurations even if you have them in your <filename>SRC_URI</filename>.
639 The <filename>FILESEXTRAPATHS</filename> variable enables the build process to
640 find those configuration files.
641 </para>
642
643 <note>
644 <para>
645 Other methods exist to accomplish grouping and defining configuration options.
646 For example, if you are working with a local clone of the kernel repository,
647 you could checkout the kernel's <filename>meta</filename> branch, make your changes,
648 and then push the changes to the local bare clone of the kernel.
649 The result is that you directly add configuration options to the
650 <filename>meta</filename> branch for your BSP.
651 The configuration options will likely end up in that location anyway if the BSP gets
652 added to the Yocto Project.
653 </para>
654
655 <para>
656 In general, however, the Yocto Project maintainers take care of moving the
657 <filename>SRC_URI</filename>-specified
658 configuration options to the kernel's <filename>meta</filename> branch.
659 Not only is it easier for BSP developers to not have to worry about putting those
660 configurations in the branch, but having the maintainers do it allows them to apply
661 'global' knowledge about the kinds of common configuration options multiple BSPs in
662 the tree are typically using.
663 This allows for promotion of common configurations into common features.
664 </para>
665 </note>
666 </section>
667 </section>
668
669 <section id='requirements-and-recommendations-for-released-bsps'>
670 <title>Requirements and Recommendations for Released BSPs</title>
671
672 <para>
673 Certain requirements exist for a released BSP to be considered
674 compliant with the Yocto Project.
675 Additionally, recommendations also exist.
676 This section describes the requirements and recommendations for
677 released BSPs.
678 </para>
679
680 <section id='released-bsp-requirements'>
681 <title>Released BSP Requirements</title>
682
683 <para>
684 Before looking at BSP requirements, you should consider the following:
685 <itemizedlist>
686 <listitem><para>The requirements here assume the BSP layer is a well-formed, "legal"
687 layer that can be added to the Yocto Project.
688 For guidelines on creating a layer that meets these base requirements, see the
689 "<link linkend='bsp-layers'>BSP Layers</link>" and the
690 "<ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>Understanding
691 and Creating Layers"</ulink> in the Yocto Project Development Manual.</para></listitem>
692 <listitem><para>The requirements in this section apply regardless of how you
693 ultimately package a BSP.
694 You should consult the packaging and distribution guidelines for your
695 specific release process.
696 For an example of packaging and distribution requirements, see the
697 "<ulink url='https://wiki.yoctoproject.org/wiki/Third_Party_BSP_Release_Process'>Third Party BSP Release Process</ulink>"
698 wiki page.</para></listitem>
699 <listitem><para>The requirements for the BSP as it is made available to a developer
700 are completely independent of the released form of the BSP.
701 For example, the BSP Metadata can be contained within a Git repository
702 and could have a directory structure completely different from what appears
703 in the officially released BSP layer.</para></listitem>
704 <listitem><para>It is not required that specific packages or package
705 modifications exist in the BSP layer, beyond the requirements for general
706 compliance with the Yocto Project.
707 For example, no requirement exists dictating that a specific kernel or
708 kernel version be used in a given BSP.</para></listitem>
709 </itemizedlist>
710 </para>
711
712 <para>
713 Following are the requirements for a released BSP that conforms to the
714 Yocto Project:
715 <itemizedlist>
716 <listitem><para><emphasis>Layer Name:</emphasis>
717 The BSP must have a layer name that follows the Yocto
718 Project standards.
719 For information on BSP layer names, see the
720 "<link linkend='bsp-layers'>BSP Layers</link>" section.
721 </para></listitem>
722 <listitem><para><emphasis>File System Layout:</emphasis>
723 When possible, use the same directory names in your
724 BSP layer as listed in the <filename>recipes.txt</filename> file.
725 In particular, you should place recipes
726 (<filename>.bb</filename> files) and recipe
727 modifications (<filename>.bbappend</filename> files) into
728 <filename>recipes-*</filename> subdirectories by functional area
729 as outlined in <filename>recipes.txt</filename>.
730 If you cannot find a category in <filename>recipes.txt</filename>
731 to fit a particular recipe, you can make up your own
732 <filename>recipes-*</filename> subdirectory.
733 You can find <filename>recipes.txt</filename> in the
734 <filename>meta</filename> directory of the
735 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>,
736 or in the OpenEmbedded Core Layer
737 (<filename>openembedded-core</filename>) found at
738 <ulink url='http://git.openembedded.org/openembedded-core/tree/meta'></ulink>.
739 </para>
740 <para>Within any particular <filename>recipes-*</filename> category, the layout
741 should match what is found in the OpenEmbedded Core
742 Git repository (<filename>openembedded-core</filename>)
743 or the Source Directory (<filename>poky</filename>).
744 In other words, make sure you place related files in appropriately
745 related <filename>recipes-*</filename> subdirectories specific to the
746 recipe's function, or within a subdirectory containing a set of closely-related
747 recipes.
748 The recipes themselves should follow the general guidelines
749 for recipes used in the Yocto Project found in the
750 "<ulink url='https://wiki.yoctoproject.org/wiki/Recipe_%26_Patch_Style_Guide'>Yocto Recipe and Patch Style Guide</ulink>".
751 </para></listitem>
752 <listitem><para><emphasis>License File:</emphasis>
753 You must include a license file in the
754 <filename>meta-<replaceable>bsp_name</replaceable></filename> directory.
755 This license covers the BSP Metadata as a whole.
756 You must specify which license to use since there is no
757 default license if one is not specified.
758 See the
759 <ulink url='&YOCTO_GIT_URL;/cgit.cgi/meta-intel/tree/meta-fri2/COPYING.MIT'><filename>COPYING.MIT</filename></ulink>
760 file for the Fish River Island 2 BSP in the <filename>meta-fri2</filename> BSP layer
761 as an example.</para></listitem>
762 <listitem><para><emphasis>README File:</emphasis>
763 You must include a <filename>README</filename> file in the
764 <filename>meta-<replaceable>bsp_name</replaceable></filename> directory.
765 See the
766 <ulink url='&YOCTO_GIT_URL;/cgit.cgi/meta-intel/tree/meta-fri2/README'><filename>README</filename></ulink>
767 file for the Fish River Island 2 BSP in the <filename>meta-fri2</filename> BSP layer
768 as an example.</para>
769 <para>At a minimum, the <filename>README</filename> file should
770 contain the following:
771 <itemizedlist>
772 <listitem><para>A brief description about the hardware the BSP
773 targets.</para></listitem>
774 <listitem><para>A list of all the dependencies
775 on which a BSP layer depends.
776 These dependencies are typically a list of required layers needed
777 to build the BSP.
778 However, the dependencies should also contain information regarding
779 any other dependencies the BSP might have.</para></listitem>
780 <listitem><para>Any required special licensing information.
781 For example, this information includes information on
782 special variables needed to satisfy a EULA,
783 or instructions on information needed to build or distribute
784 binaries built from the BSP Metadata.</para></listitem>
785 <listitem><para>The name and contact information for the
786 BSP layer maintainer.
787 This is the person to whom patches and questions should
788 be sent.
789 For information on how to find the right person, see the
790 "<ulink url='&YOCTO_DOCS_DEV_URL;#how-to-submit-a-change'>How to Submit a Change</ulink>"
791 section in the Yocto Project Development Manual.
792 </para></listitem>
793 <listitem><para>Instructions on how to build the BSP using the BSP
794 layer.</para></listitem>
795 <listitem><para>Instructions on how to boot the BSP build from
796 the BSP layer.</para></listitem>
797 <listitem><para>Instructions on how to boot the binary images
798 contained in the <filename>binary</filename> directory,
799 if present.</para></listitem>
800 <listitem><para>Information on any known bugs or issues that users
801 should know about when either building or booting the BSP
802 binaries.</para></listitem>
803 </itemizedlist></para></listitem>
804 <listitem><para><emphasis>README.sources File:</emphasis>
805 You must include a <filename>README.sources</filename> in the
806 <filename>meta-<replaceable>bsp_name</replaceable></filename> directory.
807 This file specifies exactly where you can find the sources used to
808 generate the binary images contained in the
809 <filename>binary</filename> directory, if present.
810 See the
811 <ulink url='&YOCTO_GIT_URL;/cgit.cgi/meta-intel/tree/meta-fri2/README.sources'><filename>README.sources</filename></ulink>
812 file for the Fish River Island 2 BSP in the <filename>meta-fri2</filename> BSP layer
813 as an example.</para></listitem>
814 <listitem><para><emphasis>Layer Configuration File:</emphasis>
815 You must include a <filename>conf/layer.conf</filename> in the
816 <filename>meta-<replaceable>bsp_name</replaceable></filename> directory.
817 This file identifies the <filename>meta-<replaceable>bsp_name</replaceable></filename>
818 BSP layer as a layer to the build system.</para></listitem>
819 <listitem><para><emphasis>Machine Configuration File:</emphasis>
820 You must include one or more
821 <filename>conf/machine/<replaceable>bsp_name</replaceable>.conf</filename>
822 files in the <filename>meta-<replaceable>bsp_name</replaceable></filename> directory.
823 These configuration files define machine targets that can be built
824 using the BSP layer.
825 Multiple machine configuration files define variations of machine
826 configurations that are supported by the BSP.
827 If a BSP supports multiple machine variations, you need to
828 adequately describe each variation in the BSP
829 <filename>README</filename> file.
830 Do not use multiple machine configuration files to describe disparate
831 hardware.
832 If you do have very different targets, you should create separate
833 BSP layers for each target.
834 <note>It is completely possible for a developer to structure the
835 working repository as a conglomeration of unrelated BSP
836 files, and to possibly generate BSPs targeted for release
837 from that directory using scripts or some other mechanism
838 (e.g. <filename>meta-yocto-bsp</filename> layer).
839 Such considerations are outside the scope of this document.</note>
840 </para></listitem>
841 </itemizedlist>
842 </para>
843 </section>
844
845 <section id='released-bsp-recommendations'>
846 <title>Released BSP Recommendations</title>
847
848 <para>
849 Following are recommendations for a released BSP that conforms to the
850 Yocto Project:
851 <itemizedlist>
852 <listitem><para><emphasis>Bootable Images:</emphasis>
853 BSP releases
854 can contain one or more bootable images.
855 Including bootable images allows users to easily try out the BSP
856 on their own hardware.</para>
857 <para>In some cases, it might not be convenient to include a
858 bootable image.
859 In this case, you might want to make two versions of the
860 BSP available: one that contains binary images, and one
861 that does not.
862 The version that does not contain bootable images avoids
863 unnecessary download times for users not interested in the images.
864 </para>
865 <para>If you need to distribute a BSP and include bootable images or build kernel and
866 filesystems meant to allow users to boot the BSP for evaluation
867 purposes, you should put the images and artifacts within a
868 <filename>binary/</filename> subdirectory located in the
869 <filename>meta-<replaceable>bsp_name</replaceable></filename> directory.
870 <note>If you do include a bootable image as part of the BSP and the image
871 was built by software covered by the GPL or other open source licenses,
872 it is your responsibility to understand
873 and meet all licensing requirements, which could include distribution
874 of source files.</note></para></listitem>
875 <listitem><para><emphasis>Use a Yocto Linux Kernel:</emphasis>
876 Kernel recipes in the BSP should be based on a Yocto Linux kernel.
877 Basing your recipes on these kernels reduces the costs for maintaining
878 the BSP and increases its scalability.
879 See the <filename>Yocto Linux Kernel</filename> category in the
880 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'>Source Repositories</ulink>
881 for these kernels.</para></listitem>
882 </itemizedlist>
883 </para>
884 </section>
885 </section>
886
887 <section id='customizing-a-recipe-for-a-bsp'>
888 <title>Customizing a Recipe for a BSP</title>
889
890 <para>
891 If you plan on customizing a recipe for a particular BSP, you need to do the
892 following:
893 <itemizedlist>
894 <listitem><para>Create a <filename>.bbappend</filename>
895 file for the modified recipe.
896 For information on using append files, see the
897 "<ulink url='&YOCTO_DOCS_DEV_URL;#using-bbappend-files'>Using .bbappend Files</ulink>"
898 section in the Yocto Project Development Manual.
899 </para></listitem>
900 <listitem><para>
901 Ensure your directory structure in the BSP layer
902 that supports your machine is such that it can be found
903 by the build system.
904 See the example later in this section for more information.
905 </para></listitem>
906 <listitem><para>
907 Put the append file in a directory whose name matches
908 the machine's name and is located in an appropriate
909 sub-directory inside the BSP layer (i.e.
910 <filename>recipes-bsp</filename>, <filename>recipes-graphics</filename>,
911 <filename>recipes-core</filename>, and so forth).
912 </para></listitem>
913 <listitem><para>Place the BSP-specific files in the directory named for
914 your machine inside the BSP layer.
915 </para></listitem>
916 </itemizedlist>
917 </para>
918
919 <para>
920 Following is a specific example to help you better understand the process.
921 Consider an example that customizes a recipe by adding
922 a BSP-specific configuration file named <filename>interfaces</filename> to the
923 <filename>init-ifupdown_1.0.bb</filename> recipe for machine "xyz".
924 Do the following:
925 <orderedlist>
926 <listitem><para>Edit the <filename>init-ifupdown_1.0.bbappend</filename> file so that it
927 contains the following:
928 <literallayout class='monospaced'>
929 FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
930 </literallayout>
931 The append file needs to be in the
932 <filename>meta-xyz/recipes-core/init-ifupdown</filename> directory.
933 </para></listitem>
934 <listitem><para>Create and place the new <filename>interfaces</filename>
935 configuration file in the BSP's layer here:
936 <literallayout class='monospaced'>
937 meta-xyz/recipes-core/init-ifupdown/files/xyz/interfaces
938 </literallayout>
939 The
940 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
941 variable in the append files extends the search path
942 the build system uses to find files during the build.
943 Consequently, for this example you need to have the
944 <filename>files</filename> directory in the same location
945 as your append file.</para></listitem>
946 </orderedlist>
947 </para>
948 </section>
949
950 <section id='bsp-licensing-considerations'>
951 <title>BSP Licensing Considerations</title>
952
953 <para>
954 In some cases, a BSP contains separately licensed Intellectual Property (IP)
955 for a component or components.
956 For these cases, you are required to accept the terms of a commercial or other
957 type of license that requires some kind of explicit End User License Agreement (EULA).
958 Once the license is accepted, the OpenEmbedded build system can then build and
959 include the corresponding component in the final BSP image.
960 If the BSP is available as a pre-built image, you can download the image after
961 agreeing to the license or EULA.
962 </para>
963
964 <para>
965 You could find that some separately licensed components that are essential
966 for normal operation of the system might not have an unencumbered (or free)
967 substitute.
968 Without these essential components, the system would be non-functional.
969 Then again, you might find that other licensed components that are simply
970 'good-to-have' or purely elective do have an unencumbered, free replacement
971 component that you can use rather than agreeing to the separately licensed component.
972 Even for components essential to the system, you might find an unencumbered component
973 that is not identical but will work as a less-capable version of the
974 licensed version in the BSP recipe.
975 </para>
976
977 <para>
978 For cases where you can substitute a free component and still
979 maintain the system's functionality, the "Downloads" page from the
980 <ulink url='&YOCTO_HOME_URL;'>Yocto Project website's</ulink>
981 makes available de-featured BSPs
982 that are completely free of any IP encumbrances.
983 For these cases, you can use the substitution directly and
984 without any further licensing requirements.
985 If present, these fully de-featured BSPs are named appropriately
986 different as compared to the names of the respective
987 encumbered BSPs.
988 If available, these substitutions are your
989 simplest and most preferred options.
990 Use of these substitutions of course assumes the resulting functionality meets
991 system requirements.
992 </para>
993
994 <para>
995 If however, a non-encumbered version is unavailable or
996 it provides unsuitable functionality or quality, you can use an encumbered
997 version.
998 </para>
999
1000 <para>
1001 A couple different methods exist within the OpenEmbedded build system to
1002 satisfy the licensing requirements for an encumbered BSP.
1003 The following list describes them in order of preference:
1004 <orderedlist>
1005 <listitem><para><emphasis>Use the
1006 <ulink url='&YOCTO_DOCS_REF_URL;#var-LICENSE_FLAGS'><filename>LICENSE_FLAGS</filename></ulink>
1007 variable to define the recipes that have commercial or other
1008 types of specially-licensed packages:</emphasis>
1009 For each of those recipes, you can
1010 specify a matching license string in a
1011 <filename>local.conf</filename> variable named
1012 <ulink url='&YOCTO_DOCS_REF_URL;#var-LICENSE_FLAGS_WHITELIST'><filename>LICENSE_FLAGS_WHITELIST</filename></ulink>.
1013 Specifying the matching license string signifies that you agree to the license.
1014 Thus, the build system can build the corresponding recipe and include
1015 the component in the image.
1016 See the
1017 "<ulink url='&YOCTO_DOCS_REF_URL;#enabling-commercially-licensed-recipes'>Enabling
1018 Commercially Licensed Recipes</ulink>" section in the Yocto Project Reference
1019 Manual for details on how to use these variables.</para>
1020 <para>If you build as you normally would, without
1021 specifying any recipes in the
1022 <filename>LICENSE_FLAGS_WHITELIST</filename>, the build stops and
1023 provides you with the list of recipes that you have
1024 tried to include in the image that need entries in
1025 the <filename>LICENSE_FLAGS_WHITELIST</filename>.
1026 Once you enter the appropriate license flags into the whitelist,
1027 restart the build to continue where it left off.
1028 During the build, the prompt will not appear again
1029 since you have satisfied the requirement.</para>
1030 <para>Once the appropriate license flags are on the white list
1031 in the <filename>LICENSE_FLAGS_WHITELIST</filename> variable, you
1032 can build the encumbered image with no change at all
1033 to the normal build process.</para></listitem>
1034 <listitem><para><emphasis>Get a pre-built version of the BSP:</emphasis>
1035 You can get this type of BSP by visiting the
1036 "Downloads" page of the
1037 <ulink url='&YOCTO_HOME_URL;'>Yocto Project website</ulink>.
1038 You can download BSP tarballs that contain proprietary components
1039 after agreeing to the licensing
1040 requirements of each of the individually encumbered
1041 packages as part of the download process.
1042 Obtaining the BSP this way allows you to access an encumbered
1043 image immediately after agreeing to the
1044 click-through license agreements presented by the
1045 website.
1046 Note that if you want to build the image
1047 yourself using the recipes contained within the BSP
1048 tarball, you will still need to create an
1049 appropriate <filename>LICENSE_FLAGS_WHITELIST</filename> to match the
1050 encumbered recipes in the BSP.</para></listitem>
1051 </orderedlist>
1052 </para>
1053
1054 <note>
1055 Pre-compiled images are bundled with
1056 a time-limited kernel that runs for a
1057 predetermined amount of time (10 days) before it forces
1058 the system to reboot.
1059 This limitation is meant to discourage direct redistribution
1060 of the image.
1061 You must eventually rebuild the image if you want to remove this restriction.
1062 </note>
1063 </section>
1064
1065 <section id='using-the-yocto-projects-bsp-tools'>
1066 <title>Using the Yocto Project's BSP Tools</title>
1067
1068 <para>
1069 The Yocto Project includes a couple of tools that enable
1070 you to create a <link linkend='bsp-layers'>BSP layer</link>
1071 from scratch and do basic configuration and maintenance
1072 of the kernel without ever looking at a Metadata file.
1073 These tools are <filename>yocto-bsp</filename> and <filename>yocto-kernel</filename>,
1074 respectively.
1075 </para>
1076
1077 <para>
1078 The following sections describe the common location and help features as well
1079 as provide details for the
1080 <filename>yocto-bsp</filename> and <filename>yocto-kernel</filename> tools.
1081 </para>
1082
1083 <section id='common-features'>
1084 <title>Common Features</title>
1085
1086 <para>
1087 Designed to have a command interface somewhat like
1088 <ulink url='&YOCTO_DOCS_DEV_URL;#git'>Git</ulink>, each
1089 tool is structured as a set of sub-commands under a
1090 top-level command.
1091 The top-level command (<filename>yocto-bsp</filename>
1092 or <filename>yocto-kernel</filename>) itself does
1093 nothing but invoke or provide help on the sub-commands
1094 it supports.
1095 </para>
1096
1097 <para>
1098 Both tools reside in the <filename>scripts/</filename> subdirectory
1099 of the <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
1100 Consequently, to use the scripts, you must <filename>source</filename> the
1101 environment just as you would when invoking a build:
1102 <literallayout class='monospaced'>
1103 $ source oe-init-build-env <replaceable>build_dir</replaceable>
1104 </literallayout>
1105 </para>
1106
1107 <para>
1108 The most immediately useful function is to get help on both tools.
1109 The built-in help system makes it easy to drill down at
1110 any time and view the syntax required for any specific command.
1111 Simply enter the name of the command with the <filename>help</filename>
1112 switch:
1113 <literallayout class='monospaced'>
1114 $ yocto-bsp help
1115 Usage:
1116
1117 Create a customized Yocto BSP layer.
1118
1119 usage: yocto-bsp [--version] [--help] COMMAND [ARGS]
1120
1121 Current 'yocto-bsp' commands are:
1122 create Create a new Yocto BSP
1123 list List available values for options and BSP properties
1124
1125 See 'yocto-bsp help COMMAND' for more information on a specific command.
1126
1127
1128 Options:
1129 --version show program's version number and exit
1130 -h, --help show this help message and exit
1131 -D, --debug output debug information
1132 </literallayout>
1133 </para>
1134
1135 <para>
1136 Similarly, entering just the name of a sub-command shows the detailed usage
1137 for that sub-command:
1138 <literallayout class='monospaced'>
1139 $ yocto-bsp create
1140
1141 Usage:
1142
1143 Create a new Yocto BSP
1144
1145 usage: yocto-bsp create &lt;bsp-name&gt; &lt;karch&gt; [-o &lt;DIRNAME&gt; | --outdir &lt;DIRNAME&gt;]
1146 [-i &lt;JSON PROPERTY FILE&gt; | --infile &lt;JSON PROPERTY_FILE&gt;]
1147
1148 This command creates a Yocto BSP based on the specified parameters.
1149 The new BSP will be a new Yocto BSP layer contained by default within
1150 the top-level directory specified as 'meta-bsp-name'. The -o option
1151 can be used to place the BSP layer in a directory with a different
1152 name and location.
1153
1154 ...
1155 </literallayout>
1156 </para>
1157
1158 <para>
1159 For any sub-command, you can use the word "help" option just before the
1160 sub-command to get more extensive documentation:
1161 <literallayout class='monospaced'>
1162 $ yocto-bsp help create
1163
1164 NAME
1165 yocto-bsp create - Create a new Yocto BSP
1166
1167 SYNOPSIS
1168 yocto-bsp create &lt;bsp-name&gt; &lt;karch&gt; [-o &lt;DIRNAME&gt; | --outdir &lt;DIRNAME&gt;]
1169 [-i &lt;JSON PROPERTY FILE&gt; | --infile &lt;JSON PROPERTY_FILE&gt;]
1170
1171 DESCRIPTION
1172 This command creates a Yocto BSP based on the specified
1173 parameters. The new BSP will be a new Yocto BSP layer contained
1174 by default within the top-level directory specified as
1175 'meta-bsp-name'. The -o option can be used to place the BSP layer
1176 in a directory with a different name and location.
1177
1178 The value of the 'karch' parameter determines the set of files
1179 that will be generated for the BSP, along with the specific set of
1180 'properties' that will be used to fill out the BSP-specific
1181 portions of the BSP. The possible values for the 'karch' parameter
1182 can be listed via 'yocto-bsp list karch'.
1183
1184 ...
1185 </literallayout>
1186 </para>
1187
1188 <para>
1189 Now that you know where these two commands reside and how to access information
1190 on them, you should find it relatively straightforward to discover the commands
1191 necessary to create a BSP and perform basic kernel maintenance on that BSP using
1192 the tools.
1193 <note>
1194 You can also use the <filename>yocto-layer</filename> tool to create
1195 a "generic" layer.
1196 For information on this tool, see the
1197 "<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>"
1198 section in the Yocto Project Development Guide.
1199 </note>
1200 </para>
1201
1202 <para>
1203 The next sections provide a concrete starting point to expand on a few points that
1204 might not be immediately obvious or that could use further explanation.
1205 </para>
1206 </section>
1207
1208
1209 <section id='creating-a-new-bsp-layer-using-the-yocto-bsp-script'>
1210 <title>Creating a new BSP Layer Using the yocto-bsp Script</title>
1211
1212 <para>
1213 The <filename>yocto-bsp</filename> script creates a new
1214 <link linkend='bsp-layers'>BSP layer</link> for any architecture supported
1215 by the Yocto Project, as well as QEMU versions of the same.
1216 The default mode of the script's operation is to prompt you for information needed
1217 to generate the BSP layer.
1218 </para>
1219
1220 <para>
1221 For the current set of BSPs, the script prompts you for various important
1222 parameters such as:
1223 <itemizedlist>
1224 <listitem><para>The kernel to use</para></listitem>
1225 <listitem><para>The branch of that kernel to use (or re-use)</para></listitem>
1226 <listitem><para>Whether or not to use X, and if so, which drivers to use</para></listitem>
1227 <listitem><para>Whether to turn on SMP</para></listitem>
1228 <listitem><para>Whether the BSP has a keyboard</para></listitem>
1229 <listitem><para>Whether the BSP has a touchscreen</para></listitem>
1230 <listitem><para>Remaining configurable items associated with the BSP</para></listitem>
1231 </itemizedlist>
1232 </para>
1233
1234 <para>
1235 You use the <filename>yocto-bsp create</filename> sub-command to create
1236 a new BSP layer.
1237 This command requires you to specify a particular kernel architecture
1238 (<filename>karch</filename>) on which to base the BSP.
1239 Assuming you have sourced the environment, you can use the
1240 <filename>yocto-bsp list karch</filename> sub-command to list the
1241 architectures available for BSP creation as follows:
1242 <literallayout class='monospaced'>
1243 $ yocto-bsp list karch
1244 Architectures available:
1245 powerpc
1246 i386
1247 x86_64
1248 arm
1249 qemu
1250 mips
1251 </literallayout>
1252 </para>
1253
1254 <para>
1255 The remainder of this section presents an example that uses
1256 <filename>myarm</filename> as the machine name and <filename>qemu</filename>
1257 as the machine architecture.
1258 Of the available architectures, <filename>qemu</filename> is the only architecture
1259 that causes the script to prompt you further for an actual architecture.
1260 In every other way, this architecture is representative of how creating a BSP for
1261 an actual machine would work.
1262 The reason the example uses this architecture is because it is an emulated architecture
1263 and can easily be followed without requiring actual hardware.
1264 </para>
1265
1266 <para>
1267 As the <filename>yocto-bsp create</filename> command runs, default values for
1268 the prompts appear in brackets.
1269 Pressing enter without supplying anything on the command line or pressing enter
1270 with an invalid response causes the script to accept the default value.
1271 Once the script completes, the new <filename>meta-myarm</filename> BSP layer
1272 is created in the current working directory.
1273 This example assumes you have sourced the
1274 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
1275 setup script.
1276 </para>
1277
1278 <para>
1279 Following is the complete example:
1280 <literallayout class='monospaced'>
1281 $ yocto-bsp create myarm qemu
1282 Checking basic git connectivity...
1283 Done.
1284
1285 Which qemu architecture would you like to use? [default: i386]
1286 1) i386 (32-bit)
1287 2) x86_64 (64-bit)
1288 3) ARM (32-bit)
1289 4) PowerPC (32-bit)
1290 5) MIPS (32-bit)
1291 3
1292 Would you like to use the default (3.10) kernel? (y/n) [default: y] y
1293 Do you need a new machine branch for this BSP (the alternative is to re-use an existing branch)? [y/n] [default: y]
1294 Getting branches from remote repo git://git.yoctoproject.org/linux-yocto-3.10.git...
1295 Please choose a machine branch to base your new BSP branch on: [default: standard/base]
1296 1) standard/arm-versatile-926ejs
1297 2) standard/base
1298 3) standard/beagleboard
1299 4) standard/beaglebone
1300 5) standard/ck
1301 6) standard/crownbay
1302 7) standard/edgerouter
1303 8) standard/emenlow
1304 9) standard/fri2
1305 10) standard/fsl-mpc8315e-rdb
1306 11) standard/mti-malta32
1307 12) standard/mti-malta64
1308 13) standard/qemuppc
1309 14) standard/routerstationpro
1310 15) standard/sys940x
1311 1
1312 Would you like SMP support? (y/n) [default: y]
1313 Does your BSP have a touchscreen? (y/n) [default: n]
1314 Does your BSP have a keyboard? (y/n) [default: y]
1315
1316 New qemu BSP created in meta-myarm
1317 </literallayout>
1318 Take a closer look at the example now:
1319 <orderedlist>
1320 <listitem><para>For the QEMU architecture,
1321 the script first prompts you for which emulated architecture to use.
1322 In the example, we use the ARM architecture.
1323 </para></listitem>
1324 <listitem><para>The script then prompts you for the kernel.
1325 The default 3.14 kernel is acceptable.
1326 So, the example accepts the default.
1327 If you enter 'n', the script prompts you to further enter the kernel
1328 you do want to use.</para></listitem>
1329 <listitem><para>Next, the script asks whether you would like to have a new
1330 branch created especially for your BSP in the local
1331 <ulink url='&YOCTO_DOCS_DEV_URL;#local-kernel-files'>Linux Yocto Kernel</ulink>
1332 Git repository .
1333 If not, then the script re-uses an existing branch.</para>
1334 <para>In this example, the default (or "yes") is accepted.
1335 Thus, a new branch is created for the BSP rather than using a common, shared
1336 branch.
1337 The new branch is the branch committed to for any patches you might later add.
1338 The reason a new branch is the default is that typically
1339 new BSPs do require BSP-specific patches.
1340 The tool thus assumes that most of time a new branch is required.
1341 </para></listitem>
1342 <listitem><para>Regardless of which choice you make in the previous step,
1343 you are now given the opportunity to select a particular machine branch on
1344 which to base your new BSP-specific machine branch
1345 (or to re-use if you had elected to not create a new branch).
1346 Because this example is generating an ARM-based BSP, the example
1347 uses <filename>#1</filename> at the prompt, which selects the ARM-versatile branch.
1348 </para></listitem>
1349 <listitem><para>The remainder of the prompts are routine.
1350 Defaults are accepted for each.</para></listitem>
1351 <listitem><para>By default, the script creates the new BSP Layer in the
1352 current working directory of the
1353 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>,
1354 (i.e. <filename>poky/build</filename>).
1355 </para></listitem>
1356 </orderedlist>
1357 </para>
1358
1359 <para>
1360 Once the BSP Layer is created, you must add it to your
1361 <filename>bblayers.conf</filename> file.
1362 Here is an example:
1363 <literallayout class='monospaced'>
1364 BBLAYERS = ? " \
1365 /usr/local/src/yocto/meta \
1366 /usr/local/src/yocto/meta-yocto \
1367 /usr/local/src/yocto/meta-yocto-bsp \
1368 /usr/local/src/yocto/meta-myarm \
1369 "
1370
1371 BBLAYERS_NON_REMOVABLE ?= " \
1372 /usr/local/src/yocto/meta \
1373 /usr/local/src/yocto/meta-yocto \
1374 "
1375 </literallayout>
1376 Adding the layer to this file allows the build system to build the BSP and
1377 the <filename>yocto-kernel</filename> tool to be able to find the layer and
1378 other Metadata it needs on which to operate.
1379 </para>
1380 </section>
1381
1382 <section id='managing-kernel-patches-and-config-items-with-yocto-kernel'>
1383 <title>Managing Kernel Patches and Config Items with yocto-kernel</title>
1384
1385 <para>
1386 Assuming you have created a <link linkend='bsp-layers'>BSP Layer</link> using
1387 <link linkend='creating-a-new-bsp-layer-using-the-yocto-bsp-script'>
1388 <filename>yocto-bsp</filename></link> and you added it to your
1389 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBLAYERS'><filename>BBLAYERS</filename></ulink>
1390 variable in the <filename>bblayers.conf</filename> file, you can now use
1391 the <filename>yocto-kernel</filename> script to add patches and configuration
1392 items to the BSP's kernel.
1393 </para>
1394
1395 <para>
1396 The <filename>yocto-kernel</filename> script allows you to add, remove, and list patches
1397 and kernel config settings to a BSP's kernel
1398 <filename>.bbappend</filename> file.
1399 All you need to do is use the appropriate sub-command.
1400 Recall that the easiest way to see exactly what sub-commands are available
1401 is to use the <filename>yocto-kernel</filename> built-in help as follows:
1402 <literallayout class='monospaced'>
1403 $ yocto-kernel
1404 Usage:
1405
1406 Modify and list Yocto BSP kernel config items and patches.
1407
1408 usage: yocto-kernel [--version] [--help] COMMAND [ARGS]
1409
1410 Current 'yocto-kernel' commands are:
1411 config list List the modifiable set of bare kernel config options for a BSP
1412 config add Add or modify bare kernel config options for a BSP
1413 config rm Remove bare kernel config options from a BSP
1414 patch list List the patches associated with a BSP
1415 patch add Patch the Yocto kernel for a BSP
1416 patch rm Remove patches from a BSP
1417 feature list List the features used by a BSP
1418 feature add Have a BSP use a feature
1419 feature rm Have a BSP stop using a feature
1420 features list List the features available to BSPs
1421 feature describe Describe a particular feature
1422 feature create Create a new BSP-local feature
1423 feature destroy Remove a BSP-local feature
1424
1425 See 'yocto-kernel help COMMAND' for more information on a specific command.
1426
1427
1428
1429 Options:
1430 --version show program's version number and exit
1431 -h, --help show this help message and exit
1432 -D, --debug output debug information
1433 </literallayout>
1434 </para>
1435
1436 <para>
1437 The <filename>yocto-kernel patch add</filename> sub-command allows you to add a
1438 patch to a BSP.
1439 The following example adds two patches to the <filename>myarm</filename> BSP:
1440 <literallayout class='monospaced'>
1441 $ yocto-kernel patch add myarm ~/test.patch
1442 Added patches:
1443 test.patch
1444
1445 $ yocto-kernel patch add myarm ~/yocto-testmod.patch
1446 Added patches:
1447 yocto-testmod.patch
1448 </literallayout>
1449 <note>Although the previous example adds patches one at a time, it is possible
1450 to add multiple patches at the same time.</note>
1451 </para>
1452
1453 <para>
1454 You can verify patches have been added by using the
1455 <filename>yocto-kernel patch list</filename> sub-command.
1456 Here is an example:
1457 <literallayout class='monospaced'>
1458 $ yocto-kernel patch list myarm
1459 The current set of machine-specific patches for myarm is:
1460 1) test.patch
1461 2) yocto-testmod.patch
1462 </literallayout>
1463 </para>
1464
1465 <para>
1466 You can also use the <filename>yocto-kernel</filename> script to
1467 remove a patch using the <filename>yocto-kernel patch rm</filename> sub-command.
1468 Here is an example:
1469 <literallayout class='monospaced'>
1470 $ yocto-kernel patch rm myarm
1471 Specify the patches to remove:
1472 1) test.patch
1473 2) yocto-testmod.patch
1474 1
1475 Removed patches:
1476 test.patch
1477 </literallayout>
1478 </para>
1479
1480 <para>
1481 Again, using the <filename>yocto-kernel patch list</filename> sub-command,
1482 you can verify that the patch was in fact removed:
1483 <literallayout class='monospaced'>
1484 $ yocto-kernel patch list myarm
1485 The current set of machine-specific patches for myarm is:
1486 1) yocto-testmod.patch
1487 </literallayout>
1488 </para>
1489
1490 <para>
1491 In a completely similar way, you can use the <filename>yocto-kernel config add</filename>
1492 sub-command to add one or more kernel config item settings to a BSP.
1493 The following commands add a couple of config items to the
1494 <filename>myarm</filename> BSP:
1495 <literallayout class='monospaced'>
1496 $ yocto-kernel config add myarm CONFIG_MISC_DEVICES=y
1497 Added items:
1498 CONFIG_MISC_DEVICES=y
1499
1500 $ yocto-kernel config add myarm CONFIG_YOCTO_TESTMOD=y
1501 Added items:
1502 CONFIG_YOCTO_TESTMOD=y
1503 </literallayout>
1504 <note>Although the previous example adds config items one at a time, it is possible
1505 to add multiple config items at the same time.</note>
1506 </para>
1507
1508 <para>
1509 You can list the config items now associated with the BSP.
1510 Doing so shows you the config items you added as well as others associated
1511 with the BSP:
1512 <literallayout class='monospaced'>
1513 $ yocto-kernel config list myarm
1514 The current set of machine-specific kernel config items for myarm is:
1515 1) CONFIG_MISC_DEVICES=y
1516 2) CONFIG_YOCTO_TESTMOD=y
1517 </literallayout>
1518 </para>
1519
1520 <para>
1521 Finally, you can remove one or more config items using the
1522 <filename>yocto-kernel config rm</filename> sub-command in a manner
1523 completely analogous to <filename>yocto-kernel patch rm</filename>.
1524 </para>
1525 </section>
1526 </section>
1527</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..64504299cc
--- /dev/null
+++ b/documentation/dev-manual/dev-manual-common-tasks.xml
@@ -0,0 +1,9738 @@
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-selftest</filename>,
75 <filename>meta-yocto</filename>, and
76 <filename>meta-yocto-bsp</filename>.
77 Each of these folders represents a distinct layer.
78 </para>
79
80 <para>
81 As another example, if you set up a local copy of the
82 <filename>meta-intel</filename> Git repository
83 and then explore the folder of that general layer,
84 you will discover many Intel-specific BSP layers inside.
85 For more information on BSP layers, see the
86 "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>"
87 section in the Yocto Project Board Support Package (BSP)
88 Developer's Guide.
89 </para>
90 </section>
91
92 <section id='creating-your-own-layer'>
93 <title>Creating Your Own Layer</title>
94
95 <para>
96 It is very easy to create your own layers to use with the
97 OpenEmbedded build system.
98 The Yocto Project ships with scripts that speed up creating
99 general layers and BSP layers.
100 This section describes the steps you perform by hand to create
101 a layer so that you can better understand them.
102 For information about the layer-creation scripts, see the
103 "<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>"
104 section in the Yocto Project Board Support Package (BSP)
105 Developer's Guide and the
106 "<link linkend='creating-a-general-layer-using-the-yocto-layer-script'>Creating a General Layer Using the yocto-layer Script</link>"
107 section further down in this manual.
108 </para>
109
110 <para>
111 Follow these general steps to create your layer:
112 <orderedlist>
113 <listitem><para><emphasis>Check Existing Layers:</emphasis>
114 Before creating a new layer, you should be sure someone
115 has not already created a layer containing the Metadata
116 you need.
117 You can see the
118 <ulink url='http://layers.openembedded.org/layerindex/layers/'><filename>OpenEmbedded Metadata Index</filename></ulink>
119 for a list of layers from the OpenEmbedded community
120 that can be used in the Yocto Project.
121 </para></listitem>
122 <listitem><para><emphasis>Create a Directory:</emphasis>
123 Create the directory for your layer.
124 While not strictly required, prepend the name of the
125 folder with the string <filename>meta-</filename>.
126 For example:
127 <literallayout class='monospaced'>
128 meta-mylayer
129 meta-GUI_xyz
130 meta-mymachine
131 </literallayout>
132 </para></listitem>
133 <listitem><para><emphasis>Create a Layer Configuration
134 File:</emphasis>
135 Inside your new layer folder, you need to create a
136 <filename>conf/layer.conf</filename> file.
137 It is easiest to take an existing layer configuration
138 file and copy that to your layer's
139 <filename>conf</filename> directory and then modify the
140 file as needed.</para>
141 <para>The
142 <filename>meta-yocto-bsp/conf/layer.conf</filename> file
143 demonstrates the required syntax:
144 <literallayout class='monospaced'>
145 # We have a conf and classes directory, add to BBPATH
146 BBPATH .= ":${LAYERDIR}"
147
148 # We have recipes-* directories, add to BBFILES
149 BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
150 ${LAYERDIR}/recipes-*/*/*.bbappend"
151
152 BBFILE_COLLECTIONS += "yoctobsp"
153 BBFILE_PATTERN_yoctobsp = "^${LAYERDIR}/"
154 BBFILE_PRIORITY_yoctobsp = "5"
155 LAYERVERSION_yoctobsp = "3"
156 </literallayout></para>
157 <para>Here is an explanation of the example:
158 <itemizedlist>
159 <listitem><para>The configuration and
160 classes directory is appended to
161 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBPATH'><filename>BBPATH</filename></ulink>.
162 <note>
163 All non-distro layers, which include all BSP
164 layers, are expected to append the layer
165 directory to the
166 <filename>BBPATH</filename>.
167 On the other hand, distro layers, such as
168 <filename>meta-yocto</filename>, can choose
169 to enforce their own precedence over
170 <filename>BBPATH</filename>.
171 For an example of that syntax, see the
172 <filename>layer.conf</filename> file for
173 the <filename>meta-yocto</filename> layer.
174 </note></para></listitem>
175 <listitem><para>The recipes for the layers are
176 appended to
177 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BBFILES'>BBFILES</ulink></filename>.
178 </para></listitem>
179 <listitem><para>The
180 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BBFILE_COLLECTIONS'>BBFILE_COLLECTIONS</ulink></filename>
181 variable is then appended with the layer name.
182 </para></listitem>
183 <listitem><para>The
184 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BBFILE_PATTERN'>BBFILE_PATTERN</ulink></filename>
185 variable is set to a regular expression and is
186 used to match files from
187 <filename>BBFILES</filename> into a particular
188 layer.
189 In this case,
190 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LAYERDIR'>LAYERDIR</ulink></filename>
191 is used to make <filename>BBFILE_PATTERN</filename> match within the
192 layer's path.</para></listitem>
193 <listitem><para>The
194 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BBFILE_PRIORITY'>BBFILE_PRIORITY</ulink></filename>
195 variable then assigns a priority to the layer.
196 Applying priorities is useful in situations
197 where the same recipe might appear in multiple
198 layers and allows you to choose the layer
199 that takes precedence.</para></listitem>
200 <listitem><para>The
201 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LAYERVERSION'>LAYERVERSION</ulink></filename>
202 variable optionally specifies the version of a
203 layer as a single number.</para></listitem>
204 </itemizedlist></para>
205 <para>Note the use of the
206 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LAYERDIR'>LAYERDIR</ulink></filename>
207 variable, which expands to the directory of the current
208 layer.</para>
209 <para>Through the use of the <filename>BBPATH</filename>
210 variable, BitBake locates class files
211 (<filename>.bbclass</filename>),
212 configuration files, and files that are included
213 with <filename>include</filename> and
214 <filename>require</filename> statements.
215 For these cases, BitBake uses the first file that
216 matches the name found in <filename>BBPATH</filename>.
217 This is similar to the way the <filename>PATH</filename>
218 variable is used for binaries.
219 It is recommended, therefore, that you use unique
220 class and configuration
221 filenames in your custom layer.</para></listitem>
222 <listitem><para><emphasis>Add Content:</emphasis> Depending
223 on the type of layer, add the content.
224 If the layer adds support for a machine, add the machine
225 configuration in a <filename>conf/machine/</filename>
226 file within the layer.
227 If the layer adds distro policy, add the distro
228 configuration in a <filename>conf/distro/</filename>
229 file within the layer.
230 If the layer introduces new recipes, put the recipes
231 you need in <filename>recipes-*</filename>
232 subdirectories within the layer.
233 <note>In order to be compliant with the Yocto Project,
234 a layer must contain a
235 <ulink url='&YOCTO_DOCS_BSP_URL;#bsp-filelayout-readme'>README file.</ulink>
236 </note></para></listitem>
237 </orderedlist>
238 </para>
239 </section>
240
241 <section id='best-practices-to-follow-when-creating-layers'>
242 <title>Best Practices to Follow When Creating Layers</title>
243
244 <para>
245 To create layers that are easier to maintain and that will
246 not impact builds for other machines, you should consider the
247 information in the following sections.
248 </para>
249
250 <section id='avoid-overlaying-entire-recipes'>
251 <title>Avoid "Overlaying" Entire Recipes</title>
252
253 <para>
254 Avoid "overlaying" entire recipes from other layers in your
255 configuration.
256 In other words, do not copy an entire recipe into your
257 layer and then modify it.
258 Rather, use an append file (<filename>.bbappend</filename>)
259 to override
260 only those parts of the original recipe you need to modify.
261 </para>
262 </section>
263
264 <section id='avoid-duplicating-include-files'>
265 <title>Avoid Duplicating Include Files</title>
266
267 <para>
268 Avoid duplicating include files.
269 Use append files (<filename>.bbappend</filename>)
270 for each recipe
271 that uses an include file.
272 Or, if you are introducing a new recipe that requires
273 the included file, use the path relative to the original
274 layer directory to refer to the file.
275 For example, use
276 <filename>require recipes-core/somepackage/somefile.inc</filename>
277 instead of <filename>require somefile.inc</filename>.
278 If you're finding you have to overlay the include file,
279 it could indicate a deficiency in the include file in
280 the layer to which it originally belongs.
281 If this is the case, you need to address that deficiency
282 instead of overlaying the include file.
283 </para>
284
285 <para>
286 For example, consider how support plug-ins for the Qt 4
287 database are configured.
288 The Source Directory does not have MySQL or PostgreSQL.
289 However, OpenEmbedded's layer <filename>meta-oe</filename>
290 does.
291 Consequently, <filename>meta-oe</filename> uses
292 append files to modify the
293 <filename>QT_SQL_DRIVER_FLAGS</filename> variable to
294 enable the appropriate plug-ins.
295 This variable was added to the <filename>qt4.inc</filename>
296 include file in the Source Directory specifically to allow
297 the <filename>meta-oe</filename> layer to be able to control
298 which plug-ins are built.
299 </para>
300 </section>
301
302 <section id='structure-your-layers'>
303 <title>Structure Your Layers</title>
304
305 <para>
306 Proper use of overrides within append files and placement
307 of machine-specific files within your layer can ensure that
308 a build is not using the wrong Metadata and negatively
309 impacting a build for a different machine.
310 Following are some examples:
311 <itemizedlist>
312 <listitem><para><emphasis>Modifying Variables to Support
313 a Different Machine:</emphasis>
314 Suppose you have a layer named
315 <filename>meta-one</filename> that adds support
316 for building machine "one".
317 To do so, you use an append file named
318 <filename>base-files.bbappend</filename> and
319 create a dependency on "foo" by altering the
320 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>
321 variable:
322 <literallayout class='monospaced'>
323 DEPENDS = "foo"
324 </literallayout>
325 The dependency is created during any build that
326 includes the layer
327 <filename>meta-one</filename>.
328 However, you might not want this dependency
329 for all machines.
330 For example, suppose you are building for
331 machine "two" but your
332 <filename>bblayers.conf</filename> file has the
333 <filename>meta-one</filename> layer included.
334 During the build, the
335 <filename>base-files</filename> for machine
336 "two" will also have the dependency on
337 <filename>foo</filename>.</para>
338 <para>To make sure your changes apply only when
339 building machine "one", use a machine override
340 with the <filename>DEPENDS</filename> statement:
341 <literallayout class='monospaced'>
342 DEPENDS_one = "foo"
343 </literallayout>
344 You should follow the same strategy when using
345 <filename>_append</filename> and
346 <filename>_prepend</filename> operations:
347 <literallayout class='monospaced'>
348 DEPENDS_append_one = " foo"
349 DEPENDS_prepend_one = "foo "
350 </literallayout>
351 As an actual example, here's a line from the recipe for
352 the OProfile profiler, which lists an extra build-time
353 dependency when building specifically for 64-bit PowerPC:
354 <literallayout class='monospaced'>
355 DEPENDS_append_powerpc64 = " libpfm4"
356 </literallayout>
357 <note>
358 Avoiding "+=" and "=+" and using
359 machine-specific
360 <filename>_append</filename>
361 and <filename>_prepend</filename> operations
362 is recommended as well.
363 </note></para></listitem>
364 <listitem><para><emphasis>Place Machine-Specific Files
365 in Machine-Specific Locations:</emphasis>
366 When you have a base recipe, such as
367 <filename>base-files.bb</filename>, that
368 contains a
369 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
370 statement to a file, you can use an append file
371 to cause the build to use your own version of
372 the file.
373 For example, an append file in your layer at
374 <filename>meta-one/recipes-core/base-files/base-files.bbappend</filename>
375 could extend
376 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESPATH'><filename>FILESPATH</filename></ulink>
377 using
378 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
379 as follows:
380 <literallayout class='monospaced'>
381 FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
382 </literallayout>
383 The build for machine "one" will pick up your
384 machine-specific file as long as you have the
385 file in
386 <filename>meta-one/recipes-core/base-files/base-files/</filename>.
387 However, if you are building for a different
388 machine and the
389 <filename>bblayers.conf</filename> file includes
390 the <filename>meta-one</filename> layer and
391 the location of your machine-specific file is
392 the first location where that file is found
393 according to <filename>FILESPATH</filename>,
394 builds for all machines will also use that
395 machine-specific file.</para>
396 <para>You can make sure that a machine-specific
397 file is used for a particular machine by putting
398 the file in a subdirectory specific to the
399 machine.
400 For example, rather than placing the file in
401 <filename>meta-one/recipes-core/base-files/base-files/</filename>
402 as shown above, put it in
403 <filename>meta-one/recipes-core/base-files/base-files/one/</filename>.
404 Not only does this make sure the file is used
405 only when building for machine "one", but the
406 build process locates the file more quickly.</para>
407 <para>In summary, you need to place all files
408 referenced from <filename>SRC_URI</filename>
409 in a machine-specific subdirectory within the
410 layer in order to restrict those files to
411 machine-specific builds.</para></listitem>
412 </itemizedlist>
413 </para>
414 </section>
415
416 <section id='other-recommendations'>
417 <title>Other Recommendations</title>
418
419 <para>
420 We also recommend the following:
421 <itemizedlist>
422 <listitem><para>Store custom layers in a Git repository
423 that uses the
424 <filename>meta-<replaceable>layer_name</replaceable></filename> format.
425 </para></listitem>
426 <listitem><para>Clone the repository alongside other
427 <filename>meta</filename> directories in the
428 <link linkend='source-directory'>Source Directory</link>.
429 </para></listitem>
430 </itemizedlist>
431 Following these recommendations keeps your Source Directory and
432 its configuration entirely inside the Yocto Project's core
433 base.
434 </para>
435 </section>
436 </section>
437
438 <section id='enabling-your-layer'>
439 <title>Enabling Your Layer</title>
440
441 <para>
442 Before the OpenEmbedded build system can use your new layer,
443 you need to enable it.
444 To enable your layer, simply add your layer's path to the
445 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BBLAYERS'>BBLAYERS</ulink></filename>
446 variable in your <filename>conf/bblayers.conf</filename> file,
447 which is found in the
448 <link linkend='build-directory'>Build Directory</link>.
449 The following example shows how to enable a layer named
450 <filename>meta-mylayer</filename>:
451 <literallayout class='monospaced'>
452 LCONF_VERSION = "6"
453
454 BBPATH = "${TOPDIR}"
455 BBFILES ?= ""
456
457 BBLAYERS ?= " \
458 $HOME/poky/meta \
459 $HOME/poky/meta-yocto \
460 $HOME/poky/meta-yocto-bsp \
461 $HOME/poky/meta-mylayer \
462 "
463
464 BBLAYERS_NON_REMOVABLE ?= " \
465 $HOME/poky/meta \
466 $HOME/poky/meta-yocto \
467 "
468 </literallayout>
469 </para>
470
471 <para>
472 BitBake parses each <filename>conf/layer.conf</filename> file
473 as specified in the <filename>BBLAYERS</filename> variable
474 within the <filename>conf/bblayers.conf</filename> file.
475 During the processing of each
476 <filename>conf/layer.conf</filename> file, BitBake adds the
477 recipes, classes and configurations contained within the
478 particular layer to the source directory.
479 </para>
480 </section>
481
482 <section id='using-bbappend-files'>
483 <title>Using .bbappend Files</title>
484
485 <para>
486 Recipes used to append Metadata to other recipes are called
487 BitBake append files.
488 BitBake append files use the <filename>.bbappend</filename> file
489 type suffix, while the corresponding recipes to which Metadata
490 is being appended use the <filename>.bb</filename> file type
491 suffix.
492 </para>
493
494 <para>
495 A <filename>.bbappend</filename> file allows your layer to make
496 additions or changes to the content of another layer's recipe
497 without having to copy the other recipe into your layer.
498 Your <filename>.bbappend</filename> file resides in your layer,
499 while the main <filename>.bb</filename> recipe file to
500 which you are appending Metadata resides in a different layer.
501 </para>
502
503 <para>
504 Append files must have the same root names as their corresponding
505 recipes.
506 For example, the append file
507 <filename>someapp_&DISTRO;.bbappend</filename> must apply to
508 <filename>someapp_&DISTRO;.bb</filename>.
509 This means the original recipe and append file names are version
510 number-specific.
511 If the corresponding recipe is renamed to update to a newer
512 version, the corresponding <filename>.bbappend</filename> file must
513 be renamed (and possibly updated) as well.
514 During the build process, BitBake displays an error on starting
515 if it detects a <filename>.bbappend</filename> file that does
516 not have a corresponding recipe with a matching name.
517 See the
518 <ulink url='&YOCTO_DOCS_REF_URL;#var-BB_DANGLINGAPPENDS_WARNONLY'><filename>BB_DANGLINGAPPENDS_WARNONLY</filename></ulink>
519 variable for information on how to handle this error.
520 </para>
521
522 <para>
523 Being able to append information to an existing recipe not only
524 avoids duplication, but also automatically applies recipe
525 changes in a different layer to your layer.
526 If you were copying recipes, you would have to manually merge
527 changes as they occur.
528 </para>
529
530 <para>
531 As an example, consider the main formfactor recipe and a
532 corresponding formfactor append file both from the
533 <link linkend='source-directory'>Source Directory</link>.
534 Here is the main formfactor recipe, which is named
535 <filename>formfactor_0.0.bb</filename> and located in the
536 "meta" layer at
537 <filename>meta/recipes-bsp/formfactor</filename>:
538 <literallayout class='monospaced'>
539 SUMMARY = "Device formfactor information"
540 SECTION = "base"
541 LICENSE = "MIT"
542 LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=4d92cd373abda3937c2bc47fbc49d690 \
543 file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
544 PR = "r45"
545
546 SRC_URI = "file://config file://machconfig"
547 S = "${WORKDIR}"
548
549 PACKAGE_ARCH = "${MACHINE_ARCH}"
550 INHIBIT_DEFAULT_DEPS = "1"
551
552 do_install() {
553 # Install file only if it has contents
554 install -d ${D}${sysconfdir}/formfactor/
555 install -m 0644 ${S}/config ${D}${sysconfdir}/formfactor/
556 if [ -s "${S}/machconfig" ]; then
557 install -m 0644 ${S}/machconfig ${D}${sysconfdir}/formfactor/
558 fi
559 }
560 </literallayout>
561 In the main recipe, note the
562 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
563 variable, which tells the OpenEmbedded build system where to
564 find files during the build.
565 </para>
566
567 <para>
568 Following is the append file, which is named
569 <filename>formfactor_0.0.bbappend</filename> and is from the
570 Crown Bay BSP Layer named
571 <filename>meta-intel/meta-crownbay</filename>.
572 The file is in <filename>recipes-bsp/formfactor</filename>:
573 <literallayout class='monospaced'>
574 FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
575 </literallayout>
576 </para>
577
578 <para>
579 By default, the build system uses the
580 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESPATH'><filename>FILESPATH</filename></ulink>
581 variable to locate files.
582 This append file extends the locations by setting the
583 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
584 variable.
585 Setting this variable in the <filename>.bbappend</filename>
586 file is the most reliable and recommended method for adding
587 directories to the search path used by the build system
588 to find files.
589 </para>
590
591 <para>
592 The statement in this example extends the directories to include
593 <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>,
594 which resolves to a directory named
595 <filename>formfactor</filename> in the same directory
596 in which the append file resides (i.e.
597 <filename>meta-intel/meta-crownbay/recipes-bsp/formfactor/formfactor</filename>.
598 This implies that you must have the supporting directory
599 structure set up that will contain any files or patches you
600 will be including from the layer.
601 </para>
602
603 <para>
604 Using the immediate expansion assignment operator
605 <filename>:=</filename> is important because of the reference to
606 <filename>THISDIR</filename>.
607 The trailing colon character is important as it ensures that
608 items in the list remain colon-separated.
609 <note>
610 <para>
611 BitBake automatically defines the
612 <filename>THISDIR</filename> variable.
613 You should never set this variable yourself.
614 Using "_prepend" ensures your path will
615 be searched prior to other paths in the final list.
616 </para>
617
618 <para>
619 Also, not all append files add extra files.
620 Many append files simply exist to add build options
621 (e.g. <filename>systemd</filename>).
622 For these cases, it is not necessary to use the
623 "_prepend" part of the statement.
624 </para>
625 </note>
626 </para>
627 </section>
628
629 <section id='prioritizing-your-layer'>
630 <title>Prioritizing Your Layer</title>
631
632 <para>
633 Each layer is assigned a priority value.
634 Priority values control which layer takes precedence if there
635 are recipe files with the same name in multiple layers.
636 For these cases, the recipe file from the layer with a higher
637 priority number takes precedence.
638 Priority values also affect the order in which multiple
639 <filename>.bbappend</filename> files for the same recipe are
640 applied.
641 You can either specify the priority manually, or allow the
642 build system to calculate it based on the layer's dependencies.
643 </para>
644
645 <para>
646 To specify the layer's priority manually, use the
647 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBFILE_PRIORITY'><filename>BBFILE_PRIORITY</filename></ulink>
648 variable.
649 For example:
650 <literallayout class='monospaced'>
651 BBFILE_PRIORITY_mylayer = "1"
652 </literallayout>
653 </para>
654
655 <note>
656 <para>It is possible for a recipe with a lower version number
657 <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>
658 in a layer that has a higher priority to take precedence.</para>
659 <para>Also, the layer priority does not currently affect the
660 precedence order of <filename>.conf</filename>
661 or <filename>.bbclass</filename> files.
662 Future versions of BitBake might address this.</para>
663 </note>
664 </section>
665
666 <section id='managing-layers'>
667 <title>Managing Layers</title>
668
669 <para>
670 You can use the BitBake layer management tool to provide a view
671 into the structure of recipes across a multi-layer project.
672 Being able to generate output that reports on configured layers
673 with their paths and priorities and on
674 <filename>.bbappend</filename> files and their applicable
675 recipes can help to reveal potential problems.
676 </para>
677
678 <para>
679 Use the following form when running the layer management tool.
680 <literallayout class='monospaced'>
681 $ bitbake-layers <replaceable>command</replaceable> [<replaceable>arguments</replaceable>]
682 </literallayout>
683 The following list describes the available commands:
684 <itemizedlist>
685 <listitem><para><filename><emphasis>help:</emphasis></filename>
686 Displays general help or help on a specified command.
687 </para></listitem>
688 <listitem><para><filename><emphasis>show-layers:</emphasis></filename>
689 Shows the current configured layers.
690 </para></listitem>
691 <listitem><para><filename><emphasis>show-recipes:</emphasis></filename>
692 Lists available recipes and the layers that provide them.
693 </para></listitem>
694 <listitem><para><filename><emphasis>show-overlayed:</emphasis></filename>
695 Lists overlayed recipes.
696 A recipe is overlayed when a recipe with the same name
697 exists in another layer that has a higher layer
698 priority.
699 </para></listitem>
700 <listitem><para><filename><emphasis>show-appends:</emphasis></filename>
701 Lists <filename>.bbappend</filename> files and the
702 recipe files to which they apply.
703 </para></listitem>
704 <listitem><para><filename><emphasis>show-cross-depends:</emphasis></filename>
705 Lists dependency relationships between recipes that
706 cross layer boundaries.
707 </para></listitem>
708 <listitem><para><filename><emphasis>flatten:</emphasis></filename>
709 Flattens the layer configuration into a separate output
710 directory.
711 Flattening your layer configuration builds a "flattened"
712 directory that contains the contents of all layers,
713 with any overlayed recipes removed and any
714 <filename>.bbappend</filename> files appended to the
715 corresponding recipes.
716 You might have to perform some manual cleanup of the
717 flattened layer as follows:
718 <itemizedlist>
719 <listitem><para>Non-recipe files (such as patches)
720 are overwritten.
721 The flatten command shows a warning for these
722 files.
723 </para></listitem>
724 <listitem><para>Anything beyond the normal layer
725 setup has been added to the
726 <filename>layer.conf</filename> file.
727 Only the lowest priority layer's
728 <filename>layer.conf</filename> is used.
729 </para></listitem>
730 <listitem><para>Overridden and appended items from
731 <filename>.bbappend</filename> files need to be
732 cleaned up.
733 The contents of each
734 <filename>.bbappend</filename> end up in the
735 flattened recipe.
736 However, if there are appended or changed
737 variable values, you need to tidy these up
738 yourself.
739 Consider the following example.
740 Here, the <filename>bitbake-layers</filename>
741 command adds the line
742 <filename>#### bbappended ...</filename> so that
743 you know where the following lines originate:
744 <literallayout class='monospaced'>
745 ...
746 DESCRIPTION = "A useful utility"
747 ...
748 EXTRA_OECONF = "&dash;&dash;enable-something"
749 ...
750
751 #### bbappended from meta-anotherlayer ####
752
753 DESCRIPTION = "Customized utility"
754 EXTRA_OECONF += "&dash;&dash;enable-somethingelse"
755 </literallayout>
756 Ideally, you would tidy up these utilities as
757 follows:
758 <literallayout class='monospaced'>
759 ...
760 DESCRIPTION = "Customized utility"
761 ...
762 EXTRA_OECONF = "&dash;&dash;enable-something &dash;&dash;enable-somethingelse"
763 ...
764 </literallayout></para></listitem>
765 </itemizedlist></para></listitem>
766 </itemizedlist>
767 </para>
768 </section>
769
770 <section id='creating-a-general-layer-using-the-yocto-layer-script'>
771 <title>Creating a General Layer Using the yocto-layer Script</title>
772
773 <para>
774 The <filename>yocto-layer</filename> script simplifies
775 creating a new general layer.
776 <note>
777 For information on BSP layers, see the
778 "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>"
779 section in the Yocto Project Board Specific (BSP)
780 Developer's Guide.
781 </note>
782 The default mode of the script's operation is to prompt you for
783 information needed to generate the layer:
784 <itemizedlist>
785 <listitem><para>The layer priority.
786 </para></listitem>
787 <listitem><para>Whether or not to create a sample recipe.
788 </para></listitem>
789 <listitem><para>Whether or not to create a sample
790 append file.
791 </para></listitem>
792 </itemizedlist>
793 </para>
794
795 <para>
796 Use the <filename>yocto-layer create</filename> sub-command
797 to create a new general layer.
798 In its simplest form, you can create a layer as follows:
799 <literallayout class='monospaced'>
800 $ yocto-layer create mylayer
801 </literallayout>
802 The previous example creates a layer named
803 <filename>meta-mylayer</filename> in the current directory.
804 </para>
805
806 <para>
807 As the <filename>yocto-layer create</filename> command runs,
808 default values for the prompts appear in brackets.
809 Pressing enter without supplying anything for the prompts
810 or pressing enter and providing an invalid response causes the
811 script to accept the default value.
812 Once the script completes, the new layer
813 is created in the current working directory.
814 The script names the layer by prepending
815 <filename>meta-</filename> to the name you provide.
816 </para>
817
818 <para>
819 Minimally, the script creates the following within the layer:
820 <itemizedlist>
821 <listitem><para><emphasis>The <filename>conf</filename>
822 directory:</emphasis>
823 This directory contains the layer's configuration file.
824 The root name for the file is the same as the root name
825 your provided for the layer (e.g.
826 <filename><replaceable>layer</replaceable>.conf</filename>).
827 </para></listitem>
828 <listitem><para><emphasis>The
829 <filename>COPYING.MIT</filename> file:</emphasis>
830 The copyright and use notice for the software.
831 </para></listitem>
832 <listitem><para><emphasis>The <filename>README</filename>
833 file:</emphasis>
834 A file describing the contents of your new layer.
835 </para></listitem>
836 </itemizedlist>
837 </para>
838
839 <para>
840 If you choose to generate a sample recipe file, the script
841 prompts you for the name for the recipe and then creates it
842 in <filename><replaceable>layer</replaceable>/recipes-example/example/</filename>.
843 The script creates a <filename>.bb</filename> file and a
844 directory, which contains a sample
845 <filename>helloworld.c</filename> source file, along with
846 a sample patch file.
847 If you do not provide a recipe name, the script uses
848 "example".
849 </para>
850
851 <para>
852 If you choose to generate a sample append file, the script
853 prompts you for the name for the file and then creates it
854 in <filename><replaceable>layer</replaceable>/recipes-example-bbappend/example-bbappend/</filename>.
855 The script creates a <filename>.bbappend</filename> file and a
856 directory, which contains a sample patch file.
857 If you do not provide a recipe name, the script uses
858 "example".
859 The script also prompts you for the version of the append file.
860 The version should match the recipe to which the append file
861 is associated.
862 </para>
863
864 <para>
865 The easiest way to see how the <filename>yocto-layer</filename>
866 script works is to experiment with the script.
867 You can also read the usage information by entering the
868 following:
869 <literallayout class='monospaced'>
870 $ yocto-layer help
871 </literallayout>
872 </para>
873
874 <para>
875 Once you create your general layer, you must add it to your
876 <filename>bblayers.conf</filename> file.
877 Here is an example where a layer named
878 <filename>meta-mylayer</filename> is added:
879 <literallayout class='monospaced'>
880 BBLAYERS = ?" \
881 /usr/local/src/yocto/meta \
882 /usr/local/src/yocto/meta-yocto \
883 /usr/local/src/yocto/meta-yocto-bsp \
884 /usr/local/src/yocto/meta-mylayer \
885 "
886
887 BBLAYERS_NON_REMOVABLE ?= " \
888 /usr/local/src/yocto/meta \
889 /usr/local/src/yocto/meta-yocto \
890 "
891 </literallayout>
892 Adding the layer to this file enables the build system to
893 locate the layer during the build.
894 </para>
895 </section>
896 </section>
897
898 <section id='usingpoky-extend-customimage'>
899 <title>Customizing Images</title>
900
901 <para>
902 You can customize images to satisfy particular requirements.
903 This section describes several methods and provides guidelines for each.
904 </para>
905
906 <section id='usingpoky-extend-customimage-localconf'>
907 <title>Customizing Images Using <filename>local.conf</filename></title>
908
909 <para>
910 Probably the easiest way to customize an image is to add a
911 package by way of the <filename>local.conf</filename>
912 configuration file.
913 Because it is limited to local use, this method generally only
914 allows you to add packages and is not as flexible as creating
915 your own customized image.
916 When you add packages using local variables this way, you need
917 to realize that these variable changes are in effect for every
918 build and consequently affect all images, which might not
919 be what you require.
920 </para>
921
922 <para>
923 To add a package to your image using the local configuration
924 file, use the
925 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'>IMAGE_INSTALL</ulink></filename>
926 variable with the <filename>_append</filename> operator:
927 <literallayout class='monospaced'>
928 IMAGE_INSTALL_append = " strace"
929 </literallayout>
930 Use of the syntax is important - specifically, the space between
931 the quote and the package name, which is
932 <filename>strace</filename> in this example.
933 This space is required since the <filename>_append</filename>
934 operator does not add the space.
935 </para>
936
937 <para>
938 Furthermore, you must use <filename>_append</filename> instead
939 of the <filename>+=</filename> operator if you want to avoid
940 ordering issues.
941 The reason for this is because doing so unconditionally appends
942 to the variable and avoids ordering problems due to the
943 variable being set in image recipes and
944 <filename>.bbclass</filename> files with operators like
945 <filename>?=</filename>.
946 Using <filename>_append</filename> ensures the operation takes
947 affect.
948 </para>
949
950 <para>
951 As shown in its simplest use,
952 <filename>IMAGE_INSTALL_append</filename> affects all images.
953 It is possible to extend the syntax so that the variable
954 applies to a specific image only.
955 Here is an example:
956 <literallayout class='monospaced'>
957 IMAGE_INSTALL_append_pn-core-image-minimal = " strace"
958 </literallayout>
959 This example adds <filename>strace</filename> to the
960 <filename>core-image-minimal</filename> image only.
961 </para>
962
963 <para>
964 You can add packages using a similar approach through the
965 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-CORE_IMAGE_EXTRA_INSTALL'>CORE_IMAGE_EXTRA_INSTALL</ulink></filename>
966 variable.
967 If you use this variable, only
968 <filename>core-image-*</filename> images are affected.
969 </para>
970 </section>
971
972 <section id='usingpoky-extend-customimage-imagefeatures'>
973 <title>Customizing Images Using Custom <filename>IMAGE_FEATURES</filename> and
974 <filename>EXTRA_IMAGE_FEATURES</filename></title>
975
976 <para>
977 Another method for customizing your image is to enable or
978 disable high-level image features by using the
979 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink>
980 and <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_IMAGE_FEATURES'><filename>EXTRA_IMAGE_FEATURES</filename></ulink>
981 variables.
982 Although the functions for both variables are nearly equivalent,
983 best practices dictate using <filename>IMAGE_FEATURES</filename>
984 from within a recipe and using
985 <filename>EXTRA_IMAGE_FEATURES</filename> from within
986 your <filename>local.conf</filename> file, which is found in the
987 <link linkend='build-directory'>Build Directory</link>.
988 </para>
989
990 <para>
991 To understand how these features work, the best reference is
992 <filename>meta/classes/core-image.bbclass</filename>.
993 In summary, the file looks at the contents of the
994 <filename>IMAGE_FEATURES</filename> variable and then maps
995 those contents into a set of package groups.
996 Based on this information, the build system automatically
997 adds the appropriate packages to the
998 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></ulink>
999 variable.
1000 Effectively, you are enabling extra features by extending the
1001 class or creating a custom class for use with specialized image
1002 <filename>.bb</filename> files.
1003 </para>
1004
1005 <para>
1006 Use the <filename>EXTRA_IMAGE_FEATURES</filename> variable
1007 from within your local configuration file.
1008 Using a separate area from which to enable features with
1009 this variable helps you avoid overwriting the features in the
1010 image recipe that are enabled with
1011 <filename>IMAGE_FEATURES</filename>.
1012 The value of <filename>EXTRA_IMAGE_FEATURES</filename> is added
1013 to <filename>IMAGE_FEATURES</filename> within
1014 <filename>meta/conf/bitbake.conf</filename>.
1015 </para>
1016
1017 <para>
1018 To illustrate how you can use these variables to modify your
1019 image, consider an example that selects the SSH server.
1020 The Yocto Project ships with two SSH servers you can use
1021 with your images: Dropbear and OpenSSH.
1022 Dropbear is a minimal SSH server appropriate for
1023 resource-constrained environments, while OpenSSH is a
1024 well-known standard SSH server implementation.
1025 By default, the <filename>core-image-sato</filename> image
1026 is configured to use Dropbear.
1027 The <filename>core-image-full-cmdline</filename> and
1028 <filename>core-image-lsb</filename> images both
1029 include OpenSSH.
1030 The <filename>core-image-minimal</filename> image does not
1031 contain an SSH server.
1032 </para>
1033
1034 <para>
1035 You can customize your image and change these defaults.
1036 Edit the <filename>IMAGE_FEATURES</filename> variable
1037 in your recipe or use the
1038 <filename>EXTRA_IMAGE_FEATURES</filename> in your
1039 <filename>local.conf</filename> file so that it configures the
1040 image you are working with to include
1041 <filename>ssh-server-dropbear</filename> or
1042 <filename>ssh-server-openssh</filename>.
1043 </para>
1044
1045 <note>
1046 See the
1047 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>"
1048 section in the Yocto Project Reference Manual for a complete
1049 list of image features that ship with the Yocto Project.
1050 </note>
1051 </section>
1052
1053 <section id='usingpoky-extend-customimage-custombb'>
1054 <title>Customizing Images Using Custom .bb Files</title>
1055
1056 <para>
1057 You can also customize an image by creating a custom recipe
1058 that defines additional software as part of the image.
1059 The following example shows the form for the two lines you need:
1060 <literallayout class='monospaced'>
1061 IMAGE_INSTALL = "packagegroup-core-x11-base package1 package2"
1062
1063 inherit core-image
1064 </literallayout>
1065 </para>
1066
1067 <para>
1068 Defining the software using a custom recipe gives you total
1069 control over the contents of the image.
1070 It is important to use the correct names of packages in the
1071 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'>IMAGE_INSTALL</ulink></filename>
1072 variable.
1073 You must use the OpenEmbedded notation and not the Debian notation for the names
1074 (e.g. <filename>glibc-dev</filename> instead of <filename>libc6-dev</filename>).
1075 </para>
1076
1077 <para>
1078 The other method for creating a custom image is to base it on an existing image.
1079 For example, if you want to create an image based on <filename>core-image-sato</filename>
1080 but add the additional package <filename>strace</filename> to the image,
1081 copy the <filename>meta/recipes-sato/images/core-image-sato.bb</filename> to a
1082 new <filename>.bb</filename> and add the following line to the end of the copy:
1083 <literallayout class='monospaced'>
1084 IMAGE_INSTALL += "strace"
1085 </literallayout>
1086 </para>
1087 </section>
1088
1089 <section id='usingpoky-extend-customimage-customtasks'>
1090 <title>Customizing Images Using Custom Package Groups</title>
1091
1092 <para>
1093 For complex custom images, the best approach for customizing
1094 an image is to create a custom package group recipe that is
1095 used to build the image or images.
1096 A good example of a package group recipe is
1097 <filename>meta/recipes-core/packagegroups/packagegroup-core-boot.bb</filename>.
1098 The
1099 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'>PACKAGES</ulink></filename>
1100 variable lists the package group packages you wish to produce.
1101 <filename>inherit packagegroup</filename> sets appropriate
1102 default values and automatically adds <filename>-dev</filename>,
1103 <filename>-dbg</filename>, and <filename>-ptest</filename>
1104 complementary packages for every package specified in
1105 <filename>PACKAGES</filename>.
1106 Note that the inherit line should be towards
1107 the top of the recipe, certainly before you set
1108 <filename>PACKAGES</filename>.
1109 For each package you specify in <filename>PACKAGES</filename>,
1110 you can use
1111 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-RDEPENDS'>RDEPENDS</ulink></filename>
1112 and
1113 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-RRECOMMENDS'>RRECOMMENDS</ulink></filename>
1114 entries to provide a list of packages the parent task package
1115 should contain.
1116 Following is an example:
1117 <literallayout class='monospaced'>
1118 DESCRIPTION = "My Custom Package Groups"
1119
1120 inherit packagegroup
1121
1122 PACKAGES = "\
1123 packagegroup-custom-apps \
1124 packagegroup-custom-tools \
1125 "
1126
1127 RDEPENDS_packagegroup-custom-apps = "\
1128 dropbear \
1129 portmap \
1130 psplash"
1131
1132 RDEPENDS_packagegroup-custom-tools = "\
1133 oprofile \
1134 oprofileui-server \
1135 lttng-control \
1136 lttng-viewer"
1137
1138 RRECOMMENDS_packagegroup-custom-tools = "\
1139 kernel-module-oprofile"
1140 </literallayout>
1141 </para>
1142
1143 <para>
1144 In the previous example, two package group packages are created with their dependencies and their
1145 recommended package dependencies listed: <filename>packagegroup-custom-apps</filename>, and
1146 <filename>packagegroup-custom-tools</filename>.
1147 To build an image using these package group packages, you need to add
1148 <filename>packagegroup-custom-apps</filename> and/or
1149 <filename>packagegroup-custom-tools</filename> to
1150 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'>IMAGE_INSTALL</ulink></filename>.
1151 For other forms of image dependencies see the other areas of this section.
1152 </para>
1153 </section>
1154 </section>
1155
1156 <section id='new-recipe-writing-a-new-recipe'>
1157 <title>Writing a New Recipe</title>
1158
1159 <para>
1160 Recipes (<filename>.bb</filename> files) are fundamental components
1161 in the Yocto Project environment.
1162 Each software component built by the OpenEmbedded build system
1163 requires a recipe to define the component.
1164 This section describes how to create, write, and test a new
1165 recipe.
1166 <note>
1167 For information on variables that are useful for recipes and
1168 for information about recipe naming issues, see the
1169 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-varlocality-recipe-required'>Required</ulink>"
1170 section of the Yocto Project Reference Manual.
1171 </note>
1172 </para>
1173
1174 <section id='new-recipe-overview'>
1175 <title>Overview</title>
1176
1177 <para>
1178 The following figure shows the basic process for creating a
1179 new recipe.
1180 The remainder of the section provides details for the steps.
1181 <imagedata fileref="figures/recipe-workflow.png" width="6in" depth="7in" align="center" scalefit="1" />
1182 </para>
1183 </section>
1184
1185 <section id='new-recipe-locate-a-base-recipe'>
1186 <title>Locate a Base Recipe</title>
1187
1188 <para>
1189 Before writing a recipe from scratch, it is often useful to
1190 discover whether someone else has already written one that
1191 meets (or comes close to meeting) your needs.
1192 The Yocto Project and OpenEmbedded communities maintain many
1193 recipes that might be candidates for what you are doing.
1194 You can find a good central index of these recipes in the
1195 <ulink url='http://layers.openembedded.org'>OpenEmbedded metadata index</ulink>.
1196 </para>
1197
1198 <para>
1199 Working from an existing recipe or a skeleton recipe is the
1200 best way to get started.
1201 Here are some points on both methods:
1202 <itemizedlist>
1203 <listitem><para><emphasis>Locate and modify a recipe that
1204 is close to what you want to do:</emphasis>
1205 This method works when you are familiar with the
1206 current recipe space.
1207 The method does not work so well for those new to
1208 the Yocto Project or writing recipes.</para>
1209 <para>Some risks associated with this method are
1210 using a recipe that has areas totally unrelated to
1211 what you are trying to accomplish with your recipe,
1212 not recognizing areas of the recipe that you might
1213 have to add from scratch, and so forth.
1214 All these risks stem from unfamiliarity with the
1215 existing recipe space.</para></listitem>
1216 <listitem><para><emphasis>Use and modify the following
1217 skeleton recipe:</emphasis>
1218 <literallayout class='monospaced'>
1219 SUMMARY = ""
1220 HOMEPAGE = ""
1221 LICENSE = ""
1222
1223 LIC_FILES_CHKSUM = ""
1224
1225 SRC_URI = ""
1226 SRC_URI[md5sum] = ""
1227 SRC_URI[sha256sum] = ""
1228
1229 S = "${WORKDIR}/${PN}-${PV}"
1230
1231 inherit <replaceable>stuff</replaceable>
1232 </literallayout>
1233 Modifying this recipe is the recommended method for
1234 creating a new recipe.
1235 The recipe provides the fundamental areas that you need
1236 to include, exclude, or alter to fit your needs.
1237 </para></listitem>
1238 </itemizedlist>
1239 </para>
1240 </section>
1241
1242 <section id='new-recipe-storing-and-naming-the-recipe'>
1243 <title>Storing and Naming the Recipe</title>
1244
1245 <para>
1246 Once you have your base recipe, you should put it in your
1247 own layer and name it appropriately.
1248 Locating it correctly ensures that the OpenEmbedded build
1249 system can find it when you use BitBake to process the
1250 recipe.
1251 </para>
1252
1253 <itemizedlist>
1254 <listitem><para><emphasis>Storing Your Recipe:</emphasis>
1255 The OpenEmbedded build system locates your recipe
1256 through the layer's <filename>conf/layer.conf</filename>
1257 file and the
1258 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBFILES'><filename>BBFILES</filename></ulink>
1259 variable.
1260 This variable sets up a path from which the build system can
1261 locate recipes.
1262 Here is the typical use:
1263 <literallayout class='monospaced'>
1264 BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
1265 ${LAYERDIR}/recipes-*/*/*.bbappend"
1266 </literallayout>
1267 Consequently, you need to be sure you locate your new recipe
1268 inside your layer such that it can be found.</para>
1269 <para>You can find more information on how layers are
1270 structured in the
1271 "<link linkend='understanding-and-creating-layers'>Understanding and Creating Layers</link>"
1272 section.</para></listitem>
1273 <listitem><para><emphasis>Naming Your Recipe:</emphasis>
1274 When you name your recipe, you need to follow this naming
1275 convention:
1276 <literallayout class='monospaced'>
1277 <replaceable>basename</replaceable>_<replaceable>version</replaceable>.bb
1278 </literallayout>
1279 Use lower-cased characters and do not include the reserved
1280 suffixes <filename>-native</filename>,
1281 <filename>-cross</filename>, <filename>-initial</filename>,
1282 or <filename>-dev</filename> casually (i.e. do not use them
1283 as part of your recipe name unless the string applies).
1284 Here are some examples:
1285 <literallayout class='monospaced'>
1286 cups_1.7.0.bb
1287 gawk_4.0.2.bb
1288 irssi_0.8.16-rc1.bb
1289 </literallayout></para></listitem>
1290 </itemizedlist>
1291 </section>
1292
1293 <section id='understanding-recipe-syntax'>
1294 <title>Understanding Recipe Syntax</title>
1295
1296 <para>
1297 Understanding recipe file syntax is important for
1298 writing recipes.
1299 The following list overviews the basic items that make up a
1300 BitBake recipe file.
1301 For more complete BitBake syntax descriptions, see the
1302 "<ulink url='&YOCTO_DOCS_BB_URL;#bitbake-user-manual-metadata'>Syntax and Operators</ulink>"
1303 chapter of the BitBake User Manual.
1304 <itemizedlist>
1305 <listitem><para><emphasis>Variable Assignments and Manipulations:</emphasis>
1306 Variable assignments allow a value to be assigned to a
1307 variable.
1308 The assignment can be static text or might include
1309 the contents of other variables.
1310 In addition to the assignment, appending and prepending
1311 operations are also supported.</para>
1312 <para>The following example shows some of the ways
1313 you can use variables in recipes:
1314 <literallayout class='monospaced'>
1315 S = "${WORKDIR}/postfix-${PV}"
1316 CFLAGS += "-DNO_ASM"
1317 SRC_URI_append = " file://fixup.patch"
1318 </literallayout>
1319 </para></listitem>
1320 <listitem><para><emphasis>Functions:</emphasis>
1321 Functions provide a series of actions to be performed.
1322 You usually use functions to override the default
1323 implementation of a task function or to complement
1324 a default function (i.e. append or prepend to an
1325 existing function).
1326 Standard functions use <filename>sh</filename> shell
1327 syntax, although access to OpenEmbedded variables and
1328 internal methods are also available.</para>
1329 <para>The following is an example function from the
1330 <filename>sed</filename> recipe:
1331 <literallayout class='monospaced'>
1332 do_install () {
1333 autotools_do_install
1334 install -d ${D}${base_bindir}
1335 mv ${D}${bindir}/sed ${D}${base_bindir}/sed
1336 rmdir ${D}${bindir}/
1337 }
1338 </literallayout>
1339 It is also possible to implement new functions that
1340 are called between existing tasks as long as the
1341 new functions are not replacing or complementing the
1342 default functions.
1343 You can implement functions in Python
1344 instead of shell.
1345 Both of these options are not seen in the majority of
1346 recipes.</para></listitem>
1347 <listitem><para><emphasis>Keywords:</emphasis>
1348 BitBake recipes use only a few keywords.
1349 You use keywords to include common
1350 functions (<filename>inherit</filename>), load parts
1351 of a recipe from other files
1352 (<filename>include</filename> and
1353 <filename>require</filename>) and export variables
1354 to the environment (<filename>export</filename>).</para>
1355 <para>The following example shows the use of some of
1356 these keywords:
1357 <literallayout class='monospaced'>
1358 export POSTCONF = "${STAGING_BINDIR}/postconf"
1359 inherit autoconf
1360 require otherfile.inc
1361 </literallayout>
1362 </para></listitem>
1363 <listitem><para><emphasis>Comments:</emphasis>
1364 Any lines that begin with the hash character
1365 (<filename>#</filename>) are treated as comment lines
1366 and are ignored:
1367 <literallayout class='monospaced'>
1368 # This is a comment
1369 </literallayout>
1370 </para></listitem>
1371 </itemizedlist>
1372 </para>
1373
1374 <para>
1375 This next list summarizes the most important and most commonly
1376 used parts of the recipe syntax.
1377 For more information on these parts of the syntax, you can
1378 reference the
1379 <ulink url='&YOCTO_DOCS_BB_URL;#bitbake-user-manual-metadata'>Syntax and Operators</ulink>
1380 chapter in the BitBake User Manual.
1381 <itemizedlist>
1382 <listitem><para><emphasis>Line Continuation: <filename>\</filename></emphasis> -
1383 Use the backward slash (<filename>\</filename>)
1384 character to split a statement over multiple lines.
1385 Place the slash character at the end of the line that
1386 is to be continued on the next line:
1387 <literallayout class='monospaced'>
1388 VAR = "A really long \
1389 line"
1390 </literallayout>
1391 <note>
1392 You cannot have any characters including spaces
1393 or tabs after the slash character.
1394 </note>
1395 </para></listitem>
1396 <listitem><para><emphasis>Using Variables: <filename>${...}</filename></emphasis> -
1397 Use the <filename>${<replaceable>varname</replaceable>}</filename> syntax to
1398 access the contents of a variable:
1399 <literallayout class='monospaced'>
1400 SRC_URI = "${SOURCEFORGE_MIRROR}/libpng/zlib-${PV}.tar.gz"
1401 </literallayout>
1402 </para></listitem>
1403 <listitem><para><emphasis>Quote All Assignments: <filename>"<replaceable>value</replaceable>"</filename></emphasis> -
1404 Use double quotes around the value in all variable
1405 assignments.
1406 <literallayout class='monospaced'>
1407 VAR1 = "${OTHERVAR}"
1408 VAR2 = "The version is ${PV}"
1409 </literallayout>
1410 </para></listitem>
1411 <listitem><para><emphasis>Conditional Assignment: <filename>?=</filename></emphasis> -
1412 Conditional assignment is used to assign a value to
1413 a variable, but only when the variable is currently
1414 unset.
1415 Use the question mark followed by the equal sign
1416 (<filename>?=</filename>) to make a "soft" assignment
1417 used for conditional assignment.
1418 Typically, "soft" assignments are used in the
1419 <filename>local.conf</filename> file for variables
1420 that are allowed to come through from the external
1421 environment.
1422 </para>
1423 <para>Here is an example where
1424 <filename>VAR1</filename> is set to "New value" if
1425 it is currently empty.
1426 However, if <filename>VAR1</filename> has already been
1427 set, it remains unchanged:
1428 <literallayout class='monospaced'>
1429 VAR1 ?= "New value"
1430 </literallayout>
1431 In this next example, <filename>VAR1</filename>
1432 is left with the value "Original value":
1433 <literallayout class='monospaced'>
1434 VAR1 = "Original value"
1435 VAR1 ?= "New value"
1436 </literallayout>
1437 </para></listitem>
1438 <listitem><para><emphasis>Appending: <filename>+=</filename></emphasis> -
1439 Use the plus character followed by the equals sign
1440 (<filename>+=</filename>) to append values to existing
1441 variables.
1442 <note>
1443 This operator adds a space between the existing
1444 content of the variable and the new content.
1445 </note></para>
1446 <para>Here is an example:
1447 <literallayout class='monospaced'>
1448 SRC_URI += "file://fix-makefile.patch"
1449 </literallayout>
1450 </para></listitem>
1451 <listitem><para><emphasis>Prepending: <filename>=+</filename></emphasis> -
1452 Use the equals sign followed by the plus character
1453 (<filename>=+</filename>) to prepend values to existing
1454 variables.
1455 <note>
1456 This operator adds a space between the new content
1457 and the existing content of the variable.
1458 </note></para>
1459 <para>Here is an example:
1460 <literallayout class='monospaced'>
1461 VAR =+ "Starts"
1462 </literallayout>
1463 </para></listitem>
1464 <listitem><para><emphasis>Appending: <filename>_append</filename></emphasis> -
1465 Use the <filename>_append</filename> operator to
1466 append values to existing variables.
1467 This operator does not add any additional space.
1468 Also, the operator is applied after all the
1469 <filename>+=</filename>, and
1470 <filename>=+</filename> operators have been applied and
1471 after all <filename>=</filename> assignments have
1472 occurred.
1473 </para>
1474 <para>The following example shows the space being
1475 explicitly added to the start to ensure the appended
1476 value is not merged with the existing value:
1477 <literallayout class='monospaced'>
1478 SRC_URI_append = " file://fix-makefile.patch"
1479 </literallayout>
1480 You can also use the <filename>_append</filename>
1481 operator with overrides, which results in the actions
1482 only being performed for the specified target or
1483 machine:
1484 <literallayout class='monospaced'>
1485 SRC_URI_append_sh4 = " file://fix-makefile.patch"
1486 </literallayout>
1487 </para></listitem>
1488 <listitem><para><emphasis>Prepending: <filename>_prepend</filename></emphasis> -
1489 Use the <filename>_prepend</filename> operator to
1490 prepend values to existing variables.
1491 This operator does not add any additional space.
1492 Also, the operator is applied after all the
1493 <filename>+=</filename>, and
1494 <filename>=+</filename> operators have been applied and
1495 after all <filename>=</filename> assignments have
1496 occurred.
1497 </para>
1498 <para>The following example shows the space being
1499 explicitly added to the end to ensure the prepended
1500 value is not merged with the existing value:
1501 <literallayout class='monospaced'>
1502 CFLAGS_prepend = "-I${S}/myincludes "
1503 </literallayout>
1504 You can also use the <filename>_prepend</filename>
1505 operator with overrides, which results in the actions
1506 only being performed for the specified target or
1507 machine:
1508 <literallayout class='monospaced'>
1509 CFLAGS_prepend_sh4 = "-I${S}/myincludes "
1510 </literallayout>
1511 </para></listitem>
1512 <listitem><para><emphasis>Overrides:</emphasis> -
1513 You can use overrides to set a value conditionally,
1514 typically based on how the recipe is being built.
1515 For example, to set the
1516 <ulink url='&YOCTO_DOCS_REF_URL;#var-KBRANCH'><filename>KBRANCH</filename></ulink>
1517 variable's value to "standard/base" for any target
1518 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>,
1519 except for qemuarm where it should be set to
1520 "standard/arm-versatile-926ejs", you would do the
1521 following:
1522 <literallayout class='monospaced'>
1523 KBRANCH = "standard/base"
1524 KBRANCH_qemuarm = "standard/arm-versatile-926ejs"
1525 </literallayout>
1526 Overrides are also used to separate alternate values
1527 of a variable in other situations.
1528 For example, when setting variables such as
1529 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILES'><filename>FILES</filename></ulink>
1530 and
1531 <ulink url='&YOCTO_DOCS_REF_URL;#var-RDEPENDS'><filename>RDEPENDS</filename></ulink>
1532 that are specific to individual packages produced by
1533 a recipe, you should always use an override that
1534 specifies the name of the package.
1535 </para></listitem>
1536 <listitem><para><emphasis>Indentation:</emphasis>
1537 Use spaces for indentation rather than than tabs.
1538 For shell functions, both currently work.
1539 However, it is a policy decision of the Yocto Project
1540 to use tabs in shell functions.
1541 Realize that some layers have a policy to use spaces
1542 for all indentation.
1543 </para></listitem>
1544 <listitem><para><emphasis>Using Python for Complex Operations: <filename>${@<replaceable>python_code</replaceable>}</filename></emphasis> -
1545 For more advanced processing, it is possible to use
1546 Python code during variable assignments (e.g.
1547 search and replacement on a variable).</para>
1548 <para>You indicate Python code using the
1549 <filename>${@<replaceable>python_code</replaceable>}</filename>
1550 syntax for the variable assignment:
1551 <literallayout class='monospaced'>
1552 SRC_URI = "ftp://ftp.info-zip.org/pub/infozip/src/zip${@d.getVar('PV',1).replace('.', '')}.tgz
1553 </literallayout>
1554 </para></listitem>
1555 <listitem><para><emphasis>Shell Function Syntax:</emphasis>
1556 Write shell functions as if you were writing a shell
1557 script when you describe a list of actions to take.
1558 You should ensure that your script works with a generic
1559 <filename>sh</filename> and that it does not require
1560 any <filename>bash</filename> or other shell-specific
1561 functionality.
1562 The same considerations apply to various system
1563 utilities (e.g. <filename>sed</filename>,
1564 <filename>grep</filename>, <filename>awk</filename>,
1565 and so forth) that you might wish to use.
1566 If in doubt, you should check with multiple
1567 implementations - including those from BusyBox.
1568 </para></listitem>
1569 </itemizedlist>
1570 </para>
1571 </section>
1572
1573 <section id='new-recipe-running-a-build-on-the-recipe'>
1574 <title>Running a Build on the Recipe</title>
1575
1576 <para>
1577 Creating a new recipe is usually an iterative process that
1578 requires using BitBake to process the recipe multiple times in
1579 order to progressively discover and add information to the
1580 recipe file.
1581 </para>
1582
1583 <para>
1584 Assuming you have sourced a build environment setup script (i.e.
1585 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
1586 or
1587 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>)
1588 and you are in the
1589 <link linkend='build-directory'>Build Directory</link>,
1590 use BitBake to process your recipe.
1591 All you need to provide is the
1592 <filename><replaceable>basename</replaceable></filename> of the recipe as described
1593 in the previous section:
1594 <literallayout class='monospaced'>
1595 $ bitbake <replaceable>basename</replaceable>
1596 </literallayout>
1597
1598 </para>
1599
1600 <para>
1601 During the build, the OpenEmbedded build system creates a
1602 temporary work directory for each recipe
1603 (<filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink><filename>}</filename>)
1604 where it keeps extracted source files, log files, intermediate
1605 compilation and packaging files, and so forth.
1606 </para>
1607
1608 <para>
1609 The per-recipe temporary work directory is constructed as follows and
1610 depends on several factors:
1611 <literallayout class='monospaced'>
1612 BASE_WORKDIR ?= "${TMPDIR}/work"
1613 WORKDIR = "${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}"
1614 </literallayout>
1615 As an example, assume a Source Directory top-level folder named
1616 <filename>poky</filename>, a default Build Directory at
1617 <filename>poky/build</filename>, and a
1618 <filename>qemux86-poky-linux</filename> machine target system.
1619 Furthermore, suppose your recipe is named
1620 <filename>foo_1.3.0.bb</filename>.
1621 In this case, the work directory the build system uses to
1622 build the package would be as follows:
1623 <literallayout class='monospaced'>
1624 poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
1625 </literallayout>
1626 Inside this directory you can find sub-directories such as
1627 <filename>image</filename>, <filename>packages-split</filename>,
1628 and <filename>temp</filename>.
1629 After the build, you can examine these to determine how well
1630 the build went.
1631 <note>
1632 You can find log files for each task in the recipe's
1633 <filename>temp</filename> directory (e.g.
1634 <filename>poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0/temp</filename>).
1635 Log files are named <filename>log.<replaceable>taskname</replaceable></filename>
1636 (e.g. <filename>log.do_configure</filename>,
1637 <filename>log.do_fetch</filename>, and
1638 <filename>log.do_compile</filename>).
1639 </note>
1640 </para>
1641
1642 <para>
1643 You can find more information about the build process in the
1644 "<ulink url='&YOCTO_DOCS_REF_URL;#closer-look'>A Closer Look at the Yocto Project Development Environment</ulink>"
1645 chapter of the Yocto Project Reference Manual.
1646 </para>
1647
1648 <para>
1649 You can also reference the following variables in the
1650 Yocto Project Reference Manual's glossary for more information:
1651 <itemizedlist>
1652 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-TMPDIR'><filename>TMPDIR</filename></ulink>:
1653 The top-level build output directory</listitem>
1654 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-MULTIMACH_TARGET_SYS'><filename>MULTIMACH_TARGET_SYS</filename></ulink>:
1655 The target system identifier</listitem>
1656 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink>:
1657 The recipe name</listitem>
1658 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-EXTENDPE'><filename>EXTENDPE</filename></ulink>:
1659 The epoch - (if
1660 <ulink url='&YOCTO_DOCS_REF_URL;#var-PE'><filename>PE</filename></ulink>
1661 is not specified, which is usually the case for most
1662 recipes, then <filename>EXTENDPE</filename> is blank)</listitem>
1663 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>:
1664 The recipe version</listitem>
1665 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink>:
1666 The recipe revision</listitem>
1667 </itemizedlist>
1668 </para>
1669 </section>
1670
1671 <section id='new-recipe-fetching-code'>
1672 <title>Fetching Code</title>
1673
1674 <para>
1675 The first thing your recipe must do is specify how to fetch
1676 the source files.
1677 Fetching is controlled mainly through the
1678 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
1679 variable.
1680 Your recipe must have a <filename>SRC_URI</filename> variable
1681 that points to where the source is located.
1682 For a graphical representation of source locations, see the
1683 "<ulink url='&YOCTO_DOCS_REF_URL;#sources-dev-environment'>Sources</ulink>"
1684 section in the Yocto Project Reference Manual.
1685 </para>
1686
1687 <para>
1688 The
1689 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-fetch'><filename>do_fetch</filename></ulink>
1690 task uses the prefix of each entry in the
1691 <filename>SRC_URI</filename> variable value to determine which
1692 fetcher to use to get your source files.
1693 It is the <filename>SRC_URI</filename> variable that triggers
1694 the fetcher.
1695 The
1696 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-patch'><filename>do_patch</filename></ulink>
1697 task uses the variable after source is fetched to apply
1698 patches.
1699 The OpenEmbedded build system uses
1700 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESOVERRIDES'><filename>FILESOVERRIDES</filename></ulink>
1701 for scanning directory locations for local files in
1702 <filename>SRC_URI</filename>.
1703 </para>
1704
1705 <para>
1706 The <filename>SRC_URI</filename> variable in your recipe must
1707 define each unique location for your source files.
1708 It is good practice to not hard-code pathnames in an URL used
1709 in <filename>SRC_URI</filename>.
1710 Rather than hard-code these paths, use
1711 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink><filename>}</filename>,
1712 which causes the fetch process to use the version specified in
1713 the recipe filename.
1714 Specifying the version in this manner means that upgrading the
1715 recipe to a future version is as simple as renaming the recipe
1716 to match the new version.
1717 </para>
1718
1719 <para>
1720 Here is a simple example from the
1721 <filename>meta/recipes-devtools/cdrtools/cdrtools-native_3.01a20.bb</filename>
1722 recipe where the source comes from a single tarball.
1723 Notice the use of the
1724 <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>
1725 variable:
1726 <literallayout class='monospaced'>
1727 SRC_URI = "ftp://ftp.berlios.de/pub/cdrecord/alpha/cdrtools-${PV}.tar.bz2"
1728 </literallayout>
1729 </para>
1730
1731 <para>
1732 Files mentioned in <filename>SRC_URI</filename> whose names end
1733 in a typical archive extension (e.g. <filename>.tar</filename>,
1734 <filename>.tar.gz</filename>, <filename>.tar.bz2</filename>,
1735 <filename>.zip</filename>, and so forth), are automatically
1736 extracted during the
1737 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-unpack'><filename>do_unpack</filename></ulink>
1738 task.
1739 For another example that specifies these types of files, see
1740 the
1741 "<link linkend='new-recipe-autotooled-package'>Autotooled Package</link>"
1742 section.
1743 </para>
1744
1745 <para>
1746 Another way of specifying source is from an SCM.
1747 For Git repositories, you must specify
1748 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRCREV'><filename>SRCREV</filename></ulink>
1749 and you should specify
1750 <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>
1751 to include the revision with
1752 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRCPV'><filename>SRCPV</filename></ulink>.
1753 Here is an example from the recipe
1754 <filename>meta/recipes-kernel/blktrace/blktrace_git.bb</filename>:
1755 <literallayout class='monospaced'>
1756 SRCREV = "d6918c8832793b4205ed3bfede78c2f915c23385"
1757
1758 PR = "r6"
1759 PV = "1.0.5+git${SRCPV}"
1760
1761 SRC_URI = "git://git.kernel.dk/blktrace.git \
1762 file://ldflags.patch"
1763 </literallayout>
1764 </para>
1765
1766 <para>
1767 If your <filename>SRC_URI</filename> statement includes
1768 URLs pointing to individual files fetched from a remote server
1769 other than a version control system, BitBake attempts to
1770 verify the files against checksums defined in your recipe to
1771 ensure they have not been tampered with or otherwise modified
1772 since the recipe was written.
1773 Two checksums are used:
1774 <filename>SRC_URI[md5sum]</filename> and
1775 <filename>SRC_URI[sha256sum]</filename>.
1776 </para>
1777
1778 <para>
1779 If your <filename>SRC_URI</filename> variable points to
1780 more than a single URL (excluding SCM URLs), you need to
1781 provide the <filename>md5</filename> and
1782 <filename>sha256</filename> checksums for each URL.
1783 For these cases, you provide a name for each URL as part of
1784 the <filename>SRC_URI</filename> and then reference that name
1785 in the subsequent checksum statements.
1786 Here is an example:
1787 <literallayout class='monospaced'>
1788 SRC_URI = "${DEBIAN_MIRROR}/main/a/apmd/apmd_3.2.2.orig.tar.gz;name=tarball \
1789 ${DEBIAN_MIRROR}/main/a/apmd/apmd_${PV}.diff.gz;name=patch
1790
1791 SRC_URI[tarball.md5sum] = "b1e6309e8331e0f4e6efd311c2d97fa8"
1792 SRC_URI[tarball.sha256sum] = "7f7d9f60b7766b852881d40b8ff91d8e39fccb0d1d913102a5c75a2dbb52332d"
1793
1794 SRC_URI[patch.md5sum] = "57e1b689264ea80f78353519eece0c92"
1795 SRC_URI[patch.sha256sum] = "7905ff96be93d725544d0040e425c42f9c05580db3c272f11cff75b9aa89d430"
1796 </literallayout>
1797 </para>
1798
1799 <para>
1800 Proper values for <filename>md5</filename> and
1801 <filename>sha256</filename> checksums might be available
1802 with other signatures on the download page for the upstream
1803 source (e.g. <filename>md5</filename>,
1804 <filename>sha1</filename>, <filename>sha256</filename>,
1805 <filename>GPG</filename>, and so forth).
1806 Because the OpenEmbedded build system only deals with
1807 <filename>sha256sum</filename> and <filename>md5sum</filename>,
1808 you should verify all the signatures you find by hand.
1809 </para>
1810
1811 <para>
1812 If no <filename>SRC_URI</filename> checksums are specified
1813 when you attempt to build the recipe, the build will produce
1814 an error for each missing checksum.
1815 As part of the error message, the build system provides
1816 the checksum string corresponding to the fetched file.
1817 Once you have the correct checksums, you can copy and paste
1818 them into your recipe and then run the build again to continue.
1819 <note>
1820 As mentioned, if the upstream source provides signatures
1821 for verifying the downloaded source code, you should
1822 verify those manually before setting the checksum values
1823 in the recipe and continuing with the build.
1824 </note>
1825 </para>
1826
1827 <para>
1828 This final example is a bit more complicated and is from the
1829 <filename>meta/recipes-sato/rxvt-unicode/rxvt-unicode_9.20.bb</filename>
1830 recipe.
1831 The example's <filename>SRC_URI</filename> statement identifies
1832 multiple files as the source files for the recipe: a tarball, a
1833 patch file, a desktop file, and an icon.
1834 <literallayout class='monospaced'>
1835 SRC_URI = "http://dist.schmorp.de/rxvt-unicode/Attic/rxvt-unicode-${PV}.tar.bz2 \
1836 file://xwc.patch \
1837 file://rxvt.desktop \
1838 file://rxvt.png"
1839 </literallayout>
1840 </para>
1841
1842 <para>
1843 When you specify local files using the
1844 <filename>file://</filename> URI protocol, the build system
1845 fetches files from the local machine.
1846 The path is relative to the
1847 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESPATH'><filename>FILESPATH</filename></ulink>
1848 variable and searches specific directories in a certain order:
1849 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BP'><filename>BP</filename></ulink><filename>}</filename>,
1850 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-BPN'><filename>BPN</filename></ulink><filename>}</filename>,
1851 and <filename>files</filename>.
1852 The directories are assumed to be subdirectories of the
1853 directory in which the recipe or append file resides.
1854 For another example that specifies these types of files, see the
1855 "<link linkend='new-recipe-single-c-file-package-hello-world'>Single .c File Package (Hello World!)</link>"
1856 section.
1857 </para>
1858
1859 <para>
1860 The previous example also specifies a patch file.
1861 Patch files are files whose names end in
1862 <filename>.patch</filename> or <filename>.diff</filename>.
1863 The build system automatically applies patches as described
1864 in the
1865 "<link linkend='new-recipe-patching-code'>Patching Code</link>" section.
1866 </para>
1867 </section>
1868
1869 <section id='new-recipe-unpacking-code'>
1870 <title>Unpacking Code</title>
1871
1872 <para>
1873 During the build, the
1874 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-unpack'><filename>do_unpack</filename></ulink>
1875 task unpacks the source with
1876 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-S'><filename>S</filename></ulink><filename>}</filename>
1877 pointing to where it is unpacked.
1878 </para>
1879
1880 <para>
1881 If you are fetching your source files from an upstream source
1882 archived tarball and the tarball's internal structure matches
1883 the common convention of a top-level subdirectory named
1884 <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>,
1885 then you do not need to set <filename>S</filename>.
1886 However, if <filename>SRC_URI</filename> specifies to fetch
1887 source from an archive that does not use this convention,
1888 or from an SCM like Git or Subversion, your recipe needs to
1889 define <filename>S</filename>.
1890 </para>
1891
1892 <para>
1893 If processing your recipe using BitBake successfully unpacks
1894 the source files, you need to be sure that the directory
1895 pointed to by <filename>${S}</filename> matches the structure
1896 of the source.
1897 </para>
1898 </section>
1899
1900 <section id='new-recipe-patching-code'>
1901 <title>Patching Code</title>
1902
1903 <para>
1904 Sometimes it is necessary to patch code after it has been
1905 fetched.
1906 Any files mentioned in <filename>SRC_URI</filename> whose
1907 names end in <filename>.patch</filename> or
1908 <filename>.diff</filename> are treated as patches.
1909 The
1910 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-patch'><filename>do_patch</filename></ulink>
1911 task automatically applies these patches.
1912 </para>
1913
1914 <para>
1915 The build system should be able to apply patches with the "-p1"
1916 option (i.e. one directory level in the path will be stripped
1917 off).
1918 If your patch needs to have more directory levels stripped off,
1919 specify the number of levels using the "striplevel" option in
1920 the <filename>SRC_URI</filename> entry for the patch.
1921 Alternatively, if your patch needs to be applied in a specific
1922 subdirectory that is not specified in the patch file, use the
1923 "patchdir" option in the entry.
1924 </para>
1925
1926 <para>
1927 As with all local files referenced in
1928 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
1929 using <filename>file://</filename>, you should place
1930 patch files in a directory next to the recipe either
1931 named the same as the base name of the recipe
1932 (<ulink url='&YOCTO_DOCS_REF_URL;#var-BPN'><filename>BPN</filename></ulink>),
1933 or "files".
1934 </para>
1935 </section>
1936
1937 <section id='new-recipe-licensing'>
1938 <title>Licensing</title>
1939
1940 <para>
1941 Your recipe needs to have both the
1942 <ulink url='&YOCTO_DOCS_REF_URL;#var-LICENSE'><filename>LICENSE</filename></ulink>
1943 and
1944 <ulink url='&YOCTO_DOCS_REF_URL;#var-LIC_FILES_CHKSUM'><filename>LIC_FILES_CHKSUM</filename></ulink>
1945 variables:
1946 <itemizedlist>
1947 <listitem><para><emphasis><filename>LICENSE</filename>:</emphasis>
1948 This variable specifies the license for the software.
1949 If you do not know the license under which the software
1950 you are building is distributed, you should go to the
1951 source code and look for that information.
1952 Typical files containing this information include
1953 <filename>COPYING</filename>,
1954 <filename>LICENSE</filename>, and
1955 <filename>README</filename> files.
1956 You could also find the information near the top of
1957 a source file.
1958 For example, given a piece of software licensed under
1959 the GNU General Public License version 2, you would
1960 set <filename>LICENSE</filename> as follows:
1961 <literallayout class='monospaced'>
1962 LICENSE = "GPLv2"
1963 </literallayout></para>
1964 <para>The licenses you specify within
1965 <filename>LICENSE</filename> can have any name as long
1966 as you do not use spaces, since spaces are used as
1967 separators between license names.
1968 For standard licenses, use the names of the files in
1969 <filename>meta/files/common-licenses/</filename>
1970 or the <filename>SPDXLICENSEMAP</filename> flag names
1971 defined in <filename>meta/conf/licenses.conf</filename>.
1972 </para></listitem>
1973 <listitem><para><emphasis><filename>LIC_FILES_CHKSUM</filename>:</emphasis>
1974 The OpenEmbedded build system uses this variable to
1975 make sure the license text has not changed.
1976 If it has, the build produces an error and it affords
1977 you the chance to figure it out and correct the problem.
1978 </para>
1979 <para>You need to specify all applicable licensing
1980 files for the software.
1981 At the end of the configuration step, the build process
1982 will compare the checksums of the files to be sure
1983 the text has not changed.
1984 Any differences result in an error with the message
1985 containing the current checksum.
1986 For more explanation and examples of how to set the
1987 <filename>LIC_FILES_CHKSUM</filename> variable, see the
1988 "<ulink url='&YOCTO_DOCS_REF_URL;#usingpoky-configuring-LIC_FILES_CHKSUM'>Tracking License Changes</ulink>"
1989 section in the Yocto Project Reference Manual.</para>
1990 <para>To determine the correct checksum string, you
1991 can list the appropriate files in the
1992 <filename>LIC_FILES_CHKSUM</filename> variable with
1993 incorrect md5 strings, attempt to build the software,
1994 and then note the resulting error messages that will
1995 report the correct md5 strings.
1996 See the
1997 "<link linkend='new-recipe-fetching-code'>Fetching Code</link>"
1998 section for additional information.
1999 </para>
2000
2001 <para>
2002 Here is an example that assumes the software has a
2003 <filename>COPYING</filename> file:
2004 <literallayout class='monospaced'>
2005 LIC_FILES_CHKSUM = "file://COPYING;md5=xxx"
2006 </literallayout>
2007 When you try to build the software, the build system
2008 will produce an error and give you the correct string
2009 that you can substitute into the recipe file for a
2010 subsequent build.
2011 </para></listitem>
2012 </itemizedlist>
2013 </para>
2014
2015<!--
2016
2017 <para>
2018 For trying this out I created a new recipe named
2019 <filename>htop_1.0.2.bb</filename> and put it in
2020 <filename>poky/meta/recipes-extended/htop</filename>.
2021 There are two license type statements in my very simple
2022 recipe:
2023 <literallayout class='monospaced'>
2024 LICENSE = ""
2025
2026 LIC_FILES_CHKSUM = ""
2027
2028 SRC_URI[md5sum] = ""
2029 SRC_URI[sha256sum] = ""
2030 </literallayout>
2031 Evidently, you need to run a <filename>bitbake -c cleanall htop</filename>.
2032 Next, you delete or comment out the two <filename>SRC_URI</filename>
2033 lines at the end and then attempt to build the software with
2034 <filename>bitbake htop</filename>.
2035 Doing so causes BitBake to report some errors and and give
2036 you the actual strings you need for the last two
2037 <filename>SRC_URI</filename> lines.
2038 Prior to this, you have to dig around in the home page of the
2039 source for <filename>htop</filename> and determine that the
2040 software is released under GPLv2.
2041 You can provide that in the <filename>LICENSE</filename>
2042 statement.
2043 Now you edit your recipe to have those two strings for
2044 the <filename>SRC_URI</filename> statements:
2045 <literallayout class='monospaced'>
2046 LICENSE = "GPLv2"
2047
2048 LIC_FILES_CHKSUM = ""
2049
2050 SRC_URI = "${SOURCEFORGE_MIRROR}/htop/htop-${PV}.tar.gz"
2051 SRC_URI[md5sum] = "0d01cca8df3349c74569cefebbd9919e"
2052 SRC_URI[sha256sum] = "ee60657b044ece0df096c053060df7abf3cce3a568ab34d260049e6a37ccd8a1"
2053 </literallayout>
2054 At this point, you can build the software again using the
2055 <filename>bitbake htop</filename> command.
2056 There is just a set of errors now associated with the
2057 empty <filename>LIC_FILES_CHKSUM</filename> variable now.
2058 </para>
2059-->
2060
2061 </section>
2062
2063 <section id='new-recipe-configuring-the-recipe'>
2064 <title>Configuring the Recipe</title>
2065
2066 <para>
2067 Most software provides some means of setting build-time
2068 configuration options before compilation.
2069 Typically, setting these options is accomplished by running a
2070 configure script with some options, or by modifying a build
2071 configuration file.
2072 </para>
2073
2074 <para>
2075 A major part of build-time configuration is about checking for
2076 build-time dependencies and possibly enabling optional
2077 functionality as a result.
2078 You need to specify any build-time dependencies for the
2079 software you are building in your recipe's
2080 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>
2081 value, in terms of other recipes that satisfy those
2082 dependencies.
2083 You can often find build-time or runtime
2084 dependencies described in the software's documentation.
2085 </para>
2086
2087 <para>
2088 The following list provides configuration items of note based
2089 on how your software is built:
2090 <itemizedlist>
2091 <listitem><para><emphasis>Autotools:</emphasis>
2092 If your source files have a
2093 <filename>configure.ac</filename> file, then your
2094 software is built using Autotools.
2095 If this is the case, you just need to worry about
2096 modifying the configuration.</para>
2097 <para>When using Autotools, your recipe needs to inherit
2098 the
2099 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-autotools'><filename>autotools</filename></ulink>
2100 class and your recipe does not have to contain a
2101 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-configure'><filename>do_configure</filename></ulink>
2102 task.
2103 However, you might still want to make some adjustments.
2104 For example, you can set
2105 <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_OECONF'><filename>EXTRA_OECONF</filename></ulink>
2106 to pass any needed configure options that are specific
2107 to the recipe.</para></listitem>
2108 <listitem><para><emphasis>CMake:</emphasis>
2109 If your source files have a
2110 <filename>CMakeLists.txt</filename> file, then your
2111 software is built using CMake.
2112 If this is the case, you just need to worry about
2113 modifying the configuration.</para>
2114 <para>When you use CMake, your recipe needs to inherit
2115 the
2116 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-cmake'><filename>cmake</filename></ulink>
2117 class and your recipe does not have to contain a
2118 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-configure'><filename>do_configure</filename></ulink>
2119 task.
2120 You can make some adjustments by setting
2121 <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_OECMAKE'><filename>EXTRA_OECMAKE</filename></ulink>
2122 to pass any needed configure options that are specific
2123 to the recipe.</para></listitem>
2124 <listitem><para><emphasis>Other:</emphasis>
2125 If your source files do not have a
2126 <filename>configure.ac</filename> or
2127 <filename>CMakeLists.txt</filename> file, then your
2128 software is built using some method other than Autotools
2129 or CMake.
2130 If this is the case, you normally need to provide a
2131 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-configure'><filename>do_configure</filename></ulink>
2132 task in your recipe
2133 unless, of course, there is nothing to configure.
2134 </para>
2135 <para>Even if your software is not being built by
2136 Autotools or CMake, you still might not need to deal
2137 with any configuration issues.
2138 You need to determine if configuration is even a required step.
2139 You might need to modify a Makefile or some configuration file
2140 used for the build to specify necessary build options.
2141 Or, perhaps you might need to run a provided, custom
2142 configure script with the appropriate options.</para>
2143 <para>For the case involving a custom configure
2144 script, you would run
2145 <filename>./configure &dash;&dash;help</filename> and look for
2146 the options you need to set.</para></listitem>
2147 </itemizedlist>
2148 </para>
2149
2150 <para>
2151 Once configuration succeeds, it is always good practice to
2152 look at the <filename>log.do_configure</filename> file to
2153 ensure that the appropriate options have been enabled and no
2154 additional build-time dependencies need to be added to
2155 <filename>DEPENDS</filename>.
2156 For example, if the configure script reports that it found
2157 something not mentioned in <filename>DEPENDS</filename>, or
2158 that it did not find something that it needed for some
2159 desired optional functionality, then you would need to add
2160 those to <filename>DEPENDS</filename>.
2161 Looking at the log might also reveal items being checked for,
2162 enabled, or both that you do not want, or items not being found
2163 that are in <filename>DEPENDS</filename>, in which case
2164 you would need to look at passing extra options to the
2165 configure script as needed.
2166 For reference information on configure options specific to the
2167 software you are building, you can consult the output of the
2168 <filename>./configure &dash;&dash;help</filename> command within
2169 <filename>${S}</filename> or consult the software's upstream
2170 documentation.
2171 </para>
2172 </section>
2173
2174 <section id='new-recipe-compilation'>
2175 <title>Compilation</title>
2176
2177 <para>
2178 During a build, the <filename>do_compile</filename> task
2179 happens after source is fetched, unpacked, and configured.
2180 If the recipe passes through <filename>do_compile</filename>
2181 successfully, nothing needs to be done.
2182 </para>
2183
2184 <para>
2185 However, if the compile step fails, you need to diagnose the
2186 failure.
2187 Here are some common issues that cause failures:
2188 <itemizedlist>
2189 <listitem><para><emphasis>Parallel build failures:</emphasis>
2190 These failures manifest themselves as intermittent
2191 errors, or errors reporting that a file or directory
2192 that should be created by some other part of the build
2193 process could not be found.
2194 This type of failure can occur even if, upon inspection,
2195 the file or directory does exist after the build has
2196 failed, because that part of the build process happened
2197 in the wrong order.</para>
2198 <para>To fix the problem, you need to either satisfy
2199 the missing dependency in the Makefile or whatever
2200 script produced the Makefile, or (as a workaround)
2201 set
2202 <ulink url='&YOCTO_DOCS_REF_URL;#var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></ulink>
2203 to an empty string:
2204 <literallayout class='monospaced'>
2205 PARALLEL_MAKE = ""
2206 </literallayout></para>
2207 <para>
2208 For information on parallel Makefile issues, see the
2209 "<link linkend='debugging-parallel-make-races'>Debugging Parallel Make Races</link>"
2210 section.
2211 </para></listitem>
2212 <listitem><para><emphasis>Improper host path usage:</emphasis>
2213 This failure applies to recipes building for the target
2214 or <filename>nativesdk</filename> only.
2215 The failure occurs when the compilation process uses
2216 improper headers, libraries, or other files from the
2217 host system when cross-compiling for the target.
2218 </para>
2219 <para>To fix the problem, examine the
2220 <filename>log.do_compile</filename> file to identify
2221 the host paths being used (e.g.
2222 <filename>/usr/include</filename>,
2223 <filename>/usr/lib</filename>, and so forth) and then
2224 either add configure options, apply a patch, or do both.
2225 </para></listitem>
2226 <listitem><para><emphasis>Failure to find required
2227 libraries/headers:</emphasis>
2228 If a build-time dependency is missing because it has
2229 not been declared in
2230 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>,
2231 or because the dependency exists but the path used by
2232 the build process to find the file is incorrect and the
2233 configure step did not detect it, the compilation
2234 process could fail.
2235 For either of these failures, the compilation process
2236 notes that files could not be found.
2237 In these cases, you need to go back and add additional
2238 options to the configure script as well as possibly
2239 add additional build-time dependencies to
2240 <filename>DEPENDS</filename>.</para>
2241 <para>Occasionally, it is necessary to apply a patch
2242 to the source to ensure the correct paths are used.
2243 If you need to specify paths to find files staged
2244 into the sysroot from other recipes, use the variables
2245 that the OpenEmbedded build system provides
2246 (e.g.
2247 <filename>STAGING_BINDIR</filename>,
2248 <filename>STAGING_INCDIR</filename>,
2249 <filename>STAGING_DATADIR</filename>, and so forth).
2250<!--
2251 (e.g.
2252 <ulink url='&YOCTO_DOCS_REF_URL;#var-STAGING_BINDIR'><filename>STAGING_BINDIR</filename></ulink>,
2253 <ulink url='&YOCTO_DOCS_REF_URL;#var-STAGING_INCDIR'><filename>STAGING_INCDIR</filename></ulink>,
2254 <ulink url='&YOCTO_DOCS_REF_URL;#var-STAGING_DATADIR'><filename>STAGING_DATADIR</filename></ulink>,
2255 and so forth).
2256-->
2257 </para></listitem>
2258 </itemizedlist>
2259 </para>
2260 </section>
2261
2262 <section id='new-recipe-installing'>
2263 <title>Installing</title>
2264
2265 <para>
2266 During <filename>do_install</filename>, the task copies the
2267 built files along with their hierarchy to locations that
2268 would mirror their locations on the target device.
2269 The installation process copies files from the
2270 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-S'><filename>S</filename></ulink><filename>}</filename>,
2271 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-B'><filename>B</filename></ulink><filename>}</filename>,
2272 and
2273 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink><filename>}</filename>
2274 directories to the
2275 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-D'><filename>D</filename></ulink><filename>}</filename>
2276 directory to create the structure as it should appear on the
2277 target system.
2278 </para>
2279
2280 <para>
2281 How your software is built affects what you must do to be
2282 sure your software is installed correctly.
2283 The following list describes what you must do for installation
2284 depending on the type of build system used by the software
2285 being built:
2286 <itemizedlist>
2287 <listitem><para><emphasis>Autotools and CMake:</emphasis>
2288 If the software your recipe is building uses Autotools
2289 or CMake, the OpenEmbedded build
2290 system understands how to install the software.
2291 Consequently, you do not have to have a
2292 <filename>do_install</filename> task as part of your
2293 recipe.
2294 You just need to make sure the install portion of the
2295 build completes with no issues.
2296 However, if you wish to install additional files not
2297 already being installed by
2298 <filename>make install</filename>, you should do this
2299 using a <filename>do_install_append</filename> function
2300 using the install command as described in
2301 the "Manual" bulleted item later in this list.
2302 </para></listitem>
2303 <listitem><para><emphasis>Other (using
2304 <filename>make install</filename>):</emphasis>
2305 You need to define a
2306 <filename>do_install</filename> function in your
2307 recipe.
2308 The function should call
2309 <filename>oe_runmake install</filename> and will likely
2310 need to pass in the destination directory as well.
2311 How you pass that path is dependent on how the
2312 <filename>Makefile</filename> being run is written
2313 (e.g. <filename>DESTDIR=${D}</filename>,
2314 <filename>PREFIX=${D}</filename>,
2315 <filename>INSTALLROOT=${D}</filename>, and so forth).
2316 </para>
2317 <para>For an example recipe using
2318 <filename>make install</filename>, see the
2319 "<link linkend='new-recipe-makefile-based-package'>Makefile-Based Package</link>"
2320 section.</para></listitem>
2321 <listitem><para><emphasis>Manual:</emphasis>
2322 You need to define a
2323 <filename>do_install</filename> function in your
2324 recipe.
2325 The function must first use
2326 <filename>install -d</filename> to create the
2327 directories under
2328 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-D'><filename>D</filename></ulink><filename>}</filename>.
2329 Once the directories exist, your function can use
2330 <filename>install</filename> to manually install the
2331 built software into the directories.</para>
2332 <para>You can find more information on
2333 <filename>install</filename> at
2334 <ulink url='http://www.gnu.org/software/coreutils/manual/html_node/install-invocation.html'></ulink>.
2335 </para></listitem>
2336 </itemizedlist>
2337 </para>
2338
2339 <para>
2340 For the scenarios that do not use Autotools or
2341 CMake, you need to track the installation
2342 and diagnose and fix any issues until everything installs
2343 correctly.
2344 You need to look in the default location of
2345 <filename>${D}</filename>, which is
2346 <filename>${WORKDIR}/image</filename>, to be sure your
2347 files have been installed correctly.
2348 </para>
2349
2350 <note><title>Notes</title>
2351 <itemizedlist>
2352 <listitem><para>
2353 During the installation process, you might need to
2354 modify some of the installed files to suit the target
2355 layout.
2356 For example, you might need to replace hard-coded paths
2357 in an initscript with values of variables provided by
2358 the build system, such as replacing
2359 <filename>/usr/bin/</filename> with
2360 <filename>${bindir}</filename>.
2361 If you do perform such modifications during
2362 <filename>do_install</filename>, be sure to modify the
2363 destination file after copying rather than before
2364 copying.
2365 Modifying after copying ensures that the build system
2366 can re-execute <filename>do_install</filename> if
2367 needed.
2368 </para></listitem>
2369 <listitem><para>
2370 <filename>oe_runmake install</filename>, which can be
2371 run directly or can be run indirectly by the
2372 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-autotools'><filename>autotools</filename></ulink>
2373 and
2374 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-cmake'><filename>cmake</filename></ulink>
2375 classes, runs <filename>make install</filename> in
2376 parallel.
2377 Sometimes, a Makefile can have missing dependencies
2378 between targets that can result in race conditions.
2379 If you experience intermittent failures during
2380 <filename>do_install</filename>, you might be able to
2381 work around them by disabling parallel Makefile
2382 installs by adding the following to the recipe:
2383 <literallayout class='monospaced'>
2384 PARALLEL_MAKEINST = ""
2385 </literallayout>
2386 See
2387 <ulink url='&YOCTO_DOCS_REF_URL;#var-PARALLEL_MAKEINST'><filename>PARALLEL_MAKEINST</filename></ulink>
2388 for additional information.
2389 </para></listitem>
2390 </itemizedlist>
2391 </note>
2392 </section>
2393
2394 <section id='new-recipe-enabling-system-services'>
2395 <title>Enabling System Services</title>
2396
2397 <para>
2398 If you want to install a service, which is a process that
2399 usually starts on boot and runs in the background, then
2400 you must include some additional definitions in your recipe.
2401 </para>
2402
2403 <para>
2404 If you are adding services and the service initialization
2405 script or the service file itself is not installed, you must
2406 provide for that installation in your recipe using a
2407 <filename>do_install_append</filename> function.
2408 If your recipe already has a <filename>do_install</filename>
2409 function, update the function near its end rather than
2410 adding an additional <filename>do_install_append</filename>
2411 function.
2412 </para>
2413
2414 <para>
2415 When you create the installation for your services, you need
2416 to accomplish what is normally done by
2417 <filename>make install</filename>.
2418 In other words, make sure your installation arranges the output
2419 similar to how it is arranged on the target system.
2420 </para>
2421
2422 <para>
2423 The OpenEmbedded build system provides support for starting
2424 services two different ways:
2425 <itemizedlist>
2426 <listitem><para><emphasis>SysVinit:</emphasis>
2427 SysVinit is a system and service manager that
2428 manages the init system used to control the very basic
2429 functions of your system.
2430 The init program is the first program
2431 started by the Linux kernel when the system boots.
2432 Init then controls the startup, running and shutdown
2433 of all other programs.</para>
2434 <para>To enable a service using SysVinit, your recipe
2435 needs to inherit the
2436 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-update-rc.d'><filename>update-rc.d</filename></ulink>
2437 class.
2438 The class helps facilitate safely installing the
2439 package on the target.</para>
2440 <para>You will need to set the
2441 <ulink url='&YOCTO_DOCS_REF_URL;#var-INITSCRIPT_PACKAGES'><filename>INITSCRIPT_PACKAGES</filename></ulink>,
2442 <ulink url='&YOCTO_DOCS_REF_URL;#var-INITSCRIPT_NAME'><filename>INITSCRIPT_NAME</filename></ulink>,
2443 and
2444 <ulink url='&YOCTO_DOCS_REF_URL;#var-INITSCRIPT_PARAMS'><filename>INITSCRIPT_PARAMS</filename></ulink>
2445 variables within your recipe.</para></listitem>
2446 <listitem><para><emphasis>systemd:</emphasis>
2447 System Management Daemon (systemd) was designed to
2448 replace SysVinit and to provide
2449 enhanced management of services.
2450 For more information on systemd, see the systemd
2451 homepage at
2452 <ulink url='http://freedesktop.org/wiki/Software/systemd/'></ulink>.
2453 </para>
2454 <para>To enable a service using systemd, your recipe
2455 needs to inherit the
2456 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-systemd'><filename>systemd</filename></ulink>
2457 class.
2458 See the <filename>systemd.bbclass</filename> file
2459 located in your
2460 <link linkend='source-directory'>Source Directory</link>.
2461 section for more information.
2462 </para></listitem>
2463 </itemizedlist>
2464 </para>
2465 </section>
2466
2467 <section id='new-recipe-packaging'>
2468 <title>Packaging</title>
2469
2470 <para>
2471 Successful packaging is a combination of automated processes
2472 performed by the OpenEmbedded build system and some
2473 specific steps you need to take.
2474 The following list describes the process:
2475 <itemizedlist>
2476 <listitem><para><emphasis>Splitting Files</emphasis>:
2477 The <filename>do_package</filename> task splits the
2478 files produced by the recipe into logical components.
2479 Even software that produces a single binary might
2480 still have debug symbols, documentation, and other
2481 logical components that should be split out.
2482 The <filename>do_package</filename> task ensures
2483 that files are split up and packaged correctly.
2484 </para></listitem>
2485 <listitem><para><emphasis>Running QA Checks</emphasis>:
2486 The
2487 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-insane'><filename>insane</filename></ulink>
2488 class adds a step to
2489 the package generation process so that output quality
2490 assurance checks are generated by the OpenEmbedded
2491 build system.
2492 This step performs a range of checks to be sure the
2493 build's output is free of common problems that show
2494 up during runtime.
2495 For information on these checks, see the
2496 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-insane'><filename>insane</filename></ulink>
2497 class and the
2498 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-qa-checks'>QA Error and Warning Messages</ulink>"
2499 chapter in the Yocto Project Reference Manual.
2500 </para></listitem>
2501 <listitem><para><emphasis>Hand-Checking Your Packages</emphasis>:
2502 After you build your software, you need to be sure
2503 your packages are correct.
2504 Examine the
2505 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink><filename>}/packages-split</filename>
2506 directory and make sure files are where you expect
2507 them to be.
2508 If you discover problems, you can set
2509 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'><filename>PACKAGES</filename></ulink>,
2510 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILES'><filename>FILES</filename></ulink>,
2511 <filename>do_install(_append)</filename>, and so forth as
2512 needed.
2513 </para></listitem>
2514 <listitem><para><emphasis>Splitting an Application into Multiple Packages</emphasis>:
2515 If you need to split an application into several
2516 packages, see the
2517 "<link linkend='splitting-an-application-into-multiple-packages'>Splitting an Application into Multiple Packages</link>"
2518 section for an example.
2519 </para></listitem>
2520 <listitem><para><emphasis>Installing a Post-Installation Script</emphasis>:
2521 For an example showing how to install a
2522 post-installation script, see the
2523 "<link linkend='new-recipe-post-installation-scripts'>Post-Installation Scripts</link>"
2524 section.
2525 </para></listitem>
2526 <listitem><para><emphasis>Marking Package Architecture</emphasis>:
2527 Depending on what your recipe is building and how it
2528 is configured, it might be important to mark the
2529 packages produced as being specific to a particular
2530 machine, or to mark them as not being specific to
2531 a particular machine or architecture at all.
2532 By default, packages produced for the target are
2533 marked as being specific to the architecture of the
2534 target machine because that is usually the desired
2535 result.
2536 However, if the recipe configures the software to be
2537 built specific to the target machine (e.g. the
2538 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
2539 value is passed into the configure script or a patch
2540 is applied only for a particular machine), then you
2541 should mark the packages produced as being
2542 machine-specific by adding the following to the
2543 recipe:
2544 <literallayout class='monospaced'>
2545 PACKAGE_ARCH = "${MACHINE_ARCH}"
2546 </literallayout>
2547 On the other hand, if the recipe produces packages
2548 that do not contain anything specific to the target
2549 machine or architecture at all (e.g. recipes
2550 that simply package script files or configuration
2551 files), you should use the
2552 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-allarch'><filename>allarch</filename></ulink>
2553 class to do this for you by adding this to your
2554 recipe:
2555 <literallayout class='monospaced'>
2556 inherit allarch
2557 </literallayout>
2558 Ensuring that the package architecture is correct is
2559 not critical while you are doing the first few builds
2560 of your recipe.
2561 However, it is important in order
2562 to ensure that your recipe rebuilds (or does not
2563 rebuild) appropriately in response to changes in
2564 configuration, and to ensure that you get the
2565 appropriate packages installed on the target machine,
2566 particularly if you run separate builds for more
2567 than one target machine.
2568 </para></listitem>
2569 </itemizedlist>
2570 </para>
2571 </section>
2572
2573 <section id='properly-versioning-pre-release-recipes'>
2574 <title>Properly Versioning Pre-Release Recipes</title>
2575
2576 <para>
2577 Sometimes the name of a recipe can lead to versioning
2578 problems when the recipe is upgraded to a final release.
2579 For example, consider the
2580 <filename>irssi_0.8.16-rc1.bb</filename> recipe file in
2581 the list of example recipes in the
2582 "<link linkend='new-recipe-storing-and-naming-the-recipe'>Storing and Naming the Recipe</link>"
2583 section.
2584 This recipe is at a release candidate stage (i.e.
2585 "rc1").
2586 When the recipe is released, the recipe filename becomes
2587 <filename>irssi_0.8.16.bb</filename>.
2588 The version change from <filename>0.8.16-rc1</filename>
2589 to <filename>0.8.16</filename> is seen as a decrease by the
2590 build system and package managers, so the resulting packages
2591 will not correctly trigger an upgrade.
2592 </para>
2593
2594 <para>
2595 In order to ensure the versions compare properly, the
2596 recommended convention is to set
2597 <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>
2598 within the recipe to
2599 "<replaceable>previous_version</replaceable>+<replaceable>current_version</replaceable>".
2600 You can use an additional variable so that you can use the
2601 current version elsewhere.
2602 Here is an example:
2603 <literallayout class='monospaced'>
2604 REALPV = "0.8.16-rc1"
2605 PV = "0.8.15+${REALPV}"
2606 </literallayout>
2607 </para>
2608 </section>
2609
2610 <section id='new-recipe-post-installation-scripts'>
2611 <title>Post-Installation Scripts</title>
2612
2613 <para>
2614 Post-installation scripts run immediately after installing
2615 a package on the target or during image creation when a
2616 package is included in an image.
2617 To add a post-installation script to a package, add a
2618 <filename>pkg_postinst_PACKAGENAME()</filename> function to
2619 the recipe file (<filename>.bb</filename>) and replace
2620 <filename>PACKAGENAME</filename> with the name of the package
2621 you want to attach to the <filename>postinst</filename>
2622 script.
2623 To apply the post-installation script to the main package
2624 for the recipe, which is usually what is required, specify
2625 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink><filename>}</filename>
2626 in place of <filename>PACKAGENAME</filename>.
2627 </para>
2628
2629 <para>
2630 A post-installation function has the following structure:
2631 <literallayout class='monospaced'>
2632 pkg_postinst_PACKAGENAME() {
2633 #!/bin/sh -e
2634 # Commands to carry out
2635 }
2636 </literallayout>
2637 </para>
2638
2639 <para>
2640 The script defined in the post-installation function is
2641 called when the root filesystem is created.
2642 If the script succeeds, the package is marked as installed.
2643 If the script fails, the package is marked as unpacked and
2644 the script is executed when the image boots again.
2645 </para>
2646
2647 <para>
2648 Sometimes it is necessary for the execution of a
2649 post-installation script to be delayed until the first boot.
2650 For example, the script might need to be executed on the
2651 device itself.
2652 To delay script execution until boot time, use the following
2653 structure in the post-installation script:
2654 <literallayout class='monospaced'>
2655 pkg_postinst_PACKAGENAME() {
2656 #!/bin/sh -e
2657 if [ x"$D" = "x" ]; then
2658 # Actions to carry out on the device go here
2659 else
2660 exit 1
2661 fi
2662 }
2663 </literallayout>
2664 </para>
2665
2666 <para>
2667 The previous example delays execution until the image boots
2668 again because the environment variable <filename>D</filename>
2669 points to the directory containing the image when
2670 the root filesystem is created at build time but is unset
2671 when executed on the first boot.
2672 </para>
2673
2674 <note>
2675 Equivalent support for pre-install, pre-uninstall, and
2676 post-uninstall scripts exist by way of
2677 <filename>pkg_preinst</filename>,
2678 <filename>pkg_prerm</filename>, and
2679 <filename>pkg_postrm</filename>, respectively.
2680 These scrips work in exactly the same way as does
2681 <filename>pkg_postinst</filename> with the exception that they
2682 run at different times.
2683 Also, because of when they run, they are not applicable to
2684 being run at image creation time like
2685 <filename>pkg_postinst</filename>.
2686 </note>
2687 </section>
2688
2689 <section id='new-recipe-testing'>
2690 <title>Testing</title>
2691
2692 <para>
2693 The final step for completing your recipe is to be sure that
2694 the software you built runs correctly.
2695 To accomplish runtime testing, add the build's output
2696 packages to your image and test them on the target.
2697 </para>
2698
2699 <para>
2700 For information on how to customize your image by adding
2701 specific packages, see the
2702 "<link linkend='usingpoky-extend-customimage'>Customizing Images</link>"
2703 section.
2704 </para>
2705 </section>
2706
2707 <section id='new-recipe-testing-examples'>
2708 <title>Examples</title>
2709
2710 <para>
2711 To help summarize how to write a recipe, this section provides
2712 some examples given various scenarios:
2713 <itemizedlist>
2714 <listitem><para>Recipes that use local files</para></listitem>
2715 <listitem><para>Using an Autotooled package</para></listitem>
2716 <listitem><para>Using a Makefile-based package</para></listitem>
2717 <listitem><para>Splitting an application into multiple packages</para></listitem>
2718 <listitem><para>Adding binaries to an image</para></listitem>
2719 </itemizedlist>
2720 </para>
2721
2722 <section id='new-recipe-single-c-file-package-hello-world'>
2723 <title>Single .c File Package (Hello World!)</title>
2724
2725 <para>
2726 Building an application from a single file that is stored
2727 locally (e.g. under <filename>files</filename>) requires
2728 a recipe that has the file listed in the
2729 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename>
2730 variable.
2731 Additionally, you need to manually write the
2732 <filename>do_compile</filename> and
2733 <filename>do_install</filename> tasks.
2734 The <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-S'>S</ulink></filename>
2735 variable defines the directory containing the source code,
2736 which is set to
2737 <ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink>
2738 in this case - the directory BitBake uses for the build.
2739 <literallayout class='monospaced'>
2740 SUMMARY = "Simple helloworld application"
2741 SECTION = "examples"
2742 LICENSE = "MIT"
2743 LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
2744
2745 SRC_URI = "file://helloworld.c"
2746
2747 S = "${WORKDIR}"
2748
2749 do_compile() {
2750 ${CC} helloworld.c -o helloworld
2751 }
2752
2753 do_install() {
2754 install -d ${D}${bindir}
2755 install -m 0755 helloworld ${D}${bindir}
2756 }
2757 </literallayout>
2758 </para>
2759
2760 <para>
2761 By default, the <filename>helloworld</filename>,
2762 <filename>helloworld-dbg</filename>, and
2763 <filename>helloworld-dev</filename> packages are built.
2764 For information on how to customize the packaging process,
2765 see the
2766 "<link linkend='splitting-an-application-into-multiple-packages'>Splitting an Application into Multiple Packages</link>"
2767 section.
2768 </para>
2769 </section>
2770
2771 <section id='new-recipe-autotooled-package'>
2772 <title>Autotooled Package</title>
2773 <para>
2774 Applications that use Autotools such as <filename>autoconf</filename> and
2775 <filename>automake</filename> require a recipe that has a source archive listed in
2776 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename> and
2777 also inherit the
2778 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-autotools'><filename>autotools</filename></ulink>
2779 class, which contains the definitions of all the steps
2780 needed to build an Autotool-based application.
2781 The result of the build is automatically packaged.
2782 And, if the application uses NLS for localization, packages with local information are
2783 generated (one package per language).
2784 Following is one example: (<filename>hello_2.3.bb</filename>)
2785 <literallayout class='monospaced'>
2786 SUMMARY = "GNU Helloworld application"
2787 SECTION = "examples"
2788 LICENSE = "GPLv2+"
2789 LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
2790
2791 SRC_URI = "${GNU_MIRROR}/hello/hello-${PV}.tar.gz"
2792
2793 inherit autotools gettext
2794 </literallayout>
2795 </para>
2796
2797 <para>
2798 The variable
2799 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LIC_FILES_CHKSUM'>LIC_FILES_CHKSUM</ulink></filename>
2800 is used to track source license changes as described in the
2801 "<ulink url='&YOCTO_DOCS_REF_URL;#usingpoky-configuring-LIC_FILES_CHKSUM'>Tracking License Changes</ulink>" section.
2802 You can quickly create Autotool-based recipes in a manner similar to the previous example.
2803 </para>
2804 </section>
2805
2806 <section id='new-recipe-makefile-based-package'>
2807 <title>Makefile-Based Package</title>
2808
2809 <para>
2810 Applications that use GNU <filename>make</filename> also require a recipe that has
2811 the source archive listed in
2812 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename>.
2813 You do not need to add a <filename>do_compile</filename> step since by default BitBake
2814 starts the <filename>make</filename> command to compile the application.
2815 If you need additional <filename>make</filename> options, you should store them in the
2816 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_OEMAKE'>EXTRA_OEMAKE</ulink></filename>
2817 variable.
2818 BitBake passes these options into the GNU <filename>make</filename> invocation.
2819 Note that a <filename>do_install</filename> task is still required.
2820 Otherwise, BitBake runs an empty <filename>do_install</filename> task by default.
2821 </para>
2822
2823 <para>
2824 Some applications might require extra parameters to be passed to the compiler.
2825 For example, the application might need an additional header path.
2826 You can accomplish this by adding to the
2827 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-CFLAGS'>CFLAGS</ulink></filename> variable.
2828 The following example shows this:
2829 <literallayout class='monospaced'>
2830 CFLAGS_prepend = "-I ${S}/include "
2831 </literallayout>
2832 </para>
2833
2834 <para>
2835 In the following example, <filename>mtd-utils</filename> is a makefile-based package:
2836 <literallayout class='monospaced'>
2837 SUMMARY = "Tools for managing memory technology devices"
2838 SECTION = "base"
2839 DEPENDS = "zlib lzo e2fsprogs util-linux"
2840 HOMEPAGE = "http://www.linux-mtd.infradead.org/"
2841 LICENSE = "GPLv2+"
2842 LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
2843 file://include/common.h;beginline=1;endline=17;md5=ba05b07912a44ea2bf81ce409380049c"
2844
2845 # Use the latest version at 26 Oct, 2013
2846 SRCREV = "9f107132a6a073cce37434ca9cda6917dd8d866b"
2847 SRC_URI = "git://git.infradead.org/mtd-utils.git \
2848 file://add-exclusion-to-mkfs-jffs2-git-2.patch \
2849 "
2850
2851 PV = "1.5.1+git${SRCPV}"
2852
2853 S = "${WORKDIR}/git/"
2854
2855 EXTRA_OEMAKE = "'CC=${CC}' 'RANLIB=${RANLIB}' 'AR=${AR}' 'CFLAGS=${CFLAGS} -I${S}/include -DWITHOUT_XATTR' 'BUILDDIR=${S}'"
2856
2857 do_install () {
2858 oe_runmake install DESTDIR=${D} SBINDIR=${sbindir} MANDIR=${mandir} INCLUDEDIR=${includedir}
2859 }
2860
2861 PACKAGES =+ "mtd-utils-jffs2 mtd-utils-ubifs mtd-utils-misc"
2862
2863 FILES_mtd-utils-jffs2 = "${sbindir}/mkfs.jffs2 ${sbindir}/jffs2dump ${sbindir}/jffs2reader ${sbindir}/sumtool"
2864 FILES_mtd-utils-ubifs = "${sbindir}/mkfs.ubifs ${sbindir}/ubi*"
2865 FILES_mtd-utils-misc = "${sbindir}/nftl* ${sbindir}/ftl* ${sbindir}/rfd* ${sbindir}/doc* ${sbindir}/serve_image ${sbindir}/recv_image"
2866
2867 PARALLEL_MAKE = ""
2868
2869 BBCLASSEXTEND = "native"
2870 </literallayout>
2871 </para>
2872 </section>
2873
2874 <section id='splitting-an-application-into-multiple-packages'>
2875 <title>Splitting an Application into Multiple Packages</title>
2876
2877 <para>
2878 You can use the variables
2879 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'>PACKAGES</ulink></filename> and
2880 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-FILES'>FILES</ulink></filename>
2881 to split an application into multiple packages.
2882 </para>
2883
2884 <para>
2885 Following is an example that uses the <filename>libxpm</filename> recipe.
2886 By default, this recipe generates a single package that contains the library along
2887 with a few binaries.
2888 You can modify the recipe to split the binaries into separate packages:
2889 <literallayout class='monospaced'>
2890 require xorg-lib-common.inc
2891
2892 SUMMARY = "X11 Pixmap library"
2893 LICENSE = "X-BSD"
2894 LIC_FILES_CHKSUM = "file://COPYING;md5=3e07763d16963c3af12db271a31abaa5"
2895 DEPENDS += "libxext libsm libxt"
2896 PR = "r3"
2897 PE = "1"
2898
2899 XORG_PN = "libXpm"
2900
2901 PACKAGES =+ "sxpm cxpm"
2902 FILES_cxpm = "${bindir}/cxpm"
2903 FILES_sxpm = "${bindir}/sxpm"
2904 </literallayout>
2905 </para>
2906
2907 <para>
2908 In the previous example, we want to ship the <filename>sxpm</filename>
2909 and <filename>cxpm</filename> binaries in separate packages.
2910 Since <filename>bindir</filename> would be packaged into the main
2911 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'>PN</ulink></filename>
2912 package by default, we prepend the <filename>PACKAGES</filename>
2913 variable so additional package names are added to the start of list.
2914 This results in the extra <filename>FILES_*</filename>
2915 variables then containing information that define which files and
2916 directories go into which packages.
2917 Files included by earlier packages are skipped by latter packages.
2918 Thus, the main <filename>PN</filename> package
2919 does not include the above listed files.
2920 </para>
2921 </section>
2922
2923 <section id='packaging-externally-produced-binaries'>
2924 <title>Packaging Externally Produced Binaries</title>
2925
2926 <para>
2927 Sometimes, you need to add pre-compiled binaries to an
2928 image.
2929 For example, suppose that binaries for proprietary code
2930 exist, which are created by a particular division of a
2931 company.
2932 Your part of the company needs to use those binaries as
2933 part of an image that you are building using the
2934 OpenEmbedded build system.
2935 Since you only have the binaries and not the source code,
2936 you cannot use a typical recipe that expects to fetch the
2937 source specified in
2938 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
2939 and then compile it.
2940 </para>
2941
2942 <para>
2943 One method is to package the binaries and then install them
2944 as part of the image.
2945 Generally, it is not a good idea to package binaries
2946 since, among other things, it can hinder the ability to
2947 reproduce builds and could lead to compatibility problems
2948 with ABI in the future.
2949 However, sometimes you have no choice.
2950 </para>
2951
2952 <para>
2953 The easiest solution is to create a recipe that uses
2954 the
2955 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-bin-package'><filename>bin_package</filename></ulink>
2956 class and to be sure that you are using default locations
2957 for build artifacts.
2958 In most cases, the <filename>bin_package</filename> class
2959 handles "skipping" the configure and compile steps as well
2960 as sets things up to grab packages from the appropriate
2961 area.
2962 In particular, this class sets <filename>noexec</filename>
2963 on both the
2964 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-configure'><filename>do_configure</filename></ulink>
2965 and
2966 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-compile'><filename>do_compile</filename></ulink>
2967 tasks, sets
2968 <filename>FILES_${PN}</filename> to "/" so that it picks
2969 up all files, and sets up a
2970 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-install'><filename>do_install</filename></ulink>
2971 task, which effectively copies all files from
2972 <filename>${S}</filename> to <filename>${D}</filename>.
2973 The <filename>bin_package</filename> class works well when
2974 the files extracted into <filename>${S}</filename> are
2975 already laid out in the way they should be laid out
2976 on the target.
2977 For more information on these variables, see the
2978 <ulink url='&YOCTO_DOCS_REF_URL;#var-FILES'><filename>FILES</filename></ulink>,
2979 <ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink>,
2980 <ulink url='&YOCTO_DOCS_REF_URL;#var-S'><filename>S</filename></ulink>,
2981 and
2982 <ulink url='&YOCTO_DOCS_REF_URL;#var-D'><filename>D</filename></ulink>
2983 variables in the Yocto Project Reference Manual's variable
2984 glossary.
2985 </para>
2986
2987 <para>
2988 If you can't use the <filename>bin_package</filename>
2989 class, you need to be sure you are doing the following:
2990 <itemizedlist>
2991 <listitem><para>Create a recipe where the
2992 <filename>do_configure</filename> and
2993 <filename>do_compile</filename> tasks do nothing:
2994 <literallayout class='monospaced'>
2995 do_configure[noexec] = "1"
2996 do_compile[noexec] = "1"
2997 </literallayout>
2998 Alternatively, you can make these tasks an empty
2999 function.
3000 </para></listitem>
3001 <listitem><para>Make sure your
3002 <filename>do_install</filename> task installs the
3003 binaries appropriately.
3004 </para></listitem>
3005 <listitem><para>Ensure that you set up
3006 <filename>FILES</filename> (usually
3007 <filename>FILES_${PN}</filename>) to point to the
3008 files you have installed, which of course depends
3009 on where you have installed them and whether
3010 those files are in different locations than the
3011 defaults.
3012 </para></listitem>
3013 </itemizedlist>
3014 </para>
3015 </section>
3016 </section>
3017 </section>
3018
3019 <section id="platdev-newmachine">
3020 <title>Adding a New Machine</title>
3021
3022 <para>
3023 Adding a new machine to the Yocto Project is a straightforward
3024 process.
3025 This section describes how to add machines that are similar
3026 to those that the Yocto Project already supports.
3027 <note>
3028 Although well within the capabilities of the Yocto Project,
3029 adding a totally new architecture might require
3030 changes to <filename>gcc/glibc</filename> and to the site
3031 information, which is beyond the scope of this manual.
3032 </note>
3033 </para>
3034
3035 <para>
3036 For a complete example that shows how to add a new machine,
3037 see the
3038 "<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>"
3039 section in the Yocto Project Board Support Package (BSP) Developer's Guide.
3040 </para>
3041
3042 <section id="platdev-newmachine-conffile">
3043 <title>Adding the Machine Configuration File</title>
3044
3045 <para>
3046 To add a new machine, you need to add a new machine
3047 configuration file to the layer's
3048 <filename>conf/machine</filename> directory.
3049 This configuration file provides details about the device
3050 you are adding.
3051 </para>
3052
3053 <para>
3054 The OpenEmbedded build system uses the root name of the
3055 machine configuration file to reference the new machine.
3056 For example, given a machine configuration file named
3057 <filename>crownbay.conf</filename>, the build system
3058 recognizes the machine as "crownbay".
3059 </para>
3060
3061 <para>
3062 The most important variables you must set in your machine
3063 configuration file or include from a lower-level configuration
3064 file are as follows:
3065 <itemizedlist>
3066 <listitem><para><filename><ulink url='&YOCTO_DOCS_REF_URL;#var-TARGET_ARCH'>TARGET_ARCH</ulink></filename>
3067 (e.g. "arm")</para></listitem>
3068 <listitem><para><filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PREFERRED_PROVIDER'>PREFERRED_PROVIDER</ulink>_virtual/kernel</filename>
3069 </para></listitem>
3070 <listitem><para><filename><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_FEATURES'>MACHINE_FEATURES</ulink></filename>
3071 (e.g. "apm screen wifi")</para></listitem>
3072 </itemizedlist>
3073 </para>
3074
3075 <para>
3076 You might also need these variables:
3077 <itemizedlist>
3078 <listitem><para><filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SERIAL_CONSOLES'>SERIAL_CONSOLES</ulink></filename>
3079 (e.g. "115200;ttyS0 115200;ttyS1")</para></listitem>
3080 <listitem><para><filename><ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_IMAGETYPE'>KERNEL_IMAGETYPE</ulink></filename>
3081 (e.g. "zImage")</para></listitem>
3082 <listitem><para><filename><ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FSTYPES'>IMAGE_FSTYPES</ulink></filename>
3083 (e.g. "tar.gz jffs2")</para></listitem>
3084 </itemizedlist>
3085 </para>
3086
3087 <para>
3088 You can find full details on these variables in the reference
3089 section.
3090 You can leverage existing machine <filename>.conf</filename>
3091 files from <filename>meta-yocto-bsp/conf/machine/</filename>.
3092 </para>
3093 </section>
3094
3095 <section id="platdev-newmachine-kernel">
3096 <title>Adding a Kernel for the Machine</title>
3097
3098 <para>
3099 The OpenEmbedded build system needs to be able to build a kernel
3100 for the machine.
3101 You need to either create a new kernel recipe for this machine,
3102 or extend an existing kernel recipe.
3103 You can find several kernel recipe examples in the
3104 Source Directory at
3105 <filename>meta/recipes-kernel/linux</filename>
3106 that you can use as references.
3107 </para>
3108
3109 <para>
3110 If you are creating a new kernel recipe, normal recipe-writing
3111 rules apply for setting up a
3112 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename>.
3113 Thus, you need to specify any necessary patches and set
3114 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-S'>S</ulink></filename>
3115 to point at the source code.
3116 You need to create a <filename>do_configure</filename> task that
3117 configures the unpacked kernel with a
3118 <filename>defconfig</filename> file.
3119 You can do this by using a <filename>make defconfig</filename>
3120 command or, more commonly, by copying in a suitable
3121 <filename>defconfig</filename> file and then running
3122 <filename>make oldconfig</filename>.
3123 By making use of <filename>inherit kernel</filename> and
3124 potentially some of the <filename>linux-*.inc</filename> files,
3125 most other functionality is centralized and the defaults of the
3126 class normally work well.
3127 </para>
3128
3129 <para>
3130 If you are extending an existing kernel recipe, it is usually
3131 a matter of adding a suitable <filename>defconfig</filename>
3132 file.
3133 The file needs to be added into a location similar to
3134 <filename>defconfig</filename> files used for other machines
3135 in a given kernel recipe.
3136 A possible way to do this is by listing the file in the
3137 <filename>SRC_URI</filename> and adding the machine to the
3138 expression in
3139 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-COMPATIBLE_MACHINE'>COMPATIBLE_MACHINE</ulink></filename>:
3140 <literallayout class='monospaced'>
3141 COMPATIBLE_MACHINE = '(qemux86|qemumips)'
3142 </literallayout>
3143 </para>
3144 </section>
3145
3146 <section id="platdev-newmachine-formfactor">
3147 <title>Adding a Formfactor Configuration File</title>
3148
3149 <para>
3150 A formfactor configuration file provides information about the
3151 target hardware for which the image is being built and information that
3152 the build system cannot obtain from other sources such as the kernel.
3153 Some examples of information contained in a formfactor configuration file include
3154 framebuffer orientation, whether or not the system has a keyboard,
3155 the positioning of the keyboard in relation to the screen, and
3156 the screen resolution.
3157 </para>
3158
3159 <para>
3160 The build system uses reasonable defaults in most cases.
3161 However, if customization is
3162 necessary, you need to create a <filename>machconfig</filename> file
3163 in the <filename>meta/recipes-bsp/formfactor/files</filename>
3164 directory.
3165 This directory contains directories for specific machines such as
3166 <filename>qemuarm</filename> and <filename>qemux86</filename>.
3167 For information about the settings available and the defaults, see the
3168 <filename>meta/recipes-bsp/formfactor/files/config</filename> file found in the
3169 same area.
3170 </para>
3171
3172 <para>
3173 Following is an example for "qemuarm" machine:
3174 <literallayout class='monospaced'>
3175 HAVE_TOUCHSCREEN=1
3176 HAVE_KEYBOARD=1
3177
3178 DISPLAY_CAN_ROTATE=0
3179 DISPLAY_ORIENTATION=0
3180 #DISPLAY_WIDTH_PIXELS=640
3181 #DISPLAY_HEIGHT_PIXELS=480
3182 #DISPLAY_BPP=16
3183 DISPLAY_DPI=150
3184 DISPLAY_SUBPIXEL_ORDER=vrgb
3185 </literallayout>
3186 </para>
3187 </section>
3188 </section>
3189
3190 <section id="platdev-working-with-libraries">
3191 <title>Working With Libraries</title>
3192
3193 <para>
3194 Libraries are an integral part of your system.
3195 This section describes some common practices you might find
3196 helpful when working with libraries to build your system:
3197 <itemizedlist>
3198 <listitem><para><link linkend='including-static-library-files'>How to include static library files</link>
3199 </para></listitem>
3200 <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>
3201 </para></listitem>
3202 <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>
3203 </para></listitem>
3204 </itemizedlist>
3205 </para>
3206
3207 <section id='including-static-library-files'>
3208 <title>Including Static Library Files</title>
3209
3210 <para>
3211 If you are building a library and the library offers static linking, you can control
3212 which static library files (<filename>*.a</filename> files) get included in the
3213 built library.
3214 </para>
3215
3216 <para>
3217 The <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'><filename>PACKAGES</filename></ulink>
3218 and <ulink url='&YOCTO_DOCS_REF_URL;#var-FILES'><filename>FILES_*</filename></ulink>
3219 variables in the
3220 <filename>meta/conf/bitbake.conf</filename> configuration file define how files installed
3221 by the <filename>do_install</filename> task are packaged.
3222 By default, the <filename>PACKAGES</filename> variable includes
3223 <filename>${PN}-staticdev</filename>, which represents all static library files.
3224 <note>
3225 Some previously released versions of the Yocto Project
3226 defined the static library files through
3227 <filename>${PN}-dev</filename>.
3228 </note>
3229 Following is part of the BitBake configuration file, where
3230 you can see how the static library files are defined:
3231 <literallayout class='monospaced'>
3232 PACKAGE_BEFORE_PN ?= ""
3233 PACKAGES = "${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN}"
3234 PACKAGES_DYNAMIC = "^${PN}-locale-.*"
3235 FILES = ""
3236
3237 FILES_${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*${SOLIBS} \
3238 ${sysconfdir} ${sharedstatedir} ${localstatedir} \
3239 ${base_bindir}/* ${base_sbindir}/* \
3240 ${base_libdir}/*${SOLIBS} \
3241 ${base_prefix}/lib/udev/rules.d ${prefix}/lib/udev/rules.d \
3242 ${datadir}/${BPN} ${libdir}/${BPN}/* \
3243 ${datadir}/pixmaps ${datadir}/applications \
3244 ${datadir}/idl ${datadir}/omf ${datadir}/sounds \
3245 ${libdir}/bonobo/servers"
3246
3247 FILES_${PN}-bin = "${bindir}/* ${sbindir}/*"
3248
3249 FILES_${PN}-doc = "${docdir} ${mandir} ${infodir} ${datadir}/gtk-doc \
3250 ${datadir}/gnome/help"
3251 SECTION_${PN}-doc = "doc"
3252
3253 FILES_SOLIBSDEV ?= "${base_libdir}/lib*${SOLIBSDEV} ${libdir}/lib*${SOLIBSDEV}"
3254 FILES_${PN}-dev = "${includedir} ${FILES_SOLIBSDEV} ${libdir}/*.la \
3255 ${libdir}/*.o ${libdir}/pkgconfig ${datadir}/pkgconfig \
3256 ${datadir}/aclocal ${base_libdir}/*.o \
3257 ${libdir}/${BPN}/*.la ${base_libdir}/*.la"
3258 SECTION_${PN}-dev = "devel"
3259 ALLOW_EMPTY_${PN}-dev = "1"
3260 RDEPENDS_${PN}-dev = "${PN} (= ${EXTENDPKGV})"
3261
3262 FILES_${PN}-staticdev = "${libdir}/*.a ${base_libdir}/*.a ${libdir}/${BPN}/*.a"
3263 SECTION_${PN}-staticdev = "devel"
3264 RDEPENDS_${PN}-staticdev = "${PN}-dev (= ${EXTENDPKGV})"
3265 </literallayout>
3266 </para>
3267 </section>
3268
3269 <section id="combining-multiple-versions-library-files-into-one-image">
3270 <title>Combining Multiple Versions of Library Files into One Image</title>
3271
3272 <para>
3273 The build system offers the ability to build libraries with different
3274 target optimizations or architecture formats and combine these together
3275 into one system image.
3276 You can link different binaries in the image
3277 against the different libraries as needed for specific use cases.
3278 This feature is called "Multilib."
3279 </para>
3280
3281 <para>
3282 An example would be where you have most of a system compiled in 32-bit
3283 mode using 32-bit libraries, but you have something large, like a database
3284 engine, that needs to be a 64-bit application and uses 64-bit libraries.
3285 Multilib allows you to get the best of both 32-bit and 64-bit libraries.
3286 </para>
3287
3288 <para>
3289 While the Multilib feature is most commonly used for 32 and 64-bit differences,
3290 the approach the build system uses facilitates different target optimizations.
3291 You could compile some binaries to use one set of libraries and other binaries
3292 to use a different set of libraries.
3293 The libraries could differ in architecture, compiler options, or other
3294 optimizations.
3295 </para>
3296
3297 <para>
3298 This section overviews the Multilib process only.
3299 For more details on how to implement Multilib, see the
3300 <ulink url='&YOCTO_WIKI_URL;/wiki/Multilib'>Multilib</ulink> wiki
3301 page.
3302 </para>
3303
3304 <para>
3305 Aside from this wiki page, several examples exist in the
3306 <filename>meta-skeleton</filename> layer found in the
3307 <link linkend='source-directory'>Source Directory</link>:
3308 <itemizedlist>
3309 <listitem><para><filename>conf/multilib-example.conf</filename>
3310 configuration file</para></listitem>
3311 <listitem><para><filename>conf/multilib-example2.conf</filename>
3312 configuration file</para></listitem>
3313 <listitem><para><filename>recipes-multilib/images/core-image-multilib-example.bb</filename>
3314 recipe</para></listitem>
3315 </itemizedlist>
3316 </para>
3317
3318 <section id='preparing-to-use-multilib'>
3319 <title>Preparing to Use Multilib</title>
3320
3321 <para>
3322 User-specific requirements drive the Multilib feature.
3323 Consequently, there is no one "out-of-the-box" configuration that likely
3324 exists to meet your needs.
3325 </para>
3326
3327 <para>
3328 In order to enable Multilib, you first need to ensure your recipe is
3329 extended to support multiple libraries.
3330 Many standard recipes are already extended and support multiple libraries.
3331 You can check in the <filename>meta/conf/multilib.conf</filename>
3332 configuration file in the
3333 <link linkend='source-directory'>Source Directory</link> to see how this is
3334 done using the
3335 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBCLASSEXTEND'><filename>BBCLASSEXTEND</filename></ulink>
3336 variable.
3337 Eventually, all recipes will be covered and this list will
3338 not be needed.
3339 </para>
3340
3341 <para>
3342 For the most part, the Multilib class extension works automatically to
3343 extend the package name from <filename>${PN}</filename> to
3344 <filename>${MLPREFIX}${PN}</filename>, where <filename>MLPREFIX</filename>
3345 is the particular multilib (e.g. "lib32-" or "lib64-").
3346 Standard variables such as
3347 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>,
3348 <ulink url='&YOCTO_DOCS_REF_URL;#var-RDEPENDS'><filename>RDEPENDS</filename></ulink>,
3349 <ulink url='&YOCTO_DOCS_REF_URL;#var-RPROVIDES'><filename>RPROVIDES</filename></ulink>,
3350 <ulink url='&YOCTO_DOCS_REF_URL;#var-RRECOMMENDS'><filename>RRECOMMENDS</filename></ulink>,
3351 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'><filename>PACKAGES</filename></ulink>, and
3352 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES_DYNAMIC'><filename>PACKAGES_DYNAMIC</filename></ulink>
3353 are automatically extended by the system.
3354 If you are extending any manual code in the recipe, you can use the
3355 <filename>${MLPREFIX}</filename> variable to ensure those names are extended
3356 correctly.
3357 This automatic extension code resides in <filename>multilib.bbclass</filename>.
3358 </para>
3359 </section>
3360
3361 <section id='using-multilib'>
3362 <title>Using Multilib</title>
3363
3364 <para>
3365 After you have set up the recipes, you need to define the actual
3366 combination of multiple libraries you want to build.
3367 You accomplish this through your <filename>local.conf</filename>
3368 configuration file in the
3369 <link linkend='build-directory'>Build Directory</link>.
3370 An example configuration would be as follows:
3371 <literallayout class='monospaced'>
3372 MACHINE = "qemux86-64"
3373 require conf/multilib.conf
3374 MULTILIBS = "multilib:lib32"
3375 DEFAULTTUNE_virtclass-multilib-lib32 = "x86"
3376 IMAGE_INSTALL = "lib32-connman"
3377 </literallayout>
3378 This example enables an
3379 additional library named <filename>lib32</filename> alongside the
3380 normal target packages.
3381 When combining these "lib32" alternatives, the example uses "x86" for tuning.
3382 For information on this particular tuning, see
3383 <filename>meta/conf/machine/include/ia32/arch-ia32.inc</filename>.
3384 </para>
3385
3386 <para>
3387 The example then includes <filename>lib32-connman</filename>
3388 in all the images, which illustrates one method of including a
3389 multiple library dependency.
3390 You can use a normal image build to include this dependency,
3391 for example:
3392 <literallayout class='monospaced'>
3393 $ bitbake core-image-sato
3394 </literallayout>
3395 You can also build Multilib packages specifically with a command like this:
3396 <literallayout class='monospaced'>
3397 $ bitbake lib32-connman
3398 </literallayout>
3399 </para>
3400 </section>
3401
3402 <section id='additional-implementation-details'>
3403 <title>Additional Implementation Details</title>
3404
3405 <para>
3406 Different packaging systems have different levels of native Multilib
3407 support.
3408 For the RPM Package Management System, the following implementation details
3409 exist:
3410 <itemizedlist>
3411 <listitem><para>A unique architecture is defined for the Multilib packages,
3412 along with creating a unique deploy folder under
3413 <filename>tmp/deploy/rpm</filename> in the
3414 <link linkend='build-directory'>Build Directory</link>.
3415 For example, consider <filename>lib32</filename> in a
3416 <filename>qemux86-64</filename> image.
3417 The possible architectures in the system are "all", "qemux86_64",
3418 "lib32_qemux86_64", and "lib32_x86".</para></listitem>
3419 <listitem><para>The <filename>${MLPREFIX}</filename> variable is stripped from
3420 <filename>${PN}</filename> during RPM packaging.
3421 The naming for a normal RPM package and a Multilib RPM package in a
3422 <filename>qemux86-64</filename> system resolves to something similar to
3423 <filename>bash-4.1-r2.x86_64.rpm</filename> and
3424 <filename>bash-4.1.r2.lib32_x86.rpm</filename>, respectively.
3425 </para></listitem>
3426 <listitem><para>When installing a Multilib image, the RPM backend first
3427 installs the base image and then installs the Multilib libraries.
3428 </para></listitem>
3429 <listitem><para>The build system relies on RPM to resolve the identical files in the
3430 two (or more) Multilib packages.</para></listitem>
3431 </itemizedlist>
3432 </para>
3433
3434 <para>
3435 For the IPK Package Management System, the following implementation details exist:
3436 <itemizedlist>
3437 <listitem><para>The <filename>${MLPREFIX}</filename> is not stripped from
3438 <filename>${PN}</filename> during IPK packaging.
3439 The naming for a normal RPM package and a Multilib IPK package in a
3440 <filename>qemux86-64</filename> system resolves to something like
3441 <filename>bash_4.1-r2.x86_64.ipk</filename> and
3442 <filename>lib32-bash_4.1-rw_x86.ipk</filename>, respectively.
3443 </para></listitem>
3444 <listitem><para>The IPK deploy folder is not modified with
3445 <filename>${MLPREFIX}</filename> because packages with and without
3446 the Multilib feature can exist in the same folder due to the
3447 <filename>${PN}</filename> differences.</para></listitem>
3448 <listitem><para>IPK defines a sanity check for Multilib installation
3449 using certain rules for file comparison, overridden, etc.
3450 </para></listitem>
3451 </itemizedlist>
3452 </para>
3453 </section>
3454 </section>
3455
3456 <section id='installing-multiple-versions-of-the-same-library'>
3457 <title>Installing Multiple Versions of the Same Library</title>
3458
3459 <para>
3460 Situations can exist where you need to install and use
3461 multiple versions of the same library on the same system
3462 at the same time.
3463 These situations almost always exist when a library API
3464 changes and you have multiple pieces of software that
3465 depend on the separate versions of the library.
3466 To accommodate these situations, you can install multiple
3467 versions of the same library in parallel on the same system.
3468 </para>
3469
3470 <para>
3471 The process is straightforward as long as the libraries use
3472 proper versioning.
3473 With properly versioned libraries, all you need to do to
3474 individually specify the libraries is create separate,
3475 appropriately named recipes where the
3476 <ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink> part of the
3477 name includes a portion that differentiates each library version
3478 (e.g.the major part of the version number).
3479 Thus, instead of having a single recipe that loads one version
3480 of a library (e.g. <filename>clutter</filename>), you provide
3481 multiple recipes that result in different versions
3482 of the libraries you want.
3483 As an example, the following two recipes would allow the
3484 two separate versions of the <filename>clutter</filename>
3485 library to co-exist on the same system:
3486 <literallayout class='monospaced'>
3487 clutter-1.6_1.6.20.bb
3488 clutter-1.8_1.8.4.bb
3489 </literallayout>
3490 Additionally, if you have other recipes that depend on a given
3491 library, you need to use the
3492 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>
3493 variable to create the dependency.
3494 Continuing with the same example, if you want to have a recipe
3495 depend on the 1.8 version of the <filename>clutter</filename>
3496 library, use the following in your recipe:
3497 <literallayout class='monospaced'>
3498 DEPENDS = "clutter-1.8"
3499 </literallayout>
3500 </para>
3501 </section>
3502 </section>
3503
3504 <section id='creating-partitioned-images'>
3505 <title>Creating Partitioned Images</title>
3506
3507 <para>
3508 Creating an image for a particular hardware target using the
3509 OpenEmbedded build system does not necessarily mean you can boot
3510 that image as is on your device.
3511 Physical devices accept and boot images in various ways depending
3512 on the specifics of the device.
3513 Usually, information about the hardware can tell you what image
3514 format the device requires.
3515 Should your device require multiple partitions on an SD card, flash,
3516 or an HDD, you can use the OpenEmbedded Image Creator,
3517 <filename>wic</filename>, to create the properly partitioned image.
3518 </para>
3519
3520 <para>
3521 The <filename>wic</filename> command generates partitioned images
3522 from existing OpenEmbedded build artifacts.
3523 Image generation is driven by partitioning commands contained
3524 in an Openembedded kickstart file (<filename>.wks</filename>)
3525 specified either directly on the command line or as one of a
3526 selection of canned <filename>.wks</filename> files as shown
3527 with the <filename>wic list images</filename> command in the
3528 "<link linkend='using-a-provided-kickstart_file'>Using an Existing Kickstart File</link>"
3529 section.
3530 When applied to a given set of build artifacts, the result is an
3531 image or set of images that can be directly written onto media and
3532 used on a particular system.
3533 </para>
3534
3535 <para>
3536 The <filename>wic</filename> command and the infrastructure
3537 it is based on is by definition incomplete.
3538 Its purpose is to allow the generation of customized images,
3539 and as such was designed to be completely extensible through a
3540 plugin interface.
3541 See the
3542 "<link linkend='openembedded-kickstart-plugins'>Plugins</link>"
3543 section for information on these plugins.
3544 </para>
3545
3546 <para>
3547 This section provides some background information on
3548 <filename>wic</filename>, describes what you need to have in
3549 place to run the tool, provides instruction on how to use
3550 <filename>wic</filename>, and provides several examples.
3551 </para>
3552
3553 <section id='wic-background'>
3554 <title>Background</title>
3555
3556 <para>
3557 This section provides some background on the
3558 <filename>wic</filename> utility.
3559 While none of this information is required to use
3560 <filename>wic</filename>, you might find it interesting.
3561 <itemizedlist>
3562 <listitem><para>
3563 The name "wic" is derived from OpenEmbedded
3564 Image Creator (oeic).
3565 The "oe" diphthong in "oeic" was promoted to the
3566 letter "w", because "oeic" is both difficult to remember and
3567 pronounce.</para></listitem>
3568 <listitem><para>
3569 <filename>wic</filename> is loosely based on the
3570 Meego Image Creator (<filename>mic</filename>)
3571 framework.
3572 The <filename>wic</filename> implementation has been
3573 heavily modified to make direct use of OpenEmbedded
3574 build artifacts instead of package installation and
3575 configuration, which are already incorporated within
3576 the OpenEmbedded artifacts.</para></listitem>
3577 <listitem><para>
3578 <filename>wic</filename> is a completely independent
3579 standalone utility that initially provides
3580 easier-to-use and more flexible replacements for a
3581 couple bits of existing functionality in OE Core's
3582 <filename>boot-directdisk.bbclass</filename> and
3583 <filename>mkefidisk.sh</filename> scripts.
3584 The difference between
3585 <filename>wic</filename> and those examples is
3586 that with <filename>wic</filename> the
3587 functionality of those scripts is implemented
3588 by a general-purpose partitioning language, which is
3589 based on Redhat kickstart syntax.</para></listitem>
3590 </itemizedlist>
3591 </para>
3592 </section>
3593
3594 <section id='wic-requirements'>
3595 <title>Requirements</title>
3596
3597 <para>
3598 In order to use the <filename>wic</filename> utility
3599 with the OpenEmbedded Build system, your system needs
3600 to meet the following requirements:
3601 <itemizedlist>
3602 <listitem><para>The Linux distribution on your
3603 development host must support the Yocto Project.
3604 See the
3605 "<ulink url='&YOCTO_DOCS_REF_URL;#detailed-supported-distros'>Supported Linux Distributions</ulink>"
3606 section in the Yocto Project Reference Manual for this
3607 list of distributions.</para></listitem>
3608 <listitem><para>
3609 The standard system utilities, such as
3610 <filename>cp</filename>, must be installed on your
3611 development host system.
3612 </para></listitem>
3613 <listitem><para>
3614 The
3615 <ulink url='http://www.gnu.org/software/parted/'>GNU Parted</ulink>
3616 package must be installed on your development host
3617 system.
3618 </para></listitem>
3619 <listitem><para>
3620 You need to have the build artifacts already
3621 available, which typically means that you must
3622 have already created an image using the
3623 Openembedded build system (e.g.
3624 <filename>core-image-minimal</filename>).
3625 While it might seem redundant to generate an image in
3626 order to create an image using
3627 <filename>wic</filename>, the current version of
3628 <filename>wic</filename> requires the artifacts
3629 in the form generated by the build system.
3630 </para></listitem>
3631 <listitem><para>
3632 You must have sourced one of the build environment
3633 setup scripts (i.e.
3634 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
3635 or
3636 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>)
3637 found in the
3638 <link linkend='build-directory'>Build Directory</link>.
3639 </para></listitem>
3640 </itemizedlist>
3641 </para>
3642 </section>
3643
3644 <section id='wic-getting-help'>
3645 <title>Getting Help</title>
3646
3647 <para>
3648 You can get general help for the <filename>wic</filename>
3649 by entering the <filename>wic</filename> command by itself
3650 or by entering the command with a help argument as follows:
3651 <literallayout class='monospaced'>
3652 $ wic -h
3653 $ wic &dash;&dash;help
3654 </literallayout>
3655 </para>
3656
3657 <para>
3658 Currently, <filename>wic</filename> supports two commands:
3659 <filename>create</filename> and <filename>list</filename>.
3660 You can get help for these commands as follows:
3661 <literallayout class='monospaced'>
3662 $ wic help <replaceable>command</replaceable>
3663 </literallayout>
3664 </para>
3665
3666 <para>
3667 You can also get detailed help on a number of topics
3668 from the help system.
3669 The output of <filename>wic &dash;&dash;help</filename>
3670 displays a list of available help
3671 topics under a "Help topics" heading.
3672 You can have the help system display the help text for
3673 a given topic by prefacing the topic with
3674 <filename>wic help</filename>:
3675 <literallayout class='monospaced'>
3676 $ wic help <replaceable>help_topic</replaceable>
3677 </literallayout>
3678 </para>
3679
3680 <para>
3681 You can find out more about the images
3682 <filename>wic</filename> creates using the existing
3683 kickstart files with the following form of the command:
3684 <literallayout class='monospaced'>
3685 $ wic list <replaceable>image</replaceable> help
3686 </literallayout>
3687 where <filename><replaceable>image</replaceable></filename> is either
3688 <filename>directdisk</filename> or
3689 <filename>mkefidisk</filename>.
3690 </para>
3691 </section>
3692
3693 <section id='operational-modes'>
3694 <title>Operational Modes</title>
3695
3696 <para>
3697 You can use <filename>wic</filename> in two different
3698 modes, depending on how much control you need for
3699 specifying the Openembedded build artifacts that are
3700 used for creating the image: Raw and Cooked:
3701 <itemizedlist>
3702 <listitem><para><emphasis>Raw Mode:</emphasis>
3703 You explicitly specify build artifacts through
3704 command-line arguments.</para></listitem>
3705 <listitem><para><emphasis>Cooked Mode:</emphasis>
3706 The current
3707 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
3708 setting and image name are used to automatically locate
3709 and provide the build artifacts.</para></listitem>
3710 </itemizedlist>
3711 </para>
3712
3713 <para>
3714 Regardless of the mode you use, you need to have the build
3715 artifacts ready and available.
3716 Additionally, the environment must be set up using the
3717 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
3718 or
3719 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>
3720 script found in the
3721 <link linkend='build-directory'>Build Directory</link>.
3722 </para>
3723
3724 <section id='raw-mode'>
3725 <title>Raw Mode</title>
3726
3727 <para>
3728 The general form of the 'wic' command in raw mode is:
3729 <literallayout class='monospaced'>
3730 $ wic create <replaceable>image_name</replaceable>.wks [<replaceable>options</replaceable>] [...]
3731
3732 Where:
3733
3734 <replaceable>image_name</replaceable>.wks
3735 An OpenEmbedded kickstart file. You can provide
3736 your own custom file or use a file from a set of
3737 existing files as described by further options.
3738
3739 -o <replaceable>OUTDIR</replaceable>, &dash;&dash;outdir=<replaceable>OUTDIR</replaceable>
3740 The name of a directory in which to create image.
3741
3742 -i <replaceable>PROPERTIES_FILE</replaceable>, &dash;&dash;infile=<replaceable>PROPERTIES_FILE</replaceable>
3743 The name of a file containing the values for image
3744 properties as a JSON file.
3745
3746 -e <replaceable>IMAGE_NAME</replaceable>, &dash;&dash;image-name=<replaceable>IMAGE_NAME</replaceable>
3747 The name of the image from which to use the artifacts
3748 (e.g. <filename>core-image-sato</filename>).
3749
3750 -r <replaceable>ROOTFS_DIR</replaceable>, &dash;&dash;rootfs-dir=<replaceable>ROOTFS_DIR</replaceable>
3751 The path to the <filename>/rootfs</filename> directory to use as the
3752 <filename>.wks</filename> rootfs source.
3753
3754 -b <replaceable>BOOTIMG_DIR</replaceable>, &dash;&dash;bootimg-dir=<replaceable>BOOTIMG_DIR</replaceable>
3755 The path to the directory containing the boot artifacts
3756 (e.g. <filename>/EFI</filename> or <filename>/syslinux</filename>) to use as the <filename>.wks</filename> bootimg
3757 source.
3758
3759 -k <replaceable>KERNEL_DIR</replaceable>, &dash;&dash;kernel-dir=<replaceable>KERNEL_DIR</replaceable>
3760 The path to the directory containing the kernel to use
3761 in the <filename>.wks</filename> boot image.
3762
3763 -n <replaceable>NATIVE_SYSROOT</replaceable>, &dash;&dash;native-sysroot=<replaceable>NATIVE_SYSROOT</replaceable>
3764 The path to the native sysroot containing the tools to use
3765 to build the image.
3766
3767 -s, &dash;&dash;skip-build-check
3768 Skips the build check.
3769
3770 -D, &dash;&dash;debug
3771 Output debug information.
3772 </literallayout>
3773 <note>
3774 You do not need root privileges to run
3775 <filename>wic</filename>.
3776 In fact, you should not run as root when using the
3777 utility.
3778 </note>
3779 </para>
3780 </section>
3781
3782 <section id='cooked-mode'>
3783 <title>Cooked Mode</title>
3784
3785 <para>
3786 The general form of the <filename>wic</filename> command
3787 using Cooked Mode is:
3788 <literallayout class='monospaced'>
3789 $ wic create <replaceable>kickstart_file</replaceable> -e <replaceable>image_name</replaceable>
3790
3791 Where:
3792
3793 <replaceable>kickstart_file</replaceable>
3794 An OpenEmbedded kickstart file. You can provide your own
3795 custom file or supplied file.
3796
3797 <replaceable>image_name</replaceable>
3798 Specifies the image built using the OpenEmbedded build
3799 system.
3800 </literallayout>
3801 This form is the simplest and most user-friendly, as it
3802 does not require specifying all individual parameters.
3803 All you need to provide is your own
3804 <filename>.wks</filename> file or one provided with the
3805 release.
3806 </para>
3807 </section>
3808 </section>
3809
3810 <section id='using-a-provided-kickstart_file'>
3811 <title>Using an Existing Kickstart File</title>
3812
3813 <para>
3814 If you do not want to create your own
3815 <filename>.wks</filename> file, you can use an existing
3816 file provided by the <filename>wic</filename> installation.
3817 Use the following command to list the available files:
3818 <literallayout class='monospaced'>
3819 $ wic list images
3820 directdisk Create a 'pcbios' direct disk image
3821 mkefidisk Create an EFI disk image
3822 </literallayout>
3823 When you use an existing file, you do not have to use the
3824 <filename>.wks</filename> extension.
3825 Here is an example in Raw Mode that uses the
3826 <filename>directdisk</filename> file:
3827 <literallayout class='monospaced'>
3828 $ wic create directdisk -r <replaceable>rootfs_dir</replaceable> -b <replaceable>bootimg_dir</replaceable> \
3829 -k <replaceable>kernel_dir</replaceable> -n <replaceable>native_sysroot</replaceable>
3830 </literallayout>
3831 </para>
3832
3833 <para>
3834 Here are the actual partition language commands
3835 used in the <filename>mkefidisk.wks</filename> file to generate
3836 an image:
3837 <literallayout class='monospaced'>
3838 # short-description: Create an EFI disk image
3839 # long-description: Creates a partitioned EFI disk image that the user
3840 # can directly dd to boot media.
3841
3842 part /boot --source bootimg-efi --ondisk sda --label msdos --active --align 1024
3843
3844 part / --source rootfs --ondisk sda --fstype=ext3 --label platform --align 1024
3845
3846 part swap --ondisk sda --size 44 --label swap1 --fstype=swap
3847
3848 bootloader --timeout=10 --append="rootwait rootfstype=ext3 console=ttyPCH0,115200 console=tty0 vmalloc=256MB snd-hda-intel.enable_msi=0"
3849 </literallayout>
3850 </para>
3851 </section>
3852
3853 <section id='wic-usage-examples'>
3854 <title>Examples</title>
3855
3856 <para>
3857 This section provides several examples that show how to use
3858 the <filename>wic</filename> utility.
3859 All the examples assume the list of requirements in the
3860 "<link linkend='wic-requirements'>Requirements</link>" section
3861 have been met.
3862 The examples assume the previously generated image is
3863 <filename>core-image-minimal</filename>.
3864 </para>
3865
3866 <section id='generate-an-image-using-a-provided-kickstart-file'>
3867 <title>Generate an Image using an Existing Kickstart File</title>
3868
3869 <para>
3870 This example runs in Cooked Mode and uses the
3871 <filename>mkefidisk</filename> kickstart file:
3872 <literallayout class='monospaced'>
3873 $ wic create mkefidisk -e core-image-minimal
3874 Checking basic build environment...
3875 Done.
3876
3877 Creating image(s)...
3878
3879 Info: The new image(s) can be found here:
3880 /var/tmp/wic/build/mkefidisk-201310230946-sda.direct
3881
3882 The following build artifacts were used to create the image(s):
3883 ROOTFS_DIR: /home/trz/yocto/yocto-image/build/tmp/work/minnow-poky-linux/core-image-minimal/1.0-r0/rootfs
3884 BOOTIMG_DIR: /home/trz/yocto/yocto-image/build/tmp/work/minnow-poky-linux/core-image-minimal/1.0-r0/core-image-minimal-1.0/hddimg
3885 KERNEL_DIR: /home/trz/yocto/yocto-image/build/tmp/sysroots/minnow/usr/src/kernel
3886 NATIVE_SYSROOT: /home/trz/yocto/yocto-image/build/tmp/sysroots/x86_64-linux
3887
3888
3889 The image(s) were created using OE kickstart file:
3890 /home/trz/yocto/yocto-image/scripts/lib/image/canned-wks/mkefidisk.wks
3891 </literallayout>
3892 This example shows the easiest way to create an image
3893 by running in Cooked Mode and using the
3894 <filename>-e</filename> option with an existing kickstart
3895 file.
3896 All that is necessary is to specify the image used to
3897 generate the artifacts.
3898 Your <filename>local.conf</filename> needs to have the
3899 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
3900 variable set to the machine you are using, which is
3901 "minnow" in this example.
3902 </para>
3903
3904 <para>
3905 The output specifies the exact created as well as where
3906 it was created.
3907 The output also names the artifacts used and the exact
3908 <filename>.wks</filename> script that was used to generate
3909 the image.
3910 <note>
3911 You should always verify the details provided in the
3912 output to make sure that the image was indeed created
3913 exactly as expected.
3914 </note>
3915 </para>
3916
3917 <para>
3918 Continuing with the example, you can now directly
3919 <filename>dd</filename> the image to a USB stick, or
3920 whatever media for which you built your image,
3921 and boot the resulting media:
3922 <literallayout class='monospaced'>
3923 $ sudo dd if=/var/tmp/wic/build/mkefidisk-201310230946-sda.direct of=/dev/sdb
3924 [sudo] password for trz:
3925 182274+0 records in
3926 182274+0 records out
3927 93324288 bytes (93 MB) copied, 14.4777 s, 6.4 MB/s
3928 [trz@empanada ~]$ sudo eject /dev/sdb
3929 </literallayout>
3930 </para>
3931 </section>
3932
3933 <section id='using-a-modified-kickstart-file'>
3934 <title>Using a Modified Kickstart File</title>
3935
3936 <para>
3937 Because <filename>wic</filename> image creation is driven
3938 by the kickstart file, it is easy to affect image creation
3939 by changing the parameters in the file.
3940 This next example demonstrates that through modification
3941 of the <filename>directdisk</filename> kickstart file.
3942 </para>
3943
3944 <para>
3945 As mentioned earlier, you can use the command
3946 <filename>wic list images</filename> to show the list
3947 of existing kickstart files.
3948 The directory in which these files reside is
3949 <filename>scripts/lib/image/canned-wks/</filename>
3950 located in the
3951 <link linkend='source-directory'>Source Directory</link>.
3952 Because the available files reside in this directory, you
3953 can create and add your own custom files to the directory.
3954 Subsequent use of the <filename>wic list images</filename>
3955 command would then include your kickstart files.
3956 </para>
3957
3958 <para>
3959 In this example, the existing
3960 <filename>directdisk</filename> file already does most
3961 of what is needed.
3962 However, for the hardware in this example, the image will
3963 need to boot from <filename>sdb</filename> instead of
3964 <filename>sda</filename>, which is what the
3965 <filename>directdisk</filename> kickstart file uses.
3966 </para>
3967
3968 <para>
3969 The example begins by making a copy of the
3970 <filename>directdisk.wks</filename> file in the
3971 <filename>scripts/lib/image/canned-wks</filename>
3972 directory and then changing the lines that specify the
3973 target disk from which to boot.
3974 <literallayout class='monospaced'>
3975 $ cp /home/trz/yocto/yocto-image/scripts/lib/image/canned-wks/directdisk.wks \
3976 /home/trz/yocto/yocto-image/scripts/lib/image/canned-wks/directdisksdb.wks
3977 </literallayout>
3978 Next, the example modifies the
3979 <filename>directdisksdb.wks</filename> file and changes all
3980 instances of "<filename>&dash;&dash;ondisk sda</filename>"
3981 to "<filename>&dash;&dash;ondisk sdb</filename>".
3982 The example changes the following two lines and leaves the
3983 remaining lines untouched:
3984 <literallayout class='monospaced'>
3985 part /boot &dash;&dash;source bootimg-pcbios &dash;&dash;ondisk sdb &dash;&dash;label boot &dash;&dash;active &dash;&dash;align 1024
3986 part / &dash;&dash;source rootfs &dash;&dash;ondisk sdb &dash;&dash;fstype=ext3 &dash;&dash;label platform &dash;&dash;align 1024
3987 </literallayout>
3988 Once the lines are changed, the example generates the
3989 <filename>directdisksdb</filename> image.
3990 The command points the process at the
3991 <filename>core-image-minimal</filename> artifacts for the
3992 Next Unit of Computing (nuc)
3993 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
3994 the <filename>local.conf</filename>.
3995 <literallayout class='monospaced'>
3996 $ wic create directdisksdb -e core-image-minimal
3997 Checking basic build environment...
3998 Done.
3999
4000 Creating image(s)...
4001
4002 Info: The new image(s) can be found here:
4003 /var/tmp/wic/build/directdisksdb-201310231131-sdb.direct
4004
4005 The following build artifacts were used to create the image(s):
4006 ROOTFS_DIR: /home/trz/yocto/yocto-image/build/tmp/work/nuc-poky-linux/core-image-minimal/1.0-r0/rootfs
4007 BOOTIMG_DIR: /home/trz/yocto/yocto-image/build/tmp/sysroots/nuc/usr/share
4008 KERNEL_DIR: /home/trz/yocto/yocto-image/build/tmp/sysroots/nuc/usr/src/kernel
4009 NATIVE_SYSROOT: /home/trz/yocto/yocto-image/build/tmp/sysroots/x86_64-linux
4010
4011
4012 The image(s) were created using OE kickstart file:
4013 /home/trz/yocto/yocto-image/scripts/lib/image/canned-wks/directdisksdb.wks
4014 </literallayout>
4015 Continuing with the example, you can now directly
4016 <filename>dd</filename> the image to a USB stick, or
4017 whatever media for which you built your image,
4018 and boot the resulting media:
4019 <literallayout class='monospaced'>
4020 $ sudo dd if=/var/tmp/wic/build/directdisksdb-201310231131-sdb.direct of=/dev/sdb
4021 86018+0 records in
4022 86018+0 records out
4023 44041216 bytes (44 MB) copied, 13.0734 s, 3.4 MB/s
4024 [trz@empanada tmp]$ sudo eject /dev/sdb
4025 </literallayout>
4026 </para>
4027 </section>
4028
4029 <section id='creating-an-image-based-on-core-image-minimal-and-crownbay-noemgd'>
4030 <title>Creating an Image Based on <filename>core-image-minimal</filename> and <filename>crownbay-noemgd</filename></title>
4031
4032 <para>
4033 This example creates an image based on
4034 <filename>core-image-minimal</filename> and a
4035 <filename>crownbay-noemgd</filename>
4036 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
4037 that works right out of the box.
4038 <literallayout class='monospaced'>
4039 $ wic create directdisk -e core-image-minimal
4040
4041 Checking basic build environment...
4042 Done.
4043
4044 Creating image(s)...
4045
4046 Info: The new image(s) can be found here:
4047 /var/tmp/wic/build/directdisk-201309252350-sda.direct
4048
4049 The following build artifacts were used to create the image(s):
4050
4051 ROOTFS_DIR: /home/trz/yocto/yocto-image/build/tmp/work/crownbay_noemgd-poky-linux/core-image-minimal/1.0-r0/rootfs
4052 BOOTIMG_DIR: /home/trz/yocto/yocto-image/build/tmp/sysroots/crownbay-noemgd/usr/share
4053 KERNEL_DIR: /home/trz/yocto/yocto-image/build/tmp/sysroots/crownbay-noemgd/usr/src/kernel
4054 NATIVE_SYSROOT: /home/trz/yocto/yocto-image/build/tmp/sysroots/crownbay-noemgd/usr/src/kernel
4055
4056 The image(s) were created using OE kickstart file:
4057 /home/trz/yocto/yocto-image/scripts/lib/image/canned-wks/directdisk.wks
4058 </literallayout>
4059 </para>
4060 </section>
4061
4062 <section id='using-a-modified-kickstart-file-and-running-in-raw-mode'>
4063 <title>Using a Modified Kickstart File and Running in Raw Mode</title>
4064
4065 <para>
4066 This next example manually specifies each build artifact
4067 (runs in Raw Mode) and uses a modified kickstart file.
4068 The example also uses the <filename>-o</filename> option
4069 to cause <filename>wic</filename> to create the output
4070 somewhere other than the default
4071 <filename>/var/tmp/wic</filename> directory:
4072 <literallayout class='monospaced'>
4073 $ wic create ~/test.wks -o /home/trz/testwic &dash;&dash;rootfs-dir \
4074 /home/trz/yocto/yocto-image/build/tmp/work/crownbay_noemgd-poky-linux/core-image-minimal/1.0-r0/rootfs \
4075 &dash;&dash;bootimg-dir /home/trz/yocto/yocto-image/build/tmp/sysroots/crownbay-noemgd/usr/share \
4076 &dash;&dash;kernel-dir /home/trz/yocto/yocto-image/build/tmp/sysroots/crownbay-noemgd/usr/src/kernel \
4077 &dash;&dash;native-sysroot /home/trz/yocto/yocto-image/build/tmp/sysroots/x86_64-linux
4078
4079 Creating image(s)...
4080
4081 Info: The new image(s) can be found here:
4082 /home/trz/testwic/build/test-201309260032-sda.direct
4083
4084 The following build artifacts were used to create the image(s):
4085
4086 ROOTFS_DIR: /home/trz/yocto/yocto-image/build/tmp/work/crownbay_noemgd-poky-linux/core-image-minimal/1.0-r0/rootfs
4087 BOOTIMG_DIR: /home/trz/yocto/yocto-image/build/tmp/sysroots/crownbay-noemgd/usr/share
4088 KERNEL_DIR: /home/trz/yocto/yocto-image/build/tmp/sysroots/crownbay-noemgd/usr/src/kernel
4089 NATIVE_SYSROOT: /home/trz/yocto/yocto-image/build/tmp/sysroots/crownbay-noemgd/usr/src/kernel
4090
4091 The image(s) were created using OE kickstart file:
4092 /home/trz/test.wks
4093 </literallayout>
4094 For this example,
4095 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
4096 did not have to be specified in the
4097 <filename>local.conf</filename> file since the artifact is
4098 manually specified.
4099 </para>
4100 </section>
4101 </section>
4102
4103 <section id='openembedded-kickstart-plugins'>
4104 <title>Plugins</title>
4105
4106 <para>
4107 Plugins allow <filename>wic</filename> functionality to
4108 be extended and specialized by users.
4109 This section documents the plugin interface, which is
4110 currently restricted to source plugins.
4111 </para>
4112
4113 <para>
4114 Source plugins provide a mechanism to customize
4115 various aspects of the image generation process in
4116 <filename>wic</filename>, mainly the contents of
4117 partitions.
4118 The plugins provide a mechanism for mapping values
4119 specified in <filename>.wks</filename> files using the
4120 <filename>&dash;&dash;source</filename> keyword to a
4121 particular plugin implementation that populates a
4122 corresponding partition.
4123 </para>
4124
4125 <para>
4126 A source plugin is created as a subclass of
4127 <filename>SourcePlugin</filename>.
4128 The plugin file containing it is added to
4129 <filename>scripts/lib/mic/plugins/source/</filename> to
4130 make the plugin implementation available to the
4131 <filename>wic</filename> implementation.
4132 For more information, see
4133 <filename>scripts/lib/mic/pluginbase.py</filename>.
4134 </para>
4135
4136 <para>
4137 Source plugins can also be implemented and added by
4138 external layers.
4139 As such, any plugins found in a
4140 <filename>scripts/lib/mic/plugins/source/</filename>
4141 directory in an external layer are also made
4142 available.
4143 </para>
4144
4145 <para>
4146 When the <filename>wic</filename> implementation needs
4147 to invoke a partition-specific implementation, it looks
4148 for the plugin that has the same name as the
4149 <filename>&dash;&dash;source</filename> parameter given to
4150 that partition.
4151 For example, if the partition is set up as follows:
4152 <literallayout class='monospaced'>
4153 part /boot &dash;&dash;source bootimg-pcbios ...
4154 </literallayout>
4155 The methods defined as class members of the plugin
4156 having the matching <filename>bootimg-pcbios.name</filename>
4157 class member are used.
4158 </para>
4159
4160 <para>
4161 To be more concrete, here is the plugin definition that
4162 matches a
4163 <filename>&dash;&dash;source bootimg-pcbios</filename> usage,
4164 along with an example
4165 method called by the <filename>wic</filename> implementation
4166 when it needs to invoke an implementation-specific
4167 partition-preparation function:
4168 <literallayout class='monospaced'>
4169 class BootimgPcbiosPlugin(SourcePlugin):
4170 name = 'bootimg-pcbios'
4171
4172 @classmethod
4173 def do_prepare_partition(self, part, ...)
4174 </literallayout>
4175 If the subclass itself does not implement a function, a
4176 default version in a superclass is located and
4177 used, which is why all plugins must be derived from
4178 <filename>SourcePlugin</filename>.
4179 </para>
4180
4181 <para>
4182 The <filename>SourcePlugin</filename> class defines the
4183 following methods, which is the current set of methods
4184 that can be implemented or overridden by
4185 <filename>&dash;&dash;source</filename> plugins.
4186 Any methods not implemented by a
4187 <filename>SourcePlugin</filename> subclass inherit the
4188 implementations present in the
4189 <filename>SourcePlugin</filename> class.
4190 For more information, see the
4191 <filename>SourcePlugin</filename> source for details:
4192 </para>
4193
4194 <para>
4195 <itemizedlist>
4196 <listitem><para><emphasis><filename>do_prepare_partition()</filename>:</emphasis>
4197 Called to do the actual content population for a
4198 partition.
4199 In other words, the method prepares the final
4200 partition image that is incorporated into the
4201 disk image.
4202 </para></listitem>
4203 <listitem><para><emphasis><filename>do_configure_partition()</filename>:</emphasis>
4204 Called before
4205 <filename>do_prepare_partition()</filename>.
4206 This method is typically used to create custom
4207 configuration files for a partition (e.g. syslinux or
4208 grub configuration files).
4209 </para></listitem>
4210 <listitem><para><emphasis><filename>do_install_disk()</filename>:</emphasis>
4211 Called after all partitions have been prepared and
4212 assembled into a disk image.
4213 This method provides a hook to allow finalization of a
4214 disk image, (e.g. writing an MBR).
4215 </para></listitem>
4216 <listitem><para><emphasis><filename>do_stage_partition()</filename>:</emphasis>
4217 Special content-staging hook called before
4218 <filename>do_prepare_partition()</filename>.
4219 This method is normally empty.</para>
4220 <para>Typically, a partition just uses the passed-in
4221 parameters (e.g. the unmodified value of
4222 <filename>bootimg_dir</filename>).
4223 However, in some cases things might need to be
4224 more tailored.
4225 As an example, certain files might additionally
4226 need to be taken from
4227 <filename>bootimg_dir + /boot</filename>.
4228 This hook allows those files to be staged in a
4229 customized fashion.
4230 <note>
4231 <filename>get_bitbake_var()</filename>
4232 allows you to access non-standard variables
4233 that you might want to use for this.
4234 </note>
4235 </para></listitem>
4236 </itemizedlist>
4237 </para>
4238
4239 <para>
4240 This scheme is extensible.
4241 Adding more hooks is a simple matter of adding more
4242 plugin methods to <filename>SourcePlugin</filename> and
4243 derived classes.
4244 The code that then needs to call the plugin methods uses
4245 <filename>plugin.get_source_plugin_methods()</filename>
4246 to find the method or methods needed by the call.
4247 Retrieval of those methods is accomplished
4248 by filling up a dict with keys
4249 containing the method names of interest.
4250 On success, these will be filled in with the actual
4251 methods.
4252 Please see the <filename>wic</filename>
4253 implementation for examples and details.
4254 </para>
4255 </section>
4256
4257 <section id='openembedded-kickstart-wks-reference'>
4258 <title>OpenEmbedded Kickstart (.wks) Reference</title>
4259
4260 <para>
4261 The current <filename>wic</filename> implementation supports
4262 only the basic kickstart partitioning commands:
4263 <filename>partition</filename> (or <filename>part</filename>
4264 for short) and <filename>bootloader</filename>.
4265 <note>
4266 Future updates will implement more commands and options.
4267 If you use anything that is not specifically
4268 supported, results can be unpredictable.
4269 </note>
4270 </para>
4271
4272 <para>
4273 The following is a list of the commands, their syntax,
4274 and meanings.
4275 The commands are based on the Fedora
4276 kickstart versions but with modifications to
4277 reflect <filename>wic</filename> capabilities.
4278 You can see the original documentation for those commands
4279 at the following links:
4280 <itemizedlist>
4281 <listitem><para>
4282 <ulink url='http://fedoraproject.org/wiki/Anaconda/Kickstart#part_or_partition'>http://fedoraproject.org/wiki/Anaconda/Kickstart#part_or_partition</ulink>
4283 </para></listitem>
4284 <listitem><para>
4285 <ulink url='http://fedoraproject.org/wiki/Anaconda/Kickstart#bootloader'>http://fedoraproject.org/wiki/Anaconda/Kickstart#bootloader</ulink>
4286 </para></listitem>
4287 </itemizedlist>
4288 </para>
4289
4290 <section id='command-part-or-partition'>
4291 <title>Command: part or partition</title>
4292
4293 <para>
4294 This command creates a partition on the system and uses the
4295 following syntax:
4296 <literallayout class='monospaced'>
4297 part <replaceable>mntpoint</replaceable>
4298 </literallayout>
4299 The <filename><replaceable>mntpoint</replaceable></filename>
4300 is where the
4301 partition will be mounted and must be of one of the
4302 following forms:
4303 <itemizedlist>
4304 <listitem><para><filename>/<replaceable>path</replaceable></filename>:
4305 For example, <filename>/</filename>,
4306 <filename>/usr</filename>, and
4307 <filename>/home</filename></para></listitem>
4308 <listitem><para><filename>swap</filename>:
4309 The partition will be used as swap space.
4310 </para></listitem>
4311 </itemizedlist>
4312 </para>
4313
4314 <para>
4315 Following are the supported options:
4316 <itemizedlist>
4317 <listitem><para><emphasis><filename>&dash;&dash;size</filename>:</emphasis>
4318 The minimum partition size in MBytes.
4319 Specify an integer value such as 500.
4320 Do not append the number with "MB".
4321 You do not need this option if you use
4322 <filename>&dash;&dash;source</filename>.</para></listitem>
4323 <listitem><para><emphasis><filename>&dash;&dash;source</filename>:</emphasis>
4324 This option is a
4325 <filename>wic</filename>-specific option that
4326 names the source of the data that populates
4327 the partition.
4328 The most common value for this option is
4329 "rootfs", but you can use any value that maps to
4330 a valid source plugin.
4331 For information on the source plugins, see the
4332 "<link linkend='openembedded-kickstart-plugins'>Plugins</link>"
4333 section.</para>
4334 <para>If you use
4335 <filename>&dash;&dash;source rootfs</filename>,
4336 <filename>wic</filename> creates a partition as
4337 large as needed and to fill it with the contents of
4338 the root filesystem pointed to by the
4339 <filename>-r</filename> command-line option
4340 or the equivalent rootfs derived from the
4341 <filename>-e</filename> command-line
4342 option.
4343 The filesystem type used to create the
4344 partition is driven by the value of the
4345 <filename>&dash;&dash;fstype</filename> option
4346 specified for the partition.
4347 See the entry on
4348 <filename>&dash;&dash;fstype</filename> that
4349 follows for more information.
4350 </para>
4351 <para>If you use
4352 <filename>&dash;&dash;source <replaceable>plugin-name</replaceable></filename>,
4353 <filename>wic</filename> creates a partition as
4354 large as needed and fills it with the contents of
4355 the partition that is generated by the
4356 specified plugin name using the data pointed
4357 to by the <filename>-r</filename> command-line
4358 option or the equivalent rootfs derived from the
4359 <filename>-e</filename> command-line
4360 option.
4361 Exactly what those contents and
4362 filesystem type end up being are dependent
4363 on the given plugin implementation.
4364 </para></listitem>
4365 <listitem><para><emphasis><filename>&dash;&dash;ondisk</filename> or <filename>&dash;&dash;ondrive</filename>:</emphasis>
4366 Forces the partition to be created on a particular
4367 disk.</para></listitem>
4368 <listitem><para><emphasis><filename>&dash;&dash;fstype</filename>:</emphasis>
4369 Sets the file system type for the partition.
4370 Valid values are:
4371 <itemizedlist>
4372 <listitem><para><filename>ext4</filename>
4373 </para></listitem>
4374 <listitem><para><filename>ext3</filename>
4375 </para></listitem>
4376 <listitem><para><filename>ext2</filename>
4377 </para></listitem>
4378 <listitem><para><filename>btrfs</filename>
4379 </para></listitem>
4380 <listitem><para><filename>squashfs</filename>
4381 </para></listitem>
4382 <listitem><para><filename>swap</filename>
4383 </para></listitem>
4384 </itemizedlist></para></listitem>
4385 <listitem><para><emphasis><filename>&dash;&dash;fsoptions</filename>:</emphasis>
4386 Specifies a free-form string of options to be
4387 used when mounting the filesystem.
4388 This string will be copied into the
4389 <filename>/etc/fstab</filename> file of the
4390 installed system and should be enclosed in
4391 quotes.
4392 If not specified, the default string
4393 is "defaults".
4394 </para></listitem>
4395 <listitem><para><emphasis><filename>&dash;&dash;label label</filename>:</emphasis>
4396 Specifies the label to give to the filesystem to
4397 be made on the partition.
4398 If the given label is already in use by another
4399 filesystem, a new label is created for the
4400 partition.</para></listitem>
4401 <listitem><para><emphasis><filename>&dash;&dash;active</filename>:</emphasis>
4402 Marks the partition as active.</para></listitem>
4403 <listitem><para><emphasis><filename>&dash;&dash;align (in KBytes)</filename>:</emphasis>
4404 This option is a <filename>wic</filename>-specific
4405 option that says to start a partition on an
4406 x KBytes boundary.</para></listitem>
4407 </itemizedlist>
4408 </para>
4409 </section>
4410
4411 <section id='command-bootloader'>
4412 <title>Command: bootloader</title>
4413
4414 <para>
4415 This command specifies how the boot loader should be
4416 configured and supports the following options:
4417 <note>
4418 Bootloader functionality and boot partitions are
4419 implemented by the various
4420 <filename>&dash;&dash;source</filename>
4421 plugins that implement bootloader functionality.
4422 The bootloader command essentially provides a means of
4423 modifying bootloader configuration.
4424 </note>
4425 <itemizedlist>
4426 <listitem><para><emphasis><filename>&dash;&dash;timeout</filename>:</emphasis>
4427 Specifies the number of seconds before the
4428 bootloader times out and boots the default option.
4429 </para></listitem>
4430 <listitem><para><emphasis><filename>&dash;&dash;append</filename>:</emphasis>
4431 Specifies kernel parameters.
4432 These parameters will be added to the syslinux
4433 <filename>APPEND</filename> or
4434 <filename>grub</filename> kernel command line.
4435 </para></listitem>
4436 </itemizedlist>
4437 </para>
4438 </section>
4439 </section>
4440 </section>
4441
4442 <section id='configuring-the-kernel'>
4443 <title>Configuring the Kernel</title>
4444
4445 <para>
4446 Configuring the Yocto Project kernel consists of making sure the <filename>.config</filename>
4447 file has all the right information in it for the image you are building.
4448 You can use the <filename>menuconfig</filename> tool and configuration fragments to
4449 make sure your <filename>.config</filename> file is just how you need it.
4450 This section describes how to use <filename>menuconfig</filename>, create and use
4451 configuration fragments, and how to interactively modify your <filename>.config</filename>
4452 file to create the leanest kernel configuration file possible.
4453 </para>
4454
4455 <para>
4456 For more information on kernel configuration, see the
4457 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#changing-the-configuration'>Changing the Configuration</ulink>"
4458 section in the Yocto Project Linux Kernel Development Manual.
4459 </para>
4460
4461 <section id='using-menuconfig'>
4462 <title>Using&nbsp;&nbsp;<filename>menuconfig</filename></title>
4463
4464 <para>
4465 The easiest way to define kernel configurations is to set them through the
4466 <filename>menuconfig</filename> tool.
4467 This tool provides an interactive method with which
4468 to set kernel configurations.
4469 For general information on <filename>menuconfig</filename>, see
4470 <ulink url='http://en.wikipedia.org/wiki/Menuconfig'></ulink>.
4471 </para>
4472
4473 <para>
4474 To use the <filename>menuconfig</filename> tool in the Yocto Project development
4475 environment, you must launch it using BitBake.
4476 Thus, the environment must be set up using the
4477 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
4478 or
4479 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>
4480 script found in the
4481 <link linkend='build-directory'>Build Directory</link>.
4482 The following commands run <filename>menuconfig</filename> assuming the
4483 <link linkend='source-directory'>Source Directory</link>
4484 top-level folder is <filename>~/poky</filename>:
4485 <literallayout class='monospaced'>
4486 $ cd poky
4487 $ source oe-init-build-env
4488 $ bitbake linux-yocto -c menuconfig
4489 </literallayout>
4490 Once <filename>menuconfig</filename> comes up, its standard interface allows you to
4491 interactively examine and configure all the kernel configuration parameters.
4492 After making your changes, simply exit the tool and save your changes to
4493 create an updated version of the <filename>.config</filename> configuration file.
4494 </para>
4495
4496 <para>
4497 Consider an example that configures the <filename>linux-yocto-3.14</filename>
4498 kernel.
4499 The OpenEmbedded build system recognizes this kernel as
4500 <filename>linux-yocto</filename>.
4501 Thus, the following commands from the shell in which you previously sourced the
4502 environment initialization script cleans the shared state cache and the
4503 <ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink>
4504 directory and then runs <filename>menuconfig</filename>:
4505 <literallayout class='monospaced'>
4506 $ bitbake linux-yocto -c menuconfig
4507 </literallayout>
4508 </para>
4509
4510 <para>
4511 Once <filename>menuconfig</filename> launches, use the interface
4512 to navigate through the selections to find the configuration settings in
4513 which you are interested.
4514 For example, consider the <filename>CONFIG_SMP</filename> configuration setting.
4515 You can find it at <filename>Processor Type and Features</filename> under
4516 the configuration selection <filename>Symmetric Multi-processing Support</filename>.
4517 After highlighting the selection, use the arrow keys to select or deselect
4518 the setting.
4519 When you are finished with all your selections, exit out and save them.
4520 </para>
4521
4522 <para>
4523 Saving the selections updates the <filename>.config</filename> configuration file.
4524 This is the file that the OpenEmbedded build system uses to configure the
4525 kernel during the build.
4526 You can find and examine this file in the Build Directory in
4527 <filename>tmp/work/</filename>.
4528 The actual <filename>.config</filename> is located in the area where the
4529 specific kernel is built.
4530 For example, if you were building a Linux Yocto kernel based on the
4531 Linux 3.14 kernel and you were building a QEMU image targeted for
4532 <filename>x86</filename> architecture, the
4533 <filename>.config</filename> file would be located here:
4534 <literallayout class='monospaced'>
4535 poky/build/tmp/work/qemux86-poky-linux/linux-yocto-3.14.11+git1+84f...
4536 ...656ed30-r1/linux-qemux86-standard-build
4537 </literallayout>
4538 <note>
4539 The previous example directory is artificially split and many of the characters
4540 in the actual filename are omitted in order to make it more readable.
4541 Also, depending on the kernel you are using, the exact pathname
4542 for <filename>linux-yocto-3.14...</filename> might differ.
4543 </note>
4544 </para>
4545
4546 <para>
4547 Within the <filename>.config</filename> file, you can see the kernel settings.
4548 For example, the following entry shows that symmetric multi-processor support
4549 is not set:
4550 <literallayout class='monospaced'>
4551 # CONFIG_SMP is not set
4552 </literallayout>
4553 </para>
4554
4555 <para>
4556 A good method to isolate changed configurations is to use a combination of the
4557 <filename>menuconfig</filename> tool and simple shell commands.
4558 Before changing configurations with <filename>menuconfig</filename>, copy the
4559 existing <filename>.config</filename> and rename it to something else,
4560 use <filename>menuconfig</filename> to make
4561 as many changes as you want and save them, then compare the renamed configuration
4562 file against the newly created file.
4563 You can use the resulting differences as your base to create configuration fragments
4564 to permanently save in your kernel layer.
4565 <note>
4566 Be sure to make a copy of the <filename>.config</filename> and don't just
4567 rename it.
4568 The build system needs an existing <filename>.config</filename>
4569 from which to work.
4570 </note>
4571 </para>
4572 </section>
4573
4574 <section id='creating-config-fragments'>
4575 <title>Creating Configuration Fragments</title>
4576
4577 <para>
4578 Configuration fragments are simply kernel options that appear in a file
4579 placed where the OpenEmbedded build system can find and apply them.
4580 Syntactically, the configuration statement is identical to what would appear
4581 in the <filename>.config</filename> file, which is in the
4582 <link linkend='build-directory'>Build Directory</link> in
4583 <filename>tmp/work/&lt;arch&gt;-poky-linux/linux-yocto-&lt;release-specific-string&gt;/linux-&lt;arch&gt;-&lt;build-type&gt;</filename>.
4584 </para>
4585
4586 <para>
4587 It is simple to create a configuration fragment.
4588 For example, issuing the following from the shell creates a configuration fragment
4589 file named <filename>my_smp.cfg</filename> that enables multi-processor support
4590 within the kernel:
4591 <literallayout class='monospaced'>
4592 $ echo "CONFIG_SMP=y" >> my_smp.cfg
4593 </literallayout>
4594 <note>
4595 All configuration files must use the <filename>.cfg</filename> extension in order
4596 for the OpenEmbedded build system to recognize them as a configuration fragment.
4597 </note>
4598 </para>
4599
4600 <para>
4601 Where do you put your configuration files?
4602 You can place these configuration files in the same area pointed to by
4603 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>.
4604 The OpenEmbedded build system will pick up the configuration and add it to the
4605 kernel's configuration.
4606 For example, suppose you had a set of configuration options in a file called
4607 <filename>myconfig.cfg</filename>.
4608 If you put that file inside a directory named <filename>linux-yocto</filename>
4609 that resides in the same directory as the kernel's append file and then add
4610 a <filename>SRC_URI</filename> statement such as the following to the kernel's append file,
4611 those configuration options will be picked up and applied when the kernel is built.
4612 <literallayout class='monospaced'>
4613 SRC_URI += "file://myconfig.cfg"
4614 </literallayout>
4615 </para>
4616
4617 <para>
4618 As mentioned earlier, you can group related configurations into multiple files and
4619 name them all in the <filename>SRC_URI</filename> statement as well.
4620 For example, you could group separate configurations specifically for Ethernet and graphics
4621 into their own files and add those by using a <filename>SRC_URI</filename> statement like the
4622 following in your append file:
4623 <literallayout class='monospaced'>
4624 SRC_URI += "file://myconfig.cfg \
4625 file://eth.cfg \
4626 file://gfx.cfg"
4627 </literallayout>
4628 </para>
4629 </section>
4630
4631 <section id='fine-tuning-the-kernel-configuration-file'>
4632 <title>Fine-Tuning the Kernel Configuration File</title>
4633
4634 <para>
4635 You can make sure the <filename>.config</filename> file is as lean or efficient as
4636 possible by reading the output of the kernel configuration fragment audit,
4637 noting any issues, making changes to correct the issues, and then repeating.
4638 </para>
4639
4640 <para>
4641 As part of the kernel build process, the
4642 <filename>do_kernel_configcheck</filename> task runs.
4643 This task validates the kernel configuration by checking the final
4644 <filename>.config</filename> file against the input files.
4645 During the check, the task produces warning messages for the following
4646 issues:
4647 <itemizedlist>
4648 <listitem><para>Requested options that did not make the final
4649 <filename>.config</filename> file.</para></listitem>
4650 <listitem><para>Configuration items that appear twice in the same
4651 configuration fragment.</para></listitem>
4652 <listitem><para>Configuration items tagged as "required" that were overridden.
4653 </para></listitem>
4654 <listitem><para>A board overrides a non-board specific option.</para></listitem>
4655 <listitem><para>Listed options not valid for the kernel being processed.
4656 In other words, the option does not appear anywhere.</para></listitem>
4657 </itemizedlist>
4658 <note>
4659 The <filename>do_kernel_configcheck</filename> task can
4660 also optionally report if an option is overridden during
4661 processing.
4662 </note>
4663 </para>
4664
4665 <para>
4666 For each output warning, a message points to the file
4667 that contains a list of the options and a pointer to the config
4668 fragment that defines them.
4669 Collectively, the files are the key to streamlining the configuration.
4670 </para>
4671
4672 <para>
4673 To streamline the configuration, do the following:
4674 <orderedlist>
4675 <listitem><para>Start with a full configuration that you
4676 know works - it builds and boots successfully.
4677 This configuration file will be your baseline.
4678 </para></listitem>
4679 <listitem><para>Separately run the
4680 <filename>do_configme</filename> and
4681 <filename>do_kernel_configcheck</filename> tasks.
4682 </para></listitem>
4683 <listitem><para>Take the resulting list of files from the
4684 <filename>do_kernel_configcheck</filename> task
4685 warnings and do the following:
4686 <itemizedlist>
4687 <listitem><para>
4688 Drop values that are redefined in the fragment
4689 but do not change the final
4690 <filename>.config</filename> file.
4691 </para></listitem>
4692 <listitem><para>
4693 Analyze and potentially drop values from the
4694 <filename>.config</filename> file that override
4695 required configurations.
4696 </para></listitem>
4697 <listitem><para>
4698 Analyze and potentially remove non-board
4699 specific options.
4700 </para></listitem>
4701 <listitem><para>
4702 Remove repeated and invalid options.
4703 </para></listitem>
4704 </itemizedlist></para></listitem>
4705 <listitem><para>
4706 After you have worked through the output of the kernel
4707 configuration audit, you can re-run the
4708 <filename>do_configme</filename> and
4709 <filename>do_kernel_configcheck</filename> tasks to
4710 see the results of your changes.
4711 If you have more issues, you can deal with them as
4712 described in the previous step.
4713 </para></listitem>
4714 </orderedlist>
4715 </para>
4716
4717 <para>
4718 Iteratively working through steps two through four eventually yields
4719 a minimal, streamlined configuration file.
4720 Once you have the best <filename>.config</filename>, you can build the Linux
4721 Yocto kernel.
4722 </para>
4723 </section>
4724 </section>
4725
4726 <section id="patching-the-kernel">
4727 <title>Patching the Kernel</title>
4728
4729 <para>
4730 Patching the kernel involves changing or adding configurations to an existing kernel,
4731 changing or adding recipes to the kernel that are needed to support specific hardware features,
4732 or even altering the source code itself.
4733 <note>
4734 You can use the <filename>yocto-kernel</filename> script
4735 found in the <link linkend='source-directory'>Source Directory</link>
4736 under <filename>scripts</filename> to manage kernel patches and configuration.
4737 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>"
4738 section in the Yocto Project Board Support Packages (BSP) Developer's Guide for
4739 more information.</note>
4740 </para>
4741
4742 <para>
4743 This example creates a simple patch by adding some QEMU emulator console
4744 output at boot time through <filename>printk</filename> statements in the kernel's
4745 <filename>calibrate.c</filename> source code file.
4746 Applying the patch and booting the modified image causes the added
4747 messages to appear on the emulator's console.
4748 </para>
4749
4750 <para>
4751 The example assumes a clean build exists for the <filename>qemux86</filename>
4752 machine in a
4753 <link linkend='source-directory'>Source Directory</link>
4754 named <filename>poky</filename>.
4755 Furthermore, the <link linkend='build-directory'>Build Directory</link> is
4756 <filename>build</filename> and is located in <filename>poky</filename> and
4757 the kernel is based on the Linux 3.4 kernel.
4758 For general information on how to configure the most efficient build, see the
4759 "<ulink url='&YOCTO_DOCS_QS_URL;#building-image'>Building an Image</ulink>" section
4760 in the Yocto Project Quick Start.
4761 </para>
4762
4763 <para>
4764 Also, for more information on patching the kernel, see the
4765 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#applying-patches'>Applying Patches</ulink>"
4766 section in the Yocto Project Linux Kernel Development Manual.
4767 </para>
4768
4769 <section id='create-a-layer-for-your-changes'>
4770 <title>Create a Layer for your Changes</title>
4771
4772 <para>
4773 The first step is to create a layer so you can isolate your
4774 changes.
4775 Rather than use the <filename>yocto-layer</filename> script
4776 to create the layer, this example steps through the process
4777 by hand.
4778 If you want information on the script that creates a general
4779 layer, see the
4780 "<link linkend='creating-a-general-layer-using-the-yocto-layer-script'>Creating a General Layer Using the yocto-layer Script</link>"
4781 section.
4782 </para>
4783
4784 <para>
4785 These two commands create a directory you can use for your
4786 layer:
4787 <literallayout class='monospaced'>
4788 $ cd ~/poky
4789 $ mkdir meta-mylayer
4790 </literallayout>
4791 Creating a directory that follows the Yocto Project layer naming
4792 conventions sets up the layer for your changes.
4793 The layer is where you place your configuration files, append
4794 files, and patch files.
4795 To learn more about creating a layer and filling it with the
4796 files you need, see the "<link linkend='understanding-and-creating-layers'>Understanding
4797 and Creating Layers</link>" section.
4798 </para>
4799 </section>
4800
4801 <section id='finding-the-kernel-source-code'>
4802 <title>Finding the Kernel Source Code</title>
4803
4804 <para>
4805 Each time you build a kernel image, the kernel source code is fetched
4806 and unpacked into the following directory:
4807 <literallayout class='monospaced'>
4808 ${S}/linux
4809 </literallayout>
4810 See the "<link linkend='finding-the-temporary-source-code'>Finding the Temporary Source Code</link>"
4811 section and the
4812 <ulink url='&YOCTO_DOCS_REF_URL;#var-S'><filename>S</filename></ulink> variable
4813 for more information about where source is kept during a build.
4814 </para>
4815
4816 <para>
4817 For this example, we are going to patch the
4818 <filename>init/calibrate.c</filename> file
4819 by adding some simple console <filename>printk</filename> statements that we can
4820 see when we boot the image using QEMU.
4821 </para>
4822 </section>
4823
4824 <section id='creating-the-patch'>
4825 <title>Creating the Patch</title>
4826
4827 <para>
4828 Two methods exist by which you can create the patch:
4829 <link linkend='using-a-git-workflow'>Git workflow</link> and
4830 <link linkend='using-a-quilt-workflow'>Quilt workflow</link>.
4831 For kernel patches, the Git workflow is more appropriate.
4832 This section assumes the Git workflow and shows the steps specific to
4833 this example.
4834 <orderedlist>
4835 <listitem><para><emphasis>Change the working directory</emphasis>:
4836 Change to where the kernel source code is before making
4837 your edits to the <filename>calibrate.c</filename> file:
4838 <literallayout class='monospaced'>
4839 $ cd ~/poky/build/tmp/work/qemux86-poky-linux/linux-yocto-${PV}-${PR}/linux
4840 </literallayout>
4841 Because you are working in an established Git repository,
4842 you must be in this directory in order to commit your changes
4843 and create the patch file.
4844 <note>The <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink> and
4845 <ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink> variables
4846 represent the version and revision for the
4847 <filename>linux-yocto</filename> recipe.
4848 The <filename>PV</filename> variable includes the Git meta and machine
4849 hashes, which make the directory name longer than you might
4850 expect.
4851 </note></para></listitem>
4852 <listitem><para><emphasis>Edit the source file</emphasis>:
4853 Edit the <filename>init/calibrate.c</filename> file to have the
4854 following changes:
4855 <literallayout class='monospaced'>
4856 void calibrate_delay(void)
4857 {
4858 unsigned long lpj;
4859 static bool printed;
4860 int this_cpu = smp_processor_id();
4861
4862 printk("*************************************\n");
4863 printk("* *\n");
4864 printk("* HELLO YOCTO KERNEL *\n");
4865 printk("* *\n");
4866 printk("*************************************\n");
4867
4868 if (per_cpu(cpu_loops_per_jiffy, this_cpu)) {
4869 .
4870 .
4871 .
4872 </literallayout></para></listitem>
4873 <listitem><para><emphasis>Stage and commit your changes</emphasis>:
4874 These Git commands display the modified file, stage it, and then
4875 commit the file:
4876 <literallayout class='monospaced'>
4877 $ git status
4878 $ git add init/calibrate.c
4879 $ git commit -m "calibrate: Add printk example"
4880 </literallayout></para></listitem>
4881 <listitem><para><emphasis>Generate the patch file</emphasis>:
4882 This Git command creates the a patch file named
4883 <filename>0001-calibrate-Add-printk-example.patch</filename>
4884 in the current directory.
4885 <literallayout class='monospaced'>
4886 $ git format-patch -1
4887 </literallayout>
4888 </para></listitem>
4889 </orderedlist>
4890 </para>
4891 </section>
4892
4893 <section id='set-up-your-layer-for-the-build'>
4894 <title>Set Up Your Layer for the Build</title>
4895
4896 <para>These steps get your layer set up for the build:
4897 <orderedlist>
4898 <listitem><para><emphasis>Create additional structure</emphasis>:
4899 Create the additional layer structure:
4900 <literallayout class='monospaced'>
4901 $ cd ~/poky/meta-mylayer
4902 $ mkdir conf
4903 $ mkdir recipes-kernel
4904 $ mkdir recipes-kernel/linux
4905 $ mkdir recipes-kernel/linux/linux-yocto
4906 </literallayout>
4907 The <filename>conf</filename> directory holds your configuration files, while the
4908 <filename>recipes-kernel</filename> directory holds your append file and
4909 your patch file.</para></listitem>
4910 <listitem><para><emphasis>Create the layer configuration file</emphasis>:
4911 Move to the <filename>meta-mylayer/conf</filename> directory and create
4912 the <filename>layer.conf</filename> file as follows:
4913 <literallayout class='monospaced'>
4914 # We have a conf and classes directory, add to BBPATH
4915 BBPATH .= ":${LAYERDIR}"
4916
4917 # We have recipes-* directories, add to BBFILES
4918 BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
4919 ${LAYERDIR}/recipes-*/*/*.bbappend"
4920
4921 BBFILE_COLLECTIONS += "mylayer"
4922 BBFILE_PATTERN_mylayer = "^${LAYERDIR}/"
4923 BBFILE_PRIORITY_mylayer = "5"
4924 </literallayout>
4925 Notice <filename>mylayer</filename> as part of the last three
4926 statements.</para></listitem>
4927 <listitem><para><emphasis>Create the kernel recipe append file</emphasis>:
4928 Move to the <filename>meta-mylayer/recipes-kernel/linux</filename> directory and create
4929 the <filename>linux-yocto_3.4.bbappend</filename> file as follows:
4930 <literallayout class='monospaced'>
4931 FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
4932
4933 SRC_URI += "file://0001-calibrate-Add-printk-example.patch"
4934 </literallayout>
4935 The <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
4936 and <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
4937 statements enable the OpenEmbedded build system to find the patch file.
4938 For more information on using append files, see the
4939 "<link linkend='using-bbappend-files'>Using .bbappend Files</link>"
4940 section.
4941 </para></listitem>
4942 <listitem><para><emphasis>Put the patch file in your layer</emphasis>:
4943 Move the <filename>0001-calibrate-Add-printk-example.patch</filename> file to
4944 the <filename>meta-mylayer/recipes-kernel/linux/linux-yocto</filename>
4945 directory.</para></listitem>
4946 </orderedlist>
4947 </para>
4948 </section>
4949
4950 <section id='set-up-for-the-build'>
4951 <title>Set Up for the Build</title>
4952
4953 <para>
4954 Do the following to make sure the build parameters are set up for the example.
4955 Once you set up these build parameters, they do not have to change unless you
4956 change the target architecture of the machine you are building:
4957 <itemizedlist>
4958 <listitem><para><emphasis>Build for the correct target architecture:</emphasis> Your
4959 selected <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
4960 definition within the <filename>local.conf</filename> file in the
4961 <link linkend='build-directory'>Build Directory</link>
4962 specifies the target architecture used when building the Linux kernel.
4963 By default, <filename>MACHINE</filename> is set to
4964 <filename>qemux86</filename>, which specifies a 32-bit
4965 <trademark class='registered'>Intel</trademark> Architecture
4966 target machine suitable for the QEMU emulator.</para></listitem>
4967 <listitem><para><emphasis>Identify your <filename>meta-mylayer</filename>
4968 layer:</emphasis> The
4969 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBLAYERS'><filename>BBLAYERS</filename></ulink>
4970 variable in the
4971 <filename>bblayers.conf</filename> file found in the
4972 <filename>poky/build/conf</filename> directory needs to have the path to your local
4973 <filename>meta-mylayer</filename> layer.
4974 By default, the <filename>BBLAYERS</filename> variable contains paths to
4975 <filename>meta</filename>, <filename>meta-yocto</filename>, and
4976 <filename>meta-yocto-bsp</filename> in the
4977 <filename>poky</filename> Git repository.
4978 Add the path to your <filename>meta-mylayer</filename> location:
4979 <literallayout class='monospaced'>
4980 BBLAYERS ?= " \
4981 $HOME/poky/meta \
4982 $HOME/poky/meta-yocto \
4983 $HOME/poky/meta-yocto-bsp \
4984 $HOME/poky/meta-mylayer \
4985 "
4986
4987 BBLAYERS_NON_REMOVABLE ?= " \
4988 $HOME/poky/meta \
4989 $HOME/poky/meta-yocto \
4990 "
4991 </literallayout></para></listitem>
4992 </itemizedlist>
4993 </para>
4994 </section>
4995
4996 <section id='build-the-modified-qemu-kernel-image'>
4997 <title>Build the Modified QEMU Kernel Image</title>
4998
4999 <para>
5000 The following steps build your modified kernel image:
5001 <orderedlist>
5002 <listitem><para><emphasis>Be sure your build environment is initialized</emphasis>:
5003 Your environment should be set up since you previously sourced
5004 the
5005 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
5006 script.
5007 If it is not, source the script again from <filename>poky</filename>.
5008 <literallayout class='monospaced'>
5009 $ cd ~/poky
5010 $ source &OE_INIT_FILE;
5011 </literallayout>
5012 </para></listitem>
5013 <listitem><para><emphasis>Clean up</emphasis>:
5014 Be sure to clean the shared state out by using BitBake
5015 to run from within the Build Directory the
5016 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-cleansstate'><filename>do_cleansstate</filename></ulink>
5017 task as follows:
5018 <literallayout class='monospaced'>
5019 $ bitbake -c cleansstate linux-yocto
5020 </literallayout></para>
5021 <para>
5022 <note>
5023 Never remove any files by hand from the
5024 <filename>tmp/deploy</filename>
5025 directory inside the
5026 <link linkend='build-directory'>Build Directory</link>.
5027 Always use the various BitBake clean tasks to
5028 clear out previous build artifacts.
5029 For information on the clean tasks, see the
5030 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-clean'><filename>do_clean</filename></ulink>",
5031 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-cleanall'><filename>do_cleanall</filename></ulink>",
5032 and
5033 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-cleansstate'><filename>do_cleansstate</filename></ulink>"
5034 sections all in the Yocto Project Reference
5035 Manual.
5036 </note>
5037 </para></listitem>
5038 <listitem><para><emphasis>Build the image</emphasis>:
5039 Next, build the kernel image using this command:
5040 <literallayout class='monospaced'>
5041 $ bitbake -k linux-yocto
5042 </literallayout></para></listitem>
5043 </orderedlist>
5044 </para>
5045 </section>
5046
5047 <section id='boot-the-image-and-verify-your-changes'>
5048 <title>Boot the Image and Verify Your Changes</title>
5049
5050 <para>
5051 These steps boot the image and allow you to see the changes
5052 <orderedlist>
5053 <listitem><para><emphasis>Boot the image</emphasis>:
5054 Boot the modified image in the QEMU emulator
5055 using this command:
5056 <literallayout class='monospaced'>
5057 $ runqemu qemux86
5058 </literallayout></para></listitem>
5059 <listitem><para><emphasis>Verify the changes</emphasis>:
5060 Log into the machine using <filename>root</filename> with no password and then
5061 use the following shell command to scroll through the console's boot output.
5062 <literallayout class='monospaced'>
5063 # dmesg | less
5064 </literallayout>
5065 You should see the results of your <filename>printk</filename> statements
5066 as part of the output.</para></listitem>
5067 </orderedlist>
5068 </para>
5069 </section>
5070 </section>
5071
5072 <section id='making-images-more-secure'>
5073 <title>Making Images More Secure</title>
5074
5075 <para>
5076 Security is of increasing concern for embedded devices.
5077 Consider the issues and problems discussed in just this
5078 sampling of work found across the Internet:
5079 <itemizedlist>
5080 <listitem><para><emphasis>
5081 "<ulink url='https://www.schneier.com/blog/archives/2014/01/security_risks_9.html'>Security Risks of Embedded Systems</ulink>"</emphasis>
5082 by Bruce Schneier
5083 </para></listitem>
5084 <listitem><para><emphasis>
5085 "<ulink url='http://internetcensus2012.bitbucket.org/paper.html'>Internet Census 2012</ulink>"</emphasis>
5086 by Carna Botnet</para></listitem>
5087 <listitem><para><emphasis>
5088 "<ulink url='http://elinux.org/images/6/6f/Security-issues.pdf'>Security Issues for Embedded Devices</ulink>"</emphasis>
5089 by Jake Edge
5090 </para></listitem>
5091 <listitem><para><emphasis>
5092 "<ulink url='https://www.nccgroup.com/media/18475/exploiting_security_gateways_via_their_web_interfaces.pdf'>They ought to know better: Exploiting Security
5093Gateways via their Web Interfaces</ulink>"</emphasis>
5094 by Ben Williams
5095 </para></listitem>
5096 </itemizedlist>
5097 </para>
5098
5099 <para>
5100 When securing your image is of concern, there are steps, tools,
5101 and variables that you can consider to help you reach the
5102 security goals you need for your particular device.
5103 Not all situations are identical when it comes to making an
5104 image secure.
5105 Consequently, this section provides some guidance and suggestions
5106 for consideration when you want to make your image more secure.
5107 <note>
5108 Because the security requirements and risks are
5109 different for every type of device, this section cannot
5110 provide a complete reference on securing your custom OS.
5111 It is strongly recommended that you also consult other sources
5112 of information on embedded Linux system hardening and on
5113 security.
5114 </note>
5115 </para>
5116
5117 <section id='general-considerations'>
5118 <title>General Considerations</title>
5119
5120 <para>
5121 General considerations exist that help you create more
5122 secure images.
5123 You should consider the following suggestions to help
5124 make your device more secure:
5125 <itemizedlist>
5126 <listitem><para>
5127 Scan additional code you are adding to the system
5128 (e.g. application code) by using static analysis
5129 tools.
5130 Look for buffer overflows and other potential
5131 security problems.
5132 </para></listitem>
5133 <listitem><para>
5134 Pay particular attention to the security for
5135 any web-based administration interface.
5136 </para>
5137 <para>Web interfaces typically need to perform
5138 administrative functions and tend to need to run with
5139 elevated privileges.
5140 Thus, the consequences resulting from the interface's
5141 security becoming compromised can be serious.
5142 Look for common web vulnerabilities such as
5143 cross-site-scripting (XSS), unvalidated inputs,
5144 and so forth.</para>
5145 <para>As with system passwords, the default credentials
5146 for accessing a web-based interface should not be the
5147 same across all devices.
5148 This is particularly true if the interface is enabled
5149 by default as it can be assumed that many end-users
5150 will not change the credentials.
5151 </para></listitem>
5152 <listitem><para>
5153 Ensure you can update the software on the device to
5154 mitigate vulnerabilities discovered in the future.
5155 This consideration especially applies when your
5156 device is network-enabled.
5157 </para></listitem>
5158 <listitem><para>
5159 Ensure you remove or disable debugging functionality
5160 before producing the final image.
5161 For information on how to do this, see the
5162 "<link linkend='considerations-specific-to-the-openembedded-build-system'>Considerations Specific to the OpenEmbedded Build System</link>"
5163 section.
5164 </para></listitem>
5165 <listitem><para>
5166 Ensure you have no network services listening that
5167 are not needed.
5168 </para></listitem>
5169 <listitem><para>
5170 Remove any software from the image that is not needed.
5171 </para></listitem>
5172 <listitem><para>
5173 Enable hardware support for secure boot functionality
5174 when your device supports this functionality.
5175 </para></listitem>
5176 </itemizedlist>
5177 </para>
5178 </section>
5179
5180 <section id='security-flags'>
5181 <title>Security Flags</title>
5182
5183 <para>
5184 The Yocto Project has security flags that you can enable that
5185 help make your build output more secure.
5186 The security flags are in the
5187 <filename>meta/conf/distro/include/security_flags.inc</filename>
5188 file in your
5189 <link linkend='source-directory'>Source Directory</link>
5190 (e.g. <filename>poky</filename>).
5191 <note>
5192 Depending on the recipe, certain security flags are enabled
5193 and disabled by default.
5194 </note>
5195 </para>
5196
5197 <para>
5198<!--
5199 The GCC/LD flags in <filename>security_flags.inc</filename>
5200 enable more secure code generation.
5201 By including the <filename>security_flags.inc</filename>
5202 file, you enable flags to the compiler and linker that cause
5203 them to generate more secure code.
5204 <note>
5205 The GCC/LD flags are enabled by default in the
5206 <filename>poky-lsb</filename> distribution.
5207 </note>
5208-->
5209 Use the following line in your
5210 <filename>local.conf</filename> file or in your custom
5211 distribution configuration file to enable the security
5212 compiler and linker flags for your build:
5213 <literallayout class='monospaced'>
5214 require conf/distro/include/security_flags.inc
5215 </literallayout>
5216 </para>
5217 </section>
5218
5219 <section id='considerations-specific-to-the-openembedded-build-system'>
5220 <title>Considerations Specific to the OpenEmbedded Build System</title>
5221
5222 <para>
5223 You can take some steps that are specific to the
5224 OpenEmbedded build system to make your images more secure:
5225 <itemizedlist>
5226 <listitem><para>
5227 Ensure "debug-tweaks" is not one of your selected
5228 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink>.
5229 When creating a new project, the default is to provide you
5230 with an initial <filename>local.conf</filename> file that
5231 enables this feature using the
5232 <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_IMAGE_FEATURES'><filename>EXTRA_IMAGE_FEATURES</filename></ulink> variable with the line:
5233 <literallayout class='monospaced'>
5234 EXTRA_IMAGE_FEATURES = "debug-tweaks"
5235 </literallayout>
5236 To disable that feature, simply comment out that line in your
5237 <filename>local.conf</filename> file, or
5238 make sure <filename>IMAGE_FEATURES</filename> does not contain
5239 "debug-tweaks" before producing your final image.
5240 Among other things, leaving this in place sets the
5241 root password as blank, which makes logging in for
5242 debugging or inspection easy during
5243 development but also means anyone can easily log in
5244 during production.
5245 </para></listitem>
5246 <listitem><para>
5247 It is possible to set a root password for the image
5248 and also to set passwords for any extra users you might
5249 add (e.g. administrative or service type users).
5250 When you set up passwords for multiple images or
5251 users, you should not duplicate passwords.
5252 </para>
5253 <para>
5254 To set up passwords, use the
5255 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-extrausers'><filename>extrausers</filename></ulink>
5256 class, which is the preferred method.
5257 For an example on how to set up both root and user
5258 passwords, see the
5259 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-extrausers'><filename>extrausers.bbclass</filename></ulink>"
5260 section.
5261 <note>
5262 When adding extra user accounts or setting a
5263 root password, be cautious about setting the
5264 same password on every device.
5265 If you do this, and the password you have set
5266 is exposed, then every device is now potentially
5267 compromised.
5268 If you need this access but want to ensure
5269 security, consider setting a different,
5270 random password for each device.
5271 Typically, you do this as a separate step after
5272 you deploy the image onto the device.
5273 </note>
5274 </para></listitem>
5275 <listitem><para>
5276 Consider enabling a Mandatory Access Control (MAC)
5277 framework such as SMACK or SELinux and tuning it
5278 appropriately for your device's usage.
5279 You can find more information in the
5280 <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/meta-selinux/'><filename>meta-selinux</filename></ulink>
5281 layer.
5282 </para></listitem>
5283 </itemizedlist>
5284 </para>
5285
5286 <para>
5287 </para>
5288 </section>
5289
5290 <section id='tools-for-hardening-your-image'>
5291 <title>Tools for Hardening Your Image</title>
5292
5293 <para>
5294 The Yocto Project provides tools for making your image
5295 more secure.
5296 You can find these tools in the
5297 <filename>meta-security</filename> layer of the
5298 <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi'>Yocto Project Source Repositories</ulink>.
5299 </para>
5300 </section>
5301 </section>
5302
5303 <section id='creating-your-own-distribution'>
5304 <title>Creating Your Own Distribution</title>
5305
5306 <para>
5307 When you build an image using the Yocto Project and
5308 do not alter any distribution
5309 <link linkend='metadata'>Metadata</link>, you are creating a
5310 Poky distribution.
5311 If you wish to gain more control over package alternative
5312 selections, compile-time options, and other low-level
5313 configurations, you can create your own distribution.
5314 </para>
5315
5316 <para>
5317 To create your own distribution, the basic steps consist of
5318 creating your own distribution layer, creating your own
5319 distribution configuration file, and then adding any needed
5320 code and Metadata to the layer.
5321 The following steps provide some more detail:
5322 <itemizedlist>
5323 <listitem><para><emphasis>Create a layer for your new distro:</emphasis>
5324 Create your distribution layer so that you can keep your
5325 Metadata and code for the distribution separate.
5326 It is strongly recommended that you create and use your own
5327 layer for configuration and code.
5328 Using your own layer as compared to just placing
5329 configurations in a <filename>local.conf</filename>
5330 configuration file makes it easier to reproduce the same
5331 build configuration when using multiple build machines.
5332 See the
5333 "<link linkend='creating-a-general-layer-using-the-yocto-layer-script'>Creating a General Layer Using the yocto-layer Script</link>"
5334 section for information on how to quickly set up a layer.
5335 </para></listitem>
5336 <listitem><para><emphasis>Create the distribution configuration file:</emphasis>
5337 The distribution configuration file needs to be created in
5338 the <filename>conf/distro</filename> directory of your
5339 layer.
5340 You need to name it using your distribution name
5341 (e.g. <filename>mydistro.conf</filename>).
5342 <note>
5343 The
5344 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO'><filename>DISTRO</filename></ulink>
5345 variable in your
5346 <filename>local.conf</filename> file determines the
5347 name of your distribution.
5348 </note></para>
5349 <para>You can split out parts of your configuration file
5350 into include files and then "require" them from within
5351 your distribution configuration file.
5352 Be sure to place the include files in the
5353 <filename>conf/distro/include</filename> directory of
5354 your layer.
5355 A common example usage of include files would be to
5356 separate out the selection of desired version and revisions
5357 for individual recipes.
5358</para>
5359 <para>Your configuration file needs to set the following
5360 required variables:
5361 <literallayout class='monospaced'>
5362 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_NAME'><filename>DISTRO_NAME</filename></ulink>
5363 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_VERSION'><filename>DISTRO_VERSION</filename></ulink>
5364 </literallayout>
5365 These following variables are optional and you typically
5366 set them from the distribution configuration file:
5367 <literallayout class='monospaced'>
5368 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></ulink>
5369 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_EXTRA_RDEPENDS'><filename>DISTRO_EXTRA_RDEPENDS</filename></ulink>
5370 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_EXTRA_RRECOMMENDS'><filename>DISTRO_EXTRA_RRECOMMENDS</filename></ulink>
5371 <ulink url='&YOCTO_DOCS_REF_URL;#var-TCLIBC'><filename>TCLIBC</filename></ulink>
5372 </literallayout>
5373 <tip>
5374 If you want to base your distribution configuration file
5375 on the very basic configuration from OE-Core, you
5376 can use
5377 <filename>conf/distro/defaultsetup.conf</filename> as
5378 a reference and just include variables that differ
5379 as compared to <filename>defaultsetup.conf</filename>.
5380 Alternatively, you can create a distribution
5381 configuration file from scratch using the
5382 <filename>defaultsetup.conf</filename> file
5383 or configuration files from other distributions
5384 such as Poky or Angstrom as references.
5385 </tip></para></listitem>
5386 <listitem><para><emphasis>Provide miscellaneous variables:</emphasis>
5387 Be sure to define any other variables for which you want to
5388 create a default or enforce as part of the distribution
5389 configuration.
5390 You can include nearly any variable from the
5391 <filename>local.conf</filename> file.
5392 The variables you use are not limited to the list in the
5393 previous bulleted item.</para></listitem>
5394 <listitem><para><emphasis>Point to Your distribution configuration file:</emphasis>
5395 In your <filename>local.conf</filename> file in the
5396 <link linkend='build-directory'>Build Directory</link>,
5397 set your
5398 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO'><filename>DISTRO</filename></ulink>
5399 variable to point to your distribution's configuration file.
5400 For example, if your distribution's configuration file is
5401 named <filename>mydistro.conf</filename>, then you point
5402 to it as follows:
5403 <literallayout class='monospaced'>
5404 DISTRO = "mydistro"
5405 </literallayout></para></listitem>
5406 <listitem><para><emphasis>Add more to the layer if necessary:</emphasis>
5407 Use your layer to hold other information needed for the
5408 distribution:
5409 <itemizedlist>
5410 <listitem><para>Add recipes for installing
5411 distro-specific configuration files that are not
5412 already installed by another recipe.
5413 If you have distro-specific configuration files
5414 that are included by an existing recipe, you should
5415 add an append file (<filename>.bbappend</filename>)
5416 for those.
5417 For general information and recommendations
5418 on how to add recipes to your layer, see the
5419 "<link linkend='creating-your-own-layer'>Creating Your Own Layer</link>"
5420 and
5421 "<link linkend='best-practices-to-follow-when-creating-layers'>Best Practices to Follow When Creating Layers</link>"
5422 sections.</para></listitem>
5423 <listitem><para>Add any image recipes that are specific
5424 to your distribution.</para></listitem>
5425 <listitem><para>Add a <filename>psplash</filename>
5426 append file for a branded splash screen.
5427 For information on append files, see the
5428 "<link linkend='using-bbappend-files'>Using .bbappend Files</link>"
5429 section.</para></listitem>
5430 <listitem><para>Add any other append files to make
5431 custom changes that are specific to individual
5432 recipes.</para></listitem>
5433 </itemizedlist></para></listitem>
5434 </itemizedlist>
5435 </para>
5436 </section>
5437
5438 <section id='creating-a-custom-template-configuration-directory'>
5439 <title>Creating a Custom Template Configuration Directory</title>
5440
5441 <para>
5442 If you are producing your own customized version
5443 of the build system for use by other users, you might
5444 want to customize the message shown by the setup script or
5445 you might want to change the template configuration files (i.e.
5446 <filename>local.conf</filename> and
5447 <filename>bblayers.conf</filename>) that are created in
5448 a new build directory.
5449 </para>
5450
5451 <para>
5452 The OpenEmbedded build system uses the environment variable
5453 <filename>TEMPLATECONF</filename> to locate the directory
5454 from which it gathers configuration information that ultimately
5455 ends up in the
5456 <link linkend='build-directory'>Build Directory's</link>
5457 <filename>conf</filename> directory.
5458 By default, <filename>TEMPLATECONF</filename> is set as
5459 follows in the <filename>poky</filename> repository:
5460 <literallayout class='monospaced'>
5461 TEMPLATECONF=${TEMPLATECONF:-meta-yocto/conf}
5462 </literallayout>
5463 This is the directory used by the build system to find templates
5464 from which to build some key configuration files.
5465 If you look at this directory, you will see the
5466 <filename>bblayers.conf.sample</filename>,
5467 <filename>local.conf.sample</filename>, and
5468 <filename>conf-notes.txt</filename> files.
5469 The build system uses these files to form the respective
5470 <filename>bblayers.conf</filename> file,
5471 <filename>local.conf</filename> file, and display the list of
5472 BitBake targets when running the setup script.
5473 </para>
5474
5475 <para>
5476 To override these default configuration files with
5477 configurations you want used within every new
5478 Build Directory, simply set the
5479 <filename>TEMPLATECONF</filename> variable to your directory.
5480 The <filename>TEMPLATECONF</filename> variable is set in the
5481 <filename>.templateconf</filename> file, which is in the
5482 top-level
5483 <link linkend='source-directory'>Source Directory</link>
5484 folder (e.g. <filename>poky</filename>).
5485 Edit the <filename>.templateconf</filename> so that it can locate
5486 your directory.
5487 </para>
5488
5489 <para>
5490 Best practices dictate that you should keep your
5491 template configuration directory in your custom distribution layer.
5492 For example, suppose you have a layer named
5493 <filename>meta-mylayer</filename> located in your home directory
5494 and you want your template configuration directory named
5495 <filename>myconf</filename>.
5496 Changing the <filename>.templateconf</filename> as follows
5497 causes the OpenEmbedded build system to look in your directory
5498 and base its configuration files on the
5499 <filename>*.sample</filename> configuration files it finds.
5500 The final configuration files (i.e.
5501 <filename>local.conf</filename> and
5502 <filename>bblayers.conf</filename> ultimately still end up in
5503 your Build Directory, but they are based on your
5504 <filename>*.sample</filename> files.
5505 <literallayout class='monospaced'>
5506 TEMPLATECONF=${TEMPLATECONF:-meta-mylayer/myconf}
5507 </literallayout>
5508 </para>
5509
5510 <para>
5511 Aside from the <filename>*.sample</filename> configuration files,
5512 the <filename>conf-notes.txt</filename> also resides in the
5513 default <filename>meta-yocto/conf</filename> directory.
5514 The scripts that set up the build environment
5515 (i.e.
5516 <ulink url="&YOCTO_DOCS_REF_URL;#structure-core-script"><filename>&OE_INIT_FILE;</filename></ulink>
5517 and
5518 <ulink url="&YOCTO_DOCS_REF_URL;#structure-memres-core-script"><filename>oe-init-build-env-memres</filename></ulink>)
5519 use this file to display BitBake targets as part of the script
5520 output.
5521 Customizing this <filename>conf-notes.txt</filename> file is a
5522 good way to make sure your list of custom targets appears
5523 as part of the script's output.
5524 </para>
5525
5526 <para>
5527 Here is the default list of targets displayed as a result of
5528 running either of the setup scripts:
5529 <literallayout class='monospaced'>
5530 You can now run 'bitbake &lt;target&gt;'
5531
5532 Common targets are:
5533 core-image-minimal
5534 core-image-sato
5535 meta-toolchain
5536 adt-installer
5537 meta-ide-support
5538 </literallayout>
5539 </para>
5540
5541 <para>
5542 Changing the listed common targets is as easy as editing your
5543 version of <filename>conf-notes.txt</filename> in your
5544 custom template configuration directory and making sure you
5545 have <filename>TEMPLATECONF</filename> set to your directory.
5546 </para>
5547 </section>
5548
5549 <section id='building-a-tiny-system'>
5550 <title>Building a Tiny System</title>
5551
5552 <para>
5553 Very small distributions have some significant advantages such
5554 as requiring less on-die or in-package memory (cheaper), better
5555 performance through efficient cache usage, lower power requirements
5556 due to less memory, faster boot times, and reduced development
5557 overhead.
5558 Some real-world examples where a very small distribution gives
5559 you distinct advantages are digital cameras, medical devices,
5560 and small headless systems.
5561 </para>
5562
5563 <para>
5564 This section presents information that shows you how you can
5565 trim your distribution to even smaller sizes than the
5566 <filename>poky-tiny</filename> distribution, which is around
5567 5 Mbytes, that can be built out-of-the-box using the Yocto Project.
5568 </para>
5569
5570 <section id='tiny-system-overview'>
5571 <title>Overview</title>
5572
5573 <para>
5574 The following list presents the overall steps you need to
5575 consider and perform to create distributions with smaller
5576 root filesystems, achieve faster boot times, maintain your critical
5577 functionality, and avoid initial RAM disks:
5578 <itemizedlist>
5579 <listitem><para>
5580 <link linkend='goals-and-guiding-principles'>Determine your goals and guiding principles.</link>
5581 </para></listitem>
5582 <listitem><para>
5583 <link linkend='understand-what-gives-your-image-size'>Understand what contributes to your image size.</link>
5584 </para></listitem>
5585 <listitem><para>
5586 <link linkend='trim-the-root-filesystem'>Reduce the size of the root filesystem.</link>
5587 </para></listitem>
5588 <listitem><para>
5589 <link linkend='trim-the-kernel'>Reduce the size of the kernel.</link>
5590 </para></listitem>
5591 <listitem><para>
5592 <link linkend='remove-package-management-requirements'>Eliminate packaging requirements.</link>
5593 </para></listitem>
5594 <listitem><para>
5595 <link linkend='look-for-other-ways-to-minimize-size'>Look for other ways to minimize size.</link>
5596 </para></listitem>
5597 <listitem><para>
5598 <link linkend='iterate-on-the-process'>Iterate on the process.</link>
5599 </para></listitem>
5600 </itemizedlist>
5601 </para>
5602 </section>
5603
5604 <section id='goals-and-guiding-principles'>
5605 <title>Goals and Guiding Principles</title>
5606
5607 <para>
5608 Before you can reach your destination, you need to know
5609 where you are going.
5610 Here is an example list that you can use as a guide when
5611 creating very small distributions:
5612 <itemizedlist>
5613 <listitem><para>Determine how much space you need
5614 (e.g. a kernel that is 1 Mbyte or less and
5615 a root filesystem that is 3 Mbytes or less).
5616 </para></listitem>
5617 <listitem><para>Find the areas that are currently
5618 taking 90% of the space and concentrate on reducing
5619 those areas.
5620 </para></listitem>
5621 <listitem><para>Do not create any difficult "hacks"
5622 to achieve your goals.</para></listitem>
5623 <listitem><para>Leverage the device-specific
5624 options.</para></listitem>
5625 <listitem><para>Work in a separate layer so that you
5626 keep changes isolated.
5627 For information on how to create layers, see
5628 the "<link linkend='understanding-and-creating-layers'>Understanding and Creating Layers</link>" section.
5629 </para></listitem>
5630 </itemizedlist>
5631 </para>
5632 </section>
5633
5634 <section id='understand-what-gives-your-image-size'>
5635 <title>Understand What Contributes to Your Image Size</title>
5636
5637 <para>
5638 It is easiest to have something to start with when creating
5639 your own distribution.
5640 You can use the Yocto Project out-of-the-box to create the
5641 <filename>poky-tiny</filename> distribution.
5642 Ultimately, you will want to make changes in your own
5643 distribution that are likely modeled after
5644 <filename>poky-tiny</filename>.
5645 <note>
5646 To use <filename>poky-tiny</filename> in your build,
5647 set the
5648 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO'><filename>DISTRO</filename></ulink>
5649 variable in your
5650 <filename>local.conf</filename> file to "poky-tiny"
5651 as described in the
5652 "<link linkend='creating-your-own-distribution'>Creating Your Own Distribution</link>"
5653 section.
5654 </note>
5655 </para>
5656
5657 <para>
5658 Understanding some memory concepts will help you reduce the
5659 system size.
5660 Memory consists of static, dynamic, and temporary memory.
5661 Static memory is the TEXT (code), DATA (initialized data
5662 in the code), and BSS (uninitialized data) sections.
5663 Dynamic memory represents memory that is allocated at runtime:
5664 stacks, hash tables, and so forth.
5665 Temporary memory is recovered after the boot process.
5666 This memory consists of memory used for decompressing
5667 the kernel and for the <filename>__init__</filename>
5668 functions.
5669 </para>
5670
5671 <para>
5672 To help you see where you currently are with kernel and root
5673 filesystem sizes, you can use two tools found in the
5674 <link linkend='source-directory'>Source Directory</link> in
5675 the <filename>scripts/tiny/</filename> directory:
5676 <itemizedlist>
5677 <listitem><para><filename>ksize.py</filename>: Reports
5678 component sizes for the kernel build objects.
5679 </para></listitem>
5680 <listitem><para><filename>dirsize.py</filename>: Reports
5681 component sizes for the root filesystem.</para></listitem>
5682 </itemizedlist>
5683 This next tool and command help you organize configuration
5684 fragments and view file dependencies in a human-readable form:
5685 <itemizedlist>
5686 <listitem><para><filename>merge_config.sh</filename>:
5687 Helps you manage configuration files and fragments
5688 within the kernel.
5689 With this tool, you can merge individual configuration
5690 fragments together.
5691 The tool allows you to make overrides and warns you
5692 of any missing configuration options.
5693 The tool is ideal for allowing you to iterate on
5694 configurations, create minimal configurations, and
5695 create configuration files for different machines
5696 without having to duplicate your process.</para>
5697 <para>The <filename>merge_config.sh</filename> script is
5698 part of the Linux Yocto kernel Git repositories
5699 (i.e. <filename>linux-yocto-3.14</filename>,
5700 <filename>linux-yocto-3.10</filename>,
5701 <filename>linux-yocto-3.8</filename>, and so forth)
5702 in the
5703 <filename>scripts/kconfig</filename> directory.</para>
5704 <para>For more information on configuration fragments,
5705 see the
5706 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#generating-configuration-files'>Generating Configuration Files</ulink>"
5707 section of the Yocto Project Linux Kernel Development
5708 Manual and the "<link linkend='creating-config-fragments'>Creating Configuration Fragments</link>"
5709 section, which is in this manual.</para></listitem>
5710 <listitem><para><filename>bitbake -u depexp -g <replaceable>bitbake_target</replaceable></filename>:
5711 Using the BitBake command with these options brings up
5712 a Dependency Explorer from which you can view file
5713 dependencies.
5714 Understanding these dependencies allows you to make
5715 informed decisions when cutting out various pieces of the
5716 kernel and root filesystem.</para></listitem>
5717 </itemizedlist>
5718 </para>
5719 </section>
5720
5721 <section id='trim-the-root-filesystem'>
5722 <title>Trim the Root Filesystem</title>
5723
5724 <para>
5725 The root filesystem is made up of packages for booting,
5726 libraries, and applications.
5727 To change things, you can configure how the packaging happens,
5728 which changes the way you build them.
5729 You can also modify the filesystem itself or select a different
5730 filesystem.
5731 </para>
5732
5733 <para>
5734 First, find out what is hogging your root filesystem by running the
5735 <filename>dirsize.py</filename> script from your root directory:
5736 <literallayout class='monospaced'>
5737 $ cd <replaceable>root-directory-of-image</replaceable>
5738 $ dirsize.py 100000 > dirsize-100k.log
5739 $ cat dirsize-100k.log
5740 </literallayout>
5741 You can apply a filter to the script to ignore files under
5742 a certain size.
5743 The previous example filters out any files below 100 Kbytes.
5744 The sizes reported by the tool are uncompressed, and thus
5745 will be smaller by a relatively constant factor in a
5746 compressed root filesystem.
5747 When you examine your log file, you can focus on areas of the
5748 root filesystem that take up large amounts of memory.
5749 </para>
5750
5751 <para>
5752 You need to be sure that what you eliminate does not cripple
5753 the functionality you need.
5754 One way to see how packages relate to each other is by using
5755 the Dependency Explorer UI with the BitBake command:
5756 <literallayout class='monospaced'>
5757 $ cd <replaceable>image-directory</replaceable>
5758 $ bitbake -u depexp -g <replaceable>image</replaceable>
5759 </literallayout>
5760 Use the interface to select potential packages you wish to
5761 eliminate and see their dependency relationships.
5762 </para>
5763
5764 <para>
5765 When deciding how to reduce the size, get rid of packages that
5766 result in minimal impact on the feature set.
5767 For example, you might not need a VGA display.
5768 Or, you might be able to get by with <filename>devtmpfs</filename>
5769 and <filename>mdev</filename> instead of
5770 <filename>udev</filename>.
5771 </para>
5772
5773 <para>
5774 Use your <filename>local.conf</filename> file to make changes.
5775 For example, to eliminate <filename>udev</filename> and
5776 <filename>glib</filename>, set the following in the
5777 local configuration file:
5778 <literallayout class='monospaced'>
5779 VIRTUAL-RUNTIME_dev_manager = ""
5780 </literallayout>
5781 </para>
5782
5783 <para>
5784 Finally, you should consider exactly the type of root
5785 filesystem you need to meet your needs while also reducing
5786 its size.
5787 For example, consider <filename>cramfs</filename>,
5788 <filename>squashfs</filename>, <filename>ubifs</filename>,
5789 <filename>ext2</filename>, or an <filename>initramfs</filename>
5790 using <filename>initramfs</filename>.
5791 Be aware that <filename>ext3</filename> requires a 1 Mbyte
5792 journal.
5793 If you are okay with running read-only, you do not need this
5794 journal.
5795 </para>
5796
5797 <note>
5798 After each round of elimination, you need to rebuild your
5799 system and then use the tools to see the effects of your
5800 reductions.
5801 </note>
5802
5803
5804 </section>
5805
5806 <section id='trim-the-kernel'>
5807 <title>Trim the Kernel</title>
5808
5809 <para>
5810 The kernel is built by including policies for hardware-independent
5811 aspects.
5812 What subsystems do you enable?
5813 For what architecture are you building?
5814 Which drivers do you build by default?
5815 <note>You can modify the kernel source if you want to help
5816 with boot time.
5817 </note>
5818 </para>
5819
5820 <para>
5821 Run the <filename>ksize.py</filename> script from the top-level
5822 Linux build directory to get an idea of what is making up
5823 the kernel:
5824 <literallayout class='monospaced'>
5825 $ cd <replaceable>top-level-linux-build-directory</replaceable>
5826 $ ksize.py > ksize.log
5827 $ cat ksize.log
5828 </literallayout>
5829 When you examine the log, you will see how much space is
5830 taken up with the built-in <filename>.o</filename> files for
5831 drivers, networking, core kernel files, filesystem, sound,
5832 and so forth.
5833 The sizes reported by the tool are uncompressed, and thus
5834 will be smaller by a relatively constant factor in a compressed
5835 kernel image.
5836 Look to reduce the areas that are large and taking up around
5837 the "90% rule."
5838 </para>
5839
5840 <para>
5841 To examine, or drill down, into any particular area, use the
5842 <filename>-d</filename> option with the script:
5843 <literallayout class='monospaced'>
5844 $ ksize.py -d > ksize.log
5845 </literallayout>
5846 Using this option breaks out the individual file information
5847 for each area of the kernel (e.g. drivers, networking, and
5848 so forth).
5849 </para>
5850
5851 <para>
5852 Use your log file to see what you can eliminate from the kernel
5853 based on features you can let go.
5854 For example, if you are not going to need sound, you do not
5855 need any drivers that support sound.
5856 </para>
5857
5858 <para>
5859 After figuring out what to eliminate, you need to reconfigure
5860 the kernel to reflect those changes during the next build.
5861 You could run <filename>menuconfig</filename> and make all your
5862 changes at once.
5863 However, that makes it difficult to see the effects of your
5864 individual eliminations and also makes it difficult to replicate
5865 the changes for perhaps another target device.
5866 A better method is to start with no configurations using
5867 <filename>allnoconfig</filename>, create configuration
5868 fragments for individual changes, and then manage the
5869 fragments into a single configuration file using
5870 <filename>merge_config.sh</filename>.
5871 The tool makes it easy for you to iterate using the
5872 configuration change and build cycle.
5873 </para>
5874
5875 <para>
5876 Each time you make configuration changes, you need to rebuild
5877 the kernel and check to see what impact your changes had on
5878 the overall size.
5879 </para>
5880 </section>
5881
5882 <section id='remove-package-management-requirements'>
5883 <title>Remove Package Management Requirements</title>
5884
5885 <para>
5886 Packaging requirements add size to the image.
5887 One way to reduce the size of the image is to remove all the
5888 packaging requirements from the image.
5889 This reduction includes both removing the package manager
5890 and its unique dependencies as well as removing the package
5891 management data itself.
5892 </para>
5893
5894 <para>
5895 To eliminate all the packaging requirements for an image,
5896 be sure that "package-management" is not part of your
5897 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink>
5898 statement for the image.
5899 When you remove this feature, you are removing the package
5900 manager as well as its dependencies from the root filesystem.
5901 </para>
5902 </section>
5903
5904 <section id='look-for-other-ways-to-minimize-size'>
5905 <title>Look for Other Ways to Minimize Size</title>
5906
5907 <para>
5908 Depending on your particular circumstances, other areas that you
5909 can trim likely exist.
5910 The key to finding these areas is through tools and methods
5911 described here combined with experimentation and iteration.
5912 Here are a couple of areas to experiment with:
5913 <itemizedlist>
5914 <listitem><para><filename>glibc</filename>:
5915 In general, follow this process:
5916 <orderedlist>
5917 <listitem><para>Remove <filename>glibc</filename>
5918 features from
5919 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></ulink>
5920 that you think you do not need.</para></listitem>
5921 <listitem><para>Build your distribution.
5922 </para></listitem>
5923 <listitem><para>If the build fails due to missing
5924 symbols in a package, determine if you can
5925 reconfigure the package to not need those
5926 features.
5927 For example, change the configuration to not
5928 support wide character support as is done for
5929 <filename>ncurses</filename>.
5930 Or, if support for those characters is needed,
5931 determine what <filename>glibc</filename>
5932 features provide the support and restore the
5933 configuration.
5934 </para></listitem>
5935 <listitem><para>Rebuild and repeat the process.
5936 </para></listitem>
5937 </orderedlist></para></listitem>
5938 <listitem><para><filename>busybox</filename>:
5939 For BusyBox, use a process similar as described for
5940 <filename>glibc</filename>.
5941 A difference is you will need to boot the resulting
5942 system to see if you are able to do everything you
5943 expect from the running system.
5944 You need to be sure to integrate configuration fragments
5945 into Busybox because BusyBox handles its own core
5946 features and then allows you to add configuration
5947 fragments on top.
5948 </para></listitem>
5949 </itemizedlist>
5950 </para>
5951 </section>
5952
5953 <section id='iterate-on-the-process'>
5954 <title>Iterate on the Process</title>
5955
5956 <para>
5957 If you have not reached your goals on system size, you need
5958 to iterate on the process.
5959 The process is the same.
5960 Use the tools and see just what is taking up 90% of the root
5961 filesystem and the kernel.
5962 Decide what you can eliminate without limiting your device
5963 beyond what you need.
5964 </para>
5965
5966 <para>
5967 Depending on your system, a good place to look might be
5968 Busybox, which provides a stripped down
5969 version of Unix tools in a single, executable file.
5970 You might be able to drop virtual terminal services or perhaps
5971 ipv6.
5972 </para>
5973 </section>
5974 </section>
5975
5976 <section id='working-with-packages'>
5977 <title>Working with Packages</title>
5978
5979 <para>
5980 This section describes a few tasks that involve packages:
5981 <itemizedlist>
5982 <listitem><para>
5983 <link linkend='excluding-packages-from-an-image'>Excluding packages from an image</link>
5984 </para></listitem>
5985 <listitem><para>
5986 <link linkend='incrementing-a-package-revision-number'>Incrementing a package revision number</link>
5987 </para></listitem>
5988 <listitem><para>
5989 <link linkend='usingpoky-configuring-DISTRO_PN_ALIAS'>Handling a package name alias</link>
5990 </para></listitem>
5991 <listitem><para>
5992 <link linkend='handling-optional-module-packaging'>Handling optional module packaging</link>
5993 </para></listitem>
5994 <listitem><para>
5995 <link linkend='using-runtime-package-management'>Using Runtime Package Management</link>
5996 </para></listitem>
5997 <listitem><para>
5998 <link linkend='testing-packages-with-ptest'>Setting up and running package test (ptest)</link>
5999 </para></listitem>
6000 </itemizedlist>
6001 </para>
6002
6003 <section id='excluding-packages-from-an-image'>
6004 <title>Excluding Packages from an Image</title>
6005
6006 <para>
6007 You might find it necessary to prevent specific packages
6008 from being installed into an image.
6009 If so, you can use several variables to direct the build
6010 system to essentially ignore installing recommended packages
6011 or to not install a package at all.
6012 </para>
6013
6014 <para>
6015 The following list introduces variables you can use to
6016 prevent packages from being installed into your image.
6017 Each of these variables only works with IPK and RPM
6018 package types.
6019 Support for Debian packages does not exist.
6020 Also, you can use these variables from your
6021 <filename>local.conf</filename> file or attach them to a
6022 specific image recipe by using a recipe name override.
6023 For more detail on the variables, see the descriptions in the
6024 Yocto Project Reference Manual's glossary chapter.
6025 <itemizedlist>
6026 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></ulink>:
6027 Use this variable to specify "recommended-only"
6028 packages that you do not want installed.
6029 </para></listitem>
6030 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-NO_RECOMMENDATIONS'><filename>NO_RECOMMENDATIONS</filename></ulink>:
6031 Use this variable to prevent all "recommended-only"
6032 packages from being installed.
6033 </para></listitem>
6034 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_EXCLUDE'><filename>PACKAGE_EXCLUDE</filename></ulink>:
6035 Use this variable to prevent specific packages from
6036 being installed regardless of whether they are
6037 "recommended-only" or not.
6038 You need to realize that the build process could
6039 fail with an error when you
6040 prevent the installation of a package whose presence
6041 is required by an installed package.
6042 </para></listitem>
6043 </itemizedlist>
6044 </para>
6045 </section>
6046
6047 <section id='incrementing-a-package-revision-number'>
6048 <title>Incrementing a Package Revision Number</title>
6049
6050 <para>
6051 If a committed change results in changing the package output,
6052 then the value of the
6053 <ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink>
6054 variable needs to be increased (or "bumped").
6055 Increasing <filename>PR</filename> occurs one of two ways:
6056 <itemizedlist>
6057 <listitem><para>Automatically using a Package Revision
6058 Service (PR Service).</para></listitem>
6059 <listitem><para>Manually incrementing the
6060 <filename>PR</filename> variable.</para></listitem>
6061 </itemizedlist>
6062 </para>
6063
6064 <para>
6065 Given that one of the challenges any build system and its
6066 users face is how to maintain a package feed that is compatible
6067 with existing package manager applications such as
6068 RPM, APT, and OPKG, using an automated system is much
6069 preferred over a manual system.
6070 In either system, the main requirement is that version
6071 numbering increases in a linear fashion and that a number of
6072 version components exist that support that linear progression.
6073 </para>
6074
6075 <para>
6076 The following two sections provide information on the PR Service
6077 and on manual <filename>PR</filename> bumping.
6078 </para>
6079
6080 <section id='working-with-a-pr-service'>
6081 <title>Working With a PR Service</title>
6082
6083 <para>
6084 As mentioned, attempting to maintain revision numbers in the
6085 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
6086 is error prone, inaccurate, and causes problems for people
6087 submitting recipes.
6088 Conversely, the PR Service automatically generates
6089 increasing numbers, particularly the revision field,
6090 which removes the human element.
6091 <note>
6092 For additional information on using a PR Service, you
6093 can see the
6094 <ulink url='&YOCTO_WIKI_URL;/wiki/PR_Service'>PR Service</ulink>
6095 wiki page.
6096 </note>
6097 </para>
6098
6099 <para>
6100 The Yocto Project uses variables in order of
6101 decreasing priority to facilitate revision numbering (i.e.
6102 <ulink url='&YOCTO_DOCS_REF_URL;#var-PE'><filename>PE</filename></ulink>,
6103 <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>, and
6104 <ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink>
6105 for epoch, version, and revision, respectively).
6106 The values are highly dependent on the policies and
6107 procedures of a given distribution and package feed.
6108 </para>
6109
6110 <para>
6111 Because the OpenEmbedded build system uses
6112 "<ulink url='&YOCTO_DOCS_REF_URL;#checksums'>signatures</ulink>",
6113 which are unique to a given build, the build system
6114 knows when to rebuild packages.
6115 All the inputs into a given task are represented by a
6116 signature, which can trigger a rebuild when different.
6117 Thus, the build system itself does not rely on the
6118 <filename>PR</filename> numbers to trigger a rebuild.
6119 The signatures, however, can be used to generate
6120 <filename>PR</filename> values.
6121 </para>
6122
6123 <para>
6124 The PR Service works with both
6125 <filename>OEBasic</filename> and
6126 <filename>OEBasicHash</filename> generators.
6127 The value of <filename>PR</filename> bumps when the
6128 checksum changes and the different generator mechanisms
6129 change signatures under different circumstances.
6130 </para>
6131
6132 <para>
6133 As implemented, the build system includes values from
6134 the PR Service into the <filename>PR</filename> field as
6135 an addition using the form "<filename>.x</filename>" so
6136 <filename>r0</filename> becomes <filename>r0.1</filename>,
6137 <filename>r0.2</filename> and so forth.
6138 This scheme allows existing <filename>PR</filename> values
6139 to be used for whatever reasons, which include manual
6140 <filename>PR</filename> bumps, should it be necessary.
6141 </para>
6142
6143 <para>
6144 By default, the PR Service is not enabled or running.
6145 Thus, the packages generated are just "self consistent".
6146 The build system adds and removes packages and
6147 there are no guarantees about upgrade paths but images
6148 will be consistent and correct with the latest changes.
6149 </para>
6150
6151 <para>
6152 The simplest form for a PR Service is for it to exist
6153 for a single host development system that builds the
6154 package feed (building system).
6155 For this scenario, you can enable a local PR Service by
6156 setting
6157 <ulink url='&YOCTO_DOCS_REF_URL;#var-PRSERV_HOST'><filename>PRSERV_HOST</filename></ulink>
6158 in your <filename>local.conf</filename> file in the
6159 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>:
6160 <literallayout class='monospaced'>
6161 PRSERV_HOST = "localhost:0"
6162 </literallayout>
6163 Once the service is started, packages will automatically
6164 get increasing <filename>PR</filename> values and
6165 BitBake will take care of starting and stopping the server.
6166 </para>
6167
6168 <para>
6169 If you have a more complex setup where multiple host
6170 development systems work against a common, shared package
6171 feed, you have a single PR Service running and it is
6172 connected to each building system.
6173 For this scenario, you need to start the PR Service using
6174 the <filename>bitbake-prserv</filename> command:
6175 <literallayout class='monospaced'>
6176 bitbake-prserv &dash;&dash;host <replaceable>ip</replaceable> &dash;&dash;port <replaceable>port</replaceable> &dash;&dash;start
6177 </literallayout>
6178 In addition to hand-starting the service, you need to
6179 update the <filename>local.conf</filename> file of each
6180 building system as described earlier so each system
6181 points to the server and port.
6182 </para>
6183
6184 <para>
6185 It is also recommended you use build history, which adds
6186 some sanity checks to package versions, in conjunction with
6187 the server that is running the PR Service.
6188 To enable build history, add the following to each building
6189 system's <filename>local.conf</filename> file:
6190 <literallayout class='monospaced'>
6191 # It is recommended to activate "buildhistory" for testing the PR service
6192 INHERIT += "buildhistory"
6193 BUILDHISTORY_COMMIT = "1"
6194 </literallayout>
6195 For information on build history, see the
6196 "<ulink url='&YOCTO_DOCS_REF_URL;#maintaining-build-output-quality'>Maintaining Build Output Quality</ulink>"
6197 section in the Yocto Project Reference Manual.
6198 </para>
6199
6200 <note>
6201 <para>The OpenEmbedded build system does not maintain
6202 <filename>PR</filename> information as part of the
6203 shared state (sstate) packages.
6204 If you maintain an sstate feed, its expected that either
6205 all your building systems that contribute to the sstate
6206 feed use a shared PR Service, or you do not run a PR
6207 Service on any of your building systems.
6208 Having some systems use a PR Service while others do
6209 not leads to obvious problems.</para>
6210 <para>For more information on shared state, see the
6211 "<ulink url='&YOCTO_DOCS_REF_URL;#shared-state-cache'>Shared State Cache</ulink>"
6212 section in the Yocto Project Reference Manual.</para>
6213 </note>
6214 </section>
6215
6216 <section id='manually-bumping-pr'>
6217 <title>Manually Bumping PR</title>
6218
6219 <para>
6220 The alternative to setting up a PR Service is to manually
6221 bump the
6222 <ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink>
6223 variable.
6224 </para>
6225
6226 <para>
6227 If a committed change results in changing the package output,
6228 then the value of the PR variable needs to be increased
6229 (or "bumped") as part of that commit.
6230 For new recipes you should add the <filename>PR</filename>
6231 variable and set its initial value equal to "r0", which is the default.
6232 Even though the default value is "r0", the practice of adding it to a new recipe makes
6233 it harder to forget to bump the variable when you make changes
6234 to the recipe in future.
6235 </para>
6236
6237 <para>
6238 If you are sharing a common <filename>.inc</filename> file with multiple recipes,
6239 you can also use the
6240 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-INC_PR'>INC_PR</ulink></filename>
6241 variable to ensure that
6242 the recipes sharing the <filename>.inc</filename> file are rebuilt when the
6243 <filename>.inc</filename> file itself is changed.
6244 The <filename>.inc</filename> file must set <filename>INC_PR</filename>
6245 (initially to "r0"), and all recipes referring to it should set <filename>PR</filename>
6246 to "$(INC_PR).0" initially, incrementing the last number when the recipe is changed.
6247 If the <filename>.inc</filename> file is changed then its
6248 <filename>INC_PR</filename> should be incremented.
6249 </para>
6250
6251 <para>
6252 When upgrading the version of a package, assuming the
6253 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PV'>PV</ulink></filename>
6254 changes, the <filename>PR</filename> variable should be
6255 reset to "r0" (or "$(INC_PR).0" if you are using
6256 <filename>INC_PR</filename>).
6257 </para>
6258
6259 <para>
6260 Usually, version increases occur only to packages.
6261 However, if for some reason <filename>PV</filename> changes but does not
6262 increase, you can increase the
6263 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PE'>PE</ulink></filename>
6264 variable (Package Epoch).
6265 The <filename>PE</filename> variable defaults to "0".
6266 </para>
6267
6268 <para>
6269 Version numbering strives to follow the
6270 <ulink url='http://www.debian.org/doc/debian-policy/ch-controlfields.html'>
6271 Debian Version Field Policy Guidelines</ulink>.
6272 These guidelines define how versions are compared and what "increasing" a version means.
6273 </para>
6274 </section>
6275 </section>
6276
6277 <section id="usingpoky-configuring-DISTRO_PN_ALIAS">
6278 <title>Handling a Package Name Alias</title>
6279 <para>
6280 Sometimes a package name you are using might exist under
6281 an alias or as a similarly named package in a different
6282 distribution.
6283 The OpenEmbedded build system implements a
6284 <filename>do_distro_check</filename>
6285 task that automatically connects to major distributions
6286 and checks for these situations.
6287 If the package exists under a different name in a different
6288 distribution, you get a <filename>distro_check</filename>
6289 mismatch.
6290 You can resolve this problem by defining a per-distro recipe
6291 name alias using the
6292 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_PN_ALIAS'>DISTRO_PN_ALIAS</ulink></filename>
6293 variable.
6294 </para>
6295
6296 <para>
6297 Following is an example that shows how you specify the <filename>DISTRO_PN_ALIAS</filename>
6298 variable:
6299 <literallayout class='monospaced'>
6300 DISTRO_PN_ALIAS_pn-PACKAGENAME = "distro1=package_name_alias1 \
6301 distro2=package_name_alias2 \
6302 distro3=package_name_alias3 \
6303 ..."
6304 </literallayout>
6305 </para>
6306
6307 <para>
6308 If you have more than one distribution alias, separate them with a space.
6309 Note that the build system currently automatically checks the
6310 Fedora, OpenSUSE, Debian, Ubuntu,
6311 and Mandriva distributions for source package recipes without having to specify them
6312 using the <filename>DISTRO_PN_ALIAS</filename> variable.
6313 For example, the following command generates a report that lists the Linux distributions
6314 that include the sources for each of the recipes.
6315 <literallayout class='monospaced'>
6316 $ bitbake world -f -c distro_check
6317 </literallayout>
6318 The results are stored in the <filename>build/tmp/log/distro_check-${DATETIME}.results</filename>
6319 file found in the
6320 <link linkend='source-directory'>Source Directory</link>.
6321 </para>
6322 </section>
6323
6324 <section id='handling-optional-module-packaging'>
6325 <title>Handling Optional Module Packaging</title>
6326
6327 <para>
6328 Many pieces of software split functionality into optional
6329 modules (or plug-ins) and the plug-ins that are built
6330 might depend on configuration options.
6331 To avoid having to duplicate the logic that determines what
6332 modules are available in your recipe or to avoid having
6333 to package each module by hand, the OpenEmbedded build system
6334 provides functionality to handle module packaging dynamically.
6335 </para>
6336
6337 <para>
6338 To handle optional module packaging, you need to do two things:
6339 <itemizedlist>
6340 <listitem><para>Ensure the module packaging is actually
6341 done.</para></listitem>
6342 <listitem><para>Ensure that any dependencies on optional
6343 modules from other recipes are satisfied by your recipe.
6344 </para></listitem>
6345 </itemizedlist>
6346 </para>
6347
6348 <section id='making-sure-the-packaging-is-done'>
6349 <title>Making Sure the Packaging is Done</title>
6350
6351 <para>
6352 To ensure the module packaging actually gets done, you use
6353 the <filename>do_split_packages</filename> function within
6354 the <filename>populate_packages</filename> Python function
6355 in your recipe.
6356 The <filename>do_split_packages</filename> function
6357 searches for a pattern of files or directories under a
6358 specified path and creates a package for each one it finds
6359 by appending to the
6360 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'><filename>PACKAGES</filename></ulink>
6361 variable and setting the appropriate values for
6362 <filename>FILES_packagename</filename>,
6363 <filename>RDEPENDS_packagename</filename>,
6364 <filename>DESCRIPTION_packagename</filename>, and so forth.
6365 Here is an example from the <filename>lighttpd</filename>
6366 recipe:
6367 <literallayout class='monospaced'>
6368 python populate_packages_prepend () {
6369 lighttpd_libdir = d.expand('${libdir}')
6370 do_split_packages(d, lighttpd_libdir, '^mod_(.*)\.so$',
6371 'lighttpd-module-%s', 'Lighttpd module for %s',
6372 extra_depends='')
6373 }
6374 </literallayout>
6375 The previous example specifies a number of things in the
6376 call to <filename>do_split_packages</filename>.
6377 <itemizedlist>
6378 <listitem><para>A directory within the files installed
6379 by your recipe through <filename>do_install</filename>
6380 in which to search.</para></listitem>
6381 <listitem><para>A regular expression used to match module
6382 files in that directory.
6383 In the example, note the parentheses () that mark
6384 the part of the expression from which the module
6385 name should be derived.</para></listitem>
6386 <listitem><para>A pattern to use for the package names.
6387 </para></listitem>
6388 <listitem><para>A description for each package.
6389 </para></listitem>
6390 <listitem><para>An empty string for
6391 <filename>extra_depends</filename>, which disables
6392 the default dependency on the main
6393 <filename>lighttpd</filename> package.
6394 Thus, if a file in <filename>${libdir}</filename>
6395 called <filename>mod_alias.so</filename> is found,
6396 a package called <filename>lighttpd-module-alias</filename>
6397 is created for it and the
6398 <ulink url='&YOCTO_DOCS_REF_URL;#var-DESCRIPTION'><filename>DESCRIPTION</filename></ulink>
6399 is set to "Lighttpd module for alias".</para></listitem>
6400 </itemizedlist>
6401 </para>
6402
6403 <para>
6404 Often, packaging modules is as simple as the previous
6405 example.
6406 However, more advanced options exist that you can use
6407 within <filename>do_split_packages</filename> to modify its
6408 behavior.
6409 And, if you need to, you can add more logic by specifying
6410 a hook function that is called for each package.
6411 It is also perfectly acceptable to call
6412 <filename>do_split_packages</filename> multiple times if
6413 you have more than one set of modules to package.
6414 </para>
6415
6416 <para>
6417 For more examples that show how to use
6418 <filename>do_split_packages</filename>, see the
6419 <filename>connman.inc</filename> file in the
6420 <filename>meta/recipes-connectivity/connman/</filename>
6421 directory of the <filename>poky</filename>
6422 <link linkend='yocto-project-repositories'>source repository</link>.
6423 You can also find examples in
6424 <filename>meta/classes/kernel.bbclass</filename>.
6425 </para>
6426
6427 <para>
6428 Following is a reference that shows
6429 <filename>do_split_packages</filename> mandatory and
6430 optional arguments:
6431 <literallayout class='monospaced'>
6432 Mandatory arguments
6433
6434 root
6435 The path in which to search
6436 file_regex
6437 Regular expression to match searched files.
6438 Use parentheses () to mark the part of this
6439 expression that should be used to derive the
6440 module name (to be substituted where %s is
6441 used in other function arguments as noted below)
6442 output_pattern
6443 Pattern to use for the package names. Must
6444 include %s.
6445 description
6446 Description to set for each package. Must
6447 include %s.
6448
6449 Optional arguments
6450
6451 postinst
6452 Postinstall script to use for all packages
6453 (as a string)
6454 recursive
6455 True to perform a recursive search - default
6456 False
6457 hook
6458 A hook function to be called for every match.
6459 The function will be called with the following
6460 arguments (in the order listed):
6461
6462 f
6463 Full path to the file/directory match
6464 pkg
6465 The package name
6466 file_regex
6467 As above
6468 output_pattern
6469 As above
6470 modulename
6471 The module name derived using file_regex
6472
6473 extra_depends
6474 Extra runtime dependencies (RDEPENDS) to be
6475 set for all packages. The default value of None
6476 causes a dependency on the main package
6477 (${PN}) - if you do not want this, pass empty
6478 string '' for this parameter.
6479 aux_files_pattern
6480 Extra item(s) to be added to FILES for each
6481 package. Can be a single string item or a list
6482 of strings for multiple items. Must include %s.
6483 postrm
6484 postrm script to use for all packages (as a
6485 string)
6486 allow_dirs
6487 True to allow directories to be matched -
6488 default False
6489 prepend
6490 If True, prepend created packages to PACKAGES
6491 instead of the default False which appends them
6492 match_path
6493 match file_regex on the whole relative path to
6494 the root rather than just the file name
6495 aux_files_pattern_verbatim
6496 Extra item(s) to be added to FILES for each
6497 package, using the actual derived module name
6498 rather than converting it to something legal
6499 for a package name. Can be a single string item
6500 or a list of strings for multiple items. Must
6501 include %s.
6502 allow_links
6503 True to allow symlinks to be matched - default
6504 False
6505 summary
6506 Summary to set for each package. Must include %s;
6507 defaults to description if not set.
6508 </literallayout>
6509 </para>
6510 </section>
6511
6512 <section id='satisfying-dependencies'>
6513 <title>Satisfying Dependencies</title>
6514
6515 <para>
6516 The second part for handling optional module packaging
6517 is to ensure that any dependencies on optional modules
6518 from other recipes are satisfied by your recipe.
6519 You can be sure these dependencies are satisfied by
6520 using the
6521 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES_DYNAMIC'><filename>PACKAGES_DYNAMIC</filename></ulink> variable.
6522 Here is an example that continues with the
6523 <filename>lighttpd</filename> recipe shown earlier:
6524 <literallayout class='monospaced'>
6525 PACKAGES_DYNAMIC = "lighttpd-module-.*"
6526 </literallayout>
6527 The name specified in the regular expression can of
6528 course be anything.
6529 In this example, it is <filename>lighttpd-module-</filename>
6530 and is specified as the prefix to ensure that any
6531 <ulink url='&YOCTO_DOCS_REF_URL;#var-RDEPENDS'><filename>RDEPENDS</filename></ulink>
6532 and <ulink url='&YOCTO_DOCS_REF_URL;#var-RRECOMMENDS'><filename>RRECOMMENDS</filename></ulink>
6533 on a package name starting with the prefix are satisfied
6534 during build time.
6535 If you are using <filename>do_split_packages</filename>
6536 as described in the previous section, the value you put in
6537 <filename>PACKAGES_DYNAMIC</filename> should correspond to
6538 the name pattern specified in the call to
6539 <filename>do_split_packages</filename>.
6540 </para>
6541 </section>
6542 </section>
6543
6544 <section id='using-runtime-package-management'>
6545 <title>Using Runtime Package Management</title>
6546
6547 <para>
6548 During a build, BitBake always transforms a recipe into one or
6549 more packages.
6550 For example, BitBake takes the <filename>bash</filename> recipe
6551 and currently produces the <filename>bash-dbg</filename>,
6552 <filename>bash-staticdev</filename>,
6553 <filename>bash-dev</filename>, <filename>bash-doc</filename>,
6554 <filename>bash-locale</filename>, and
6555 <filename>bash</filename> packages.
6556 Not all generated packages are included in an image.
6557 </para>
6558
6559 <para>
6560 In several situations, you might need to update, add, remove,
6561 or query the packages on a target device at runtime
6562 (i.e. without having to generate a new image).
6563 Examples of such situations include:
6564 <itemizedlist>
6565 <listitem><para>
6566 You want to provide in-the-field updates to deployed
6567 devices (e.g. security updates).
6568 </para></listitem>
6569 <listitem><para>
6570 You want to have a fast turn-around development cycle
6571 for one or more applications that run on your device.
6572 </para></listitem>
6573 <listitem><para>
6574 You want to temporarily install the "debug" packages
6575 of various applications on your device so that
6576 debugging can be greatly improved by allowing
6577 access to symbols and source debugging.
6578 </para></listitem>
6579 <listitem><para>
6580 You want to deploy a more minimal package selection of
6581 your device but allow in-the-field updates to add a
6582 larger selection for customization.
6583 </para></listitem>
6584 </itemizedlist>
6585 </para>
6586
6587 <para>
6588 In all these situations, you have something similar to a more
6589 traditional Linux distribution in that in-field devices
6590 are able to receive pre-compiled packages from a server for
6591 installation or update.
6592 Being able to install these packages on a running,
6593 in-field device is what is termed "runtime package
6594 management".
6595 </para>
6596
6597 <para>
6598 In order to use runtime package management, you
6599 need a host/server machine that serves up the pre-compiled
6600 packages plus the required metadata.
6601 You also need package manipulation tools on the target.
6602 The build machine is a likely candidate to act as the server.
6603 However, that machine does not necessarily have to be the
6604 package server.
6605 The build machine could push its artifacts to another machine
6606 that acts as the server (e.g. Internet-facing).
6607 </para>
6608
6609 <para>
6610 A simple build that targets just one device produces
6611 more than one package database.
6612 In other words, the packages produced by a build are separated
6613 out into a couple of different package groupings based on
6614 criteria such as the target's CPU architecture, the target
6615 board, or the C library used on the target.
6616 For example, a build targeting the <filename>qemuarm</filename>
6617 device produces the following three package databases:
6618 <filename>all</filename>, <filename>armv5te</filename>, and
6619 <filename>qemuarm</filename>.
6620 If you wanted your <filename>qemuarm</filename> device to be
6621 aware of all the packages that were available to it,
6622 you would need to point it to each of these databases
6623 individually.
6624 In a similar way, a traditional Linux distribution usually is
6625 configured to be aware of a number of software repositories
6626 from which it retrieves packages.
6627 </para>
6628
6629 <para>
6630 Using runtime package management is completely optional and
6631 not required for a successful build or deployment in any
6632 way.
6633 But if you want to make use of runtime package management,
6634 you need to do a couple things above and beyond the basics.
6635 The remainder of this section describes what you need to do.
6636 </para>
6637
6638 <section id='runtime-package-management-build'>
6639 <title>Build Considerations</title>
6640
6641 <para>
6642 This section describes build considerations that you need
6643 to be aware of in order to provide support for runtime
6644 package management.
6645 </para>
6646
6647 <para>
6648 When BitBake generates packages it needs to know
6649 what format or formats to use.
6650 In your configuration, you use the
6651 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></ulink>
6652 variable to specify the format.
6653 <note>
6654 You can choose to have more than one format but you must
6655 provide at least one.
6656 </note>
6657 </para>
6658
6659 <para>
6660 If you would like your image to start off with a basic
6661 package database of the packages in your current build
6662 as well as have the relevant tools available on the
6663 target for runtime package management, you can include
6664 "package-management" in the
6665 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink>
6666 variable.
6667 Including "package-management" in this
6668 configuration variable ensures that when the image
6669 is assembled for your target, the image includes
6670 the currently-known package databases as well as
6671 the target-specific tools required for runtime
6672 package management to be performed on the target.
6673 However, this is not strictly necessary.
6674 You could start your image off without any databases
6675 but only include the required on-target package
6676 tool(s).
6677 As an example, you could include "opkg" in your
6678 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></ulink>
6679 variable if you are using the IPK package format.
6680 You can then initialize your target's package database(s)
6681 later once your image is up and running.
6682 </para>
6683
6684 <para>
6685 Whenever you perform any sort of build step that can
6686 potentially generate a package or modify an existing
6687 package, it is always a good idea to re-generate the
6688 package index with:
6689 <literallayout class='monospaced'>
6690 $ bitbake package-index
6691 </literallayout>
6692 Realize that it is not sufficient to simply do the
6693 following:
6694 <literallayout class='monospaced'>
6695 $ bitbake <replaceable>some-package</replaceable> package-index
6696 </literallayout>
6697 This is because BitBake does not properly schedule the
6698 <filename>package-index</filename> target fully after any
6699 other target has completed.
6700 Thus, be sure to run the package update step separately.
6701 </para>
6702
6703 <para>
6704 As described below in the
6705 "<link linkend='runtime-package-management-target-ipk'>Using IPK</link>"
6706 section, if you are using IPK as your package format, you
6707 can make use of the
6708 <filename>distro-feed-configs</filename> recipe provided
6709 by <filename>meta-oe</filename> in order to configure your
6710 target to use your IPK databases.
6711 </para>
6712
6713 <para>
6714 When your build is complete, your packages reside in the
6715 <filename>${TMPDIR}/deploy/<replaceable>package-format</replaceable></filename>
6716 directory.
6717 For example, if <filename>${TMPDIR}</filename>
6718 is <filename>tmp</filename> and your selected package type
6719 is IPK, then your IPK packages are available in
6720 <filename>tmp/deploy/ipk</filename>.
6721 </para>
6722 </section>
6723
6724 <section id='runtime-package-management-server'>
6725 <title>Host or Server Machine Setup</title>
6726
6727 <para>
6728 Typically, packages are served from a server using
6729 HTTP.
6730 However, other protocols are possible.
6731 If you want to use HTTP, then setup and configure a
6732 web server, such as Apache 2 or lighttpd, on the machine
6733 serving the packages.
6734 </para>
6735
6736 <para>
6737 As previously mentioned, the build machine can act as the
6738 package server.
6739 In the following sections that describe server machine
6740 setups, the build machine is assumed to also be the server.
6741 </para>
6742
6743 <section id='package-server-apache'>
6744 <title>Serving Packages via Apache 2</title>
6745
6746 <para>
6747 This example assumes you are using the Apache 2
6748 server:
6749 <orderedlist>
6750 <listitem><para>
6751 Add the directory to your Apache
6752 configuration, which you can find at
6753 <filename>/etc/httpd/conf/httpd.conf</filename>.
6754 Use commands similar to these on the
6755 development system.
6756 These example commands assume a top-level
6757 <link linkend='source-directory'>Source Directory</link>
6758 named <filename>poky</filename> in your home
6759 directory.
6760 The example also assumes an RPM package type.
6761 If you are using a different package type, such
6762 as IPK, use "ipk" in the pathnames:
6763 <literallayout class='monospaced'>
6764 &lt;VirtualHost *:80&gt;
6765 ....
6766 Alias /rpm ~/poky/build/tmp/deploy/rpm
6767 &lt;Directory "~/poky/build/tmp/deploy/rpm"&gt;
6768 Options +Indexes
6769 &lt;/Directory&gt;
6770 &lt;/VirtualHost&gt;
6771 </literallayout></para></listitem>
6772 <listitem><para>
6773 Reload the Apache configuration as described
6774 in this step.
6775 For all commands, be sure you have root
6776 privileges.
6777 </para>
6778
6779 <para>
6780 If your development system is using Fedora or
6781 CentOS, use the following:
6782 <literallayout class='monospaced'>
6783 # service httpd reload
6784 </literallayout>
6785 For Ubuntu and Debian, use the following:
6786 <literallayout class='monospaced'>
6787 # /etc/init.d/apache2 reload
6788 </literallayout>
6789 For OpenSUSE, use the following:
6790 <literallayout class='monospaced'>
6791 # /etc/init.d/apache2 reload
6792 </literallayout></para></listitem>
6793 <listitem><para>
6794 If you are using Security-Enhanced Linux
6795 (SELinux), you need to label the files as
6796 being accessible through Apache.
6797 Use the following command from the development
6798 host.
6799 This example assumes RPM package types:
6800 <literallayout class='monospaced'>
6801 # chcon -R -h -t httpd_sys_content_t tmp/deploy/rpm
6802 </literallayout></para></listitem>
6803 </orderedlist>
6804 </para>
6805 </section>
6806
6807 <section id='package-server-lighttpd'>
6808 <title>Serving Packages via lighttpd</title>
6809
6810 <para>
6811 If you are using lighttpd, all you need
6812 to do is to provide a link from your
6813 <filename>${TMPDIR}/deploy/<replaceable>package-format</replaceable></filename>
6814 directory to lighttpd's document-root.
6815 You can determine the specifics of your lighttpd
6816 installation by looking through its configuration file,
6817 which is usually found at:
6818 <filename>/etc/lighttpd/lighttpd.conf</filename>.
6819 </para>
6820
6821 <para>
6822 For example, if you are using IPK, lighttpd's
6823 document-root is set to
6824 <filename>/var/www/lighttpd</filename>, and you had
6825 packages for a target named "BOARD",
6826 then you might create a link from your build location
6827 to lighttpd's document-root as follows:
6828 <literallayout class='monospaced'>
6829 # ln -s $(PWD)/tmp/deploy/ipk /var/www/lighttpd/BOARD-dir
6830 </literallayout>
6831 </para>
6832
6833 <para>
6834 At this point, you need to start the lighttpd server.
6835 The method used to start the server varies by
6836 distribution.
6837 However, one basic method that starts it by hand is:
6838 <literallayout class='monospaced'>
6839 # lighttpd -f /etc/lighttpd/lighttpd.conf
6840 </literallayout>
6841 </para>
6842 </section>
6843 </section>
6844
6845 <section id='runtime-package-management-target'>
6846 <title>Target Setup</title>
6847
6848 <para>
6849 Setting up the target differs depending on the
6850 package management system.
6851 This section provides information for RPM and IPK.
6852 </para>
6853
6854 <section id='runtime-package-management-target-rpm'>
6855 <title>Using RPM</title>
6856
6857 <para>
6858 The application for performing runtime package
6859 management of RPM packages on the target is called
6860 <filename>smart</filename>.
6861 </para>
6862
6863 <para>
6864 On the target machine, you need to inform
6865 <filename>smart</filename> of every package database
6866 you want to use.
6867 As an example, suppose your target device can use the
6868 following three package databases from a server named
6869 <filename>server.name</filename>:
6870 <filename>all</filename>, <filename>i586</filename>,
6871 and <filename>qemux86</filename>.
6872 Given this example, issue the following commands on the
6873 target:
6874 <literallayout class='monospaced'>
6875 # smart channel &dash;&dash;add all type=rpm-md baseurl=http://server.name/rpm/all
6876 # smart channel &dash;&dash;add i585 type=rpm-md baseurl=http://server.name/rpm/i586
6877 # smart channel &dash;&dash;add qemux86 type=rpm-md baseurl=http://server.name/rpm/qemux86
6878 </literallayout>
6879 Also from the target machine, fetch the repository
6880 information using this command:
6881 <literallayout class='monospaced'>
6882 # smart update
6883 </literallayout>
6884 You can now use the <filename>smart query</filename>
6885 and <filename>smart install</filename> commands to
6886 find and install packages from the repositories.
6887 </para>
6888 </section>
6889
6890 <section id='runtime-package-management-target-ipk'>
6891 <title>Using IPK</title>
6892
6893 <para>
6894 The application for performing runtime package
6895 management of IPK packages on the target is called
6896 <filename>opkg</filename>.
6897 </para>
6898
6899 <para>
6900 In order to inform <filename>opkg</filename> of the
6901 package databases you want to use, simply create one
6902 or more <filename>*.conf</filename> files in the
6903 <filename>/etc/opkg</filename> directory on the target.
6904 The <filename>opkg</filename> application uses them
6905 to find its available package databases.
6906 As an example, suppose you configured your HTTP server
6907 on your machine named
6908 <filename>www.mysite.com</filename> to serve files
6909 from a <filename>BOARD-dir</filename> directory under
6910 its document-root.
6911 In this case, you might create a configuration
6912 file on the target called
6913 <filename>/etc/opkg/base-feeds.conf</filename> that
6914 contains:
6915 <literallayout class='monospaced'>
6916 src/gz all http://www.mysite.com/BOARD-dir/all
6917 src/gz armv7a http://www.mysite.com/BOARD-dir/armv7a
6918 src/gz beaglebone http://www.mysite.com/BOARD-dir/beaglebone
6919 </literallayout>
6920 </para>
6921
6922 <para>
6923 As a way of making it easier to generate and make
6924 these IPK configuration files available on your
6925 target, simply define
6926 <ulink url='&YOCTO_DOCS_REF_URL;#var-FEED_DEPLOYDIR_BASE_URI'><filename>FEED_DEPLOYDIR_BASE_URI</filename></ulink>
6927 to point to your server and the location within the
6928 document-root which contains the databases.
6929 For example: if you are serving your packages over
6930 HTTP, your server's IP address is 192.168.7.1, and
6931 your databases are located in a directory called
6932 <filename>BOARD-dir</filename> underneath your HTTP
6933 server's document-root, you need to set
6934 <filename>FEED_DEPLOYDIR_BASE_URI</filename> to
6935 <filename>http://192.168.7.1/BOARD-dir</filename> and
6936 a set of configuration files will be generated for you
6937 in your target to work with this feed.
6938 </para>
6939
6940 <para>
6941 On the target machine, fetch (or refresh) the
6942 repository information using this command:
6943 <literallayout class='monospaced'>
6944 # opkg update
6945 </literallayout>
6946 You can now use the <filename>opkg list</filename> and
6947 <filename>opkg install</filename> commands to find and
6948 install packages from the repositories.
6949 </para>
6950 </section>
6951 </section>
6952 </section>
6953
6954 <section id='testing-packages-with-ptest'>
6955 <title>Testing Packages With ptest</title>
6956
6957 <para>
6958 A Package Test (ptest) runs tests against packages built
6959 by the OpenEmbedded build system on the target machine.
6960 A ptest contains at least two items: the actual test, and
6961 a shell script (<filename>run-ptest</filename>) that starts
6962 the test.
6963 The shell script that starts the test must not contain
6964 the actual test - the script only starts the test.
6965 On the other hand, the test can be anything from a simple
6966 shell script that runs a binary and checks the output to
6967 an elaborate system of test binaries and data files.
6968 </para>
6969
6970 <para>
6971 The test generates output in the format used by
6972 Automake:
6973 <literallayout class='monospaced'>
6974 <replaceable>result</replaceable>: <replaceable>testname</replaceable>
6975 </literallayout>
6976 where the result can be <filename>PASS</filename>,
6977 <filename>FAIL</filename>, or <filename>SKIP</filename>,
6978 and the testname can be any identifying string.
6979 </para>
6980
6981 <para>
6982 For a list of Yocto Project recipes that are already
6983 enabled with ptest, see the
6984 <ulink url='https://wiki.yoctoproject.org/wiki/Ptest'>Ptest</ulink>
6985 wiki page.
6986 <note>
6987 A recipe is "ptest-enabled" if it inherits the
6988 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-ptest'><filename>ptest</filename></ulink>
6989 class.
6990 </note>
6991 </para>
6992
6993 <section id='adding-ptest-to-your-build'>
6994 <title>Adding ptest to Your Build</title>
6995
6996 <para>
6997 To add package testing to your build, add the
6998 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></ulink>
6999 and <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_IMAGE_FEATURES'><filename>EXTRA_IMAGE_FEATURES</filename></ulink>
7000 variables to your <filename>local.conf</filename> file,
7001 which is found in the
7002 <link linkend='build-directory'>Build Directory</link>:
7003 <literallayout class='monospaced'>
7004 DISTRO_FEATURES_append = " ptest"
7005 EXTRA_IMAGE_FEATURES += "ptest-pkgs"
7006 </literallayout>
7007 Once your build is complete, the ptest files are installed
7008 into the
7009 <filename>/usr/lib/<replaceable>package</replaceable>/ptest</filename>
7010 directory within the image, where
7011 <filename><replaceable>package</replaceable></filename>
7012 is the name of the package.
7013 </para>
7014 </section>
7015
7016 <section id='running-ptest'>
7017 <title>Running ptest</title>
7018
7019 <para>
7020 The <filename>ptest-runner</filename> package installs a
7021 shell script that loops through all installed ptest test
7022 suites and runs them in sequence.
7023 Consequently, you might want to add this package to
7024 your image.
7025 </para>
7026 </section>
7027
7028 <section id='getting-your-package-ready'>
7029 <title>Getting Your Package Ready</title>
7030
7031 <para>
7032 In order to enable a recipe to run installed ptests
7033 on target hardware,
7034 you need to prepare the recipes that build the packages
7035 you want to test.
7036 Here is what you have to do for each recipe:
7037 <itemizedlist>
7038 <listitem><para><emphasis>Be sure the recipe
7039 inherits the
7040 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-ptest'><filename>ptest</filename></ulink>
7041 class:</emphasis>
7042 Include the following line in each recipe:
7043 <literallayout class='monospaced'>
7044 inherit ptest
7045 </literallayout>
7046 </para></listitem>
7047 <listitem><para><emphasis>Create <filename>run-ptest</filename>:</emphasis>
7048 This script starts your test.
7049 Locate the script where you will refer to it
7050 using
7051 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>.
7052 Here is an example that starts a test for
7053 <filename>dbus</filename>:
7054 <literallayout class='monospaced'>
7055 #!/bin/sh
7056 cd test
7057 make -k runtest-TESTS
7058 </literallayout>
7059 </para></listitem>
7060 <listitem><para><emphasis>Ensure dependencies are
7061 met:</emphasis>
7062 If the test adds build or runtime dependencies
7063 that normally do not exist for the package
7064 (such as requiring "make" to run the test suite),
7065 use the
7066 <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink>
7067 and
7068 <ulink url='&YOCTO_DOCS_REF_URL;#var-RDEPENDS'><filename>RDEPENDS</filename></ulink>
7069 variables in your recipe in order for the package
7070 to meet the dependencies.
7071 Here is an example where the package has a runtime
7072 dependency on "make":
7073 <literallayout class='monospaced'>
7074 RDEPENDS_${PN}-ptest += "make"
7075 </literallayout>
7076 </para></listitem>
7077 <listitem><para><emphasis>Add a function to build the
7078 test suite:</emphasis>
7079 Not many packages support cross-compilation of
7080 their test suites.
7081 Consequently, you usually need to add a
7082 cross-compilation function to the package.
7083 </para>
7084 <para>Many packages based on Automake compile and
7085 run the test suite by using a single command
7086 such as <filename>make check</filename>.
7087 However, the native <filename>make check</filename>
7088 builds and runs on the same computer, while
7089 cross-compiling requires that the package is built
7090 on the host but executed on the target.
7091 The built version of Automake that ships with the
7092 Yocto Project includes a patch that separates
7093 building and execution.
7094 Consequently, packages that use the unaltered,
7095 patched version of <filename>make check</filename>
7096 automatically cross-compiles.</para>
7097 <para>Regardless, you still must add a
7098 <filename>do_compile_ptest</filename> function to
7099 build the test suite.
7100 Add a function similar to the following to your
7101 recipe:
7102 <literallayout class='monospaced'>
7103 do_compile_ptest() {
7104 oe_runmake buildtest-TESTS
7105 }
7106 </literallayout>
7107 </para></listitem>
7108 <listitem><para><emphasis>Ensure special configurations
7109 are set:</emphasis>
7110 If the package requires special configurations
7111 prior to compiling the test code, you must
7112 insert a <filename>do_configure_ptest</filename>
7113 function into the recipe.
7114 </para></listitem>
7115 <listitem><para><emphasis>Install the test
7116 suite:</emphasis>
7117 The <filename>ptest</filename> class
7118 automatically copies the file
7119 <filename>run-ptest</filename> to the target and
7120 then runs make <filename>install-ptest</filename>
7121 to run the tests.
7122 If this is not enough, you need to create a
7123 <filename>do_install_ptest</filename> function and
7124 make sure it gets called after the
7125 "make install-ptest" completes.
7126 </para></listitem>
7127 </itemizedlist>
7128 </para>
7129 </section>
7130 </section>
7131 </section>
7132
7133 <section id='working-with-source-files'>
7134 <title>Working with Source Files</title>
7135
7136 <para>
7137 The OpenEmbedded build system works with source files located
7138 through the
7139 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
7140 variable.
7141 When you build something using BitBake, a big part of the operation
7142 is locating and downloading all the source tarballs.
7143 For images, downloading all the source for various packages can
7144 take a significant amount of time.
7145 </para>
7146
7147 <para>
7148 This section presents information for working with source
7149 files that can lead to more efficient use of resources and
7150 time.
7151 </para>
7152
7153 <section id='setting-up-effective-mirrors'>
7154 <title>Setting up Effective Mirrors</title>
7155
7156 <para>
7157 As mentioned, a good deal that goes into a Yocto Project
7158 build is simply downloading all of the source tarballs.
7159 Maybe you have been working with another build system
7160 (OpenEmbedded or Angstrom) for which you have built up a
7161 sizable directory of source tarballs.
7162 Or, perhaps someone else has such a directory for which you
7163 have read access.
7164 If so, you can save time by adding statements to your
7165 configuration file so that the build process checks local
7166 directories first for existing tarballs before checking the
7167 Internet.
7168 </para>
7169
7170 <para>
7171 Here is an efficient way to set it up in your
7172 <filename>local.conf</filename> file:
7173 <literallayout class='monospaced'>
7174 SOURCE_MIRROR_URL ?= "file:///home/you/your-download-dir/"
7175 INHERIT += "own-mirrors"
7176 BB_GENERATE_MIRROR_TARBALLS = "1"
7177 # BB_NO_NETWORK = "1"
7178 </literallayout>
7179 </para>
7180
7181 <para>
7182 In the previous example, the
7183 <ulink url='&YOCTO_DOCS_REF_URL;#var-BB_GENERATE_MIRROR_TARBALLS'><filename>BB_GENERATE_MIRROR_TARBALLS</filename></ulink>
7184 variable causes the OpenEmbedded build system to generate
7185 tarballs of the Git repositories and store them in the
7186 <ulink url='&YOCTO_DOCS_REF_URL;#var-DL_DIR'><filename>DL_DIR</filename></ulink>
7187 directory.
7188 Due to performance reasons, generating and storing these
7189 tarballs is not the build system's default behavior.
7190 </para>
7191
7192 <para>
7193 You can also use the
7194 <ulink url='&YOCTO_DOCS_REF_URL;#var-PREMIRRORS'><filename>PREMIRRORS</filename></ulink>
7195 variable.
7196 For an example, see the variable's glossary entry in the
7197 Yocto Project Reference Manual.
7198 </para>
7199 </section>
7200
7201 <section id='getting-source-files-and-suppressing-the-build'>
7202 <title>Getting Source Files and Suppressing the Build</title>
7203
7204 <para>
7205 Another technique you can use to ready yourself for a
7206 successive string of build operations, is to pre-fetch
7207 all the source files without actually starting a build.
7208 This technique lets you work through any download issues
7209 and ultimately gathers all the source files into your
7210 download directory
7211 <ulink url='&YOCTO_DOCS_REF_URL;#structure-build-downloads'><filename>build/downloads</filename></ulink>,
7212 which is located with
7213 <ulink url='&YOCTO_DOCS_REF_URL;#var-DL_DIR'><filename>DL_DIR</filename></ulink>.
7214 </para>
7215
7216 <para>
7217 Use the following BitBake command form to fetch all the
7218 necessary sources without starting the build:
7219 <literallayout class='monospaced'>
7220 $ bitbake -c fetchall <replaceable>target</replaceable>
7221 </literallayout>
7222 This variation of the BitBake command guarantees that you
7223 have all the sources for that BitBake target should you
7224 disconnect from the Internet and want to do the build
7225 later offline.
7226 </para>
7227 </section>
7228 </section>
7229
7230 <section id="building-software-from-an-external-source">
7231 <title>Building Software from an External Source</title>
7232
7233 <para>
7234 By default, the OpenEmbedded build system uses the
7235 <link linkend='build-directory'>Build Directory</link> when
7236 building source code.
7237 The build process involves fetching the source files, unpacking
7238 them, and then patching them if necessary before the build takes
7239 place.
7240 </para>
7241
7242 <para>
7243 Situations exist where you might want to build software from source
7244 files that are external to and thus outside of the
7245 OpenEmbedded build system.
7246 For example, suppose you have a project that includes a new BSP with
7247 a heavily customized kernel.
7248 And, you want to minimize exposing the build system to the
7249 development team so that they can focus on their project and
7250 maintain everyone's workflow as much as possible.
7251 In this case, you want a kernel source directory on the development
7252 machine where the development occurs.
7253 You want the recipe's
7254 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
7255 variable to point to the external directory and use it as is, not
7256 copy it.
7257 </para>
7258
7259 <para>
7260 To build from software that comes from an external source, all you
7261 need to do is inherit the
7262 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-externalsrc'><filename>externalsrc</filename></ulink>
7263 class and then set the
7264 <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTERNALSRC'><filename>EXTERNALSRC</filename></ulink>
7265 variable to point to your external source code.
7266 Here are the statements to put in your
7267 <filename>local.conf</filename> file:
7268 <literallayout class='monospaced'>
7269 INHERIT += "externalsrc"
7270 EXTERNALSRC_pn-<replaceable>myrecipe</replaceable> = "<replaceable>path-to-your-source-tree</replaceable>"
7271 </literallayout>
7272 </para>
7273
7274 <para>
7275 This next example shows how to accomplish the same thing by setting
7276 <filename>EXTERNALSRC</filename> in the recipe itself or in the
7277 recipe's append file:
7278 <literallayout class='monospaced'>
7279 EXTERNALSRC = "<replaceable>path</replaceable>"
7280 EXTERNALSRC_BUILD = "<replaceable>path</replaceable>"
7281 </literallayout>
7282 <note>
7283 In order for these settings to take effect, you must globally
7284 or locally inherit the
7285 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-externalsrc'><filename>externalsrc</filename></ulink>
7286 class.
7287 </note>
7288 </para>
7289
7290 <para>
7291 By default, <filename>externalsrc.bbclass</filename> builds
7292 the source code in a directory separate from the external source
7293 directory as specified by
7294 <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTERNALSRC'><filename>EXTERNALSRC</filename></ulink>.
7295 If you need to have the source built in the same directory in
7296 which it resides, or some other nominated directory, you can set
7297 <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTERNALSRC_BUILD'><filename>EXTERNALSRC_BUILD</filename></ulink>
7298 to point to that directory:
7299 <literallayout class='monospaced'>
7300 EXTERNALSRC_BUILD_pn-<replaceable>myrecipe</replaceable> = "<replaceable>path-to-your-source-tree</replaceable>"
7301 </literallayout>
7302 </para>
7303 </section>
7304
7305 <section id="selecting-an-initialization-manager">
7306 <title>Selecting an Initialization Manager</title>
7307
7308 <para>
7309 By default, the Yocto Project uses SysVinit as the initialization
7310 manager.
7311 However, support also exists for systemd,
7312 which is a full replacement for init with
7313 parallel starting of services, reduced shell overhead and other
7314 features that are used by many distributions.
7315 </para>
7316
7317 <para>
7318 If you want to use SysVinit, you do
7319 not have to do anything.
7320 But, if you want to use systemd, you must
7321 take some steps as described in the following sections.
7322 </para>
7323
7324 <section id='using-systemd-exclusively'>
7325 <title>Using systemd Exclusively</title>
7326
7327 <para>
7328 Set the these variables in your distribution configuration
7329 file as follows:
7330 <literallayout class='monospaced'>
7331 DISTRO_FEATURES_append = " systemd"
7332 VIRTUAL-RUNTIME_init_manager = "systemd"
7333 </literallayout>
7334 You can also prevent the SysVinit
7335 distribution feature from
7336 being automatically enabled as follows:
7337 <literallayout class='monospaced'>
7338 DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
7339 </literallayout>
7340 Doing so removes any redundant SysVinit scripts.
7341 </para>
7342
7343 <para>
7344 To remove initscripts from your image altogether,
7345 set this variable also:
7346 <literallayout class='monospaced'>
7347 VIRTUAL-RUNTIME_initscripts = ""
7348 </literallayout>
7349 </para>
7350
7351 <para>
7352 For information on the backfill variable, see
7353 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_FEATURES_BACKFILL_CONSIDERED'><filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename></ulink>.
7354 </para>
7355 </section>
7356
7357 <section id='using-systemd-for-the-main-image-and-using-sysvinit-for-the-rescue-image'>
7358 <title>Using systemd for the Main Image and Using SysVinit for the Rescue Image</title>
7359
7360 <para>
7361 Set these variables in your distribution configuration
7362 file as follows:
7363 <literallayout class='monospaced'>
7364 DISTRO_FEATURES_append = " systemd"
7365 VIRTUAL-RUNTIME_init_manager = "systemd"
7366 </literallayout>
7367 Doing so causes your main image to use the
7368 <filename>packagegroup-core-boot.bb</filename> recipe and
7369 systemd.
7370 The rescue/minimal image cannot use this package group.
7371 However, it can install SysVinit
7372 and the appropriate packages will have support for both
7373 systemd and SysVinit.
7374 </para>
7375 </section>
7376 </section>
7377
7378 <section id="platdev-appdev-srcrev">
7379 <title>Using an External SCM</title>
7380
7381 <para>
7382 If you're working on a recipe that pulls from an external Source
7383 Code Manager (SCM), it is possible to have the OpenEmbedded build
7384 system notice new recipe changes added to the SCM and then build
7385 the resulting packages that depend on the new recipes by using
7386 the latest versions.
7387 This only works for SCMs from which it is possible to get a
7388 sensible revision number for changes.
7389 Currently, you can do this with Apache Subversion (SVN), Git, and
7390 Bazaar (BZR) repositories.
7391 </para>
7392
7393 <para>
7394 To enable this behavior, the
7395 <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>
7396 of the recipe needs to reference
7397 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRCPV'><filename>SRCPV</filename></ulink>.
7398 Here is an example:
7399 <literallayout class='monospaced'>
7400 PV = "1.2.3+git${SRCPV}
7401 </literallayout>
7402 Then, you can add the following to your
7403 <filename>local.conf</filename>:
7404 <literallayout class='monospaced'>
7405 SRCREV_pn-<replaceable>PN</replaceable> = "${AUTOREV}"
7406 </literallayout>
7407 <ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink>
7408 is the name of the recipe for which you want to enable automatic source
7409 revision updating.
7410 </para>
7411
7412 <para>
7413 If you do not want to update your local configuration file, you can
7414 add the following directly to the recipe to finish enabling
7415 the feature:
7416 <literallayout class='monospaced'>
7417 SRCREV = "${AUTOREV}"
7418 </literallayout>
7419 </para>
7420
7421 <para>
7422 The Yocto Project provides a distribution named
7423 <filename>poky-bleeding</filename>, whose configuration
7424 file contains the line:
7425 <literallayout class='monospaced'>
7426 require conf/distro/include/poky-floating-revisions.inc
7427 </literallayout>
7428 This line pulls in the listed include file that contains
7429 numerous lines of exactly that form:
7430 <literallayout class='monospaced'>
7431 SRCREV_pn-gconf-dbus ?= "${AUTOREV}"
7432 SRCREV_pn-matchbox-common ?= "${AUTOREV}"
7433 SRCREV_pn-matchbox-config-gtk ?= "${AUTOREV}"
7434 SRCREV_pn-matchbox-desktop ?= "${AUTOREV}"
7435 SRCREV_pn-matchbox-keyboard ?= "${AUTOREV}"
7436 SRCREV_pn-matchbox-panel ?= "${AUTOREV}"
7437 SRCREV_pn-matchbox-panel-2 ?= "${AUTOREV}"
7438 SRCREV_pn-matchbox-themes-extra ?= "${AUTOREV}"
7439 SRCREV_pn-matchbox-terminal ?= "${AUTOREV}"
7440 SRCREV_pn-matchbox-wm ?= "${AUTOREV}"
7441 SRCREV_pn-matchbox-wm-2 ?= "${AUTOREV}"
7442 SRCREV_pn-settings-daemon ?= "${AUTOREV}"
7443 SRCREV_pn-screenshot ?= "${AUTOREV}"
7444 SRCREV_pn-libfakekey ?= "${AUTOREV}"
7445 SRCREV_pn-oprofileui ?= "${AUTOREV}"
7446 .
7447 .
7448 .
7449 </literallayout>
7450 These lines allow you to experiment with building a
7451 distribution that tracks the latest development source
7452 for numerous packages.
7453 <note><title>Caution</title>
7454 The <filename>poky-bleeding</filename> distribution
7455 is not tested on a regular basis.
7456 Keep this in mind if you use it.
7457 </note>
7458 </para>
7459 </section>
7460
7461 <section id='creating-a-read-only-root-filesystem'>
7462 <title>Creating a Read-Only Root Filesystem</title>
7463
7464 <para>
7465 Suppose, for security reasons, you need to disable
7466 your target device's root filesystem's write permissions
7467 (i.e. you need a read-only root filesystem).
7468 Or, perhaps you are running the device's operating system
7469 from a read-only storage device.
7470 For either case, you can customize your image for
7471 that behavior.
7472 </para>
7473
7474 <note>
7475 Supporting a read-only root filesystem requires that the system and
7476 applications do not try to write to the root filesystem.
7477 You must configure all parts of the target system to write
7478 elsewhere, or to gracefully fail in the event of attempting to
7479 write to the root filesystem.
7480 </note>
7481
7482 <section id='creating-the-root-filesystem'>
7483 <title>Creating the Root Filesystem</title>
7484
7485 <para>
7486 To create the read-only root filesystem, simply add the
7487 "read-only-rootfs" feature to your image.
7488 Using either of the following statements in your
7489 image recipe or from within the
7490 <filename>local.conf</filename> file found in the
7491 <link linkend='build-directory'>Build Directory</link>
7492 causes the build system to create a read-only root filesystem:
7493 <literallayout class='monospaced'>
7494 IMAGE_FEATURES = "read-only-rootfs"
7495 </literallayout>
7496 or
7497 <literallayout class='monospaced'>
7498 EXTRA_IMAGE_FEATURES += "read-only-rootfs"
7499 </literallayout>
7500 </para>
7501
7502 <para>
7503 For more information on how to use these variables, see the
7504 "<link linkend='usingpoky-extend-customimage-imagefeatures'>Customizing Images Using Custom <filename>IMAGE_FEATURES</filename> and <filename>EXTRA_IMAGE_FEATURES</filename></link>"
7505 section.
7506 For information on the variables, see
7507 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink>
7508 and <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_IMAGE_FEATURES'><filename>EXTRA_IMAGE_FEATURES</filename></ulink>.
7509 </para>
7510 </section>
7511
7512 <section id='post-installation-scripts'>
7513 <title>Post-Installation Scripts</title>
7514
7515 <para>
7516 It is very important that you make sure all
7517 post-Installation (<filename>pkg_postinst</filename>) scripts
7518 for packages that are installed into the image can be run
7519 at the time when the root filesystem is created during the
7520 build on the host system.
7521 These scripts cannot attempt to run during first-boot on the
7522 target device.
7523 With the "read-only-rootfs" feature enabled,
7524 the build system checks during root filesystem creation to make
7525 sure all post-installation scripts succeed.
7526 If any of these scripts still need to be run after the root
7527 filesystem is created, the build immediately fails.
7528 These build-time checks ensure that the build fails
7529 rather than the target device fails later during its
7530 initial boot operation.
7531 </para>
7532
7533 <para>
7534 Most of the common post-installation scripts generated by the
7535 build system for the out-of-the-box Yocto Project are engineered
7536 so that they can run during root filesystem creation
7537 (e.g. post-installation scripts for caching fonts).
7538 However, if you create and add custom scripts, you need
7539 to be sure they can be run during this file system creation.
7540 </para>
7541
7542 <para>
7543 Here are some common problems that prevent
7544 post-installation scripts from running during root filesystem
7545 creation:
7546 <itemizedlist>
7547 <listitem><para>
7548 <emphasis>Not using $D in front of absolute
7549 paths:</emphasis>
7550 The build system defines
7551 <filename>$</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-D'><filename>D</filename></ulink>
7552 when the root filesystem is created.
7553 Furthermore, <filename>$D</filename> is blank when the
7554 script is run on the target device.
7555 This implies two purposes for <filename>$D</filename>:
7556 ensuring paths are valid in both the host and target
7557 environments, and checking to determine which
7558 environment is being used as a method for taking
7559 appropriate actions.
7560 </para></listitem>
7561 <listitem><para>
7562 <emphasis>Attempting to run processes that are
7563 specific to or dependent on the target
7564 architecture:</emphasis>
7565 You can work around these attempts by using native
7566 tools to accomplish the same tasks, or
7567 by alternatively running the processes under QEMU,
7568 which has the <filename>qemu_run_binary</filename>
7569 function.
7570 For more information, see the
7571 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-qemu'><filename>qemu</filename></ulink>
7572 class.</para></listitem>
7573 </itemizedlist>
7574 </para>
7575 </section>
7576
7577 <section id='areas-with-write-access'>
7578 <title>Areas With Write Access</title>
7579
7580 <para>
7581 With the "read-only-rootfs" feature enabled,
7582 any attempt by the target to write to the root filesystem at
7583 runtime fails.
7584 Consequently, you must make sure that you configure processes
7585 and applications that attempt these types of writes do so
7586 to directories with write access (e.g.
7587 <filename>/tmp</filename> or <filename>/var/run</filename>).
7588 </para>
7589 </section>
7590 </section>
7591
7592 <section id="performing-automated-runtime-testing">
7593 <title>Performing Automated Runtime Testing</title>
7594
7595 <para>
7596 The OpenEmbedded build system makes available a series of automated
7597 tests for images to verify runtime functionality.
7598 You can run these tests on either QEMU or actual target hardware.
7599 Tests are written in Python making use of the
7600 <filename>unittest</filename> module, and the majority of them
7601 run commands on the target system over SSH.
7602 This section describes how you set up the environment to use these
7603 tests, run available tests, and write and add your own tests.
7604 </para>
7605
7606 <section id='enabling-tests'>
7607 <title>Enabling Tests</title>
7608
7609 <para>
7610 Depending on whether you are planning to run tests using
7611 QEMU or on the hardware, you have to take
7612 different steps to enable the tests.
7613 See the following subsections for information on how to
7614 enable both types of tests.
7615 </para>
7616
7617 <section id='qemu-image-enabling-tests'>
7618 <title>Enabling Runtime Tests on QEMU</title>
7619
7620 <para>
7621 In order to run tests, you need to do the following:
7622 <itemizedlist>
7623 <listitem><para><emphasis>Set up to avoid interaction
7624 with <filename>sudo</filename> for networking:</emphasis>
7625 To accomplish this, you must do one of the
7626 following:
7627 <itemizedlist>
7628 <listitem><para>Add
7629 <filename>NOPASSWD</filename> for your user
7630 in <filename>/etc/sudoers</filename> either for
7631 all commands or just for
7632 <filename>runqemu-ifup</filename>.
7633 You must provide the full path as that can
7634 change if you are using multiple clones of the
7635 source repository.
7636 <note>
7637 On some distributions, you also need to
7638 comment out "Defaults requiretty" in
7639 <filename>/etc/sudoers</filename>.
7640 </note></para></listitem>
7641 <listitem><para>Manually configure a tap interface
7642 for your system.</para></listitem>
7643 <listitem><para>Run as root the script in
7644 <filename>scripts/runqemu-gen-tapdevs</filename>,
7645 which should generate a list of tap devices.
7646 This is the option typically chosen for
7647 Autobuilder-type environments.
7648 </para></listitem>
7649 </itemizedlist></para></listitem>
7650 <listitem><para><emphasis>Set the
7651 <filename>DISPLAY</filename> variable:</emphasis>
7652 You need to set this variable so that you have an X
7653 server available (e.g. start
7654 <filename>vncserver</filename> for a headless machine).
7655 </para></listitem>
7656 <listitem><para><emphasis>Be sure your host's firewall
7657 accepts incoming connections from
7658 192.168.7.0/24:</emphasis>
7659 Some of the tests (in particular smart tests) start an
7660 HTTP server on a random high number port, which is
7661 used to serve files to the target.
7662 The smart module serves
7663 <filename>${DEPLOY_DIR}/rpm</filename> so it can run
7664 smart channel commands. That means your host's firewall
7665 must accept incoming connections from 192.168.7.0/24,
7666 which is the default IP range used for tap devices
7667 by <filename>runqemu</filename>.</para></listitem>
7668 </itemizedlist>
7669 </para>
7670
7671 <para>
7672 Once you start running the tests, the following happens:
7673 <orderedlist>
7674 <listitem><para>A copy of the root filesystem is written
7675 to <filename>${WORKDIR}/testimage</filename>.
7676 </para></listitem>
7677 <listitem><para>The image is booted under QEMU using the
7678 standard <filename>runqemu</filename> script.
7679 </para></listitem>
7680 <listitem><para>A default timeout of 500 seconds occurs
7681 to allow for the boot process to reach the login prompt.
7682 You can change the timeout period by setting
7683 <ulink url='&YOCTO_DOCS_REF_URL;#var-TEST_QEMUBOOT_TIMEOUT'><filename>TEST_QEMUBOOT_TIMEOUT</filename></ulink>
7684 in the <filename>local.conf</filename> file.
7685 </para></listitem>
7686 <listitem><para>Once the boot process is reached and the
7687 login prompt appears, the tests run.
7688 The full boot log is written to
7689 <filename>${WORKDIR}/testimage/qemu_boot_log</filename>.
7690 </para></listitem>
7691 <listitem><para>Each test module loads in the order found
7692 in <filename>TEST_SUITES</filename>.
7693 You can find the full output of the commands run over
7694 SSH in
7695 <filename>${WORKDIR}/testimgage/ssh_target_log</filename>.
7696 </para></listitem>
7697 <listitem><para>If no failures occur, the task running the
7698 tests ends successfully.
7699 You can find the output from the
7700 <filename>unittest</filename> in the task log at
7701 <filename>${WORKDIR}/temp/log.do_testimage</filename>.
7702 </para></listitem>
7703 </orderedlist>
7704 </para>
7705 </section>
7706
7707 <section id='hardware-image-enabling-tests'>
7708 <title>Enabling Runtime Tests on Hardware</title>
7709
7710 <para>
7711 The OpenEmbedded build system can run tests on real
7712 hardware, and for certain devices it can also deploy
7713 the image to be tested onto the device beforehand.
7714 </para>
7715
7716 <para>
7717 For automated deployment, a "master image" is installed
7718 onto the hardware once as part of setup.
7719 Then, each time tests are to be run, the following
7720 occurs:
7721 <orderedlist>
7722 <listitem><para>The master image is booted into and
7723 used to write the image to be tested to
7724 a second partition.
7725 </para></listitem>
7726 <listitem><para>The device is then rebooted using an
7727 external script that you need to provide.
7728 </para></listitem>
7729 <listitem><para>The device boots into the image to be
7730 tested.
7731 </para></listitem>
7732 </orderedlist>
7733 </para>
7734
7735 <para>
7736 When running tests (independent of whether the image
7737 has been deployed automatically or not), the device is
7738 expected to be connected to a network on a
7739 pre-determined IP address.
7740 You can either use static IP addresses written into
7741 the image, or set the image to use DHCP and have your
7742 DHCP server on the test network assign a known IP address
7743 based on the MAC address of the device.
7744 </para>
7745
7746 <para>
7747 In order to run tests on hardware, you need to set
7748 <filename>TEST_TARGET</filename> to an appropriate value.
7749 For QEMU, you do not have to change anything, the default
7750 value is "QemuTarget".
7751 For running tests on hardware, the following options exist:
7752 <itemizedlist>
7753 <listitem><para><emphasis>"SimpleRemoteTarget":</emphasis>
7754 Choose "SimpleRemoteTarget" if you are going to
7755 run tests on a target system that is already
7756 running the image to be tested and is available
7757 on the network.
7758 You can use "SimpleRemoteTarget" in conjunction
7759 with either real hardware or an image running
7760 within a separately started QEMU or any
7761 other virtual machine manager.
7762 </para></listitem>
7763 <listitem><para><emphasis>"GummibootTarget":</emphasis>
7764 Choose "GummibootTarget" if your hardware is
7765 an EFI-based machine with
7766 <filename>gummiboot</filename> as bootloader and
7767 <filename>core-image-testmaster</filename>
7768 (or something similar) is installed.
7769 Also, your hardware under test must be in a
7770 DHCP-enabled network that gives it the same IP
7771 address for each reboot.</para>
7772 <para>If you choose "GummibootTarget", there are
7773 additional requirements and considerations.
7774 See the
7775 "<link linkend='selecting-gummiboottarget'>Selecting GummibootTarget</link>"
7776 section, which follows, for more information.
7777 </para></listitem>
7778 <listitem><para><emphasis>"BeagleBoneTarget":</emphasis>
7779 Choose "BeagleBoneTarget" if you are deploying
7780 images and running tests on the BeagleBone
7781 "Black" or original "White" hardware.
7782 For information on how to use these tests, see the
7783 comments at the top of the BeagleBoneTarget
7784 <filename>meta-yocto-bsp/lib/oeqa/controllers/beaglebonetarget.py</filename>
7785 file.
7786 </para></listitem>
7787 <listitem><para><emphasis>"EdgeRouterTarget":</emphasis>
7788 Choose "EdgeRouterTarget" is you are deploying
7789 images and running tests on the Ubiquiti Networks
7790 EdgeRouter Lite.
7791 For information on how to use these tests, see the
7792 comments at the top of the EdgeRouterTarget
7793 <filename>meta-yocto-bsp/lib/oeqa/controllers/edgeroutertarget.py</filename>
7794 file.
7795 </para></listitem>
7796 <listitem><para><emphasis>"GrubTarget":</emphasis>
7797 Choose the "supports deploying images and running
7798 tests on any generic PC that boots using GRUB.
7799 For information on how to use these tests, see the
7800 comments at the top of the GrubTarget
7801 <filename>meta-yocto-bsp/lib/oeqa/controllers/grubtarget.py</filename>
7802 file.
7803 </para></listitem>
7804 <listitem><para><emphasis>"<replaceable>your-target</replaceable>":</emphasis>
7805 Create your own custom target if you want to run
7806 tests when you are deploying images and running
7807 tests on a custom machine within your BSP layer.
7808 To do this, you need to add a Python unit that
7809 defines the target class under
7810 <filename>lib/oeqa/controllers/</filename> within
7811 your layer.
7812 You must also provide an empty
7813 <filename>__init__.py</filename>.
7814 For examples, see files in
7815 <filename>meta-yocto-bsp/lib/oeqa/controllers/</filename>.
7816 </para></listitem>
7817 </itemizedlist>
7818 </para>
7819 </section>
7820
7821 <section id='selecting-gummiboottarget'>
7822 <title>Selecting GummibootTarget</title>
7823
7824 <para>
7825 If you did not set <filename>TEST_TARGET</filename> to
7826 "GummibootTarget", then you do not need any information
7827 in this section.
7828 You can skip down to the
7829 "<link linkend='qemu-image-running-tests'>Running Tests</link>"
7830 section.
7831 </para>
7832
7833 <para>
7834 If you did set <filename>TEST_TARGET</filename> to
7835 "GummibootTarget", you also need to perform a one-time
7836 setup of your master image by doing the following:
7837 <orderedlist>
7838 <listitem><para><emphasis>Set <filename>EFI_PROVIDER</filename>:</emphasis>
7839 Be sure that <filename>EFI_PROVIDER</filename>
7840 is as follows:
7841 <literallayout class='monospaced'>
7842 EFI_PROVIDER = "gummiboot"
7843 </literallayout>
7844 </para></listitem>
7845 <listitem><para><emphasis>Build the master image:</emphasis>
7846 Build the <filename>core-image-testmaster</filename>
7847 image.
7848 The <filename>core-image-testmaster</filename>
7849 recipe is provided as an example for a
7850 "master" image and you can customize the image
7851 recipe as you would any other recipe.
7852 </para>
7853 <para>Here are the image recipe requirements:
7854 <itemizedlist>
7855 <listitem><para>Inherits
7856 <filename>core-image</filename>
7857 so that kernel modules are installed.
7858 </para></listitem>
7859 <listitem><para>Installs normal linux utilities
7860 not busybox ones (e.g.
7861 <filename>bash</filename>,
7862 <filename>coreutils</filename>,
7863 <filename>tar</filename>,
7864 <filename>gzip</filename>, and
7865 <filename>kmod</filename>).
7866 </para></listitem>
7867 <listitem><para>Uses a custom
7868 Initial RAM Disk (initramfs) image with a
7869 custom installer.
7870 A normal image that you can install usually
7871 creates a single rootfs partition.
7872 This image uses another installer that
7873 creates a specific partition layout.
7874 Not all Board Support Packages (BSPs)
7875 can use an installer.
7876 For such cases, you need to manually create
7877 the following partition layout on the
7878 target:
7879 <itemizedlist>
7880 <listitem><para>First partition mounted
7881 under <filename>/boot</filename>,
7882 labeled "boot".
7883 </para></listitem>
7884 <listitem><para>The main rootfs
7885 partition where this image gets
7886 installed, which is mounted under
7887 <filename>/</filename>.
7888 </para></listitem>
7889 <listitem><para>Another partition
7890 labeled "testrootfs" where test
7891 images get deployed.
7892 </para></listitem>
7893 </itemizedlist>
7894 </para></listitem>
7895 </itemizedlist>
7896 </para></listitem>
7897 <listitem><para><emphasis>Install image:</emphasis>
7898 Install the image that you just built on the target
7899 system.
7900 </para></listitem>
7901 </orderedlist>
7902 </para>
7903
7904 <para>
7905 The final thing you need to do when setting
7906 <filename>TEST_TARGET</filename> to "GummibootTarget" is
7907 to set up the test image:
7908 <orderedlist>
7909 <listitem><para><emphasis>Set up your <filename>local.conf</filename> file:</emphasis>
7910 Make sure you have the following statements in
7911 your <filename>local.conf</filename> file:
7912 <literallayout class='monospaced'>
7913 IMAGE_FSTYPES += "tar.gz"
7914 INHERIT += "testimage"
7915 TEST_TARGET = "GummibootTarget"
7916 TEST_TARGET_IP = "192.168.2.3"
7917 </literallayout>
7918 </para></listitem>
7919 <listitem><para><emphasis>Build your test image:</emphasis>
7920 Use BitBake to build the image:
7921 <literallayout class='monospaced'>
7922 $ bitbake core-image-sato
7923 </literallayout>
7924 </para></listitem>
7925 </orderedlist>
7926 </para>
7927 </section>
7928
7929 <section id='power-control'>
7930 <title>Power Control</title>
7931
7932 <para>
7933 For most hardware targets other than SimpleRemoteTarget,
7934 you can control power:
7935 <itemizedlist>
7936 <listitem><para>
7937 You can use
7938 <filename>TEST_POWERCONTROL_CMD</filename>
7939 together with
7940 <filename>TEST_POWERCONTROL_EXTRA_ARGS</filename>
7941 as a command that runs on the host and does power
7942 cycling.
7943 The test code passes one argument to that command:
7944 off, on or cycle (off then on).
7945 Here is an example that could appear in your
7946 <filename>local.conf</filename> file:
7947 <literallayout class='monospaced'>
7948 TEST_POWERCONTROL_CMD = "powercontrol.exp test 10.11.12.1 nuc1"
7949 </literallayout>
7950 In this example, the expect script does the
7951 following:
7952 <literallayout class='monospaced'>
7953 ssh test@10.11.12.1 "pyctl nuc1 <replaceable>arg</replaceable>"
7954 </literallayout>
7955 It then runs a Python script that controls power
7956 for a label called <filename>nuc1</filename>.
7957 <note>
7958 You need to customize
7959 <filename>TEST_POWERCONTROL_CMD</filename>
7960 and
7961 <filename>TEST_POWERCONTROL_EXTRA_ARGS</filename>
7962 for your own setup.
7963 The one requirement is that it accepts
7964 "on", "off", and "cycle" as the last argument.
7965 </note>
7966 </para></listitem>
7967 <listitem><para>
7968 When no command is defined, it connects to the
7969 device over SSH and uses the classic reboot command
7970 to reboot the device.
7971 Classic reboot is fine as long as the machine
7972 actually reboots (i.e. the SSH test has not
7973 failed).
7974 It is useful for scenarios where you have a simple
7975 setup, typically with a single board, and where
7976 some manual interaction is okay from time to time.
7977 </para></listitem>
7978 </itemizedlist>
7979 If you have no hardware to automatically perform power
7980 control but still wish to experiment with automated
7981 hardware testing, you can use the dialog-power-control
7982 script that shows a dialog prompting you to perform the
7983 required power action.
7984 This script requires either KDialog or Zenity to be
7985 installed.
7986 To use this script, set the
7987 <ulink url='&YOCTO_DOCS_REF_URL;#var-TEST_POWERCONTROL_CMD'><filename>TEST_POWERCONTROL_CMD</filename></ulink>
7988 variable as follows:
7989 <literallayout class='monospaced'>
7990 TEST_POWERCONTROL_CMD = "${COREBASE}/scripts/contrib/dialog-power-control"
7991 </literallayout>
7992 </para>
7993 </section>
7994
7995 <section id='serial-console-connection'>
7996 <title>Serial Console Connection</title>
7997
7998 <para>
7999 For test target classes requiring a serial console
8000 to interact with the bootloader (e.g. BeagleBoneTarget,
8001 EdgeRouterTarget, and GrubTarget), you need to
8002 specify a command to use to connect to the serial console
8003 of the target machine by using the
8004 <ulink url='&YOCTO_DOCS_REF_URL;#var-TEST_POWERCONTROL_CMD'><filename>TEST_POWERCONTROL_CMD</filename></ulink>
8005 variable and optionally the
8006 <ulink url='&YOCTO_DOCS_REF_URL;#var-TEST_SERIALCONTROL_EXTRA_ARGS'><filename>TEST_SERIALCONTROL_EXTRA_ARGS</filename></ulink>
8007 variable.
8008 </para>
8009
8010 <para>
8011 These cases could be a serial terminal program if the
8012 machine is connected to a local serial port, or a
8013 <filename>telnet</filename> or
8014 <filename>ssh</filename> command connecting to a remote
8015 console server.
8016 Regardless of the case, the command simply needs to
8017 connect to the serial console and forward that connection
8018 to standard input and output as any normal terminal
8019 program does.
8020 For example, to use the picocom terminal program on
8021 serial device <filename>/dev/ttyUSB0</filename>
8022 at 115200bps, you would set the variable as follows:
8023 <literallayout class='monospaced'>
8024 TEST_SERIALCONTROL_CMD = "picocom /dev/ttyUSB0 -b 115200"
8025 </literallayout>
8026 For local devices where the serial port device disappears
8027 when the device reboots, an additional "serdevtry" wrapper
8028 script is provided.
8029 To use this wrapper, simply prefix the terminal command
8030 with
8031 <filename>${COREBASE}/scripts/contrib/serdevtry</filename>:
8032 <literallayout class='monospaced'>
8033 TEST_SERIALCONTROL_CMD = "${COREBASE}/scripts/contrib/serdevtry picocom -b
8034115200 /dev/ttyUSB0"
8035 </literallayout>
8036 </para>
8037 </section>
8038 </section>
8039
8040 <section id="qemu-image-running-tests">
8041 <title>Running Tests</title>
8042
8043 <para>
8044 You can start the tests automatically or manually:
8045 <itemizedlist>
8046 <listitem><para><emphasis>Automatically running tests:</emphasis>
8047 To run the tests automatically after the
8048 OpenEmbedded build system successfully creates an image,
8049 first set the
8050 <ulink url='&YOCTO_DOCS_REF_URL;#var-TEST_IMAGE'><filename>TEST_IMAGE</filename></ulink>
8051 variable to "1" in your <filename>local.conf</filename>
8052 file in the
8053 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>:
8054 <literallayout class='monospaced'>
8055 TEST_IMAGE = "1"
8056 </literallayout>
8057 Next, build your image.
8058 If the image successfully builds, the tests will be
8059 run:
8060 <literallayout class='monospaced'>
8061 bitbake core-image-sato
8062 </literallayout></para></listitem>
8063 <listitem><para><emphasis>Manually running tests:</emphasis>
8064 To manually run the tests, first globally inherit the
8065 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-testimage'><filename>testimage</filename></ulink>
8066 class by editing your <filename>local.conf</filename>
8067 file:
8068 <literallayout class='monospaced'>
8069 INHERIT += "testimage"
8070 </literallayout>
8071 Next, use BitBake to run the tests:
8072 <literallayout class='monospaced'>
8073 bitbake -c testimage <replaceable>image</replaceable>
8074 </literallayout></para></listitem>
8075 </itemizedlist>
8076 </para>
8077
8078 <para>
8079 All test files reside in
8080 <filename>meta/lib/oeqa/runtime</filename> in the
8081 <link linkend='source-directory'>Source Directory</link>.
8082 A test name maps directly to a Python module.
8083 Each test module may contain a number of individual tests.
8084 Tests are usually grouped together by the area
8085 tested (e.g tests for systemd reside in
8086 <filename>meta/lib/oeqa/runtime/systemd.py</filename>).
8087 </para>
8088
8089 <para>
8090 You can add tests to any layer provided you place them in the
8091 proper area and you extend
8092 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBPATH'><filename>BBPATH</filename></ulink>
8093 in the <filename>local.conf</filename> file as normal.
8094 Be sure that tests reside in
8095 <filename><replaceable>layer</replaceable>/lib/oeqa/runtime</filename>.
8096 <note>
8097 Be sure that module names do not collide with module names
8098 used in the default set of test modules in
8099 <filename>meta/lib/oeqa/runtime</filename>.
8100 </note>
8101 </para>
8102
8103 <para>
8104 You can change the set of tests run by appending or overriding
8105 <ulink url='&YOCTO_DOCS_REF_URL;#var-TEST_SUITES'><filename>TEST_SUITES</filename></ulink>
8106 variable in <filename>local.conf</filename>.
8107 Each name in <filename>TEST_SUITES</filename> represents a
8108 required test for the image.
8109 Test modules named within <filename>TEST_SUITES</filename>
8110 cannot be skipped even if a test is not suitable for an image
8111 (e.g. running the RPM tests on an image without
8112 <filename>rpm</filename>).
8113 Appending "auto" to <filename>TEST_SUITES</filename> causes the
8114 build system to try to run all tests that are suitable for the
8115 image (i.e. each test module may elect to skip itself).
8116 </para>
8117
8118 <para>
8119 The order you list tests in <filename>TEST_SUITES</filename>
8120 is important and influences test dependencies.
8121 Consequently, tests that depend on other tests should be added
8122 after the test on which they depend.
8123 For example, since the <filename>ssh</filename> test
8124 depends on the
8125 <filename>ping</filename> test, "ssh" needs to come after
8126 "ping" in the list.
8127 The test class provides no re-ordering or dependency handling.
8128 <note>
8129 Each module can have multiple classes with multiple test
8130 methods.
8131 And, Python <filename>unittest</filename> rules apply.
8132 </note>
8133 </para>
8134
8135 <para>
8136 Here are some things to keep in mind when running tests:
8137 <itemizedlist>
8138 <listitem><para>The default tests for the image are defined
8139 as:
8140 <literallayout class='monospaced'>
8141 DEFAULT_TEST_SUITES_pn-<replaceable>image</replaceable> = "ping ssh df connman syslog xorg scp vnc date rpm smart dmesg"
8142 </literallayout></para></listitem>
8143 <listitem><para>Add your own test to the list of the
8144 by using the following:
8145 <literallayout class='monospaced'>
8146 TEST_SUITES_append = " mytest"
8147 </literallayout></para></listitem>
8148 <listitem><para>Run a specific list of tests as follows:
8149 <literallayout class='monospaced'>
8150 TEST_SUITES = "test1 test2 test3"
8151 </literallayout>
8152 Remember, order is important.
8153 Be sure to place a test that is dependent on another test
8154 later in the order.</para></listitem>
8155 </itemizedlist>
8156 </para>
8157 </section>
8158
8159 <section id="exporting-tests">
8160 <title>Exporting Tests</title>
8161
8162 <para>
8163 You can export tests so that they can run independently of
8164 the build system.
8165 Exporting tests is required if you want to be able to hand
8166 the test execution off to a scheduler.
8167 You can only export tests that are defined in
8168 <ulink url='&YOCTO_DOCS_REF_URL;#var-TEST_SUITES'><filename>TEST_SUITES</filename></ulink>.
8169 </para>
8170
8171 <para>
8172 If your image is already built, make sure the following are set
8173 in your <filename>local.conf</filename> file.
8174 Be sure to provide the IP address you need:
8175 <literallayout class='monospaced'>
8176 TEST_EXPORT_ONLY = "1"
8177 TEST_TARGET = "simpleremote"
8178 TEST_TARGET_IP = "192.168.7.2"
8179 TEST_SERVER_IP = "192.168.7.1"
8180 </literallayout>
8181 You can then export the tests with the following:
8182 <literallayout class='monospaced'>
8183 $ bitbake core-image-sato -c testimage
8184 </literallayout>
8185 Exporting the tests places them in the
8186 <link linkend='build-directory'>Build Directory</link> in
8187 <filename>tmp/testimage/core-image-sato</filename>, which
8188 is controlled by the
8189 <filename>TEST_EXPORT_DIR</filename> variable.
8190 </para>
8191
8192 <para>
8193 You can now run the tests outside of the build environment:
8194 <literallayout class='monospaced'>
8195 $ cd tmp/testimage/core-image-sato
8196 $ ./runexported.py testdata.json
8197 </literallayout>
8198 <note>
8199 This "export" feature does not deploy or boot the target
8200 image.
8201 Your target (be it a Qemu or hardware one)
8202 has to already be up and running when you call
8203 <filename>runexported.py</filename>
8204 </note>
8205 </para>
8206
8207 <para>
8208 The exported data (i.e. <filename>testdata.json</filename>)
8209 contains paths to the Build Directory.
8210 Thus, the contents of the directory can be moved
8211 to another machine as long as you update some paths in the
8212 JSON.
8213 Usually, you only care about the
8214 <filename>${DEPLOY_DIR}/rpm</filename> directory
8215 (assuming the RPM and Smart tests are enabled).
8216 Consequently, running the tests on other machine
8217 means that you have to move the contents and call
8218 <filename>runexported.py</filename> with
8219 "&dash;&dash;deploy-dir <replaceable>path</replaceable>" as
8220 follows:
8221 <literallayout class='monospaced'>
8222 ./runexported.py &dash;&dash;deploy-dir /new/path/on/this/machine testdata.json
8223 </literallayout>
8224 <filename>runexported.py</filename> accepts other arguments
8225 as well as described using <filename>&dash;&dash;help</filename>.
8226 </para>
8227 </section>
8228
8229 <section id="qemu-image-writing-new-tests">
8230 <title>Writing New Tests</title>
8231
8232 <para>
8233 As mentioned previously, all new test files need to be in the
8234 proper place for the build system to find them.
8235 New tests for additional functionality outside of the core
8236 should be added to the layer that adds the functionality, in
8237 <filename><replaceable>layer</replaceable>/lib/oeqa/runtime</filename>
8238 (as long as
8239 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBPATH'><filename>BBPATH</filename></ulink>
8240 is extended in the layer's
8241 <filename>layer.conf</filename> file as normal).
8242 Just remember that filenames need to map directly to test
8243 (module) names and that you do not use module names that
8244 collide with existing core tests.
8245 </para>
8246
8247 <para>
8248 To create a new test, start by copying an existing module
8249 (e.g. <filename>syslog.py</filename> or
8250 <filename>gcc.py</filename> are good ones to use).
8251 Test modules can use code from
8252 <filename>meta/lib/oeqa/utils</filename>, which are helper
8253 classes.
8254 </para>
8255
8256 <note>
8257 Structure shell commands such that you rely on them and they
8258 return a single code for success.
8259 Be aware that sometimes you will need to parse the output.
8260 See the <filename>df.py</filename> and
8261 <filename>date.py</filename> modules for examples.
8262 </note>
8263
8264 <para>
8265 You will notice that all test classes inherit
8266 <filename>oeRuntimeTest</filename>, which is found in
8267 <filename>meta/lib/oetest.py</filename>.
8268 This base class offers some helper attributes, which are
8269 described in the following sections:
8270 </para>
8271
8272 <section id='qemu-image-writing-tests-class-methods'>
8273 <title>Class Methods</title>
8274
8275 <para>
8276 Class methods are as follows:
8277 <itemizedlist>
8278 <listitem><para><emphasis><filename>hasPackage(pkg)</filename>:</emphasis>
8279 Returns "True" if <filename>pkg</filename> is in the
8280 installed package list of the image, which is based
8281 on the manifest file that is generated during the
8282 <filename>do_rootfs</filename> task.
8283 </para></listitem>
8284 <listitem><para><emphasis><filename>hasFeature(feature)</filename>:</emphasis>
8285 Returns "True" if the feature is in
8286 <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink>
8287 or
8288 <ulink url='&YOCTO_DOCS_REF_URL;#var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></ulink>.
8289 </para></listitem>
8290 </itemizedlist>
8291 </para>
8292 </section>
8293
8294 <section id='qemu-image-writing-tests-class-attributes'>
8295 <title>Class Attributes</title>
8296
8297 <para>
8298 Class attributes are as follows:
8299 <itemizedlist>
8300 <listitem><para><emphasis><filename>pscmd</filename>:</emphasis>
8301 Equals "ps -ef" if <filename>procps</filename> is
8302 installed in the image.
8303 Otherwise, <filename>pscmd</filename> equals
8304 "ps" (busybox).
8305 </para></listitem>
8306 <listitem><para><emphasis><filename>tc</filename>:</emphasis>
8307 The called text context, which gives access to the
8308 following attributes:
8309 <itemizedlist>
8310 <listitem><para><emphasis><filename>d</filename>:</emphasis>
8311 The BitBake datastore, which allows you to
8312 use stuff such as
8313 <filename>oeRuntimeTest.tc.d.getVar("VIRTUAL-RUNTIME_init_manager")</filename>.
8314 </para></listitem>
8315 <listitem><para><emphasis><filename>testslist</filename> and <filename>testsrequired</filename>:</emphasis>
8316 Used internally.
8317 The tests do not need these.
8318 </para></listitem>
8319 <listitem><para><emphasis><filename>filesdir</filename>:</emphasis>
8320 The absolute path to
8321 <filename>meta/lib/oeqa/runtime/files</filename>,
8322 which contains helper files for tests meant
8323 for copying on the target such as small
8324 files written in C for compilation.
8325 </para></listitem>
8326 <listitem><para><emphasis><filename>target</filename>:</emphasis>
8327 The target controller object used to deploy
8328 and start an image on a particular target
8329 (e.g. QemuTarget, SimpleRemote, and
8330 GummibootTarget).
8331 Tests usually use the following:
8332 <itemizedlist>
8333 <listitem><para><emphasis><filename>ip</filename>:</emphasis>
8334 The target's IP address.
8335 </para></listitem>
8336 <listitem><para><emphasis><filename>server_ip</filename>:</emphasis>
8337 The host's IP address, which is
8338 usually used by the "smart" test
8339 suite.
8340 </para></listitem>
8341 <listitem><para><emphasis><filename>run(cmd, timeout=None)</filename>:</emphasis>
8342 The single, most used method.
8343 This command is a wrapper for:
8344 <filename>ssh root@host "cmd"</filename>.
8345 The command returns a tuple:
8346 (status, output), which are what
8347 their names imply - the return code
8348 of "cmd" and whatever output
8349 it produces.
8350 The optional timeout argument
8351 represents the number of seconds the
8352 test should wait for "cmd" to
8353 return.
8354 If the argument is "None", the
8355 test uses the default instance's
8356 timeout period, which is 300
8357 seconds.
8358 If the argument is "0", the test
8359 runs until the command returns.
8360 </para></listitem>
8361 <listitem><para><emphasis><filename>copy_to(localpath, remotepath)</filename>:</emphasis>
8362 <filename>scp localpath root@ip:remotepath</filename>.
8363 </para></listitem>
8364 <listitem><para><emphasis><filename>copy_from(remotepath, localpath)</filename>:</emphasis>
8365 <filename>scp root@host:remotepath localpath</filename>.
8366 </para></listitem>
8367 </itemizedlist></para></listitem>
8368 </itemizedlist></para></listitem>
8369 </itemizedlist>
8370 </para>
8371 </section>
8372
8373 <section id='qemu-image-writing-tests-instance-attributes'>
8374 <title>Instance Attributes</title>
8375
8376 <para>
8377 A single instance attribute exists, which is
8378 <filename>target</filename>.
8379 The <filename>target</filename> instance attribute is
8380 identical to the class attribute of the same name, which
8381 is described in the previous section.
8382 This attribute exists as both an instance and class
8383 attribute so tests can use
8384 <filename>self.target.run(cmd)</filename> in instance
8385 methods instead of
8386 <filename>oeRuntimeTest.tc.target.run(cmd)</filename>.
8387 </para>
8388 </section>
8389 </section>
8390 </section>
8391
8392 <section id="platdev-gdb-remotedebug">
8393 <title>Debugging With the GNU Project Debugger (GDB) Remotely</title>
8394
8395 <para>
8396 GDB allows you to examine running programs, which in turn helps you to understand and fix problems.
8397 It also allows you to perform post-mortem style analysis of program crashes.
8398 GDB is available as a package within the Yocto Project and is
8399 installed in SDK images by default.
8400 See the "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>" chapter
8401 in the Yocto Project Reference Manual for a description of these images.
8402 You can find information on GDB at <ulink url="http://sourceware.org/gdb/"/>.
8403 </para>
8404
8405 <tip>
8406 For best results, install debug (<filename>-dbg</filename>) packages
8407 for the applications you are going to debug.
8408 Doing so makes extra debug symbols available that give you more
8409 meaningful output.
8410 </tip>
8411
8412 <para>
8413 Sometimes, due to memory or disk space constraints, it is not possible
8414 to use GDB directly on the remote target to debug applications.
8415 These constraints arise because GDB needs to load the debugging information and the
8416 binaries of the process being debugged.
8417 Additionally, GDB needs to perform many computations to locate information such as function
8418 names, variable names and values, stack traces and so forth - even before starting the
8419 debugging process.
8420 These extra computations place more load on the target system and can alter the
8421 characteristics of the program being debugged.
8422 </para>
8423
8424 <para>
8425 To help get past the previously mentioned constraints, you can use Gdbserver.
8426 Gdbserver runs on the remote target and does not load any debugging information
8427 from the debugged process.
8428 Instead, a GDB instance processes the debugging information that is run on a
8429 remote computer - the host GDB.
8430 The host GDB then sends control commands to Gdbserver to make it stop or start the debugged
8431 program, as well as read or write memory regions of that debugged program.
8432 All the debugging information loaded and processed as well
8433 as all the heavy debugging is done by the host GDB.
8434 Offloading these processes gives the Gdbserver running on the target a chance to remain
8435 small and fast.
8436 <note>
8437 By default, source files are part of the
8438 <filename>*-dbg</filename> packages in order to enable GDB
8439 to show source lines in its output.
8440 You can save further space on the target by setting the
8441 <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_DEBUG_SPLIT_STYLE'><filename>PACKAGE_DEBUG_SPLIT_STYLE</filename></ulink>
8442 variable to "debug-without-src" so that these packages do not
8443 include the source files.
8444 </note>
8445 </para>
8446
8447 <para>
8448 Because the host GDB is responsible for loading the debugging information and
8449 for doing the necessary processing to make actual debugging happen,
8450 you have to make sure the host can access the unstripped binaries complete
8451 with their debugging information and also be sure the target is compiled with no optimizations.
8452 The host GDB must also have local access to all the libraries used by the
8453 debugged program.
8454 Because Gdbserver does not need any local debugging information, the binaries on
8455 the remote target can remain stripped.
8456 However, the binaries must also be compiled without optimization
8457 so they match the host's binaries.
8458 </para>
8459
8460 <para>
8461 To remain consistent with GDB documentation and terminology, the binary being debugged
8462 on the remote target machine is referred to as the "inferior" binary.
8463 For documentation on GDB see the
8464 <ulink url="http://sourceware.org/gdb/documentation/">GDB site</ulink>.
8465 </para>
8466
8467 <para>
8468 The remainder of this section describes the steps you need to take
8469 to debug using the GNU project debugger.
8470 </para>
8471
8472 <section id='platdev-gdb-remotedebug-setup'>
8473 <title>Set Up the Cross-Development Debugging Environment</title>
8474
8475 <para>
8476 Before you can initiate a remote debugging session, you need
8477 to be sure you have set up the cross-development environment,
8478 toolchain, and sysroot.
8479 The "<ulink url='&YOCTO_DOCS_ADT_URL;#adt-prepare'>Preparing for Application Development</ulink>"
8480 chapter of the Yocto Project Application Developer's Guide
8481 describes this process.
8482 Be sure you have read that chapter and have set up
8483 your environment.
8484 </para>
8485 </section>
8486
8487 <section id="platdev-gdb-remotedebug-launch-gdbserver">
8488 <title>Launch Gdbserver on the Target</title>
8489
8490 <para>
8491 Make sure Gdbserver is installed on the target.
8492 If it is not, install the package
8493 <filename>gdbserver</filename>, which needs the
8494 <filename>libthread-db1</filename> package.
8495 </para>
8496
8497 <para>
8498 Here is an example, that when entered from the host,
8499 connects to the target and launches Gdbserver in order to
8500 "debug" a binary named <filename>helloworld</filename>:
8501 <literallayout class='monospaced'>
8502 $ gdbserver localhost:2345 /usr/bin/helloworld
8503 </literallayout>
8504 Gdbserver should now be listening on port 2345 for debugging
8505 commands coming from a remote GDB process that is running on
8506 the host computer.
8507 Communication between Gdbserver and the host GDB are done
8508 using TCP.
8509 To use other communication protocols, please refer to the
8510 <ulink url='http://www.gnu.org/software/gdb/'>Gdbserver documentation</ulink>.
8511 </para>
8512 </section>
8513
8514 <section id="platdev-gdb-remotedebug-launch-gdb">
8515 <title>Launch GDB on the Host Computer</title>
8516
8517 <para>
8518 Running GDB on the host computer takes a number of stages, which
8519 this section describes.
8520 </para>
8521
8522 <section id="platdev-gdb-remotedebug-launch-gdb-buildcross">
8523 <title>Build the Cross-GDB Package</title>
8524 <para>
8525 A suitable GDB cross-binary is required that runs on your
8526 host computer but also knows about the the ABI of the
8527 remote target.
8528 You can get this binary from the
8529 <link linkend='cross-development-toolchain'>Cross-Development Toolchain</link>.
8530 Here is an example where the toolchain has been installed
8531 in the default directory
8532 <filename>/opt/poky/&DISTRO;</filename>:
8533 <literallayout class='monospaced'>
8534 /opt/poky/&DISTRO;/sysroots/i686-pokysdk-linux/usr/bin/armv7a-vfp-neon-poky-linux-gnueabi/arm-poky-linux-gnueabi-gdb
8535 </literallayout>
8536 where <filename>arm</filename> is the target architecture
8537 and <filename>linux-gnueabi</filename> is the target ABI.
8538 </para>
8539
8540 <para>
8541 Alternatively, you can use BitBake to build the
8542 <filename>gdb-cross</filename> binary.
8543 Here is an example:
8544 <literallayout class='monospaced'>
8545 $ bitbake gdb-cross
8546 </literallayout>
8547 Once the binary is built, you can find it here:
8548 <literallayout class='monospaced'>
8549 tmp/sysroots/<replaceable>host-arch</replaceable>/usr/bin/<replaceable>target-platform</replaceable>/<replaceable>target-abi</replaceable>-gdb
8550 </literallayout>
8551 </para>
8552 </section>
8553
8554 <section id='create-the-gdb-initialization-file'>
8555 <title>Create the GDB Initialization File and Point to Your Root Filesystem</title>
8556
8557 <para>
8558 Aside from the GDB cross-binary, you also need a GDB
8559 initialization file in the same top directory in which
8560 your binary resides.
8561 When you start GDB on your host development system, GDB
8562 finds this initialization file and executes all the
8563 commands within.
8564 For information on the <filename>.gdbinit</filename>, see
8565 "<ulink url='http://sourceware.org/gdb/onlinedocs/gdb/'>Debugging with GDB</ulink>",
8566 which is maintained by
8567 <ulink url='http://www.sourceware.org'>sourceware.org</ulink>.
8568 </para>
8569
8570 <para>
8571 You need to add a statement in the
8572 <filename>~/.gdbinit</filename> file that points to your
8573 root filesystem.
8574 Here is an example that points to the root filesystem for
8575 an ARM-based target device:
8576 <literallayout class='monospaced'>
8577 set sysroot ~/sysroot_arm
8578 </literallayout>
8579 </para>
8580 </section>
8581
8582 <section id="platdev-gdb-remotedebug-launch-gdb-launchhost">
8583 <title>Launch the Host GDB</title>
8584
8585 <para>
8586 Before launching the host GDB, you need to be sure
8587 you have sourced the cross-debugging environment script,
8588 which if you installed the root filesystem in the default
8589 location is at <filename>/opt/poky/&DISTRO;</filename>
8590 and begins with the string "environment-setup".
8591 For more information, see the
8592 "<ulink url='&YOCTO_DOCS_ADT_URL;#setting-up-the-cross-development-environment'>Setting Up the Cross-Development Environment</ulink>"
8593 section in the Yocto Project Application Developer's
8594 Guide.
8595 </para>
8596
8597 <para>
8598 Finally, switch to the directory where the binary resides
8599 and run the <filename>cross-gdb</filename> binary.
8600 Provide the binary file you are going to debug.
8601 For example, the following command continues with the
8602 example used in the previous section by loading
8603 the <filename>helloworld</filename> binary as well as the
8604 debugging information:
8605 <literallayout class='monospaced'>
8606 $ arm-poky-linux-gnuabi-gdb helloworld
8607 </literallayout>
8608 The commands in your <filename>.gdbinit</filename> execute
8609 and the GDB prompt appears.
8610 </para>
8611 </section>
8612 </section>
8613
8614 <section id='platdev-gdb-connect-to-the-remote-gdb-server'>
8615 <title>Connect to the Remote GDB Server</title>
8616
8617 <para>
8618 From the target, you need to connect to the remote GDB
8619 server that is running on the host.
8620 You need to specify the remote host and port.
8621 Here is the command continuing with the example:
8622 <literallayout class='monospaced'>
8623 target remote 192.168.7.2:2345
8624 </literallayout>
8625 </para>
8626 </section>
8627
8628 <section id="platdev-gdb-remotedebug-launch-gdb-using">
8629 <title>Use the Debugger</title>
8630
8631 <para>
8632 You can now proceed with debugging as normal - as if you were debugging
8633 on the local machine.
8634 For example, to instruct GDB to break in the "main" function and then
8635 continue with execution of the inferior binary use the following commands
8636 from within GDB:
8637 <literallayout class='monospaced'>
8638 (gdb) break main
8639 (gdb) continue
8640 </literallayout>
8641 </para>
8642
8643 <para>
8644 For more information about using GDB, see the project's online documentation at
8645 <ulink url="http://sourceware.org/gdb/download/onlinedocs/"/>.
8646 </para>
8647 </section>
8648 </section>
8649
8650 <section id='debugging-parallel-make-races'>
8651 <title>Debugging Parallel Make Races</title>
8652
8653 <para>
8654 A parallel <filename>make</filename> race occurs when the build
8655 consists of several parts that are run simultaneously and
8656 a situation occurs when the output or result of one
8657 part is not ready for use with a different part of the build that
8658 depends on that output.
8659 Parallel make races are annoying and can sometimes be difficult
8660 to reproduce and fix.
8661 However, some simple tips and tricks exist that can help
8662 you debug and fix them.
8663 This section presents a real-world example of an error encountered
8664 on the Yocto Project autobuilder and the process used to fix it.
8665 </para>
8666
8667 <section id='the-failure'>
8668 <title>The Failure</title>
8669
8670 <para>
8671 For this example, assume that you are building an image that
8672 depends on the "neard" package.
8673 And, during the build, BitBake runs into problems and
8674 creates the following output.
8675 <note>
8676 This example log file has longer lines artificially
8677 broken to make the listing easier to read.
8678 </note>
8679 If you examine the output or the log file, you see the
8680 failure during <filename>make</filename>:
8681 <literallayout class='monospaced'>
8682 | DEBUG: SITE files ['endian-little', 'bit-32', 'ix86-common', 'common-linux', 'common-glibc', 'i586-linux', 'common']
8683 | DEBUG: Executing shell function do_compile
8684 | NOTE: make -j 16
8685 | make &dash;&dash;no-print-directory all-am
8686 | /bin/mkdir -p include/near
8687 | /bin/mkdir -p include/near
8688 | /bin/mkdir -p include/near
8689 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
8690 0.14-r0/neard-0.14/include/types.h include/near/types.h
8691 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
8692 0.14-r0/neard-0.14/include/log.h include/near/log.h
8693 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
8694 0.14-r0/neard-0.14/include/plugin.h include/near/plugin.h
8695 | /bin/mkdir -p include/near
8696 | /bin/mkdir -p include/near
8697 | /bin/mkdir -p include/near
8698 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
8699 0.14-r0/neard-0.14/include/tag.h include/near/tag.h
8700 | /bin/mkdir -p include/near
8701 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
8702 0.14-r0/neard-0.14/include/adapter.h include/near/adapter.h
8703 | /bin/mkdir -p include/near
8704 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
8705 0.14-r0/neard-0.14/include/ndef.h include/near/ndef.h
8706 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
8707 0.14-r0/neard-0.14/include/tlv.h include/near/tlv.h
8708 | /bin/mkdir -p include/near
8709 | /bin/mkdir -p include/near
8710 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
8711 0.14-r0/neard-0.14/include/setting.h include/near/setting.h
8712 | /bin/mkdir -p include/near
8713 | /bin/mkdir -p include/near
8714 | /bin/mkdir -p include/near
8715 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
8716 0.14-r0/neard-0.14/include/device.h include/near/device.h
8717 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
8718 0.14-r0/neard-0.14/include/nfc_copy.h include/near/nfc_copy.h
8719 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
8720 0.14-r0/neard-0.14/include/snep.h include/near/snep.h
8721 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
8722 0.14-r0/neard-0.14/include/version.h include/near/version.h
8723 | ln -s /home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/work/i586-poky-linux/neard/
8724 0.14-r0/neard-0.14/include/dbus.h include/near/dbus.h
8725 | ./src/genbuiltin nfctype1 nfctype2 nfctype3 nfctype4 p2p > src/builtin.h
8726 | i586-poky-linux-gcc -m32 -march=i586 &dash;&dash;sysroot=/home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/
8727 build/build/tmp/sysroots/qemux86 -DHAVE_CONFIG_H -I. -I./include -I./src -I./gdbus -I/home/pokybuild/
8728 yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/sysroots/qemux86/usr/include/glib-2.0
8729 -I/home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/tmp/sysroots/qemux86/usr/
8730 lib/glib-2.0/include -I/home/pokybuild/yocto-autobuilder/yocto-slave/nightly-x86/build/build/
8731 tmp/sysroots/qemux86/usr/include/dbus-1.0 -I/home/pokybuild/yocto-autobuilder/yocto-slave/
8732 nightly-x86/build/build/tmp/sysroots/qemux86/usr/lib/dbus-1.0/include -I/home/pokybuild/yocto-autobuilder/
8733 yocto-slave/nightly-x86/build/build/tmp/sysroots/qemux86/usr/include/libnl3
8734 -DNEAR_PLUGIN_BUILTIN -DPLUGINDIR=\""/usr/lib/near/plugins"\"
8735 -DCONFIGDIR=\""/etc/neard\"" -O2 -pipe -g -feliminate-unused-debug-types -c
8736 -o tools/snep-send.o tools/snep-send.c
8737 | In file included from tools/snep-send.c:16:0:
8738 | tools/../src/near.h:41:23: fatal error: near/dbus.h: No such file or directory
8739 | #include &lt;near/dbus.h&gt;
8740 | ^
8741 | compilation terminated.
8742 | make[1]: *** [tools/snep-send.o] Error 1
8743 | make[1]: *** Waiting for unfinished jobs....
8744 | make: *** [all] Error 2
8745 | ERROR: oe_runmake failed
8746 </literallayout>
8747 </para>
8748 </section>
8749
8750 <section id='reproducing-the-error'>
8751 <title>Reproducing the Error</title>
8752
8753 <para>
8754 Because race conditions are intermittent, they do not
8755 manifest themselves every time you do the build.
8756 In fact, most times the build will complete without problems
8757 even though the potential race condition exists.
8758 Thus, once the error surfaces, you need a way to reproduce it.
8759 </para>
8760
8761 <para>
8762 In this example, compiling the "neard" package is causing the
8763 problem.
8764 So the first thing to do is build "neard" locally.
8765 Before you start the build, set the
8766 <ulink url='&YOCTO_DOCS_REF_URL;#var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></ulink>
8767 variable in your <filename>local.conf</filename> file to
8768 a high number (e.g. "-j 20").
8769 Using a high value for <filename>PARALLEL_MAKE</filename>
8770 increases the chances of the race condition showing up:
8771 <literallayout class='monospaced'>
8772 $ bitbake neard
8773 </literallayout>
8774 </para>
8775
8776 <para>
8777 Once the local build for "neard" completes, start a
8778 <filename>devshell</filename> build:
8779 <literallayout class='monospaced'>
8780 $ bitbake neard -c devshell
8781 </literallayout>
8782 For information on how to use a
8783 <filename>devshell</filename>, see the
8784 "<link linkend='platdev-appdev-devshell'>Using a Development Shell</link>"
8785 section.
8786 </para>
8787
8788 <para>
8789 In the <filename>devshell</filename>, do the following:
8790 <literallayout class='monospaced'>
8791 $ make clean
8792 $ make tools/snep-send.o
8793 </literallayout>
8794 The <filename>devshell</filename> commands cause the failure
8795 to clearly be visible.
8796 In this case, a missing dependency exists for the "neard"
8797 Makefile target.
8798 Here is some abbreviated, sample output with the
8799 missing dependency clearly visible at the end:
8800 <literallayout class='monospaced'>
8801 i586-poky-linux-gcc -m32 -march=i586 &dash;&dash;sysroot=/home/scott-lenovo/......
8802 .
8803 .
8804 .
8805 tools/snep-send.c
8806 In file included from tools/snep-send.c:16:0:
8807 tools/../src/near.h:41:23: fatal error: near/dbus.h: No such file or directory
8808 #include &lt;near/dbus.h&gt;
8809 ^
8810 compilation terminated.
8811 make: *** [tools/snep-send.o] Error 1
8812 $
8813 </literallayout>
8814 </para>
8815 </section>
8816
8817 <section id='creating-a-patch-for-the-fix'>
8818 <title>Creating a Patch for the Fix</title>
8819
8820 <para>
8821 Because there is a missing dependency for the Makefile
8822 target, you need to patch the
8823 <filename>Makefile.am</filename> file, which is generated
8824 from <filename>Makefile.in</filename>.
8825 You can use Quilt to create the patch:
8826 <literallayout class='monospaced'>
8827 $ quilt new parallelmake.patch
8828 Patch patches/parallelmake.patch is now on top
8829 $ quilt add Makefile.am
8830 File Makefile.am added to patch patches/parallelmake.patch
8831 </literallayout>
8832 For more information on using Quilt, see the
8833 "<link linkend='using-a-quilt-workflow'>Using a Quilt Workflow</link>"
8834 section.
8835 </para>
8836
8837 <para>
8838 At this point you need to make the edits to
8839 <filename>Makefile.am</filename> to add the missing
8840 dependency.
8841 For our example, you have to add the following line
8842 to the file:
8843 <literallayout class='monospaced'>
8844 tools/snep-send.$(OBJEXT): include/near/dbus.h
8845 </literallayout>
8846 </para>
8847
8848 <para>
8849 Once you have edited the file, use the
8850 <filename>refresh</filename> command to create the patch:
8851 <literallayout class='monospaced'>
8852 $ quilt refresh
8853 Refreshed patch patches/parallelmake.patch
8854 </literallayout>
8855 Once the patch file exists, you need to add it back to the
8856 originating recipe folder.
8857 Here is an example assuming a top-level
8858 <link linkend='source-directory'>Source Directory</link>
8859 named <filename>poky</filename>:
8860 <literallayout class='monospaced'>
8861 $ cp patches/parallelmake.patch poky/meta/recipes-connectivity/neard/neard
8862 </literallayout>
8863 The final thing you need to do to implement the fix in the
8864 build is to update the "neard" recipe (i.e.
8865 <filename>neard-0.14.bb</filename>) so that the
8866 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
8867 statement includes the patch file.
8868 The recipe file is in the folder above the patch.
8869 Here is what the edited <filename>SRC_URI</filename>
8870 statement would look like:
8871 <literallayout class='monospaced'>
8872 SRC_URI = "${KERNELORG_MIRROR}/linux/network/nfc/${BPN}-${PV}.tar.xz \
8873 file://neard.in \
8874 file://neard.service.in \
8875 file://parallelmake.patch \
8876 "
8877 </literallayout>
8878 </para>
8879
8880 <para>
8881 With the patch complete and moved to the correct folder and
8882 the <filename>SRC_URI</filename> statement updated, you can
8883 exit the <filename>devshell</filename>:
8884 <literallayout class='monospaced'>
8885 $ exit
8886 </literallayout>
8887 </para>
8888 </section>
8889
8890 <section id='testing-the-build'>
8891 <title>Testing the Build</title>
8892
8893 <para>
8894 With everything in place, you can get back to trying the
8895 build again locally:
8896 <literallayout class='monospaced'>
8897 $ bitbake neard
8898 </literallayout>
8899 This build should succeed.
8900 </para>
8901
8902 <para>
8903 Now you can open up a <filename>devshell</filename> again
8904 and repeat the clean and make operations as follows:
8905 <literallayout class='monospaced'>
8906 $ bitbake neard -c devshell
8907 $ make clean
8908 $ make tools/snep-send.o
8909 </literallayout>
8910 The build should work without issue.
8911 </para>
8912
8913 <para>
8914 As with all solved problems, if they originated upstream, you
8915 need to submit the fix for the recipe in OE-Core and upstream
8916 so that the problem is taken care of at its source.
8917 See the
8918 "<link linkend='how-to-submit-a-change'>How to Submit a Change</link>"
8919 section for more information.
8920 </para>
8921 </section>
8922 </section>
8923
8924 <section id="examining-builds-using-toaster">
8925 <title>Examining Builds Using the Toaster API</title>
8926
8927 <para>
8928 Toaster is an Application Programming Interface (API) and
8929 web-based interface to the OpenEmbedded build system, which uses
8930 BitBake.
8931 Both interfaces are based on a Representational State Transfer
8932 (REST) API that queries for and returns build information using
8933 <filename>GET</filename> and <filename>JSON</filename>.
8934 These types of search operations retrieve sets of objects from
8935 a datastore used to collect build information.
8936 The results contain all the data for the objects being returned.
8937 You can order the results of the search by key and the search
8938 parameters are consistent for all object types.
8939 </para>
8940
8941 <para>
8942 Using the interfaces you can do the following:
8943 <itemizedlist>
8944 <listitem><para>See information about the tasks executed
8945 and reused during the build.</para></listitem>
8946 <listitem><para>See what is built (recipes and
8947 packages) and what packages were installed into the final
8948 image.</para></listitem>
8949 <listitem><para>See performance-related information such
8950 as build time, CPU usage, and disk I/O.</para></listitem>
8951 <listitem><para>Examine error, warning and trace messages
8952 to aid in debugging.</para></listitem>
8953 </itemizedlist>
8954 </para>
8955
8956 <note>
8957 <para>This release of Toaster provides you with information
8958 about a BitBake run.
8959 The tool does not allow you to configure and launch a build.
8960 However, future development includes plans to integrate the
8961 configuration and build launching capabilities of
8962 <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/hob'>Hob</ulink>.
8963 </para>
8964 <para>For more information on using Hob to build an image,
8965 see the
8966 "<link linkend='image-development-using-hob'>Image Development Using Hob</link>"
8967 section.</para>
8968 </note>
8969
8970 <para>
8971 The remainder of this section describes what you need to have in
8972 place to use Toaster, how to start it, use it, and stop it.
8973 For additional information on installing and running Toaster, see the
8974 "<ulink url='https://wiki.yoctoproject.org/wiki/Toaster#Installation_and_Running'>Installation and Running</ulink>"
8975 section of the "Toaster" wiki page.
8976 For complete information on the API and its search operation
8977 URI, parameters, and responses, see the
8978 <ulink url='https://wiki.yoctoproject.org/wiki/REST_API_Contracts'>REST API Contracts</ulink>
8979 Wiki page.
8980 </para>
8981
8982 <section id='starting-toaster'>
8983 <title>Starting Toaster</title>
8984
8985 <para>
8986 Getting set up to use and start Toaster is simple.
8987 First, be sure you have met the following requirements:
8988 <itemizedlist>
8989 <listitem><para>You have set up your
8990 <link linkend='source-directory'>Source Directory</link>
8991 by cloning the upstream <filename>poky</filename>
8992 repository.
8993 See the
8994 <link linkend='local-yp-release'>Yocto Project Release</link>
8995 item for information on how to set up the Source
8996 Directory.</para></listitem>
8997 <listitem><para>Be sure your build machine has
8998 <ulink url='http://en.wikipedia.org/wiki/Django_%28web_framework%29'>Django</ulink>
8999 version 1.5 installed.</para></listitem>
9000 <listitem><para>Make sure that port 8000 and 8200 are
9001 free (i.e. they have no servers on them).
9002 </para></listitem>
9003 </itemizedlist>
9004 </para>
9005
9006 <para>
9007 Once you have met the requirements, follow these steps to
9008 start Toaster running in the background of your shell:
9009 <orderedlist>
9010 <listitem><para><emphasis>Set up your build environment:</emphasis>
9011 Source a build environment script (i.e.
9012 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
9013 or
9014 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>).
9015 </para></listitem>
9016 <listitem><para><emphasis>Start Toaster:</emphasis>
9017 Start the Toaster service using this
9018 command from within your
9019 <link linkend='build-directory'>Build Directory</link>:
9020 <literallayout class='monospaced'>
9021 $ source toaster start
9022 </literallayout></para></listitem>
9023 <note>
9024 The Toaster must be started and running in order
9025 for it to collect data.
9026 </note>
9027 </orderedlist>
9028 </para>
9029
9030 <para>
9031 When Toaster starts, it creates some additional files in your
9032 Build Directory.
9033 Deleting these files will cause you to lose data or interrupt
9034 Toaster:
9035 <itemizedlist>
9036 <listitem><para><emphasis><filename>toaster.sqlite</filename>:</emphasis>
9037 Toaster's database file.</para></listitem>
9038 <listitem><para><emphasis><filename>toaster_web.log</filename>:</emphasis>
9039 The log file of the web server.</para></listitem>
9040 <listitem><para><emphasis><filename>toaster_ui.log</filename>:</emphasis>
9041 The log file of the user interface component.
9042 </para></listitem>
9043 <listitem><para><emphasis><filename>toastermain.pid</filename>:</emphasis>
9044 The PID of the web server.</para></listitem>
9045 <listitem><para><emphasis><filename>toasterui.pid</filename>:</emphasis>
9046 The PID of the DSI data bridge.</para></listitem>
9047 <listitem><para><emphasis><filename>bitbake-cookerdaemon.log</filename>:</emphasis>
9048 The BitBake server's log file.</para></listitem>
9049 </itemizedlist>
9050 </para>
9051 </section>
9052
9053 <section id='using-toaster'>
9054 <title>Using Toaster</title>
9055
9056 <para>
9057 Once Toaster is running, it logs information for any BitBake
9058 run from your Build Directory.
9059 This logging is automatic.
9060 All you need to do is access and use the information.
9061 </para>
9062
9063 <para>
9064 You access the information one of two ways:
9065 <itemizedlist>
9066 <listitem><para>Open a Browser and enter
9067 <filename>http://localhost:8000</filename>
9068 for the URL.
9069 </para></listitem>
9070 <listitem><para>Use the <filename>xdg-open</filename>
9071 tool from the shell and pass it the same URL.
9072 </para></listitem>
9073 </itemizedlist>
9074 Either method opens the home page for the Toaster interface.
9075 </para>
9076
9077 <note><title>Notes</title>
9078 <itemizedlist>
9079 <listitem><para>
9080 For information on how to delete information from the
9081 Toaster database, see the
9082 <ulink url='https://wiki.yoctoproject.org/wiki/Toaster#Deleting_a_Build_from_the_Toaster_Database'>Deleting a Build from the Toaster Database</ulink>
9083 wiki page.
9084 </para></listitem>
9085 <listitem><para>
9086 For information on how to set up an instance of Toaster
9087 on a remote host, see the
9088 <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>
9089 wiki page.
9090 </para></listitem>
9091 </itemizedlist>
9092 </note>
9093 </section>
9094
9095 <section id='examining-toaster-data'>
9096 <title>Examining Toaster Data</title>
9097
9098 <para>
9099 The Toaster database is persistent regardless of whether you
9100 start or stop the service.
9101 </para>
9102
9103 <para>
9104 Toaster's interface shows you a list of builds
9105 (successful and unsuccessful) for which it has data.
9106 You can click on any build to see related information.
9107 This information includes configuration details, information
9108 about tasks, all recipes and packages built and their
9109 dependencies, packages and their directory structure as
9110 installed in your final image,
9111 execution time, CPU usage and disk I/O per task.
9112 </para>
9113
9114 <para>
9115 For details on the interface, see the
9116 <ulink url='https://www.yoctoproject.org/documentation/toaster-manual'>Toaster Manual</ulink>.
9117 </para>
9118 </section>
9119
9120 <section id='stopping-toaster'>
9121 <title>Stopping Toaster</title>
9122
9123 <para>
9124 Stop the Toaster service with the following command
9125 from with the
9126 <link linkend='build-directory'>Build Directory</link>:
9127 <literallayout class='monospaced'>
9128 $ source toaster stop
9129 </literallayout>
9130 The service stops but the Toaster database remains persistent.
9131 </para>
9132 </section>
9133 </section>
9134
9135 <section id="platdev-oprofile">
9136 <title>Profiling with OProfile</title>
9137
9138 <para>
9139 <ulink url="http://oprofile.sourceforge.net/">OProfile</ulink> is a
9140 statistical profiler well suited for finding performance
9141 bottlenecks in both user-space software and in the kernel.
9142 This profiler provides answers to questions like "Which functions does my application spend
9143 the most time in when doing X?"
9144 Because the OpenEmbedded build system is well integrated with OProfile, it makes profiling
9145 applications on target hardware straight forward.
9146 <note>
9147 For more information on how to set up and run OProfile, see the
9148 "<ulink url='&YOCTO_DOCS_PROF_URL;#profile-manual-oprofile'>oprofile</ulink>"
9149 section in the Yocto Project Profiling and Tracing Manual.
9150 </note>
9151 </para>
9152
9153 <para>
9154 To use OProfile, you need an image that has OProfile installed.
9155 The easiest way to do this is with "tools-profile" in the
9156 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'>IMAGE_FEATURES</ulink></filename> variable.
9157 You also need debugging symbols to be available on the system where the analysis
9158 takes place.
9159 You can gain access to the symbols by using "dbg-pkgs" in the
9160 <filename>IMAGE_FEATURES</filename> variable or by
9161 installing the appropriate debug (<filename>-dbg</filename>)
9162 packages.
9163 </para>
9164
9165 <para>
9166 For successful call graph analysis, the binaries must preserve the frame
9167 pointer register and should also be compiled with the
9168 <filename>-fno-omit-framepointer</filename> flag.
9169 You can achieve this by setting the
9170 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SELECTED_OPTIMIZATION'>SELECTED_OPTIMIZATION</ulink></filename>
9171 variable with the following options:
9172 <literallayout class='monospaced'>
9173 -fexpensive-optimizations
9174 -fno-omit-framepointer
9175 -frename-registers
9176 -O2
9177 </literallayout>
9178 You can also achieve it by setting the
9179 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-DEBUG_BUILD'>DEBUG_BUILD</ulink></filename>
9180 variable to "1" in the <filename>local.conf</filename> configuration file.
9181 If you use the <filename>DEBUG_BUILD</filename> variable,
9182 you also add extra debugging information that can make the debug
9183 packages large.
9184 </para>
9185
9186 <section id="platdev-oprofile-target">
9187 <title>Profiling on the Target</title>
9188
9189 <para>
9190 Using OProfile, you can perform all the profiling work on the target device.
9191 A simple OProfile session might look like the following:
9192 </para>
9193
9194 <para>
9195 <literallayout class='monospaced'>
9196 # opcontrol &dash;&dash;reset
9197 # opcontrol &dash;&dash;start &dash;&dash;separate=lib &dash;&dash;no-vmlinux -c 5
9198 .
9199 .
9200 [do whatever is being profiled]
9201 .
9202 .
9203 # opcontrol &dash;&dash;stop
9204 $ opreport -cl
9205 </literallayout>
9206 </para>
9207
9208 <para>
9209 In this example, the <filename>reset</filename> command clears any previously profiled data.
9210 The next command starts OProfile.
9211 The options used when starting the profiler separate dynamic library data
9212 within applications, disable kernel profiling, and enable callgraphing up to
9213 five levels deep.
9214 <note>
9215 To profile the kernel, you would specify the
9216 <filename>&dash;&dash;vmlinux=/path/to/vmlinux</filename> option.
9217 The <filename>vmlinux</filename> file is usually in the source directory in the
9218 <filename>/boot/</filename> directory and must match the running kernel.
9219 </note>
9220 </para>
9221
9222 <para>
9223 After you perform your profiling tasks, the next command stops the profiler.
9224 After that, you can view results with the <filename>opreport</filename> command with options
9225 to see the separate library symbols and callgraph information.
9226 </para>
9227
9228 <para>
9229 Callgraphing logs information about time spent in functions and about a function's
9230 calling function (parent) and called functions (children).
9231 The higher the callgraphing depth, the more accurate the results.
9232 However, higher depths also increase the logging overhead.
9233 Consequently, you should take care when setting the callgraphing depth.
9234 <note>
9235 On ARM, binaries need to have the frame pointer enabled for callgraphing to work.
9236 To accomplish this use the <filename>-fno-omit-framepointer</filename> option
9237 with <filename>gcc</filename>.
9238 </note>
9239 </para>
9240
9241 <para>
9242 For more information on using OProfile, see the OProfile
9243 online documentation at
9244 <ulink url="http://oprofile.sourceforge.net/docs/"/>.
9245 </para>
9246 </section>
9247
9248 <section id="platdev-oprofile-oprofileui">
9249 <title>Using OProfileUI</title>
9250
9251 <para>
9252 A graphical user interface for OProfile is also available.
9253 You can download and build this interface from the Yocto Project at
9254 <ulink url="&YOCTO_GIT_URL;/cgit.cgi/oprofileui/"></ulink>.
9255 If the "tools-profile" image feature is selected, all necessary binaries
9256 are installed onto the target device for OProfileUI interaction.
9257 For a list of image features that ship with the Yocto Project,
9258 see the
9259 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-features-image'>Image Features</ulink>"
9260 section in the Yocto Project Reference Manual.
9261 </para>
9262
9263 <para>
9264 Even though the source directory usually includes all needed patches on the target device, you
9265 might find you need other OProfile patches for recent OProfileUI features.
9266 If so, see the <ulink url='&YOCTO_GIT_URL;/cgit.cgi/oprofileui/tree/README'>
9267 OProfileUI README</ulink> for the most recent information.
9268 </para>
9269
9270 <section id="platdev-oprofile-oprofileui-online">
9271 <title>Online Mode</title>
9272
9273 <para>
9274 Using OProfile in online mode assumes a working network connection with the target
9275 hardware.
9276 With this connection, you just need to run "oprofile-server" on the device.
9277 By default, OProfile listens on port 4224.
9278 <note>
9279 You can change the port using the <filename>&dash;&dash;port</filename> command-line
9280 option.
9281 </note>
9282 </para>
9283
9284 <para>
9285 The client program is called <filename>oprofile-viewer</filename> and its UI is relatively
9286 straight forward.
9287 You access key functionality through the buttons on the toolbar, which
9288 are duplicated in the menus.
9289 Here are the buttons:
9290 <itemizedlist>
9291 <listitem><para><emphasis>Connect:</emphasis> Connects to the remote host.
9292 You can also supply the IP address or hostname.</para></listitem>
9293 <listitem><para><emphasis>Disconnect:</emphasis> Disconnects from the target.
9294 </para></listitem>
9295 <listitem><para><emphasis>Start:</emphasis> Starts profiling on the device.
9296 </para></listitem>
9297 <listitem><para><emphasis>Stop:</emphasis> Stops profiling on the device and
9298 downloads the data to the local host.
9299 Stopping the profiler generates the profile and displays it in the viewer.
9300 </para></listitem>
9301 <listitem><para><emphasis>Download:</emphasis> Downloads the data from the
9302 target and generates the profile, which appears in the viewer.</para></listitem>
9303 <listitem><para><emphasis>Reset:</emphasis> Resets the sample data on the device.
9304 Resetting the data removes sample information collected from previous
9305 sampling runs.
9306 Be sure you reset the data if you do not want to include old sample information.
9307 </para></listitem>
9308 <listitem><para><emphasis>Save:</emphasis> Saves the data downloaded from the
9309 target to another directory for later examination.</para></listitem>
9310 <listitem><para><emphasis>Open:</emphasis> Loads previously saved data.
9311 </para></listitem>
9312 </itemizedlist>
9313 </para>
9314
9315 <para>
9316 The client downloads the complete profile archive from
9317 the target to the host for processing.
9318 This archive is a directory that contains the sample data, the object files,
9319 and the debug information for the object files.
9320 The archive is then converted using the <filename>oparchconv</filename> script, which is
9321 included in this distribution.
9322 The script uses <filename>opimport</filename> to convert the archive from
9323 the target to something that can be processed on the host.
9324 </para>
9325
9326 <para>
9327 Downloaded archives reside in the
9328 <link linkend='build-directory'>Build Directory</link> in
9329 <filename>tmp</filename> and are cleared up when they are no longer in use.
9330 </para>
9331
9332 <para>
9333 If you wish to perform kernel profiling, you need to be sure
9334 a <filename>vmlinux</filename> file that matches the running kernel is available.
9335 In the source directory, that file is usually located in
9336 <filename>/boot/vmlinux-<replaceable>kernelversion</replaceable></filename>, where
9337 <filename><replaceable>kernelversion</replaceable></filename> is the version of the kernel.
9338 The OpenEmbedded build system generates separate <filename>vmlinux</filename>
9339 packages for each kernel it builds.
9340 Thus, it should just be a question of making sure a matching package is
9341 installed (e.g. <filename>opkg install kernel-vmlinux</filename>).
9342 The files are automatically installed into development and profiling images
9343 alongside OProfile.
9344 A configuration option exists within the OProfileUI settings page that you can use to
9345 enter the location of the <filename>vmlinux</filename> file.
9346 </para>
9347
9348 <para>
9349 Waiting for debug symbols to transfer from the device can be slow, and it
9350 is not always necessary to actually have them on the device for OProfile use.
9351 All that is needed is a copy of the filesystem with the debug symbols present
9352 on the viewer system.
9353 The "<link linkend='platdev-gdb-remotedebug-launch-gdb'>Launch GDB on the Host Computer</link>"
9354 section covers how to create such a directory within
9355 the source directory and how to use the OProfileUI Settings
9356 Dialog to specify the location.
9357 If you specify the directory, it will be used when the file checksums
9358 match those on the system you are profiling.
9359 </para>
9360 </section>
9361
9362 <section id="platdev-oprofile-oprofileui-offline">
9363 <title>Offline Mode</title>
9364
9365 <para>
9366 If network access to the target is unavailable, you can generate
9367 an archive for processing in <filename>oprofile-viewer</filename> as follows:
9368 <literallayout class='monospaced'>
9369 # opcontrol &dash;&dash;reset
9370 # opcontrol &dash;&dash;start &dash;&dash;separate=lib &dash;&dash;no-vmlinux -c 5
9371 .
9372 .
9373 [do whatever is being profiled]
9374 .
9375 .
9376 # opcontrol &dash;&dash;stop
9377 # oparchive -o my_archive
9378 </literallayout>
9379 </para>
9380
9381 <para>
9382 In the above example, <filename>my_archive</filename> is the name of the
9383 archive directory where you would like the profile archive to be kept.
9384 After the directory is created, you can copy it to another host and load it
9385 using <filename>oprofile-viewer</filename> open functionality.
9386 If necessary, the archive is converted.
9387 </para>
9388 </section>
9389 </section>
9390 </section>
9391
9392 <section id='maintaining-open-source-license-compliance-during-your-products-lifecycle'>
9393 <title>Maintaining Open Source License Compliance During Your Product's Lifecycle</title>
9394
9395 <para>
9396 One of the concerns for a development organization using open source
9397 software is how to maintain compliance with various open source
9398 licensing during the lifecycle of the product.
9399 While this section does not provide legal advice or
9400 comprehensively cover all scenarios, it does
9401 present methods that you can use to
9402 assist you in meeting the compliance requirements during a software
9403 release.
9404 </para>
9405
9406 <para>
9407 With hundreds of different open source licenses that the Yocto
9408 Project tracks, it is difficult to know the requirements of each
9409 and every license.
9410 However, the requirements of the major FLOSS licenses can begin
9411 to be covered by
9412 assuming that three main areas of concern exist:
9413 <itemizedlist>
9414 <listitem><para>Source code must be provided.</para></listitem>
9415 <listitem><para>License text for the software must be
9416 provided.</para></listitem>
9417 <listitem><para>Compilation scripts and modifications to the
9418 source code must be provided.
9419 </para></listitem>
9420 </itemizedlist>
9421 There are other requirements beyond the scope of these
9422 three and the methods described in this section
9423 (e.g. the mechanism through which source code is distributed).
9424 </para>
9425
9426 <para>
9427 As different organizations have different methods of complying with
9428 open source licensing, this section is not meant to imply that
9429 there is only one single way to meet your compliance obligations,
9430 but rather to describe one method of achieving compliance.
9431 The remainder of this section describes methods supported to meet the
9432 previously mentioned three requirements.
9433 Once you take steps to meet these requirements,
9434 and prior to releasing images, sources, and the build system,
9435 you should audit all artifacts to ensure completeness.
9436 <note>
9437 The Yocto Project generates a license manifest during
9438 image creation that is located
9439 in <filename>${DEPLOY_DIR}/licenses/<replaceable>image_name-datestamp</replaceable></filename>
9440 to assist with any audits.
9441 </note>
9442 </para>
9443
9444 <section id='providing-the-source-code'>
9445 <title>Providing the Source Code</title>
9446
9447 <para>
9448 Compliance activities should begin before you generate the
9449 final image.
9450 The first thing you should look at is the requirement that
9451 tops the list for most compliance groups - providing
9452 the source.
9453 The Yocto Project has a few ways of meeting this
9454 requirement.
9455 </para>
9456
9457 <para>
9458 One of the easiest ways to meet this requirement is
9459 to provide the entire
9460 <ulink url='&YOCTO_DOCS_REF_URL;#var-DL_DIR'><filename>DL_DIR</filename></ulink>
9461 used by the build.
9462 This method, however, has a few issues.
9463 The most obvious is the size of the directory since it includes
9464 all sources used in the build and not just the source used in
9465 the released image.
9466 It will include toolchain source, and other artifacts, which
9467 you would not generally release.
9468 However, the more serious issue for most companies is accidental
9469 release of proprietary software.
9470 The Yocto Project provides an
9471 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-archiver'><filename>archiver</filename></ulink>
9472 class to help avoid some of these concerns.
9473 </para>
9474
9475 <para>
9476 Before you employ <filename>DL_DIR</filename> or the
9477 archiver class, you need to decide how you choose to
9478 provide source.
9479 The source archiver class can generate tarballs and SRPMs
9480 and can create them with various levels of compliance in mind.
9481 </para>
9482
9483 <para>
9484 One way of doing this (but certainly not the only way) is to
9485 release just the source as a tarball.
9486 You can do this by adding the following to the
9487 <filename>local.conf</filename> file found in the
9488 <link linkend='build-directory'>Build Directory</link>:
9489 <literallayout class='monospaced'>
9490 INHERIT += "archiver"
9491 ARCHIVER_MODE[src] = "original"
9492 </literallayout>
9493 During the creation of your image, the source from all
9494 recipes that deploy packages to the image is placed within
9495 subdirectories of
9496 <filename>DEPLOY_DIR/sources</filename> based on the
9497 <ulink url='&YOCTO_DOCS_REF_URL;#var-LICENSE'><filename>LICENSE</filename></ulink>
9498 for each recipe.
9499 Releasing the entire directory enables you to comply with
9500 requirements concerning providing the unmodified source.
9501 It is important to note that the size of the directory can
9502 get large.
9503 </para>
9504
9505 <para>
9506 A way to help mitigate the size issue is to only release
9507 tarballs for licenses that require the release of
9508 source.
9509 Let us assume you are only concerned with GPL code as
9510 identified with the following:
9511 <literallayout class='monospaced'>
9512 $ cd poky/build/tmp/deploy/sources
9513 $ mkdir ~/gpl_source_release
9514 $ for dir in */*GPL*; do cp -r $dir ~/gpl_source_release; done
9515 </literallayout>
9516 At this point, you could create a tarball from the
9517 <filename>gpl_source_release</filename> directory and
9518 provide that to the end user.
9519 This method would be a step toward achieving compliance
9520 with section 3a of GPLv2 and with section 6 of GPLv3.
9521 </para>
9522 </section>
9523
9524 <section id='providing-license-text'>
9525 <title>Providing License Text</title>
9526
9527 <para>
9528 One requirement that is often overlooked is inclusion
9529 of license text.
9530 This requirement also needs to be dealt with prior to
9531 generating the final image.
9532 Some licenses require the license text to accompany
9533 the binary.
9534 You can achieve this by adding the following to your
9535 <filename>local.conf</filename> file:
9536 <literallayout class='monospaced'>
9537 COPY_LIC_MANIFEST = "1"
9538 COPY_LIC_DIRS = "1"
9539 </literallayout>
9540 Adding these statements to the configuration file ensures
9541 that the licenses collected during package generation
9542 are included on your image.
9543 As the source archiver has already archived the original
9544 unmodified source that contains the license files,
9545 you would have already met the requirements for inclusion
9546 of the license information with source as defined by the GPL
9547 and other open source licenses.
9548 </para>
9549 </section>
9550
9551 <section id='providing-compilation-scripts-and-source-code-modifications'>
9552 <title>Providing Compilation Scripts and Source Code Modifications</title>
9553
9554 <para>
9555 At this point, we have addressed all we need to address
9556 prior to generating the image.
9557 The next two requirements are addressed during the final
9558 packaging of the release.
9559 </para>
9560
9561 <para>
9562 By releasing the version of the OpenEmbedded build system
9563 and the layers used during the build, you will be providing both
9564 compilation scripts and the source code modifications in one
9565 step.
9566 </para>
9567
9568 <para>
9569 If the deployment team has a
9570 <ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP layer</ulink>
9571 and a distro layer, and those those layers are used to patch,
9572 compile, package, or modify (in any way) any open source
9573 software included in your released images, you
9574 might be required to to release those layers under section 3 of
9575 GPLv2 or section 1 of GPLv3.
9576 One way of doing that is with a clean
9577 checkout of the version of the Yocto Project and layers used
9578 during your build.
9579 Here is an example:
9580 <literallayout class='monospaced'>
9581 # We built using the &DISTRO_NAME; branch of the poky repo
9582 $ git clone -b &DISTRO_NAME; git://git.yoctoproject.org/poky
9583 $ cd poky
9584 # We built using the release_branch for our layers
9585 $ git clone -b release_branch git://git.mycompany.com/meta-my-bsp-layer
9586 $ git clone -b release_branch git://git.mycompany.com/meta-my-software-layer
9587 # clean up the .git repos
9588 $ find . -name ".git" -type d -exec rm -rf {} \;
9589 </literallayout>
9590 One thing a development organization might want to consider
9591 for end-user convenience is to modify
9592 <filename>meta-yocto/conf/bblayers.conf.sample</filename> to
9593 ensure that when the end user utilizes the released build
9594 system to build an image, the development organization's
9595 layers are included in the <filename>bblayers.conf</filename>
9596 file automatically:
9597 <literallayout class='monospaced'>
9598 # LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf
9599 # changes incompatibly
9600 LCONF_VERSION = "6"
9601
9602 BBPATH = "${TOPDIR}"
9603 BBFILES ?= ""
9604
9605 BBLAYERS ?= " \
9606 ##OEROOT##/meta \
9607 ##OEROOT##/meta-yocto \
9608 ##OEROOT##/meta-yocto-bsp \
9609 ##OEROOT##/meta-mylayer \
9610 "
9611
9612 BBLAYERS_NON_REMOVABLE ?= " \
9613 ##OEROOT##/meta \
9614 ##OEROOT##/meta-yocto \
9615 "
9616 </literallayout>
9617 Creating and providing an archive of the
9618 <link linkend='metadata'>Metadata</link> layers
9619 (recipes, configuration files, and so forth)
9620 enables you to meet your
9621 requirements to include the scripts to control compilation
9622 as well as any modifications to the original source.
9623 </para>
9624 </section>
9625 </section>
9626
9627 <section id='using-the-error-reporting-tool'>
9628 <title>Using the Error Reporting Tool</title>
9629
9630 <para>
9631 The error reporting tool allows you to
9632 submit errors encountered during builds to a central database.
9633 Outside of the build environment, you can use a web interface to
9634 browse errors, view statistics, and query for errors.
9635 The tool works using a client-server system where the client
9636 portion is integrated with the installed Yocto Project
9637 <link linkend='source-directory'>Source Directory</link>
9638 (e.g. <filename>poky</filename>).
9639 The server receives the information collected and saves it in a
9640 database.
9641 </para>
9642
9643 <para>
9644 A live instance of the error reporting server exists at
9645 <ulink url='http://errors.yoctoproject.org'></ulink>.
9646 This server exists so that when you want to get help with
9647 build failures, you can submit all of the information on the
9648 failure easily and then point to the URL in your bug report
9649 or send an email to the mailing list.
9650 <note>
9651 If you send error reports to this server, the reports become
9652 publicly visible.
9653 </note>
9654 </para>
9655
9656 <section id='enabling-and-using-the-tool'>
9657 <title>Enabling and Using the Tool</title>
9658
9659 <para>
9660 By default, the error reporting tool is disabled.
9661 You can enable it by inheriting the
9662 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-report-error'><filename>report-error</filename></ulink>
9663 class by adding the following statement to the end of
9664 your <filename>local.conf</filename> file in your
9665 <link linkend='build-directory'>Build Directory</link>.
9666 <literallayout class='monospaced'>
9667 INHERIT += "report-error"
9668 </literallayout>
9669 </para>
9670
9671 <para>
9672 By default, the error reporting feature stores information in
9673 <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LOG_DIR'><filename>LOG_DIR</filename></ulink><filename>}/error-report</filename>.
9674 However, you can specify a directory to use by adding the following
9675 to your <filename>local.conf</filename> file:
9676 <literallayout class='monospaced'>
9677 ERR_REPORT_DIR = "path"
9678 </literallayout>
9679 Enabling error reporting causes the build process to collect
9680 the errors and store them in a file as previously described.
9681 When the build system encounters an error, it includes a command
9682 as part of the console output.
9683 You can run the command to send the error file to the server.
9684 For example, the following command sends the errors to an upstream
9685 server:
9686 <literallayout class='monospaced'>
9687 send-error-report /home/brandusa/project/poky/build/tmp/log/error-report/error_report_201403141617.txt [server]
9688 </literallayout>
9689 In the above example, the <filename>server</filename> parameter is
9690 optional.
9691 By default, the errors are sent to a database used by the entire
9692 community.
9693 If you specify a particular server, you can send them to a different
9694 database.
9695 </para>
9696
9697 <para>
9698 When sending the error file, you receive a link that corresponds
9699 to your entry in the database.
9700 For example, here is a typical link:
9701 <literallayout class='monospaced'>
9702 http://localhost:8000/Errors/Search/1/158
9703 </literallayout>
9704 Following the link takes you to a web interface where you can
9705 browse, query the errors, and view statistics.
9706 </para>
9707 </section>
9708
9709 <section id='disabling-the-tool'>
9710 <title>Disabling the Tool</title>
9711
9712 <para>
9713 To disable the error reporting feature, simply remove or comment
9714 out the following statement from the end of your
9715 <filename>local.conf</filename> file in your
9716 <link linkend='build-directory'>Build Directory</link>.
9717 <literallayout class='monospaced'>
9718 INHERIT += "report-error"
9719 </literallayout>
9720 </para>
9721 </section>
9722
9723 <section id='setting-up-your-own-error-reporting-server'>
9724 <title>Setting Up Your Own Error Reporting Server</title>
9725
9726 <para>
9727 If you want to set up your own error reporting server, you
9728 can obtain the code from the Git repository at
9729 <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/error-report-web/'></ulink>.
9730 Instructions on how to set it up are in the README document.
9731 </para>
9732 </section>
9733 </section>
9734</chapter>
9735
9736<!--
9737vim: expandtab tw=80 ts=4
9738-->
diff --git a/documentation/dev-manual/dev-manual-customization.xsl b/documentation/dev-manual/dev-manual-customization.xsl
new file mode 100644
index 0000000000..5dd425c810
--- /dev/null
+++ b/documentation/dev-manual/dev-manual-customization.xsl
@@ -0,0 +1,19 @@
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/1.76.1/xhtml/docbook.xsl" />
5
6 <xsl:include href="../template/permalinks.xsl"/>
7 <xsl:include href="../template/section.title.xsl"/>
8 <xsl:include href="../template/component.title.xsl"/>
9 <xsl:include href="../template/division.title.xsl"/>
10 <xsl:include href="../template/formal.object.heading.xsl"/>
11
12 <xsl:param name="html.stylesheet" select="'dev-style.css'" />
13 <xsl:param name="chapter.autolabel" select="1" />
14 <xsl:param name="appendix.autolabel" select="A" />
15 <xsl:param name="section.autolabel" select="1" />
16 <xsl:param name="section.label.includes.component.label" select="1" />
17 <xsl:param name="generate.id.attributes" select="1" />
18
19</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..21fba29670
--- /dev/null
+++ b/documentation/dev-manual/dev-manual-intro.xml
@@ -0,0 +1,240 @@
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 <ulink url='https://www.yoctoproject.org/organization/wind-river-systems'>Wind River Linux</ulink>,
44 <ulink url='https://www.yoctoproject.org/organization/mentor-graphics'>Mentor Embedded Linux</ulink>,
45 <ulink url='https://www.yoctoproject.org/organization/enea-ab'>ENEA Linux</ulink>
46 and <ulink url='https://www.yoctoproject.org/ecosystem/member-organizations'>others</ulink>.
47 See the "<link linkend='creating-your-own-distribution'>Creating Your Own Distribution</link>"
48 section for more information.
49 </note>
50 </section>
51
52 <section id='what-this-manual-provides'>
53 <title>What This Manual Provides</title>
54
55 <para>
56 The following list describes what you can get from this manual:
57 <itemizedlist>
58 <listitem><para>Information that lets you get set
59 up to develop using the Yocto Project.</para></listitem>
60 <listitem><para>Information to help developers who are new to
61 the open source environment and to the distributed revision
62 control system Git, which the Yocto Project uses.
63 </para></listitem>
64 <listitem><para>An understanding of common end-to-end
65 development models and tasks.</para></listitem>
66 <listitem><para>Information about common development tasks
67 generally used during image development for
68 embedded devices.
69 </para></listitem>
70 <listitem><para>Information on using the Yocto Project
71 integration of the QuickEMUlator (QEMU), which lets you
72 simulate running on hardware an image you have built using
73 the OpenEmbedded build system.
74 </para></listitem>
75 <listitem><para>Many references to other sources of related
76 information.</para></listitem>
77 </itemizedlist>
78 </para>
79 </section>
80
81 <section id='what-this-manual-does-not-provide'>
82 <title>What this Manual Does Not Provide</title>
83
84 <para>
85 This manual will not give you the following:
86 <itemizedlist>
87 <listitem><para><emphasis>Step-by-step instructions when those instructions exist in other Yocto
88 Project documentation:</emphasis>
89 For example, the Yocto Project Application Developer's Guide contains detailed
90 instructions on how to run the
91 <ulink url='&YOCTO_DOCS_ADT_URL;#installing-the-adt'>ADT Installer</ulink>,
92 which is used to set up a cross-development environment.</para></listitem>
93 <listitem><para><emphasis>Reference material:</emphasis>
94 This type of material resides in an appropriate reference manual.
95 For example, system variables are documented in the
96 <ulink url='&YOCTO_DOCS_REF_URL;'>Yocto Project Reference Manual</ulink>.</para></listitem>
97 <listitem><para><emphasis>Detailed public information that is not specific to the Yocto Project:</emphasis>
98 For example, exhaustive information on how to use Git is covered better through the
99 Internet than in this manual.</para></listitem>
100 </itemizedlist>
101 </para>
102 </section>
103
104 <section id='other-information'>
105 <title>Other Information</title>
106
107 <para>
108 Because this manual presents overview information for many different
109 topics, supplemental information is recommended for full
110 comprehension.
111 The following list presents other sources of information you might find helpful:
112 <itemizedlist>
113 <listitem><para><emphasis><ulink url='&YOCTO_HOME_URL;'>Yocto Project Website</ulink>:
114 </emphasis> The home page for the Yocto Project provides lots of information on the project
115 as well as links to software and documentation.
116 </para></listitem>
117 <listitem><para><emphasis>
118 <ulink url='&YOCTO_DOCS_QS_URL;'>Yocto Project Quick Start</ulink>:</emphasis>
119 This short document lets you get started
120 with the Yocto Project and quickly begin building an image.
121 </para></listitem>
122 <listitem><para><emphasis>
123 <ulink url='&YOCTO_DOCS_REF_URL;'>Yocto Project Reference Manual</ulink>:</emphasis>
124 This manual is a reference
125 guide to the OpenEmbedded build system, which is based on BitBake.
126 The build system is sometimes referred to as "Poky".
127 </para></listitem>
128 <listitem><para><emphasis>
129 <ulink url='&YOCTO_DOCS_ADT_URL;'>Yocto Project Application Developer's Guide</ulink>:</emphasis>
130 This guide provides information that lets you get going with the Application
131 Development Toolkit (ADT) and stand-alone cross-development toolchains to
132 develop projects using the Yocto Project.
133 </para></listitem>
134 <listitem><para><emphasis>
135 <ulink url='&YOCTO_DOCS_BSP_URL;'>Yocto Project Board Support Package (BSP) Developer's Guide</ulink>:</emphasis>
136 This guide defines the structure for BSP components.
137 Having a commonly understood structure encourages standardization.
138 </para></listitem>
139 <listitem><para><emphasis>
140 <ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;'>Yocto Project Linux Kernel Development Manual</ulink>:</emphasis>
141 This manual describes how to work with Linux Yocto kernels as well as provides a bit
142 of conceptual information on the construction of the Yocto Linux kernel tree.
143 </para></listitem>
144 <listitem><para><emphasis>
145 <ulink url='&YOCTO_DOCS_PROF_URL;'>Yocto Project Profiling and Tracing Manual</ulink>:</emphasis>
146 This manual presents a set of common and generally useful tracing and
147 profiling schemes along with their applications (as appropriate) to each tool.
148 </para></listitem>
149 <listitem><para><emphasis>
150 <ulink url='http://www.youtube.com/watch?v=3ZlOu-gLsh0'>
151 Eclipse IDE Yocto Plug-in</ulink>:</emphasis>
152 A step-by-step instructional video that
153 demonstrates how an application developer uses Yocto Plug-in features within
154 the Eclipse IDE.
155 </para></listitem>
156 <listitem><para><emphasis>
157 <ulink url='&YOCTO_WIKI_URL;/wiki/FAQ'>FAQ</ulink>:</emphasis>
158 A list of commonly asked questions and their answers.
159 </para></listitem>
160 <listitem><para><emphasis>
161 <ulink url='&YOCTO_RELEASE_NOTES;'>Release Notes</ulink>:</emphasis>
162 Features, updates and known issues for the current
163 release of the Yocto Project.
164 </para></listitem>
165 <listitem><para><emphasis>
166 <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/hob'>Hob</ulink>:</emphasis>
167 A graphical user interface for BitBake.
168 Hob's primary goal is to enable a user to perform common tasks more easily.
169 </para></listitem>
170 <listitem><para><emphasis>
171 <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/toaster'>Toaster</ulink>:</emphasis>
172 An Application Programming Interface (API) and web-based
173 interface to the OpenEmbedded build system, which uses
174 BitBake, that reports build information.
175 </para></listitem>
176 <listitem><para><emphasis>
177 <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/build-appliance'>Build Appliance</ulink>:</emphasis>
178 A virtual machine that
179 enables you to build and boot a custom embedded Linux image
180 with the Yocto Project using a non-Linux development system.
181 </para></listitem>
182 <listitem><para><emphasis>
183 <ulink url='&YOCTO_BUGZILLA_URL;'>Bugzilla</ulink>:</emphasis>
184 The bug tracking application the Yocto Project uses.
185 If you find problems with the Yocto Project, you should report them using this
186 application.
187 </para></listitem>
188 <listitem><para><emphasis>Yocto Project Mailing Lists:</emphasis>
189 To subscribe to the Yocto Project mailing
190 lists, click on the following URLs and follow the instructions:
191 <itemizedlist>
192 <listitem><para><ulink url='&YOCTO_LISTS_URL;/listinfo/yocto'></ulink>
193 for a Yocto Project Discussions mailing list.
194 </para></listitem>
195 <listitem><para><ulink url='&YOCTO_LISTS_URL;/listinfo/poky'></ulink>
196 for a Yocto Project Discussions mailing list about the
197 OpenEmbedded build system (Poky).
198 </para></listitem>
199 <listitem><para><ulink url='&YOCTO_LISTS_URL;/listinfo/yocto-announce'></ulink>
200 for a mailing list to receive official Yocto Project announcements
201 as well as Yocto Project milestones.
202 </para></listitem>
203 <listitem><para><ulink url='&YOCTO_LISTS_URL;/listinfo'></ulink>
204 for a listing of all public mailing lists on
205 <filename>lists.yoctoproject.org</filename>.
206 </para></listitem>
207 </itemizedlist></para></listitem>
208 <listitem><para><emphasis>Internet Relay Chat (IRC):</emphasis>
209 Two IRC channels on freenode are available
210 for Yocto Project and Poky discussions: <filename>#yocto</filename> and
211 <filename>#poky</filename>, respectively.
212 </para></listitem>
213 <listitem><para><emphasis>
214 <ulink url='&OE_HOME_URL;'>OpenEmbedded</ulink>:</emphasis>
215 The build system used by the Yocto Project.
216 This project is the upstream, generic, embedded distribution
217 from which the Yocto Project derives its build system (Poky)
218 and to which it contributes.
219 </para></listitem>
220 <listitem><para><emphasis>
221 <ulink url='http://www.openembedded.org/wiki/BitBake'>BitBake</ulink>:</emphasis>
222 The tool used by the OpenEmbedded build system
223 to process project metadata.
224 </para></listitem>
225 <listitem><para><emphasis>
226 <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual:</ulink></emphasis>
227 A comprehensive guide to the BitBake tool.
228 If you want information on BitBake, see this manual.
229 </para></listitem>
230 <listitem><para><emphasis>
231 <ulink url='http://wiki.qemu.org/Index.html'>Quick EMUlator (QEMU)</ulink>:</emphasis>
232 An open-source machine emulator and virtualizer.
233 </para></listitem>
234 </itemizedlist>
235 </para>
236 </section>
237</chapter>
238<!--
239vim: expandtab tw=80 ts=4
240-->
diff --git a/documentation/dev-manual/dev-manual-model.xml b/documentation/dev-manual/dev-manual-model.xml
new file mode 100644
index 0000000000..43c31b8405
--- /dev/null
+++ b/documentation/dev-manual/dev-manual-model.xml
@@ -0,0 +1,2112 @@
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 Development Manual</ulink>.
22 </para></listitem>
23 <listitem><para><emphasis>User Application Development:</emphasis>
24 User Application Development covers development of applications that you intend
25 to run on target hardware.
26 For information on how to set up your host development system for user-space
27 application development, see the
28 <ulink url='&YOCTO_DOCS_ADT_URL;'>Yocto Project Application Developer's Guide</ulink>.
29 For a simple example of user-space application development using the
30 <trademark class='trade'>Eclipse</trademark> IDE, see the
31 "<link linkend='application-development-workflow'>Application
32 Development Workflow</link>" section.
33 </para></listitem>
34 <listitem><para><emphasis>Temporary Source Code Modification:</emphasis>
35 Direct modification of temporary source code is a convenient development model
36 to quickly iterate and develop towards a solution.
37 Once you implement the solution, you should of course take steps to
38 get the changes upstream and applied in the affected recipes.</para></listitem>
39 <listitem><para><emphasis>Image Development using Hob:</emphasis>
40 You can use the <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/hob'>Hob</ulink> to build
41 custom operating system images within the build environment.
42 Hob provides an efficient interface to the OpenEmbedded build system.</para></listitem>
43 <listitem><para><emphasis>Using a Development Shell:</emphasis>
44 You can use a <filename>devshell</filename> to efficiently debug commands or simply
45 edit packages.
46 Working inside a development shell is a quick way to set up the OpenEmbedded build
47 environment to work on parts of a project.</para></listitem>
48 </itemizedlist>
49</para>
50
51<section id='system-development-model'>
52 <title>System Development Workflow</title>
53
54 <para>
55 System development involves modification or creation of an image that you want to run on
56 a specific hardware target.
57 Usually, when you want to create an image that runs on embedded hardware, the image does
58 not require the same number of features that a full-fledged Linux distribution provides.
59 Thus, you can create a much smaller image that is designed to use only the
60 features for your particular hardware.
61 </para>
62
63 <para>
64 To help you understand how system development works in the Yocto Project, this section
65 covers two types of image development: BSP creation and kernel modification or
66 configuration.
67 </para>
68
69 <section id='developing-a-board-support-package-bsp'>
70 <title>Developing a Board Support Package (BSP)</title>
71
72 <para>
73 A BSP is a collection of recipes that, when applied during a build, results in
74 an image that you can run on a particular board.
75 Thus, the package when compiled into the new image, supports the operation of the board.
76 </para>
77
78 <note>
79 For a brief list of terms used when describing the development process in the Yocto Project,
80 see the "<link linkend='yocto-project-terms'>Yocto Project Terms</link>" section.
81 </note>
82
83 <para>
84 The remainder of this section presents the basic
85 steps used to create a BSP using the Yocto Project's
86 <ulink url='&YOCTO_DOCS_BSP_URL;#using-the-yocto-projects-bsp-tools'>BSP Tools</ulink>.
87 Although not required for BSP creation, the
88 <filename>meta-intel</filename> repository, which contains
89 many BSPs supported by the Yocto Project, is part of the example.
90 </para>
91
92 <para>
93 For an example that shows how to create a new layer using the tools, see the
94 "<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>"
95 section in the Yocto Project Board Support Package (BSP) Developer's Guide.
96 </para>
97
98 <para>
99 The following illustration and list summarize the BSP creation general workflow.
100 </para>
101
102 <para>
103 <imagedata fileref="figures/bsp-dev-flow.png" width="6in" depth="7in" align="center" scalefit="1" />
104 </para>
105
106 <para>
107 <orderedlist>
108 <listitem><para><emphasis>Set up your host development system to support
109 development using the Yocto Project</emphasis>: See the
110 "<ulink url='&YOCTO_DOCS_QS_URL;#the-linux-distro'>The Linux Distribution</ulink>"
111 and the
112 "<ulink url='&YOCTO_DOCS_QS_URL;#packages'>The Packages</ulink>" sections both
113 in the Yocto Project Quick Start for requirements.</para></listitem>
114 <listitem><para><emphasis>Establish a local copy of the project files on your
115 system</emphasis>: You need this <link linkend='source-directory'>Source
116 Directory</link> available on your host system.
117 Having these files on your system gives you access to the build
118 process and to the tools you need.
119 For information on how to set up the Source Directory,
120 see the
121 "<link linkend='getting-setup'>Getting Set Up</link>" section.</para></listitem>
122 <listitem><para><emphasis>Establish the <filename>meta-intel</filename>
123 repository on your system</emphasis>: Having local copies
124 of these supported BSP layers on your system gives you
125 access to layers you might be able to build on or modify
126 to create your BSP.
127 For information on how to get these files, see the
128 "<link linkend='getting-setup'>Getting Set Up</link>" section.</para></listitem>
129 <listitem><para><emphasis>Create your own BSP layer using the
130 <ulink url='&YOCTO_DOCS_BSP_URL;#creating-a-new-bsp-layer-using-the-yocto-bsp-script'><filename>yocto-bsp</filename></ulink> script</emphasis>:
131 Layers are ideal for
132 isolating and storing work for a given piece of hardware.
133 A layer is really just a location or area in which you place
134 the recipes and configurations for your BSP.
135 In fact, a BSP is, in itself, a special type of layer.
136 The simplest way to create a new BSP layer that is compliant with the
137 Yocto Project is to use the <filename>yocto-bsp</filename> script.
138 For information about that script, see the
139 "<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>"
140 section in the Yocto Project Board Support (BSP) Developer's Guide.
141 </para>
142 <para>
143 Another example that illustrates a layer is an application.
144 Suppose you are creating an application that has library or other dependencies in
145 order for it to compile and run.
146 The layer, in this case, would be where all the recipes that define those dependencies
147 are kept.
148 The key point for a layer is that it is an isolated area that contains
149 all the relevant information for the project that the OpenEmbedded build
150 system knows about.
151 For more information on layers, see the
152 "<link linkend='understanding-and-creating-layers'>Understanding and Creating Layers</link>"
153 section.
154 For more information on BSP layers, see the
155 "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>" section in the
156 Yocto Project Board Support Package (BSP) Developer's Guide.</para>
157 <note>Five BSPs exist that are part of the
158 Yocto Project release: <filename>genericx86</filename>, <filename>genericx86-64</filename>,
159 <filename>beaglebone</filename> (ARM),
160 <filename>mpc8315e</filename> (PowerPC),
161 and <filename>edgerouter</filename> (MIPS).
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, the <filename>meta-intel</filename> layer
165 contains BSP layers for many supported BSPs (e.g.
166 Crystal Forest, Emenlow, Fish River Island 2, Haswell,
167 Jasper Forest, and so forth).
168 Aside from the BSPs in the <filename>meta-intel</filename>
169 layer, the
170 <ulink url='&YOCTO_GIT_URL;'>Source Repositories</ulink>
171 contain additional BSP layers such as
172 <filename>meta-minnow</filename> and
173 <filename>meta-raspberrypi</filename>.</note>
174 <para>When you set up a layer for a new BSP, you should follow a standard layout.
175 This layout is described in the
176 "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-filelayout'>Example Filesystem Layout</ulink>"
177 section of the Board Support Package (BSP) Development Guide.
178 In the standard layout, you will notice a suggested structure for recipes and
179 configuration information.
180 You can see the standard layout for a BSP by examining
181 any supported BSP found in the <filename>meta-intel</filename> layer inside
182 the Source Directory.</para></listitem>
183 <listitem><para><emphasis>Make configuration changes to your new BSP
184 layer</emphasis>: The standard BSP layer structure organizes the files you need
185 to edit in <filename>conf</filename> and several <filename>recipes-*</filename>
186 directories within the BSP layer.
187 Configuration changes identify where your new layer is on the local system
188 and identify which kernel you are going to use.
189 When you run the <filename>yocto-bsp</filename> script, you are able to interactively
190 configure many things for the BSP (e.g. keyboard, touchscreen, and so forth).
191 </para></listitem>
192 <listitem><para><emphasis>Make recipe changes to your new BSP layer</emphasis>: Recipe
193 changes include altering recipes (<filename>.bb</filename> files), removing
194 recipes you do not use, and adding new recipes or append files
195 (<filename>.bbappend</filename>) that you need to support your hardware.
196 </para></listitem>
197 <listitem><para><emphasis>Prepare for the build</emphasis>: Once you have made all the
198 changes to your BSP layer, there remains a few things
199 you need to do for the OpenEmbedded build system in order for it to create your image.
200 You need to get the build environment ready by sourcing an environment setup script
201 (i.e. <filename>oe-init-build-env</filename> or
202 <filename>oe-init-build-env-memres</filename>)
203 and you need to be sure two key configuration files are configured appropriately:
204 the <filename>conf/local.conf</filename> and the
205 <filename>conf/bblayers.conf</filename> file.
206 You must make the OpenEmbedded build system aware of your new layer.
207 See the
208 "<link linkend='enabling-your-layer'>Enabling Your Layer</link>" section
209 for information on how to let the build system know about your new layer.</para>
210 <para>The entire process for building an image is overviewed in the section
211 "<ulink url='&YOCTO_DOCS_QS_URL;#building-image'>Building an Image</ulink>" section
212 of the Yocto Project Quick Start.
213 You might want to reference this information.</para></listitem>
214 <listitem><para><emphasis>Build the image</emphasis>: The OpenEmbedded build system
215 uses the BitBake tool to build images based on the type of image you want to create.
216 You can find more information about BitBake in the
217 <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
218 </para>
219 <para>The build process supports several types of images to satisfy different needs.
220 See the
221 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>" chapter
222 in the Yocto Project Reference Manual for information on
223 supported images.</para></listitem>
224 </orderedlist>
225 </para>
226
227 <para>
228 You can view a video presentation on "Building Custom Embedded Images with Yocto"
229 at <ulink url='http://free-electrons.com/blog/elc-2011-videos'>Free Electrons</ulink>.
230 After going to the page, just search for "Embedded".
231 You can also find supplemental information in the
232 <ulink url='&YOCTO_DOCS_BSP_URL;'>
233 Yocto Project Board Support Package (BSP) Developer's Guide</ulink>.
234 Finally, there is a wiki page write up of the example also located
235 <ulink url='&YOCTO_WIKI_URL;/wiki/Transcript:_creating_one_generic_Atom_BSP_from_another'>
236 here</ulink> that you might find helpful.
237 </para>
238 </section>
239
240 <section id='modifying-the-kernel'>
241 <title><anchor id='kernel-spot' />Modifying the Kernel</title>
242
243 <para>
244 Kernel modification involves changing the Yocto Project kernel, which could involve changing
245 configuration options as well as adding new kernel recipes.
246 Configuration changes can be added in the form of configuration fragments, while recipe
247 modification comes through the kernel's <filename>recipes-kernel</filename> area
248 in a kernel layer you create.
249 </para>
250
251 <para>
252 The remainder of this section presents a high-level overview of the Yocto Project
253 kernel architecture and the steps to modify the kernel.
254 You can reference the
255 "<link linkend='patching-the-kernel'>Patching the Kernel</link>" section
256 for an example that changes the source code of the kernel.
257 For information on how to configure the kernel, see the
258 "<link linkend='configuring-the-kernel'>Configuring the Kernel</link>" section.
259 For more information on the kernel and on modifying the kernel, see the
260 <ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;'>Yocto Project Linux Kernel Development Manual</ulink>.
261 </para>
262
263 <section id='kernel-overview'>
264 <title>Kernel Overview</title>
265
266 <para>
267 Traditionally, when one thinks of a patched kernel, they think of a base kernel
268 source tree and a fixed structure that contains kernel patches.
269 The Yocto Project, however, employs mechanisms that, in a sense, result in a kernel source
270 generator.
271 By the end of this section, this analogy will become clearer.
272 </para>
273
274 <para>
275 You can find a web interface to the Yocto Project kernel source repositories at
276 <ulink url='&YOCTO_GIT_URL;'></ulink>.
277 If you look at the interface, you will see to the left a grouping of
278 Git repositories titled "Yocto Linux Kernel."
279 Within this group, you will find several kernels supported by
280 the Yocto Project:
281 <itemizedlist>
282 <listitem><para><emphasis>
283 <filename>linux-yocto-3.8</filename></emphasis> - The
284 stable Yocto Project kernel to use with the Yocto
285 Project Release 1.4. This kernel is based on the
286 Linux 3.8 released kernel.
287 </para></listitem>
288 <listitem><para><emphasis>
289 <filename>linux-yocto-3.10</filename></emphasis> - The
290 stable Yocto Project kernel to use with the Yocto
291 Project Release 1.5.
292 This kernel is based on the Linux 3.10 released kernel.
293 </para></listitem>
294 <listitem><para><emphasis>
295 <filename>linux-yocto-3.14</filename></emphasis> - The
296 stable Yocto Project kernel to use with the Yocto
297 Project Releases 1.6 and 1.7.
298 This kernel is based on the Linux 3.14 released kernel.
299 </para></listitem>
300 <listitem><para><emphasis>
301 <filename>linux-yocto-3.17</filename></emphasis> - An
302 additional Yocto Project kernel used with the Yocto
303 Project Release 1.7.
304 This kernel is based on the Linux 3.17 released kernel.
305 </para></listitem>
306 <listitem><para><emphasis>
307 <filename>linux-yocto-dev</filename></emphasis> - A
308 development kernel based on the latest upstream release
309 candidate available.
310 </para></listitem>
311 </itemizedlist>
312 </para>
313
314 <para>
315 The kernels are maintained using the Git revision control system
316 that structures them using the familiar "tree", "branch", and "leaf" scheme.
317 Branches represent diversions from general code to more specific code, while leaves
318 represent the end-points for a complete and unique kernel whose source files,
319 when gathered from the root of the tree to the leaf, accumulate to create the files
320 necessary for a specific piece of hardware and its features.
321 The following figure displays this concept:
322 <para>
323 <imagedata fileref="figures/kernel-overview-1.png"
324 width="6in" depth="6in" align="center" scale="100" />
325 </para>
326
327 <para>
328 Within the figure, the "Kernel.org Branch Point" represents the point in the tree
329 where a supported base kernel is modified from the Linux kernel.
330 For example, this could be the branch point for the <filename>linux-yocto-3.4</filename>
331 kernel.
332 Thus, everything further to the right in the structure is based on the
333 <filename>linux-yocto-3.4</filename> kernel.
334 Branch points to the right in the figure represent where the
335 <filename>linux-yocto-3.4</filename> kernel is modified for specific hardware
336 or types of kernels, such as real-time kernels.
337 Each leaf thus represents the end-point for a kernel designed to run on a specific
338 targeted device.
339 </para>
340
341 <para>
342 The overall result is a Git-maintained repository from which all the supported
343 kernel types can be derived for all the supported devices.
344 A big advantage to this scheme is the sharing of common features by keeping them in
345 "larger" branches within the tree.
346 This practice eliminates redundant storage of similar features shared among kernels.
347 </para>
348
349 <note>
350 Keep in mind the figure does not take into account all the supported Yocto
351 Project kernel types, but rather shows a single generic kernel just for conceptual purposes.
352 Also keep in mind that this structure represents the Yocto Project source repositories
353 that are either pulled from during the build or established on the host development system
354 prior to the build by either cloning a particular kernel's Git repository or by
355 downloading and unpacking a tarball.
356 </note>
357
358 <para>
359 Upstream storage of all the available kernel source code is one thing, while
360 representing and using the code on your host development system is another.
361 Conceptually, you can think of the kernel source repositories as all the
362 source files necessary for all the supported kernels.
363 As a developer, you are just interested in the source files for the kernel on
364 which you are working.
365 And, furthermore, you need them available on your host system.
366 </para>
367
368 <para>
369 Kernel source code is available on your host system a couple of different
370 ways.
371 If you are working in the kernel all the time, you probably would want
372 to set up your own local Git repository of the kernel tree.
373 If you just need to make some patches to the kernel, you can access
374 temporary kernel source files that were extracted and used
375 during a build.
376 We will just talk about working with the temporary source code.
377 For more information on how to get kernel source code onto your
378 host system, see the
379 "<link linkend='local-kernel-files'>Yocto Project Kernel</link>"
380 bulleted item earlier in the manual.
381 </para>
382
383 <para>
384 What happens during the build?
385 When you build the kernel on your development system, all files needed for the build
386 are taken from the source repositories pointed to by the
387 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink> variable
388 and gathered in a temporary work area
389 where they are subsequently used to create the unique kernel.
390 Thus, in a sense, the process constructs a local source tree specific to your
391 kernel to generate the new kernel image - a source generator if you will.
392 </para>
393 The following figure shows the temporary file structure
394 created on your host system when the build occurs.
395 This
396 <link linkend='build-directory'>Build Directory</link> contains all the
397 source files used during the build.
398 </para>
399
400 <para>
401 <imagedata fileref="figures/kernel-overview-2-generic.png"
402 width="6in" depth="5in" align="center" scale="100" />
403 </para>
404
405 <para>
406 Again, for additional information on the Yocto Project kernel's
407 architecture and its branching strategy, see the
408 <ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;'>Yocto Project Linux Kernel Development Manual</ulink>.
409 You can also reference the
410 "<link linkend='patching-the-kernel'>Patching the Kernel</link>"
411 section for a detailed example that modifies the kernel.
412 </para>
413 </section>
414
415 <section id='kernel-modification-workflow'>
416 <title>Kernel Modification Workflow</title>
417
418 <para>
419 This illustration and the following list summarizes the kernel modification general workflow.
420 </para>
421
422 <para>
423 <imagedata fileref="figures/kernel-dev-flow.png"
424 width="6in" depth="5in" align="center" scalefit="1" />
425 </para>
426
427 <para>
428 <orderedlist>
429 <listitem><para><emphasis>Set up your host development system to support
430 development using the Yocto Project</emphasis>: See
431 "<ulink url='&YOCTO_DOCS_QS_URL;#the-linux-distro'>The Linux Distribution</ulink>" and
432 "<ulink url='&YOCTO_DOCS_QS_URL;#packages'>The Packages</ulink>" sections both
433 in the Yocto Project Quick Start for requirements.</para></listitem>
434 <listitem><para><emphasis>Establish a local copy of project files on your
435 system</emphasis>: Having the <link linkend='source-directory'>Source
436 Directory</link> on your system gives you access to the build process and tools
437 you need.
438 For information on how to get these files, see the bulleted item
439 "<link linkend='local-yp-release'>Yocto Project Release</link>" earlier in this manual.
440 </para></listitem>
441 <listitem><para><emphasis>Establish the temporary kernel source files</emphasis>:
442 Temporary kernel source files are kept in the
443 <link linkend='build-directory'>Build Directory</link>
444 created by the
445 OpenEmbedded build system when you run BitBake.
446 If you have never built the kernel in which you are
447 interested, you need to run an initial build to
448 establish local kernel source files.</para>
449 <para>If you are building an image for the first time, you need to get the build
450 environment ready by sourcing an environment setup script
451 (i.e. <filename>oe-init-build-env</filename> or
452 <filename>oe-init-build-env-memres</filename>).
453 You also need to be sure two key configuration files
454 (<filename>local.conf</filename> and <filename>bblayers.conf</filename>)
455 are configured appropriately.</para>
456 <para>The entire process for building an image is overviewed in the
457 "<ulink url='&YOCTO_DOCS_QS_URL;#building-image'>Building an Image</ulink>"
458 section of the Yocto Project Quick Start.
459 You might want to reference this information.
460 You can find more information on BitBake in the
461 <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
462 </para>
463 <para>The build process supports several types of images to satisfy different needs.
464 See the "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>" chapter in
465 the Yocto Project Reference Manual for information on supported images.
466 </para></listitem>
467 <listitem><para><emphasis>Make changes to the kernel source code if
468 applicable</emphasis>: Modifying the kernel does not always mean directly
469 changing source files.
470 However, if you have to do this, you make the changes to the files in the
471 Build Directory.</para></listitem>
472 <listitem><para><emphasis>Make kernel configuration changes
473 if applicable</emphasis>:
474 If your situation calls for changing the kernel's configuration, you can
475 use the <filename>yocto-kernel</filename> script or <filename>menuconfig</filename>
476 to enable and disable kernel configurations.
477 Using the script lets you interactively set up kernel configurations.
478 Using <filename>menuconfig</filename> allows you to interactively develop and test the
479 configuration changes you are making to the kernel.
480 When saved, changes using <filename>menuconfig</filename> update the kernel's
481 <filename>.config</filename> file.
482 Try to resist the temptation of directly editing the <filename>.config</filename>
483 file found in the Build Directory at
484 <filename>tmp/sysroots/&lt;machine-name&gt;/kernel</filename>.
485 Doing so, can produce unexpected results when the OpenEmbedded build system
486 regenerates the configuration file.</para>
487 <para>Once you are satisfied with the configuration changes made using
488 <filename>menuconfig</filename>, you can directly compare the
489 <filename>.config</filename> file against a saved original and gather those
490 changes into a config fragment to be referenced from within the kernel's
491 <filename>.bbappend</filename> file.</para></listitem>
492 <listitem><para><emphasis>Rebuild the kernel image with your changes</emphasis>:
493 Rebuilding the kernel image applies your changes.</para></listitem>
494 </orderedlist>
495 </para>
496 </section>
497 </section>
498</section>
499
500<section id='application-development-workflow'>
501 <title>Application Development Workflow</title>
502
503 <para>
504 Application development involves creating an application that you want
505 to run on your target hardware, which is running a kernel image created using the
506 OpenEmbedded build system.
507 The Yocto Project provides an
508 <ulink url='&YOCTO_DOCS_ADT_URL;#adt-intro'>Application Development Toolkit (ADT)</ulink>
509 and stand-alone
510 <ulink url='&YOCTO_DOCS_ADT_URL;#the-cross-development-toolchain'>cross-development toolchains</ulink>
511 that facilitate quick development and integration of your application into its runtime environment.
512 Using the ADT and toolchains, you can compile and link your application.
513 You can then deploy your application to the actual hardware or to the QEMU emulator for testing.
514 If you are familiar with the popular <trademark class='trade'>Eclipse</trademark> IDE,
515 you can use an Eclipse Yocto Plug-in to
516 allow you to develop, deploy, and test your application all from within Eclipse.
517 </para>
518
519 <para>
520 While we strongly suggest using the ADT to develop your application, this option might not
521 be best for you.
522 If this is the case, you can still use pieces of the Yocto Project for your development process.
523 However, because the process can vary greatly, this manual does not provide detail on the process.
524 </para>
525
526 <section id='workflow-using-the-adt-and-eclipse'>
527 <title>Workflow Using the ADT and <trademark class='trade'>Eclipse</trademark></title>
528
529 <para>
530 To help you understand how application development works using the ADT, this section
531 provides an overview of the general development process and a detailed example of the process
532 as it is used from within the Eclipse IDE.
533 </para>
534
535 <para>
536 The following illustration and list summarize the application development general workflow.
537 </para>
538
539 <para>
540 <imagedata fileref="figures/app-dev-flow.png"
541 width="7in" depth="8in" align="center" scale="100" />
542 </para>
543
544 <para>
545 <orderedlist>
546 <listitem><para><emphasis>Prepare the host system for the Yocto Project</emphasis>:
547 See
548 "<ulink url='&YOCTO_DOCS_REF_URL;#detailed-supported-distros'>Supported Linux Distributions</ulink>"
549 and
550 "<ulink url='&YOCTO_DOCS_REF_URL;#required-packages-for-the-host-development-system'>Required Packages for the Host Development System</ulink>" sections both
551 in the Yocto Project Reference Manual for requirements.
552 In particular, be sure your host system has the
553 <filename>xterm</filename> package installed.
554 </para></listitem>
555 <listitem><para><emphasis>Secure the Yocto Project kernel target image</emphasis>:
556 You must have a target kernel image that has been built using the OpenEmbedded
557 build system.</para>
558 <para>Depending on whether the Yocto Project has a pre-built image that matches your target
559 architecture and where you are going to run the image while you develop your application
560 (QEMU or real hardware), the area from which you get the image differs.
561 <itemizedlist>
562 <listitem><para>Download the image from
563 <ulink url='&YOCTO_MACHINES_DL_URL;'><filename>machines</filename></ulink>
564 if your target architecture is supported and you are going to develop
565 and test your application on actual hardware.</para></listitem>
566 <listitem><para>Download the image from
567 <ulink url='&YOCTO_QEMU_DL_URL;'>
568 <filename>machines/qemu</filename></ulink> if your target architecture is supported
569 and you are going to develop and test your application using the QEMU
570 emulator.</para></listitem>
571 <listitem><para>Build your image if you cannot find a pre-built image that matches
572 your target architecture.
573 If your target architecture is similar to a supported architecture, you can
574 modify the kernel image before you build it.
575 See the
576 "<link linkend='patching-the-kernel'>Patching the Kernel</link>"
577 section for an example.</para></listitem>
578 </itemizedlist></para>
579 <para>For information on pre-built kernel image naming schemes for images
580 that can run on the QEMU emulator, see the
581 "<ulink url='&YOCTO_DOCS_QS_URL;#downloading-the-pre-built-linux-kernel'>Downloading the Pre-Built Linux Kernel</ulink>"
582 section in the Yocto Project Quick Start.</para></listitem>
583 <listitem><para><emphasis>Install the ADT</emphasis>:
584 The ADT provides a target-specific cross-development toolchain, the root filesystem,
585 the QEMU emulator, and other tools that can help you develop your application.
586 While it is possible to get these pieces separately, the ADT Installer provides an
587 easy, inclusive method.
588 You can get these pieces by running an ADT installer script, which is configurable.
589 For information on how to install the ADT, see the
590 "<ulink url='&YOCTO_DOCS_ADT_URL;#using-the-adt-installer'>Using the ADT Installer</ulink>"
591 section
592 in the Yocto Project Application Developer's Guide.</para></listitem>
593 <listitem><para><emphasis>If applicable, secure the target root filesystem
594 and the Cross-development toolchain</emphasis>:
595 If you choose not to install the ADT using the ADT Installer,
596 you need to find and download the appropriate root filesystem and
597 the cross-development toolchain.</para>
598 <para>You can find the tarballs for the root filesystem in the same area used
599 for the kernel image.
600 Depending on the type of image you are running, the root filesystem you need differs.
601 For example, if you are developing an application that runs on an image that
602 supports Sato, you need to get a root filesystem that supports Sato.</para>
603 <para>You can find the cross-development toolchains at
604 <ulink url='&YOCTO_TOOLCHAIN_DL_URL;'><filename>toolchains</filename></ulink>.
605 Be sure to get the correct toolchain for your development host and your
606 target architecture.
607 See the "<ulink url='&YOCTO_DOCS_ADT_URL;#using-an-existing-toolchain-tarball'>Using a Cross-Toolchain Tarball</ulink>"
608 section in the Yocto Project Application Developer's Guide for information
609 and the
610 "<ulink url='&YOCTO_DOCS_QS_URL;#installing-the-toolchain'>Installing the Toolchain</ulink>"
611 in the Yocto Project Quick Start for information on finding and installing
612 the correct toolchain based on your host development system and your target
613 architecture.
614 </para></listitem>
615 <listitem><para><emphasis>Create and build your application</emphasis>:
616 At this point, you need to have source files for your application.
617 Once you have the files, you can use the Eclipse IDE to import them and build the
618 project.
619 If you are not using Eclipse, you need to use the cross-development tools you have
620 installed to create the image.</para></listitem>
621 <listitem><para><emphasis>Deploy the image with the application</emphasis>:
622 If you are using the Eclipse IDE, you can deploy your image to the hardware or to
623 QEMU through the project's preferences.
624 If you are not using the Eclipse IDE, then you need to deploy the application
625 to the hardware using other methods.
626 Or, if you are using QEMU, you need to use that tool and
627 load your image in for testing.
628 See the
629 "<link linkend='dev-manual-qemu'>Using the Quick EMUlator (QEMU)</link>"
630 chapter for information on using QEMU.
631 </para></listitem>
632 <listitem><para><emphasis>Test and debug the application</emphasis>:
633 Once your application is deployed, you need to test it.
634 Within the Eclipse IDE, you can use the debugging environment along with the
635 set of user-space tools installed along with the ADT to debug your application.
636 Of course, the same user-space tools are available separately if you choose
637 not to use the Eclipse IDE.</para></listitem>
638 </orderedlist>
639 </para>
640 </section>
641
642 <section id='adt-eclipse'>
643 <title>Working Within Eclipse</title>
644
645 <para>
646 The Eclipse IDE is a popular development environment and it fully
647 supports development using the Yocto Project.
648 <note>
649 This release of the Yocto Project supports both the Kepler
650 and Juno versions of the Eclipse IDE.
651 Thus, the following information provides setup information for
652 both versions.
653 </note>
654 </para>
655
656 <para>
657 When you install and configure the Eclipse Yocto Project Plug-in
658 into the Eclipse IDE, you maximize your Yocto Project experience.
659 Installing and configuring the Plug-in results in an environment
660 that has extensions specifically designed to let you more easily
661 develop software.
662 These extensions allow for cross-compilation, deployment, and
663 execution of your output into a QEMU emulation session as well as
664 actual target hardware.
665 You can also perform cross-debugging and profiling.
666 The environment also supports a suite of tools that allows you
667 to perform remote profiling, tracing, collection of power data,
668 collection of latency data, and collection of performance data.
669 </para>
670
671 <para>
672 This section describes how to install and configure the Eclipse IDE
673 Yocto Plug-in and how to use it to develop your application.
674 </para>
675
676 <section id='setting-up-the-eclipse-ide'>
677 <title>Setting Up the Eclipse IDE</title>
678
679 <para>
680 To develop within the Eclipse IDE, you need to do the following:
681 <orderedlist>
682 <listitem><para>Install the optimal version of the Eclipse
683 IDE.</para></listitem>
684 <listitem><para>Configure the Eclipse IDE.
685 </para></listitem>
686 <listitem><para>Install the Eclipse Yocto Plug-in.
687 </para></listitem>
688 <listitem><para>Configure the Eclipse Yocto Plug-in.
689 </para></listitem>
690 </orderedlist>
691 <note>
692 Do not install Eclipse from your distribution's package
693 repository.
694 Be sure to install Eclipse from the official Eclipse
695 download site as directed in the next section.
696 </note>
697 </para>
698
699 <section id='installing-eclipse-ide'>
700 <title>Installing the Eclipse IDE</title>
701
702 <para>
703 It is recommended that you have the Kepler 4.3.2 version of
704 the Eclipse IDE installed on your development system.
705 However, if you currently have the Juno 4.2 version
706 installed and you do not want to upgrade the IDE, you can
707 configure Juno to work with the Yocto Project.
708 </para>
709
710 <para>
711 If you do not have the Kepler 4.3.2 Eclipse IDE installed,
712 you can find the tarball at
713 <ulink url='&ECLIPSE_MAIN_URL;'></ulink>.
714 From that site, choose the Eclipse Standard 4.3.2 version
715 particular to your development host.
716 This version contains the Eclipse Platform, the Java
717 Development Tools (JDT), and the Plug-in Development
718 Environment.
719 </para>
720
721 <para>
722 Once you have downloaded the tarball, extract it into a
723 clean directory.
724 For example, the following commands unpack and install the
725 downloaded Eclipse IDE tarball into a clean directory
726 using the default name <filename>eclipse</filename>:
727 <literallayout class='monospaced'>
728 $ cd ~
729 $ tar -xzvf ~/Downloads/eclipse-standard-kepler-SR2-linux-gtk-x86_64.tar.gz
730 </literallayout>
731 </para>
732 </section>
733
734 <section id='configuring-the-eclipse-ide'>
735 <title>Configuring the Eclipse IDE</title>
736
737 <para>
738 This section presents the steps needed to configure the
739 Eclipse IDE.
740 </para>
741
742 <para>
743 Before installing and configuring the Eclipse Yocto Plug-in,
744 you need to configure the Eclipse IDE.
745 Follow these general steps:
746 <orderedlist>
747 <listitem><para>Start the Eclipse IDE.</para></listitem>
748 <listitem><para>Make sure you are in your Workbench and
749 select "Install New Software" from the "Help"
750 pull-down menu.</para></listitem>
751 <listitem><para>Select
752 <filename>Kepler - &ECLIPSE_KEPLER_URL;</filename>
753 from the "Work with:" pull-down menu.
754 <note>
755 For Juno, select
756 <filename>Juno - &ECLIPSE_JUNO_URL;</filename>
757 </note>
758 </para></listitem>
759 <listitem><para>Expand the box next to "Linux Tools"
760 and select the
761 <filename>LTTng - Linux Tracing Toolkit</filename>
762 boxes.</para></listitem>
763 <listitem><para>Expand the box next to "Mobile and
764 Device Development" and select the following boxes:
765 <itemizedlist>
766 <listitem><para><filename>C/C++ Remote Launch (Requires RSE Remote System Explorer)</filename></para></listitem>
767 <listitem><para><filename>Remote System Explorer End-user Runtime</filename></para></listitem>
768 <listitem><para><filename>Remote System Explorer User Actions</filename></para></listitem>
769 <listitem><para><filename>Target Management Terminal</filename></para></listitem>
770 <listitem><para><filename>TCF Remote System Explorer add-in</filename></para></listitem>
771 <listitem><para><filename>TCF Target Explorer</filename></para></listitem>
772 </itemizedlist></para></listitem>
773 <listitem><para>Expand the box next to "Programming
774 Languages" and select the
775 <filename>C/C++ Autotools Support</filename>
776 and <filename>C/C++ Development Tools</filename>
777 boxes.</para></listitem>
778 <listitem><para>Complete the installation and restart
779 the Eclipse IDE.</para></listitem>
780 </orderedlist>
781 </para>
782 </section>
783
784 <section id='installing-the-eclipse-yocto-plug-in'>
785 <title>Installing or Accessing the Eclipse Yocto Plug-in</title>
786
787 <para>
788 You can install the Eclipse Yocto Plug-in into the Eclipse
789 IDE one of two ways: use the Yocto Project's Eclipse
790 Update site to install the pre-built plug-in or build and
791 install the plug-in from the latest source code.
792 </para>
793
794 <section id='new-software'>
795 <title>Installing the Pre-built Plug-in from the Yocto Project Eclipse Update Site</title>
796
797 <para>
798 To install the Eclipse Yocto Plug-in from the update
799 site, follow these steps:
800 <orderedlist>
801 <listitem><para>Start up the Eclipse IDE.
802 </para></listitem>
803 <listitem><para>In Eclipse, select "Install New
804 Software" from the "Help" menu.
805 </para></listitem>
806 <listitem><para>Click "Add..." in the "Work with:"
807 area.</para></listitem>
808 <listitem><para>Enter
809 <filename>&ECLIPSE_DL_PLUGIN_URL;/kepler</filename>
810 in the URL field and provide a meaningful name
811 in the "Name" field.
812 <note>
813 If you are using Juno, use
814 <filename>&ECLIPSE_DL_PLUGIN_URL;/juno</filename>
815 in the URL field.
816 </note></para></listitem>
817 <listitem><para>Click "OK" to have the entry added
818 to the "Work with:" drop-down list.
819 </para></listitem>
820 <listitem><para>Select the entry for the plug-in
821 from the "Work with:" drop-down list.
822 </para></listitem>
823 <listitem><para>Check the boxes next to
824 <filename>Yocto Project ADT Plug-in</filename>,
825 <filename>Yocto Project Bitbake Commander Plug-in</filename>,
826 and
827 <filename>Yocto Project Documentation plug-in</filename>.
828 </para></listitem>
829 <listitem><para>Complete the remaining software
830 installation steps and then restart the Eclipse
831 IDE to finish the installation of the plug-in.
832 </para></listitem>
833 </orderedlist>
834 </para>
835 </section>
836
837 <section id='zip-file-method'>
838 <title>Installing the Plug-in Using the Latest Source Code</title>
839
840 <para>
841 To install the Eclipse Yocto Plug-in from the latest
842 source code, follow these steps:
843 <orderedlist>
844 <listitem><para>Be sure your development system
845 is not using OpenJDK to build the plug-in
846 by doing the following:
847 <orderedlist>
848 <listitem><para>Use the Oracle JDK.
849 If you don't have that, go to
850 <ulink url='http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html'></ulink>
851 and download the appropriate tarball
852 for your development system and
853 extract it into your home directory.
854 </para></listitem>
855 <listitem><para>In the shell you are going
856 to do your work, export the location of
857 the Oracle Java as follows:
858 <literallayout class='monospaced'>
859 export PATH=~/jdk1.7.0_40/bin:$PATH
860 </literallayout></para></listitem>
861 </orderedlist></para></listitem>
862 <listitem><para>In the same shell, create a Git
863 repository with:
864 <literallayout class='monospaced'>
865 $ cd ~
866 $ git clone git://git.yoctoproject.org/eclipse-poky-kepler
867 </literallayout>
868 <note>
869 If you are using Juno, the repository is
870 located at
871 <filename>git://git.yoctoproject.org/eclipse-poky-juno</filename>.
872 </note>
873 For this example, the repository is named
874 <filename>~/eclipse-poky-kepler</filename>.
875 </para></listitem>
876 <listitem><para>Change to the directory where you
877 set up the Git repository:
878 <literallayout class='monospaced'>
879 $ cd ~/eclipse-poky-kepler
880 </literallayout></para></listitem>
881 <listitem><para>Be sure you are in the right branch
882 for your Git repository.
883 For this release set the branch to
884 <filename>&DISTRO_NAME;</filename>:
885 <literallayout class='monospaced'>
886 $ git checkout &DISTRO_NAME;
887 </literallayout></para></listitem>
888 <listitem><para>Change to the
889 <filename>scripts</filename>
890 directory within the Git repository:
891 <literallayout class='monospaced'>
892 $ cd scripts
893 </literallayout></para></listitem>
894 <listitem><para>Set up the local build environment
895 by running the setup script:
896 <literallayout class='monospaced'>
897 $ ./setup.sh
898 </literallayout></para></listitem>
899 <listitem><para>When the script finishes execution,
900 it prompts you with instructions on how to run
901 the <filename>build.sh</filename> script, which
902 is also in the <filename>scripts</filename>
903 directory of
904 the Git repository created earlier.
905 </para></listitem>
906 <listitem><para>Run the <filename>build.sh</filename> script
907 as directed.
908 Be sure to provide the name of the Git branch
909 along with the Yocto Project release you are
910 using.
911 Here is an example that uses the
912 <filename>&DISTRO_NAME;</filename> branch:
913 <literallayout class='monospaced'>
914 $ ECLIPSE_HOME=/home/scottrif/eclipse-poky-kepler/scripts/eclipse ./build.sh &DISTRO_NAME; &DISTRO_NAME;
915 </literallayout>
916 After running the script, the file
917 <filename>org.yocto.sdk-&lt;release&gt;-&lt;date&gt;-archive.zip</filename>
918 is in the current directory.</para></listitem>
919 <listitem><para>If necessary, start the Eclipse IDE
920 and be sure you are in the Workbench.
921 </para></listitem>
922 <listitem><para>Select "Install New Software" from the "Help" pull-down menu.
923 </para></listitem>
924 <listitem><para>Click "Add".</para></listitem>
925 <listitem><para>Provide anything you want in the
926 "Name" field.</para></listitem>
927 <listitem><para>Click "Archive" and browse to the
928 ZIP file you built in step eight.
929 This ZIP file should not be "unzipped", and must
930 be the <filename>*archive.zip</filename> file
931 created by running the
932 <filename>build.sh</filename> script.
933 </para></listitem>
934 <listitem><para>Click through the "Okay" buttons.
935 </para></listitem>
936 <listitem><para>Check the boxes
937 in the installation window and complete
938 the installation.</para></listitem>
939 <listitem><para>Restart the Eclipse IDE if
940 necessary.</para></listitem>
941 </orderedlist>
942 </para>
943
944 <para>
945 At this point you should be able to configure the
946 Eclipse Yocto Plug-in as described in the
947 "<link linkend='configuring-the-eclipse-yocto-plug-in'>Configuring the Eclipse Yocto Plug-in</link>"
948 section.</para>
949 </section>
950 </section>
951
952 <section id='configuring-the-eclipse-yocto-plug-in'>
953 <title>Configuring the Eclipse Yocto Plug-in</title>
954
955 <para>
956 Configuring the Eclipse Yocto Plug-in involves setting the
957 Cross Compiler options and the Target options.
958 The configurations you choose become the default settings
959 for all projects.
960 You do have opportunities to change them later when
961 you configure the project (see the following section).
962 </para>
963
964 <para>
965 To start, you need to do the following from within the
966 Eclipse IDE:
967 <itemizedlist>
968 <listitem><para>Choose "Preferences" from the
969 "Windows" menu to display the Preferences Dialog.
970 </para></listitem>
971 <listitem><para>Click "Yocto Project ADT".
972 </para></listitem>
973 </itemizedlist>
974 </para>
975
976 <section id='configuring-the-cross-compiler-options'>
977 <title>Configuring the Cross-Compiler Options</title>
978
979 <para>
980 To configure the Cross Compiler Options, you must select
981 the type of toolchain, point to the toolchain, specify
982 the sysroot location, and select the target
983 architecture.
984 <itemizedlist>
985 <listitem><para><emphasis>Selecting the Toolchain Type:</emphasis>
986 Choose between
987 <filename>Standalone pre-built toolchain</filename>
988 and
989 <filename>Build system derived toolchain</filename>
990 for Cross Compiler Options.
991 <itemizedlist>
992 <listitem><para><emphasis>
993 <filename>Standalone Pre-built Toolchain:</filename></emphasis>
994 Select this mode when you are using
995 a stand-alone cross-toolchain.
996 For example, suppose you are an
997 application developer and do not
998 need to build a target image.
999 Instead, you just want to use an
1000 architecture-specific toolchain on
1001 an existing kernel and target root
1002 filesystem.</para></listitem>
1003 <listitem><para><emphasis>
1004 <filename>Build System Derived Toolchain:</filename></emphasis>
1005 Select this mode if the
1006 cross-toolchain has been installed
1007 and built as part of the
1008 <link linkend='build-directory'>Build Directory</link>.
1009 When you select
1010 <filename>Build system derived toolchain</filename>,
1011 you are using the toolchain bundled
1012 inside the Build Directory.
1013 </para></listitem>
1014 </itemizedlist>
1015 </para></listitem>
1016 <listitem><para><emphasis>Point to the Toolchain:</emphasis>
1017 If you are using a stand-alone pre-built
1018 toolchain, you should be pointing to where it is
1019 installed.
1020 If you used the ADT Installer script and
1021 accepted the default installation directory, the
1022 toolchain will be installed in the
1023 <filename>&YOCTO_ADTPATH_DIR;</filename>
1024 directory.
1025 Sections "<ulink url='&YOCTO_DOCS_ADT_URL;#configuring-and-running-the-adt-installer-script'>Configuring and Running the ADT Installer Script</ulink>"
1026 and
1027 "<ulink url='&YOCTO_DOCS_ADT_URL;#using-an-existing-toolchain-tarball'>Using a Cross-Toolchain Tarball</ulink>"
1028 in the Yocto Project Application Developer's
1029 Guide describe how to install a stand-alone
1030 cross-toolchain.</para>
1031 <para>If you are using a system-derived
1032 toolchain, the path you provide for the
1033 <filename>Toolchain Root Location</filename>
1034 field is the
1035 <link linkend='build-directory'>Build Directory</link>.
1036 See the
1037 "<ulink url='&YOCTO_DOCS_ADT_URL;#using-the-toolchain-from-within-the-build-tree'>Using BitBake and the Build Directory</ulink>"
1038 section in the Yocto Project Application
1039 Developer's Guide for information on how to
1040 install the toolchain into the Build
1041 Directory.</para></listitem>
1042 <listitem><para><emphasis>Specify the Sysroot Location:</emphasis>
1043 This location is where the root filesystem for
1044 the target hardware resides.
1045 If you used the ADT Installer script and
1046 accepted the default installation directory,
1047 then the location is
1048 <filename>/opt/poky/&DISTRO;</filename>.
1049 Additionally, when you use the ADT Installer
1050 script, the same location is used for the QEMU
1051 user-space tools and the NFS boot process.
1052 </para>
1053 <para>If you used either of the other two
1054 methods to install the toolchain or did not
1055 accept the ADT Installer script's default
1056 installation directory, then the location of
1057 the sysroot filesystem depends on where you
1058 separately extracted and installed the
1059 filesystem.</para>
1060 <para>For information on how to install the
1061 toolchain and on how to extract and install the
1062 sysroot filesystem, see the
1063 "<ulink url='&YOCTO_DOCS_ADT_URL;#installing-the-adt'>Installing the ADT and Toolchains</ulink>"
1064 section in the Yocto Project Application
1065 Developer's Guide.
1066 </para></listitem>
1067 <listitem><para><emphasis>Select the Target Architecture:</emphasis>
1068 The target architecture is the type of hardware
1069 you are going to use or emulate.
1070 Use the pull-down
1071 <filename>Target Architecture</filename> menu
1072 to make your selection.
1073 The pull-down menu should have the supported
1074 architectures.
1075 If the architecture you need is not listed in
1076 the menu, you will need to build the image.
1077 See the
1078 "<ulink url='&YOCTO_DOCS_QS_URL;#building-image'>Building an Image</ulink>"
1079 section of the Yocto Project Quick Start for
1080 more information.</para></listitem>
1081 </itemizedlist>
1082 </para>
1083 </section>
1084
1085 <section id='configuring-the-target-options'>
1086 <title>Configuring the Target Options</title>
1087
1088 <para>
1089 You can choose to emulate hardware using the QEMU
1090 emulator, or you can choose to run your image on actual
1091 hardware.
1092 <itemizedlist>
1093 <listitem><para><emphasis>QEMU:</emphasis>
1094 Select this option if you will be using the
1095 QEMU emulator.
1096 If you are using the emulator, you also need to
1097 locate the kernel and specify any custom
1098 options.</para>
1099 <para>If you selected
1100 <filename>Build system derived toolchain</filename>,
1101 the target kernel you built will be located in
1102 the Build Directory in
1103 <filename>tmp/deploy/images/<replaceable>machine</replaceable></filename>
1104 directory.
1105 If you selected
1106 <filename>Standalone pre-built toolchain</filename>,
1107 the pre-built image you downloaded is located
1108 in the directory you specified when you
1109 downloaded the image.</para>
1110 <para>Most custom options are for advanced QEMU
1111 users to further customize their QEMU instance.
1112 These options are specified between paired
1113 angled brackets.
1114 Some options must be specified outside the
1115 brackets.
1116 In particular, the options
1117 <filename>serial</filename>,
1118 <filename>nographic</filename>, and
1119 <filename>kvm</filename> must all be outside the
1120 brackets.
1121 Use the <filename>man qemu</filename> command
1122 to get help on all the options and their use.
1123 The following is an example:
1124 <literallayout class='monospaced'>
1125 serial ‘&lt;-m 256 -full-screen&gt;’
1126 </literallayout></para>
1127 <para>
1128 Regardless of the mode, Sysroot is already
1129 defined as part of the Cross-Compiler Options
1130 configuration in the
1131 <filename>Sysroot Location:</filename> field.
1132 </para></listitem>
1133 <listitem><para><emphasis>External HW:</emphasis>
1134 Select this option if you will be using actual
1135 hardware.</para></listitem>
1136 </itemizedlist>
1137 </para>
1138
1139 <para>
1140 Click the "OK" to save your plug-in configurations.
1141 </para>
1142 </section>
1143 </section>
1144 </section>
1145
1146 <section id='creating-the-project'>
1147 <title>Creating the Project</title>
1148
1149 <para>
1150 You can create two types of projects: Autotools-based, or
1151 Makefile-based.
1152 This section describes how to create Autotools-based projects
1153 from within the Eclipse IDE.
1154 For information on creating Makefile-based projects in a
1155 terminal window, see the section
1156 "<ulink url='&YOCTO_DOCS_ADT_URL;#using-the-command-line'>Using the Command Line</ulink>"
1157 in the Yocto Project Application Developer's Guide.
1158 <note>
1159 Do not use special characters in project names
1160 (e.g. spaces, underscores, etc.). Doing so can
1161 cause configuration to fail.
1162 </note>
1163 </para>
1164
1165 <para>
1166 To create a project based on a Yocto template and then display
1167 the source code, follow these steps:
1168 <orderedlist>
1169 <listitem><para>Select "Project" from the "File -> New" menu.
1170 </para></listitem>
1171 <listitem><para>Double click <filename>CC++</filename>.
1172 </para></listitem>
1173 <listitem><para>Double click <filename>C Project</filename>
1174 to create the project.</para></listitem>
1175 <listitem><para>Expand <filename>Yocto Project ADT Project</filename>.
1176 </para></listitem>
1177 <listitem><para>Select <filename>Hello World ANSI C Autotools Project</filename>.
1178 This is an Autotools-based project based on a Yocto
1179 template.</para></listitem>
1180 <listitem><para>Put a name in the <filename>Project name:</filename>
1181 field.
1182 Do not use hyphens as part of the name.
1183 </para></listitem>
1184 <listitem><para>Click "Next".</para></listitem>
1185 <listitem><para>Add information in the
1186 <filename>Author</filename> and
1187 <filename>Copyright notice</filename> fields.
1188 </para></listitem>
1189 <listitem><para>Be sure the <filename>License</filename>
1190 field is correct.</para></listitem>
1191 <listitem><para>Click "Finish".</para></listitem>
1192 <listitem><para>If the "open perspective" prompt appears,
1193 click "Yes" so that you in the C/C++ perspective.
1194 </para></listitem>
1195 <listitem><para>The left-hand navigation pane shows your
1196 project.
1197 You can display your source by double clicking the
1198 project's source file.</para></listitem>
1199 </orderedlist>
1200 </para>
1201 </section>
1202
1203 <section id='configuring-the-cross-toolchains'>
1204 <title>Configuring the Cross-Toolchains</title>
1205
1206 <para>
1207 The earlier section,
1208 "<link linkend='configuring-the-eclipse-yocto-plug-in'>Configuring the Eclipse Yocto Plug-in</link>",
1209 sets up the default project configurations.
1210 You can override these settings for a given project by following
1211 these steps:
1212 <orderedlist>
1213 <listitem><para>Select "Change Yocto Project Settings" from
1214 the "Project" menu.
1215 This selection brings up the Yocto Project Settings
1216 Dialog and allows you to make changes specific to an
1217 individual project.</para>
1218 <para>By default, the Cross Compiler Options and Target
1219 Options for a project are inherited from settings you
1220 provided using the Preferences Dialog as described
1221 earlier in the
1222 "<link linkend='configuring-the-eclipse-yocto-plug-in'>Configuring the Eclipse Yocto Plug-in</link>" section.
1223 The Yocto Project Settings Dialog allows you to override
1224 those default settings for a given project.
1225 </para></listitem>
1226 <listitem><para>Make your configurations for the project
1227 and click "OK".
1228 If you are running the Juno version of Eclipse, you can
1229 skip down to the next section where you build the
1230 project.
1231 If you are not working with Juno, you need to reconfigure the
1232 project as described in the next step.
1233 </para></listitem>
1234 <listitem><para>Select "Reconfigure Project" from the
1235 "Project" menu.
1236 This selection reconfigures the project by running
1237 <filename>autogen.sh</filename> in the workspace for
1238 your project.
1239 The script also runs <filename>libtoolize</filename>,
1240 <filename>aclocal</filename>,
1241 <filename>autoconf</filename>,
1242 <filename>autoheader</filename>,
1243 <filename>automake --a</filename>, and
1244 <filename>./configure</filename>.
1245 Click on the "Console" tab beneath your source code to
1246 see the results of reconfiguring your project.
1247 </para></listitem>
1248 </orderedlist>
1249 </para>
1250 </section>
1251
1252 <section id='building-the-project'>
1253 <title>Building the Project</title>
1254
1255 <para>
1256 To build the project in Juno, right click on the project in
1257 the navigator pane and select "Build Project".
1258 If you are not running Juno, select "Build Project" from the
1259 "Project" menu.
1260 The console should update and you can note the cross-compiler
1261 you are using.
1262 </para>
1263 </section>
1264
1265 <section id='starting-qemu-in-user-space-nfs-mode'>
1266 <title>Starting QEMU in User-Space NFS Mode</title>
1267
1268 <para>
1269 To start the QEMU emulator from within Eclipse, follow these
1270 steps:
1271 <note>
1272 See the
1273 "<link linkend='dev-manual-qemu'>Using the Quick EMUlator (QEMU)</link>"
1274 chapter for more information on using QEMU.
1275 </note>
1276 <orderedlist>
1277 <listitem><para>Expose and select "External Tools" from
1278 the "Run" menu.
1279 Your image should appear as a selectable menu item.
1280 </para></listitem>
1281 <listitem><para>Select your image from the menu to launch
1282 the emulator in a new window.</para></listitem>
1283 <listitem><para>If needed, enter your host root password in
1284 the shell window at the prompt.
1285 This sets up a <filename>Tap 0</filename> connection
1286 needed for running in user-space NFS mode.
1287 </para></listitem>
1288 <listitem><para>Wait for QEMU to launch.</para></listitem>
1289 <listitem><para>Once QEMU launches, you can begin operating
1290 within that environment.
1291 For example, you could determine the IP Address
1292 for the user-space NFS by using the
1293 <filename>ifconfig</filename> command.</para></listitem>
1294 </orderedlist>
1295 </para>
1296 </section>
1297
1298 <section id='deploying-and-debugging-the-application'>
1299 <title>Deploying and Debugging the Application</title>
1300
1301 <para>
1302 Once the QEMU emulator is running the image, you can deploy
1303 your application using the Eclipse IDE and then use
1304 the emulator to perform debugging.
1305 Follow these steps to deploy the application.
1306 <orderedlist>
1307 <listitem><para>Select "Debug Configurations..." from the
1308 "Run" menu.</para></listitem>
1309 <listitem><para>In the left area, expand
1310 <filename>C/C++Remote Application</filename>.
1311 </para></listitem>
1312 <listitem><para>Locate your project and select it to bring
1313 up a new tabbed view in the Debug Configurations Dialog.
1314 </para></listitem>
1315 <listitem><para>Enter the absolute path into which you want
1316 to deploy the application.
1317 Use the "Remote Absolute File Path for
1318 C/C++Application:" field.
1319 For example, enter
1320 <filename>/usr/bin/&lt;programname&gt;</filename>.
1321 </para></listitem>
1322 <listitem><para>Click on the "Debugger" tab to see the
1323 cross-tool debugger you are using.</para></listitem>
1324 <listitem><para>Click on the "Main" tab.</para></listitem>
1325 <listitem><para>Create a new connection to the QEMU instance
1326 by clicking on "new".</para></listitem>
1327 <listitem><para>Select <filename>TCF</filename>, which means
1328 Target Communication Framework.</para></listitem>
1329 <listitem><para>Click "Next".</para></listitem>
1330 <listitem><para>Clear out the "host name" field and enter
1331 the IP Address determined earlier.</para></listitem>
1332 <listitem><para>Click "Finish" to close the
1333 New Connections Dialog.</para></listitem>
1334 <listitem><para>Use the drop-down menu now in the
1335 "Connection" field and pick the IP Address you entered.
1336 </para></listitem>
1337 <listitem><para>Click "Run" to bring up a login screen
1338 and login.</para></listitem>
1339 <listitem><para>Accept the debug perspective.
1340 </para></listitem>
1341 </orderedlist>
1342 </para>
1343 </section>
1344
1345 <section id='running-user-space-tools'>
1346 <title>Running User-Space Tools</title>
1347
1348 <para>
1349 As mentioned earlier in the manual, several tools exist that
1350 enhance your development experience.
1351 These tools are aids in developing and debugging applications
1352 and images.
1353 You can run these user-space tools from within the Eclipse
1354 IDE through the "YoctoTools" menu.
1355 </para>
1356
1357 <para>
1358 Once you pick a tool, you need to configure it for the remote
1359 target.
1360 Every tool needs to have the connection configured.
1361 You must select an existing TCF-based RSE connection to the
1362 remote target.
1363 If one does not exist, click "New" to create one.
1364 </para>
1365
1366 <para>
1367 Here are some specifics about the remote tools:
1368 <itemizedlist>
1369 <listitem><para><emphasis><filename>OProfile</filename>:</emphasis>
1370 Selecting this tool causes the
1371 <filename>oprofile-server</filename> on the remote
1372 target to launch on the local host machine.
1373 The <filename>oprofile-viewer</filename> must be
1374 installed on the local host machine and the
1375 <filename>oprofile-server</filename> must be installed
1376 on the remote target, respectively, in order to use.
1377 You must compile and install the
1378 <filename>oprofile-viewer</filename> from the source
1379 code on your local host machine.
1380 Furthermore, in order to convert the target's sample
1381 format data into a form that the host can use, you must
1382 have OProfile version 0.9.4 or greater installed on the
1383 host.</para>
1384 <para>You can locate both the viewer and server from
1385 <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/oprofileui/'></ulink>.
1386 You can also find more information on setting up and
1387 using this tool in the
1388 "<ulink url='&YOCTO_DOCS_PROF_URL;#profile-manual-oprofile'>oprofile</ulink>"
1389 section of the Yocto Project Profiling and Tracing
1390 Manual.
1391 <note>The <filename>oprofile-server</filename> is
1392 installed by default on the
1393 <filename>core-image-sato-sdk</filename> image.</note>
1394 </para></listitem>
1395 <listitem><para><emphasis><filename>Lttng2.0 ust trace import</filename>:</emphasis>
1396 Selecting this tool transfers the remote target's
1397 <filename>Lttng</filename> tracing data back to the
1398 local host machine and uses the Lttng Eclipse plug-in
1399 to graphically display the output.
1400 For information on how to use Lttng to trace an
1401 application,
1402 see <ulink url='http://lttng.org/documentation'></ulink>
1403 and the
1404 "<ulink url='&YOCTO_DOCS_PROF_URL;#lttng-linux-trace-toolkit-next-generation'>LTTng (Linux Trace Toolkit, next generation)</ulink>"
1405 section, which is in the Yocto Project Profiling and
1406 Tracing Manual.
1407 <note>Do not use
1408 <filename>Lttng-user space (legacy)</filename> tool.
1409 This tool no longer has any upstream support.</note>
1410 </para>
1411 <para>Before you use the
1412 <filename>Lttng2.0 ust trace import</filename> tool,
1413 you need to setup the Lttng Eclipse plug-in and create a
1414 Tracing project.
1415 Do the following:
1416 <orderedlist>
1417 <listitem><para>Select "Open Perspective" from the
1418 "Window" menu and then select "Tracing".
1419 </para></listitem>
1420 <listitem><para>Click "OK" to change the Eclipse
1421 perspective into the Tracing perspective.
1422 </para></listitem>
1423 <listitem><para>Create a new Tracing project by
1424 selecting "Project" from the "File -> New" menu.
1425 </para></listitem>
1426 <listitem><para>Choose "Tracing Project" from the
1427 "Tracing" menu.
1428 </para></listitem>
1429 <listitem><para>Generate your tracing data on the
1430 remote target.</para></listitem>
1431 <listitem><para>Select "Lttng2.0 ust trace import"
1432 from the "Yocto Project Tools" menu to
1433 start the data import process.</para></listitem>
1434 <listitem><para>Specify your remote connection name.
1435 </para></listitem>
1436 <listitem><para>For the Ust directory path, specify
1437 the location of your remote tracing data.
1438 Make sure the location ends with
1439 <filename>ust</filename> (e.g.
1440 <filename>/usr/mysession/ust</filename>).
1441 </para></listitem>
1442 <listitem><para>Click "OK" to complete the import
1443 process.
1444 The data is now in the local tracing project
1445 you created.</para></listitem>
1446 <listitem><para>Right click on the data and then use
1447 the menu to Select "Generic CTF Trace" from the
1448 "Trace Type... -> Common Trace Format" menu to
1449 map the tracing type.</para></listitem>
1450 <listitem><para>Right click the mouse and select
1451 "Open" to bring up the Eclipse Lttng Trace
1452 Viewer so you view the tracing data.
1453 </para></listitem>
1454 </orderedlist></para></listitem>
1455 <listitem><para><emphasis><filename>PowerTOP</filename>:</emphasis>
1456 Selecting this tool runs PowerTOP on the remote target
1457 machine and displays the results in a new view called
1458 PowerTOP.</para>
1459 <para>The "Time to gather data(sec):" field is the time
1460 passed in seconds before data is gathered from the
1461 remote target for analysis.</para>
1462 <para>The "show pids in wakeups list:" field corresponds
1463 to the <filename>-p</filename> argument passed to
1464 <filename>PowerTOP</filename>.</para></listitem>
1465 <listitem><para><emphasis><filename>LatencyTOP and Perf</filename>:</emphasis>
1466 LatencyTOP identifies system latency, while
1467 Perf monitors the system's performance counter
1468 registers.
1469 Selecting either of these tools causes an RSE terminal
1470 view to appear from which you can run the tools.
1471 Both tools refresh the entire screen to display results
1472 while they run.
1473 For more information on setting up and using
1474 <filename>perf</filename>, see the
1475 "<ulink url='&YOCTO_DOCS_PROF_URL;#profile-manual-perf'>perf</ulink>"
1476 section in the Yocto Project Profiling and Tracing
1477 Manual.
1478 </para></listitem>
1479 </itemizedlist>
1480 </para>
1481 </section>
1482
1483 <section id='customizing-an-image-using-a-bitbake-commander-project-and-hob'>
1484 <title>Customizing an Image Using a BitBake Commander Project and Hob</title>
1485
1486 <para>
1487 Within the Eclipse IDE, you can create a Yocto BitBake Commander
1488 project, edit the <link linkend='metadata'>Metadata</link>, and
1489 then use
1490 <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/hob'>Hob</ulink> to build a customized image all within one IDE.
1491 </para>
1492
1493 <section id='creating-the-yocto-bitbake-commander-project'>
1494 <title>Creating the Yocto BitBake Commander Project</title>
1495
1496 <para>
1497 To create a Yocto BitBake Commander project, follow these
1498 steps:
1499 <orderedlist>
1500 <listitem><para>Select "Other" from the
1501 "Window -> Open Perspective" menu
1502 and then choose "Bitbake Commander".
1503 </para></listitem>
1504 <listitem><para>Click "OK" to change the perspective to
1505 Bitbake Commander.</para></listitem>
1506 <listitem><para>Select "Project" from the "File -> New"
1507 menu to create a new Yocto
1508 Bitbake Commander project.</para></listitem>
1509 <listitem><para>Choose "New Yocto Project" from the
1510 "Yocto Project Bitbake Commander" menu and click
1511 "Next".</para></listitem>
1512 <listitem><para>Enter the Project Name and choose the
1513 Project Location.
1514 The Yocto project's Metadata files will be put under
1515 the directory
1516 <filename><replaceable>project_location</replaceable>/<replaceable>project_name</replaceable></filename>.
1517 If that directory does not exist, you need to check
1518 the "Clone from Yocto Git Repository" box, which
1519 would execute a <filename>git clone</filename>
1520 command to get the project's Metadata files.
1521 <note>
1522 Do not specify your BitBake Commander project
1523 location as your Eclipse workspace.
1524 Doing so causes an error indicating that the
1525 current project overlaps the location of
1526 another project.
1527 This error occurs even if no such project exits.
1528 </note></para></listitem>
1529 <listitem><para>Select <filename>Finish</filename> to
1530 create the project.</para></listitem>
1531 </orderedlist>
1532 </para>
1533 </section>
1534
1535 <section id='editing-the-metadata'>
1536 <title>Editing the Metadata</title>
1537
1538 <para>
1539 After you create the Yocto Bitbake Commander project, you
1540 can modify the <link linkend='metadata'>Metadata</link>
1541 files by opening them in the project.
1542 When editing recipe files (<filename>.bb</filename> files),
1543 you can view BitBake variable values and information by
1544 hovering the mouse pointer over the variable name and
1545 waiting a few seconds.
1546 </para>
1547
1548 <para>
1549 To edit the Metadata, follow these steps:
1550 <orderedlist>
1551 <listitem><para>Select your Yocto Bitbake Commander
1552 project.</para></listitem>
1553 <listitem><para>Select "BitBake Recipe" from the
1554 "File -> New -> Yocto BitBake Commander" menu
1555 to open a new recipe wizard.</para></listitem>
1556 <listitem><para>Point to your source by filling in the
1557 "SRC_URL" field.
1558 For example, you can add a recipe to your
1559 <link linkend='source-directory'>Source Directory</link>
1560 by defining "SRC_URL" as follows:
1561 <literallayout class='monospaced'>
1562 ftp://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz
1563 </literallayout></para></listitem>
1564 <listitem><para>Click "Populate" to calculate the
1565 archive md5, sha256, license checksum values and to
1566 auto-generate the recipe filename.</para></listitem>
1567 <listitem><para>Fill in the "Description" field.
1568 </para></listitem>
1569 <listitem><para>Be sure values for all required
1570 fields exist.</para></listitem>
1571 <listitem><para>Click "Finish".</para></listitem>
1572 </orderedlist>
1573 </para>
1574 </section>
1575
1576 <section id='biding-and-customizing-the-image-using-hob'>
1577 <title>Building and Customizing the Image Using Hob</title>
1578
1579 <para>
1580 To build and customize the image using Hob from within the
1581 Eclipse IDE, follow these steps:
1582 <orderedlist>
1583 <listitem><para>Select your Yocto Bitbake Commander
1584 project.</para></listitem>
1585 <listitem><para>Select "Launch Hob" from the "Project"
1586 menu.</para></listitem>
1587 <listitem><para>Enter the
1588 <link linkend='build-directory'>Build Directory</link>
1589 where you want to put your final images.
1590 </para></listitem>
1591 <listitem><para>Click "OK" to launch Hob.
1592 </para></listitem>
1593 <listitem><para>Use Hob to customize and build your own
1594 images.
1595 For information on Hob, see the
1596 <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/hob'>Hob Project Page</ulink>
1597 on the Yocto Project website.</para></listitem>
1598 </orderedlist>
1599 </para>
1600 </section>
1601 </section>
1602 </section>
1603
1604 <section id='workflow-using-stand-alone-cross-development-toolchains'>
1605 <title>Workflow Using Stand-Alone Cross-Development Toolchains</title>
1606
1607 <para>
1608 If you want to develop an application without prior installation
1609 of the ADT, you still can employ the
1610 <link linkend='cross-development-toolchain'>Cross Development Toolchain</link>,
1611 the QEMU emulator, and a number of supported target image files.
1612 You just need to follow these general steps:
1613 <orderedlist>
1614 <listitem><para><emphasis>Install the cross-development
1615 toolchain for your target hardware:</emphasis>
1616 For information on how to install the toolchain, see the
1617 "<ulink url='&YOCTO_DOCS_ADT_URL;#using-an-existing-toolchain-tarball'>Using a Cross-Toolchain Tarball</ulink>"
1618 section in the Yocto Project Application Developer's
1619 Guide.</para></listitem>
1620 <listitem><para><emphasis>Download the Target Image:</emphasis>
1621 The Yocto Project supports several target architectures
1622 and has many pre-built kernel images and root filesystem
1623 images.</para>
1624 <para>If you are going to develop your application on
1625 hardware, go to the
1626 <ulink url='&YOCTO_MACHINES_DL_URL;'><filename>machines</filename></ulink>
1627 download area and choose a target machine area
1628 from which to download the kernel image and root filesystem.
1629 This download area could have several files in it that
1630 support development using actual hardware.
1631 For example, the area might contain
1632 <filename>.hddimg</filename> files that combine the
1633 kernel image with the filesystem, boot loaders, and
1634 so forth.
1635 Be sure to get the files you need for your particular
1636 development process.</para>
1637 <para>If you are going to develop your application and
1638 then run and test it using the QEMU emulator, go to the
1639 <ulink url='&YOCTO_QEMU_DL_URL;'><filename>machines/qemu</filename></ulink>
1640 download area.
1641 From this area, go down into the directory for your
1642 target architecture (e.g. <filename>qemux86_64</filename>
1643 for an <trademark class='registered'>Intel</trademark>-based
1644 64-bit architecture).
1645 Download kernel, root filesystem, and any other files you
1646 need for your process.
1647 <note>In order to use the root filesystem in QEMU, you
1648 need to extract it.
1649 See the
1650 "<ulink url='&YOCTO_DOCS_ADT_URL;#extracting-the-root-filesystem'>Extracting the Root Filesystem</ulink>"
1651 section for information on how to extract the root
1652 filesystem.</note></para></listitem>
1653 <listitem><para><emphasis>Develop and Test your
1654 Application:</emphasis> At this point, you have the tools
1655 to develop your application.
1656 If you need to separately install and use the QEMU
1657 emulator, you can go to
1658 <ulink url='http://wiki.qemu.org/Main_Page'>QEMU Home Page</ulink>
1659 to download and learn about the emulator.
1660 You can see the
1661 "<link linkend='dev-manual-qemu'>Using the Quick EMUlator (QEMU)</link>"
1662 chapter for information on using QEMU within the Yocto
1663 Project.</para></listitem>
1664 </orderedlist>
1665 </para>
1666 </section>
1667</section>
1668
1669<section id="modifying-temporary-source-code">
1670 <title>Modifying Temporary Source Code</title>
1671
1672 <para>
1673 You might
1674 find it helpful during development to modify the temporary source code used by recipes
1675 to build packages.
1676 For example, suppose you are developing a patch and you need to experiment a bit
1677 to figure out your solution.
1678 After you have initially built the package, you can iteratively tweak the
1679 source code, which is located in the
1680 <link linkend='build-directory'>Build Directory</link>, and then
1681 you can force a re-compile and quickly test your altered code.
1682 Once you settle on a solution, you can then preserve your changes in the form of
1683 patches.
1684 You can accomplish these steps all within either a
1685 <ulink url='http://savannah.nongnu.org/projects/quilt'>Quilt</ulink> or
1686 <link linkend='git'>Git</link> workflow.
1687 </para>
1688
1689 <section id='finding-the-temporary-source-code'>
1690 <title>Finding the Temporary Source Code</title>
1691
1692 <para>
1693 During a build, the unpacked temporary source code used by recipes
1694 to build packages is available in the Build Directory as
1695 defined by the
1696 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-S'>S</ulink></filename> variable.
1697 Below is the default value for the <filename>S</filename> variable as defined in the
1698 <filename>meta/conf/bitbake.conf</filename> configuration file in the
1699 <link linkend='source-directory'>Source Directory</link>:
1700 <literallayout class='monospaced'>
1701 S = "${WORKDIR}/${BP}"
1702 </literallayout>
1703 You should be aware that many recipes override the <filename>S</filename> variable.
1704 For example, recipes that fetch their source from Git usually set
1705 <filename>S</filename> to <filename>${WORKDIR}/git</filename>.
1706 <note>
1707 The
1708 <ulink url='&YOCTO_DOCS_REF_URL;#var-BP'><filename>BP</filename></ulink>
1709 represents the base recipe name, which consists of the name and version:
1710 <literallayout class='monospaced'>
1711 BP = "${BPN}-${PV}"
1712 </literallayout>
1713 </note>
1714 </para>
1715
1716 <para>
1717 The path to the work directory for the recipe
1718 (<ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink>)
1719 is defined as follows:
1720 <literallayout class='monospaced'>
1721 ${TMPDIR}/work/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}
1722 </literallayout>
1723 The actual directory depends on several things:
1724 <itemizedlist>
1725 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-TMPDIR'><filename>TMPDIR</filename></ulink>:
1726 The top-level build output directory</listitem>
1727 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-MULTIMACH_TARGET_SYS'><filename>MULTIMACH_TARGET_SYS</filename></ulink>:
1728 The target system identifier</listitem>
1729 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink>:
1730 The recipe name</listitem>
1731 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-EXTENDPE'><filename>EXTENDPE</filename></ulink>:
1732 The epoch - (if
1733 <ulink url='&YOCTO_DOCS_REF_URL;#var-PE'><filename>PE</filename></ulink>
1734 is not specified, which is usually the case for most
1735 recipes, then <filename>EXTENDPE</filename> is blank)</listitem>
1736 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>:
1737 The recipe version</listitem>
1738 <listitem><ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink>:
1739 The recipe revision</listitem>
1740 </itemizedlist>
1741 </para>
1742
1743 <para>
1744 As an example, assume a Source Directory top-level folder
1745 name <filename>poky</filename>, a default Build Directory at
1746 <filename>poky/build</filename>, and a
1747 <filename>qemux86-poky-linux</filename> machine target
1748 system.
1749 Furthermore, suppose your recipe is named
1750 <filename>foo_1.3.0.bb</filename>.
1751 In this case, the work directory the build system uses to
1752 build the package would be as follows:
1753 <literallayout class='monospaced'>
1754 poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
1755 </literallayout>
1756 </para>
1757
1758 <para>
1759 Now that you know where to locate the directory that has the temporary source code,
1760 you can use a Quilt or Git workflow to make your edits, test the changes,
1761 and preserve the changes in the form of patches.
1762 </para>
1763 </section>
1764
1765 <section id="using-a-quilt-workflow">
1766 <title>Using a Quilt Workflow</title>
1767
1768 <para>
1769 <ulink url='http://savannah.nongnu.org/projects/quilt'>Quilt</ulink>
1770 is a powerful tool that allows you to capture source code changes without having
1771 a clean source tree.
1772 This section outlines the typical workflow you can use to modify temporary source code,
1773 test changes, and then preserve the changes in the form of a patch all using Quilt.
1774 </para>
1775
1776 <para>
1777 Follow these general steps:
1778 <orderedlist>
1779 <listitem><para><emphasis>Find the Source Code:</emphasis>
1780 The temporary source code used by the OpenEmbedded build system is kept in the
1781 Build Directory.
1782 See the
1783 "<link linkend='finding-the-temporary-source-code'>Finding the Temporary Source Code</link>"
1784 section to learn how to locate the directory that has the temporary source code for a
1785 particular package.</para></listitem>
1786 <listitem><para><emphasis>Change Your Working Directory:</emphasis>
1787 You need to be in the directory that has the temporary source code.
1788 That directory is defined by the
1789 <ulink url='&YOCTO_DOCS_REF_URL;#var-S'><filename>S</filename></ulink>
1790 variable.</para></listitem>
1791 <listitem><para><emphasis>Create a New Patch:</emphasis>
1792 Before modifying source code, you need to create a new patch.
1793 To create a new patch file, use <filename>quilt new</filename> as below:
1794 <literallayout class='monospaced'>
1795 $ quilt new my_changes.patch
1796 </literallayout></para></listitem>
1797 <listitem><para><emphasis>Notify Quilt and Add Files:</emphasis>
1798 After creating the patch, you need to notify Quilt about the files
1799 you plan to edit.
1800 You notify Quilt by adding the files to the patch you just created:
1801 <literallayout class='monospaced'>
1802 $ quilt add file1.c file2.c file3.c
1803 </literallayout>
1804 </para></listitem>
1805 <listitem><para><emphasis>Edit the Files:</emphasis>
1806 Make your changes in the temporary source code to the files you added
1807 to the patch.</para></listitem>
1808 <listitem><para><emphasis>Test Your Changes:</emphasis>
1809 Once you have modified the source code, the easiest way to
1810 your changes is by calling the
1811 <filename>do_compile</filename> task as shown in the
1812 following example:
1813 <literallayout class='monospaced'>
1814 $ bitbake -c compile -f <replaceable>name_of_package</replaceable>
1815 </literallayout>
1816 The <filename>-f</filename> or <filename>--force</filename>
1817 option forces the specified task to execute.
1818 If you find problems with your code, you can just keep editing and
1819 re-testing iteratively until things work as expected.
1820 <note>All the modifications you make to the temporary source code
1821 disappear once you run the
1822 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-clean'><filename>do_clean</filename></ulink>
1823 or
1824 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-cleanall'><filename>do_cleanall</filename></ulink>
1825 tasks using BitBake (i.e.
1826 <filename>bitbake -c clean <replaceable>name_of_package</replaceable></filename>
1827 and
1828 <filename>bitbake -c cleanall <replaceable>name_of_package</replaceable></filename>).
1829 Modifications will also disappear if you use the <filename>rm_work</filename>
1830 feature as described in the
1831 "<ulink url='&YOCTO_DOCS_QS_URL;#building-image'>Building an Image</ulink>"
1832 section of the Yocto Project Quick Start.
1833 </note></para></listitem>
1834 <listitem><para><emphasis>Generate the Patch:</emphasis>
1835 Once your changes work as expected, you need to use Quilt to generate the final patch that
1836 contains all your modifications.
1837 <literallayout class='monospaced'>
1838 $ quilt refresh
1839 </literallayout>
1840 At this point, the <filename>my_changes.patch</filename> file has all your edits made
1841 to the <filename>file1.c</filename>, <filename>file2.c</filename>, and
1842 <filename>file3.c</filename> files.</para>
1843 <para>You can find the resulting patch file in the <filename>patches/</filename>
1844 subdirectory of the source (<filename>S</filename>) directory.</para></listitem>
1845 <listitem><para><emphasis>Copy the Patch File:</emphasis>
1846 For simplicity, copy the patch file into a directory named <filename>files</filename>,
1847 which you can create in the same directory that holds the recipe
1848 (<filename>.bb</filename>) file or the
1849 append (<filename>.bbappend</filename>) file.
1850 Placing the patch here guarantees that the OpenEmbedded build system will find
1851 the patch.
1852 Next, add the patch into the
1853 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename>
1854 of the recipe.
1855 Here is an example:
1856 <literallayout class='monospaced'>
1857 SRC_URI += "file://my_changes.patch"
1858 </literallayout></para></listitem>
1859 <listitem><para><emphasis>Increment the Recipe Revision Number:</emphasis>
1860 Finally, don't forget to 'bump' the
1861 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PR'>PR</ulink></filename>
1862 value in the recipe since the resulting packages have changed.</para></listitem>
1863 </orderedlist>
1864 </para> </section>
1865
1866 <section id='using-a-git-workflow'>
1867 <title>Using a Git Workflow</title>
1868 <para>
1869 Git is an even more powerful tool that allows you to capture source code changes without having
1870 a clean source tree.
1871 This section outlines the typical workflow you can use to modify temporary source code,
1872 test changes, and then preserve the changes in the form of a patch all using Git.
1873 For general information on Git as it is used in the Yocto Project, see the
1874 "<link linkend='git'>Git</link>" section.
1875 </para>
1876
1877 <note>
1878 This workflow uses Git only for its ability to manage local changes to the source code
1879 and produce patches independent of any version control system used with the Yocto Project.
1880 </note>
1881
1882 <para>
1883 Follow these general steps:
1884 <orderedlist>
1885 <listitem><para><emphasis>Find the Source Code:</emphasis>
1886 The temporary source code used by the OpenEmbedded build system is kept in the
1887 Build Directory.
1888 See the
1889 "<link linkend='finding-the-temporary-source-code'>Finding the Temporary Source Code</link>"
1890 section to learn how to locate the directory that has the temporary source code for a
1891 particular package.</para></listitem>
1892 <listitem><para><emphasis>Change Your Working Directory:</emphasis>
1893 You need to be in the directory that has the temporary source code.
1894 That directory is defined by the
1895 <ulink url='&YOCTO_DOCS_REF_URL;#var-S'><filename>S</filename></ulink>
1896 variable.</para></listitem>
1897 <listitem><para><emphasis>If needed, initialize a Git Repository:</emphasis>
1898 If the recipe you are working with does not use a Git fetcher,
1899 you need to set up a Git repository as follows:
1900 <literallayout class='monospaced'>
1901 $ git init
1902 $ git add *
1903 $ git commit -m "initial revision"
1904 </literallayout>
1905 The above Git commands initialize a Git repository that is based on the
1906 files in your current working directory, stage all the files, and commit
1907 the files.
1908 At this point, your Git repository is aware of all the source code files.
1909 Any edits you now make to files can be committed later and will be tracked by
1910 Git.</para></listitem>
1911 <listitem><para><emphasis>Edit the Files:</emphasis>
1912 Make your changes to the temporary source code.</para></listitem>
1913 <listitem><para><emphasis>Test Your Changes:</emphasis>
1914 Once you have modified the source code, the easiest way
1915 to test your changes is by calling the
1916 <filename>do_compile</filename> task as shown in the
1917 following example:
1918 <literallayout class='monospaced'>
1919 $ bitbake -c compile -f <replaceable>name_of_package</replaceable>
1920 </literallayout>
1921 The <filename>-f</filename> or <filename>--force</filename>
1922 option forces the specified task to execute.
1923 If you find problems with your code, you can just keep editing and
1924 re-testing iteratively until things work as expected.
1925 <note>All the modifications you make to the temporary source code
1926 disappear once you <filename>-c clean</filename>, <filename>-c cleansstate</filename>,
1927 or <filename>-c cleanall</filename> with BitBake for the package.
1928 Modifications will also disappear if you use the <filename>rm_work</filename>
1929 feature as described in the
1930 "<ulink url='&YOCTO_DOCS_QS_URL;#building-image'>Building an Image</ulink>"
1931 section of the Yocto Project Quick Start.
1932 </note></para></listitem>
1933 <listitem><para><emphasis>See the List of Files You Changed:</emphasis>
1934 Use the <filename>git status</filename> command to see what files you have actually edited.
1935 The ability to have Git track the files you have changed is an advantage that this
1936 workflow has over the Quilt workflow.
1937 Here is the Git command to list your changed files:
1938 <literallayout class='monospaced'>
1939 $ git status
1940 </literallayout></para></listitem>
1941 <listitem><para><emphasis>Stage the Modified Files:</emphasis>
1942 Use the <filename>git add</filename> command to stage the changed files so they
1943 can be committed as follows:
1944 <literallayout class='monospaced'>
1945 $ git add file1.c file2.c file3.c
1946 </literallayout></para></listitem>
1947 <listitem><para><emphasis>Commit the Staged Files and View Your Changes:</emphasis>
1948 Use the <filename>git commit</filename> command to commit the changes to the
1949 local repository.
1950 Once you have committed the files, you can use the <filename>git log</filename>
1951 command to see your changes:
1952 <literallayout class='monospaced'>
1953 $ git commit -m "<replaceable>commit-summary-message</replaceable>"
1954 $ git log
1955 </literallayout>
1956 <note>The name of the patch file created in the next step is based on your
1957 <replaceable>commit-summary-message</replaceable>.</note></para></listitem>
1958 <listitem><para><emphasis>Generate the Patch:</emphasis>
1959 Once the changes are committed, use the <filename>git format-patch</filename>
1960 command to generate a patch file:
1961 <literallayout class='monospaced'>
1962 $ git format-patch -1
1963 </literallayout>
1964 Specifying "-1" causes Git to generate the
1965 patch file for the most recent commit.</para>
1966 <para>At this point, the patch file has all your edits made
1967 to the <filename>file1.c</filename>, <filename>file2.c</filename>, and
1968 <filename>file3.c</filename> files.
1969 You can find the resulting patch file in the current directory and it
1970 is named according to the <filename>git commit</filename> summary line.
1971 The patch file ends with <filename>.patch</filename>.</para></listitem>
1972 <listitem><para><emphasis>Copy the Patch File:</emphasis>
1973 For simplicity, copy the patch file into a directory named <filename>files</filename>,
1974 which you can create in the same directory that holds the recipe
1975 (<filename>.bb</filename>) file or the
1976 append (<filename>.bbappend</filename>) file.
1977 Placing the patch here guarantees that the OpenEmbedded build system will find
1978 the patch.
1979 Next, add the patch into the
1980 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename>
1981 of the recipe.
1982 Here is an example:
1983 <literallayout class='monospaced'>
1984 SRC_URI += "file://0001-<replaceable>commit-summary-message</replaceable>.patch"
1985 </literallayout></para></listitem>
1986 <listitem><para><emphasis>Increment the Recipe Revision Number:</emphasis>
1987 Finally, don't forget to 'bump' the
1988 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PR'>PR</ulink></filename>
1989 value in the recipe since the resulting packages have changed.</para></listitem>
1990 </orderedlist>
1991 </para>
1992 </section>
1993</section>
1994
1995<section id='image-development-using-hob'>
1996 <title>Image Development Using Hob</title>
1997
1998 <para>
1999 The <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/hob'>Hob</ulink> is a graphical user interface for the
2000 OpenEmbedded build system, which is based on BitBake.
2001 You can use the Hob to build custom operating system images within the Yocto Project build environment.
2002 Hob simply provides a friendly interface over the build system used during development.
2003 In other words, building images with the Hob lets you take care of common build tasks more easily.
2004 </para>
2005
2006 <para>
2007 For a better understanding of Hob, see the project page at
2008 <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/hob'></ulink>
2009 on the Yocto Project website.
2010 If you follow the "Documentation" link from the Hob page, you will
2011 find a short introductory training video on Hob.
2012 The following lists some features of Hob:
2013 <itemizedlist>
2014 <listitem><para>You can setup and run Hob using these commands:
2015 <literallayout class='monospaced'>
2016 $ source oe-init-build-env
2017 $ hob
2018 </literallayout></para></listitem>
2019 <listitem><para>You can set the
2020 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
2021 for which you are building the image.</para></listitem>
2022 <listitem><para>You can modify various policy settings such as the
2023 package format with which to build,
2024 the parallelism BitBake uses, whether or not to build an
2025 external toolchain, and which host to build against.
2026 </para></listitem>
2027 <listitem><para>You can manage
2028 <link linkend='understanding-and-creating-layers'>layers</link>.</para></listitem>
2029 <listitem><para>You can select a base image and then add extra packages for your custom build.
2030 </para></listitem>
2031 <listitem><para>You can launch and monitor the build from within Hob.</para></listitem>
2032 </itemizedlist>
2033 </para>
2034</section>
2035
2036<section id="platdev-appdev-devshell">
2037 <title>Using a Development Shell</title>
2038
2039 <para>
2040 When debugging certain commands or even when just editing packages,
2041 <filename>devshell</filename> can be a useful tool.
2042 When you invoke <filename>devshell</filename>, source files are
2043 extracted into your working directory and patches are applied.
2044 Then, a new terminal is opened and you are placed in the working directory.
2045 In the new terminal, all the OpenEmbedded build-related environment variables are
2046 still defined so you can use commands such as <filename>configure</filename> and
2047 <filename>make</filename>.
2048 The commands execute just as if the OpenEmbedded build system were executing them.
2049 Consequently, working this way can be helpful when debugging a build or preparing
2050 software to be used with the OpenEmbedded build system.
2051 </para>
2052
2053 <para>
2054 Following is an example that uses <filename>devshell</filename> on a target named
2055 <filename>matchbox-desktop</filename>:
2056 <literallayout class='monospaced'>
2057 $ bitbake matchbox-desktop -c devshell
2058 </literallayout>
2059 </para>
2060
2061 <para>
2062 This command spawns a terminal with a shell prompt within the OpenEmbedded build environment.
2063 The <ulink url='&YOCTO_DOCS_REF_URL;#var-OE_TERMINAL'><filename>OE_TERMINAL</filename></ulink>
2064 variable controls what type of shell is opened.
2065 </para>
2066
2067 <para>
2068 For spawned terminals, the following occurs:
2069 <itemizedlist>
2070 <listitem><para>The <filename>PATH</filename> variable includes the
2071 cross-toolchain.</para></listitem>
2072 <listitem><para>The <filename>pkgconfig</filename> variables find the correct
2073 <filename>.pc</filename> files.</para></listitem>
2074 <listitem><para>The <filename>configure</filename> command finds the
2075 Yocto Project site files as well as any other necessary files.</para></listitem>
2076 </itemizedlist>
2077 </para>
2078
2079 <para>
2080 Within this environment, you can run configure or compile
2081 commands as if they were being run by
2082 the OpenEmbedded build system itself.
2083 As noted earlier, the working directory also automatically changes to the
2084 Source Directory (<ulink url='&YOCTO_DOCS_REF_URL;#var-S'><filename>S</filename></ulink>).
2085 </para>
2086
2087 <para>
2088 When you are finished, you just exit the shell or close the terminal window.
2089 </para>
2090
2091 <note>
2092 <para>
2093 It is worth remembering that when using <filename>devshell</filename>
2094 you need to use the full compiler name such as <filename>arm-poky-linux-gnueabi-gcc</filename>
2095 instead of just using <filename>gcc</filename>.
2096 The same applies to other applications such as <filename>binutils</filename>,
2097 <filename>libtool</filename> and so forth.
2098 BitBake sets up environment variables such as <filename>CC</filename>
2099 to assist applications, such as <filename>make</filename> to find the correct tools.
2100 </para>
2101
2102 <para>
2103 It is also worth noting that <filename>devshell</filename> still works over
2104 X11 forwarding and similar situations.
2105 </para>
2106 </note>
2107</section>
2108
2109</chapter>
2110<!--
2111vim: expandtab tw=80 ts=4
2112-->
diff --git a/documentation/dev-manual/dev-manual-newbie.xml b/documentation/dev-manual/dev-manual-newbie.xml
new file mode 100644
index 0000000000..2385187f4d
--- /dev/null
+++ b/documentation/dev-manual/dev-manual-newbie.xml
@@ -0,0 +1,1692 @@
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 selected BSP 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 extends or overrides the
512 information in the similarly-named recipe file.
513 For an example of an append file in use, see the
514 "<link linkend='using-bbappend-files'>Using .bbappend Files</link>" section.
515 <note>
516 Append files can also use wildcard patterns in their version numbers
517 so they can be applied to more than one version of the underlying recipe file.
518 </note>
519 </para></listitem>
520 <listitem><para id='bitbake-term'><emphasis>BitBake:</emphasis>
521 The task executor and scheduler used by the OpenEmbedded build
522 system to build images.
523 For more information on BitBake, see the
524 <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
525 </para></listitem>
526 <listitem>
527 <para id='build-directory'><emphasis>Build Directory:</emphasis>
528 This term refers to the area used by the OpenEmbedded build
529 system for builds.
530 The area is created when you <filename>source</filename> the
531 setup environment script that is found in the Source Directory
532 (i.e. <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
533 or
534 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>).
535 The <ulink url='&YOCTO_DOCS_REF_URL;#var-TOPDIR'><filename>TOPDIR</filename></ulink>
536 variable points to the Build Directory.</para>
537
538 <para>
539 You have a lot of flexibility when creating the Build
540 Directory.
541 Following are some examples that show how to create the
542 directory.
543 The examples assume your
544 <link linkend='source-directory'>Source Directory</link> is
545 named <filename>poky</filename>:
546 <itemizedlist>
547 <listitem><para>Create the Build Directory inside your
548 Source Directory and let the name of the Build
549 Directory default to <filename>build</filename>:
550 <literallayout class='monospaced'>
551 $ cd $HOME/poky
552 $ source &OE_INIT_FILE;
553 </literallayout></para></listitem>
554 <listitem><para>Create the Build Directory inside your
555 home directory and specifically name it
556 <filename>test-builds</filename>:
557 <literallayout class='monospaced'>
558 $ cd $HOME
559 $ source poky/&OE_INIT_FILE; test-builds
560 </literallayout></para></listitem>
561 <listitem><para>
562 Provide a directory path and
563 specifically name the Build Directory.
564 Any intermediate folders in the pathname must
565 exist.
566 This next example creates a Build Directory named
567 <filename>YP-&POKYVERSION;</filename>
568 in your home directory within the existing
569 directory <filename>mybuilds</filename>:
570 <literallayout class='monospaced'>
571 $cd $HOME
572 $ source $HOME/poky/&OE_INIT_FILE; $HOME/mybuilds/YP-&POKYVERSION;
573 </literallayout></para></listitem>
574 </itemizedlist>
575 <note>
576 By default, the Build Directory contains
577 <ulink url='&YOCTO_DOCS_REF_URL;#var-TMPDIR'><filename>TMPDIR</filename></ulink>,
578 which is a temporary directory the build system uses for
579 its work.
580 <filename>TMPDIR</filename> cannot be under NFS.
581 Thus, by default, the Build Directory cannot be under NFS.
582 However, if you need the Build Directory to be under NFS,
583 you can set this up by setting <filename>TMPDIR</filename>
584 in your <filename>local.conf</filename> file
585 to use a local drive.
586 Doing so effectively separates <filename>TMPDIR</filename>
587 from <filename>TOPDIR</filename>, which is the Build
588 Directory.
589 </note>
590 </para></listitem>
591 <listitem><para id='build-system-term'><emphasis>Build System:</emphasis>
592 In the context of the Yocto Project,
593 this term refers to the OpenEmbedded build system used by the project.
594 This build system is based on the project known as "Poky."
595 For some historical information about Poky, see the
596 <link linkend='poky'>Poky</link> term.
597 </para></listitem>
598 <listitem><para><emphasis>Classes:</emphasis> Files that provide for logic encapsulation
599 and inheritance so that commonly used patterns can be defined once and then easily used
600 in multiple recipes.
601 For reference information on the Yocto Project classes, see the
602 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-classes'>Classes</ulink>" chapter of the
603 Yocto Project Reference Manual.
604 Class files end with the <filename>.bbclass</filename> filename extension.
605 </para></listitem>
606 <listitem><para><emphasis>Configuration File:</emphasis>
607 Configuration information in various <filename>.conf</filename>
608 files provides global definitions of variables.
609 The <filename>conf/local.conf</filename> configuration file in
610 the
611 <link linkend='build-directory'>Build Directory</link>
612 contains user-defined variables that affect every build.
613 The <filename>meta-yocto/conf/distro/poky.conf</filename>
614 configuration file defines Yocto "distro" configuration
615 variables used only when building with this policy.
616 Machine configuration files, which
617 are located throughout the
618 <link linkend='source-directory'>Source Directory</link>, define
619 variables for specific hardware and are only used when building
620 for that target (e.g. the
621 <filename>machine/beaglebone.conf</filename> configuration
622 file defines variables for the Texas Instruments ARM Cortex-A8
623 development board).
624 Configuration files end with a <filename>.conf</filename>
625 filename extension.
626 </para></listitem>
627 <listitem><para id='cross-development-toolchain'>
628 <emphasis>Cross-Development Toolchain:</emphasis>
629 In general, a cross-development toolchain is a collection of
630 software development tools and utilities that run on one
631 architecture and allow you to develop software for a
632 different, or targeted, architecture.
633 These toolchains contain cross-compilers, linkers, and
634 debuggers that are specific to the target architecture.
635 </para>
636
637 <para>The Yocto Project supports two different cross-development
638 toolchains:
639 <itemizedlist>
640 <listitem><para>A toolchain only used by and within
641 BitBake when building an image for a target
642 architecture.</para></listitem>
643 <listitem><para>A relocatable toolchain used outside of
644 BitBake by developers when developing applications
645 that will run on a targeted device.
646 Sometimes this relocatable cross-development
647 toolchain is referred to as the meta-toolchain.
648 </para></listitem>
649 </itemizedlist>
650 </para>
651
652 <para>
653 Creation of these toolchains is simple and automated.
654 For information on toolchain concepts as they apply to the
655 Yocto Project, see the
656 "<ulink url='&YOCTO_DOCS_REF_URL;#cross-development-toolchain-generation'>Cross-Development Toolchain Generation</ulink>"
657 section in the Yocto Project Reference Manual.
658 You can also find more information on using the
659 relocatable toolchain in the
660 <ulink url='&YOCTO_DOCS_ADT_URL;'>Yocto Project
661 Application Developer's Guide</ulink>.
662 </para></listitem>
663 <listitem><para><emphasis>Image:</emphasis>
664 An image is an artifact of the BitBake build process given
665 a collection of recipes and related Metadata.
666 Images are the binary output that run on specific hardware or
667 QEMU and are used for specific use-cases.
668 For a list of the supported image types that the Yocto Project provides, see the
669 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>"
670 chapter in the Yocto Project Reference Manual.</para></listitem>
671 <listitem><para id='layer'><emphasis>Layer:</emphasis> A collection of recipes representing the core,
672 a BSP, or an application stack.
673 For a discussion specifically on BSP Layers, see the
674 "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>"
675 section in the Yocto Project Board Support Packages (BSP)
676 Developer's Guide.</para></listitem>
677 <listitem><para id='meta-toolchain'><emphasis>Meta-Toolchain:</emphasis>
678 A term sometimes used for
679 <link linkend='cross-development-toolchain'>Cross-Development Toolchain</link>.
680 </para></listitem>
681 <listitem><para id='metadata'><emphasis>Metadata:</emphasis>
682 The files that BitBake parses when building an image.
683 In general, Metadata includes recipes, classes, and
684 configuration files.
685 In the context of the kernel ("kernel Metadata"),
686 it refers to Metadata in the <filename>meta</filename>
687 branches of the kernel source Git repositories.
688 </para></listitem>
689 <listitem><para id='oe-core'><emphasis>OE-Core:</emphasis> A core set of Metadata originating
690 with OpenEmbedded (OE) that is shared between OE and the Yocto Project.
691 This Metadata is found in the <filename>meta</filename> directory of the
692 <link linkend='source-directory'>Source Directory</link>.</para></listitem>
693 <listitem><para><emphasis>Package:</emphasis>
694 In the context of the Yocto Project, this term refers to a
695 recipe's packaged output produced by BitBake (i.e. a
696 "baked recipe").
697 A package is generally the compiled binaries produced from the
698 recipe's sources.
699 You "bake" something by running it through BitBake.</para>
700 <para>It is worth noting that the term "package" can, in general, have subtle
701 meanings. For example, the packages referred to in the
702 "<ulink url='&YOCTO_DOCS_QS_URL;#packages'>The Packages</ulink>" section are
703 compiled binaries that, when installed, add functionality to your Linux
704 distribution.</para>
705 <para>Another point worth noting is that historically within the Yocto Project,
706 recipes were referred to as packages - thus, the existence of several BitBake
707 variables that are seemingly mis-named,
708 (e.g. <ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink>,
709 <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>, and
710 <ulink url='&YOCTO_DOCS_REF_URL;#var-PE'><filename>PE</filename></ulink>).
711 </para></listitem>
712 <listitem><para><emphasis>Package Groups:</emphasis>
713 Arbitrary groups of software Recipes.
714 You use package groups to hold recipes that, when built,
715 usually accomplish a single task.
716 For example, a package group could contain the recipes for a
717 company’s proprietary or value-add software.
718 Or, the package group could contain the recipes that enable
719 graphics.
720 A package group is really just another recipe.
721 Because package group files are recipes, they end with the
722 <filename>.bb</filename> filename extension.</para></listitem>
723 <listitem><para id='poky'><emphasis>Poky:</emphasis> The term "poky" can mean several things.
724 In its most general sense, it is an open-source project that was initially developed
725 by OpenedHand. With OpenedHand, poky was developed off of the existing OpenEmbedded
726 build system becoming a build system for embedded images.
727 After Intel Corporation acquired OpenedHand, the project poky became the basis for
728 the Yocto Project's build system.</para>
729 <para>
730 Within the Yocto Project source repositories, <filename>poky</filename>
731 exists as a separate Git repository
732 that can be cloned to yield a local copy on the host system.
733 Thus, "poky" can refer to the local copy of the Source Directory used to develop within
734 the Yocto Project.</para></listitem>
735 <listitem><para><emphasis>Recipe:</emphasis>
736 A set of instructions for building packages.
737 A recipe describes where you get source code, which patches
738 to apply, how to configure the source, how to compile it and so on.
739 Recipes also describe dependencies for libraries or for other
740 recipes.
741 Recipes represent the logical unit of execution, the software
742 to build, the images to build, and use the
743 <filename>.bb</filename> file extension.
744 </para></listitem>
745 <listitem>
746 <para id='source-directory'><emphasis>Source Directory:</emphasis>
747 This term refers to the directory structure created as a result
748 of creating a local copy of the <filename>poky</filename> Git
749 repository <filename>git://git.yoctoproject.org/poky</filename>
750 or expanding a released <filename>poky</filename> tarball.
751 <note>
752 Creating a local copy of the <filename>poky</filename>
753 Git repository is the recommended method for setting up
754 your Source Directory.
755 </note>
756 Sometimes you might hear the term "poky directory" used to refer
757 to this directory structure.
758 <note>
759 The OpenEmbedded build system does not support file or
760 directory names that contain spaces.
761 Be sure that the Source Directory you use does not contain
762 these types of names.
763 </note></para>
764
765 <para>The Source Directory contains BitBake, Documentation,
766 Metadata and other files that all support the Yocto Project.
767 Consequently, you must have the Source Directory in place on
768 your development system in order to do any development using
769 the Yocto Project.</para>
770
771 <para>When you create a local copy of the Git repository, you
772 can name the repository anything you like.
773 Throughout much of the documentation, "poky"
774 is used as the name of the top-level folder of the local copy of
775 the poky Git repository.
776 So, for example, cloning the <filename>poky</filename> Git
777 repository results in a local Git repository whose top-level
778 folder is also named "poky".</para>
779
780 <para>While it is not recommended that you use tarball expansion
781 to set up the Source Directory, if you do, the top-level
782 directory name of the Source Directory is derived from the
783 Yocto Project release tarball.
784 For example, downloading and unpacking
785 <filename>&YOCTO_POKY_TARBALL;</filename> results in a
786 Source Directory whose root folder is named
787 <filename>&YOCTO_POKY;</filename>.</para>
788
789 <para>It is important to understand the differences between the
790 Source Directory created by unpacking a released tarball as
791 compared to cloning
792 <filename>git://git.yoctoproject.org/poky</filename>.
793 When you unpack a tarball, you have an exact copy of the files
794 based on the time of release - a fixed release point.
795 Any changes you make to your local files in the Source Directory
796 are on top of the release and will remain local only.
797 On the other hand, when you clone the <filename>poky</filename>
798 Git repository, you have an active development repository with
799 access to the upstream repository's branches and tags.
800 In this case, any local changes you make to the local
801 Source Directory can be later applied to active development
802 branches of the upstream <filename>poky</filename> Git
803 repository.</para>
804
805 <para>For more information on concepts related to Git
806 repositories, branches, and tags, see the
807 "<link linkend='repositories-tags-and-branches'>Repositories, Tags, and Branches</link>"
808 section.</para></listitem>
809 <listitem><para><emphasis>Task:</emphasis>
810 A unit of execution for BitBake (e.g.
811 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-compile'><filename>do_compile</filename></ulink>,
812 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-fetch'><filename>do_fetch</filename></ulink>,
813 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-patch'><filename>do_patch</filename></ulink>,
814 and so forth).
815 </para></listitem>
816 <listitem><para><emphasis>Upstream:</emphasis> A reference to source code or repositories
817 that are not local to the development system but located in a master area that is controlled
818 by the maintainer of the source code.
819 For example, in order for a developer to work on a particular piece of code, they need to
820 first get a copy of it from an "upstream" source.</para></listitem>
821 </itemizedlist>
822 </para>
823</section>
824
825<section id='licensing'>
826 <title>Licensing</title>
827
828 <para>
829 Because open source projects are open to the public, they have different licensing structures in place.
830 License evolution for both Open Source and Free Software has an interesting history.
831 If you are interested in this history, you can find basic information here:
832 <itemizedlist>
833 <listitem><para><ulink url='http://en.wikipedia.org/wiki/Open-source_license'>Open source license history</ulink>
834 </para></listitem>
835 <listitem><para><ulink url='http://en.wikipedia.org/wiki/Free_software_license'>Free software license
836 history</ulink></para></listitem>
837 </itemizedlist>
838 </para>
839
840 <para>
841 In general, the Yocto Project is broadly licensed under the Massachusetts Institute of Technology
842 (MIT) License.
843 MIT licensing permits the reuse of software within proprietary software as long as the
844 license is distributed with that software.
845 MIT is also compatible with the GNU General Public License (GPL).
846 Patches to the Yocto Project follow the upstream licensing scheme.
847 You can find information on the MIT license
848 <ulink url='http://www.opensource.org/licenses/mit-license.php'>here</ulink>.
849 You can find information on the GNU GPL <ulink url='http://www.opensource.org/licenses/LGPL-3.0'>
850 here</ulink>.
851 </para>
852
853 <para>
854 When you build an image using the Yocto Project, the build process uses a
855 known list of licenses to ensure compliance.
856 You can find this list in the
857 <link linkend='source-directory'>Source Directory</link> at
858 <filename>meta/files/common-licenses</filename>.
859 Once the build completes, the list of all licenses found and used during that build are
860 kept in the
861 <link linkend='build-directory'>Build Directory</link> at
862 <filename>tmp/deploy/licenses</filename>.
863 </para>
864
865 <para>
866 If a module requires a license that is not in the base list, the build process
867 generates a warning during the build.
868 These tools make it easier for a developer to be certain of the licenses with which
869 their shipped products must comply.
870 However, even with these tools it is still up to the developer to resolve potential licensing issues.
871 </para>
872
873 <para>
874 The base list of licenses used by the build process is a combination of the Software Package
875 Data Exchange (SPDX) list and the Open Source Initiative (OSI) projects.
876 <ulink url='http://spdx.org'>SPDX Group</ulink> is a working group of the Linux Foundation
877 that maintains a specification
878 for a standard format for communicating the components, licenses, and copyrights
879 associated with a software package.
880 <ulink url='http://opensource.org'>OSI</ulink> is a corporation dedicated to the Open Source
881 Definition and the effort for reviewing and approving licenses that
882 conform to the Open Source Definition (OSD).
883 </para>
884
885 <para>
886 You can find a list of the combined SPDX and OSI licenses that the
887 Yocto Project uses in the
888 <filename>meta/files/common-licenses</filename> directory in your
889 <link linkend='source-directory'>Source Directory</link>.
890 </para>
891
892 <para>
893 For information that can help you maintain compliance with various
894 open source licensing during the lifecycle of a product created using
895 the Yocto Project, see the
896 "<link linkend='maintaining-open-source-license-compliance-during-your-products-lifecycle'>Maintaining Open Source License Compliance During Your Product's Lifecycle</link>"
897 section.
898 </para>
899</section>
900
901<section id='git'>
902 <title>Git</title>
903
904 <para>
905 The Yocto Project makes extensive use of Git,
906 which is a free, open source distributed version control system.
907 Git supports distributed development, non-linear development, and can handle large projects.
908 It is best that you have some fundamental understanding of how Git tracks projects and
909 how to work with Git if you are going to use the Yocto Project for development.
910 This section provides a quick overview of how Git works and provides you with a summary
911 of some essential Git commands.
912 </para>
913
914 <para>
915 For more information on Git, see
916 <ulink url='http://git-scm.com/documentation'></ulink>.
917 If you need to download Git, go to <ulink url='http://git-scm.com/download'></ulink>.
918 </para>
919
920 <section id='repositories-tags-and-branches'>
921 <title>Repositories, Tags, and Branches</title>
922
923 <para>
924 As mentioned earlier in the section
925 "<link linkend='yocto-project-repositories'>Yocto Project Source Repositories</link>",
926 the Yocto Project maintains source repositories at
927 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink>.
928 If you look at this web-interface of the repositories, each item is a separate
929 Git repository.
930 </para>
931
932 <para>
933 Git repositories use branching techniques that track content change (not files)
934 within a project (e.g. a new feature or updated documentation).
935 Creating a tree-like structure based on project divergence allows for excellent historical
936 information over the life of a project.
937 This methodology also allows for an environment from which you can do lots of
938 local experimentation on projects as you develop changes or new features.
939 </para>
940
941 <para>
942 A Git repository represents all development efforts for a given project.
943 For example, the Git repository <filename>poky</filename> contains all changes
944 and developments for Poky over the course of its entire life.
945 That means that all changes that make up all releases are captured.
946 The repository maintains a complete history of changes.
947 </para>
948
949 <para>
950 You can create a local copy of any repository by "cloning" it with the Git
951 <filename>clone</filename> command.
952 When you clone a Git repository, you end up with an identical copy of the
953 repository on your development system.
954 Once you have a local copy of a repository, you can take steps to develop locally.
955 For examples on how to clone Git repositories, see the
956 "<link linkend='getting-setup'>Getting Set Up</link>" section.
957 </para>
958
959 <para>
960 It is important to understand that Git tracks content change and
961 not files.
962 Git uses "branches" to organize different development efforts.
963 For example, the <filename>poky</filename> repository has
964 <filename>denzil</filename>, <filename>danny</filename>,
965 <filename>dylan</filename>, <filename>dora</filename>,
966 <filename>daisy</filename>, and <filename>master</filename> branches
967 among others.
968 You can see all the branches by going to
969 <ulink url='&YOCTO_GIT_URL;/cgit.cgi/poky/'></ulink> and
970 clicking on the
971 <filename><ulink url='&YOCTO_GIT_URL;/cgit.cgi/poky/refs/heads'>[...]</ulink></filename>
972 link beneath the "Branch" heading.
973 </para>
974
975 <para>
976 Each of these branches represents a specific area of development.
977 The <filename>master</filename> branch represents the current or most recent
978 development.
979 All other branches represent offshoots of the <filename>master</filename>
980 branch.
981 </para>
982
983 <para>
984 When you create a local copy of a Git repository, the copy has the same set
985 of branches as the original.
986 This means you can use Git to create a local working area (also called a branch)
987 that tracks a specific development branch from the source Git repository.
988 in other words, you can define your local Git environment to work on any development
989 branch in the repository.
990 To help illustrate, here is a set of commands that creates a local copy of the
991 <filename>poky</filename> Git repository and then creates and checks out a local
992 Git branch that tracks the Yocto Project &DISTRO; Release (&DISTRO_NAME;) development:
993 <literallayout class='monospaced'>
994 $ cd ~
995 $ git clone git://git.yoctoproject.org/poky
996 $ cd poky
997 $ git checkout -b &DISTRO_NAME; origin/&DISTRO_NAME;
998 </literallayout>
999 In this example, the name of the top-level directory of your local
1000 <link linkend='source-directory'>Source Directory</link>
1001 is "poky" and the name of that local working area (local branch)
1002 you just created and checked out is "&DISTRO_NAME;".
1003 The files in your local repository now reflect the same files that
1004 are in the "&DISTRO_NAME;" development branch of the
1005 Yocto Project's "poky" upstream repository.
1006 It is important to understand that when you create and checkout a
1007 local working branch based on a branch name,
1008 your local environment matches the "tip" of that development branch
1009 at the time you created your local branch, which could be
1010 different from the files at the time of a similarly named release.
1011 In other words, creating and checking out a local branch based on
1012 the "&DISTRO_NAME;" branch name is not the same as
1013 cloning and checking out the "master" branch.
1014 Keep reading to see how you create a local snapshot of a Yocto
1015 Project Release.
1016 </para>
1017
1018 <para>
1019 Git uses "tags" to mark specific changes in a repository.
1020 Typically, a tag is used to mark a special point such as the final
1021 change before a project is released.
1022 You can see the tags used with the <filename>poky</filename> Git
1023 repository by going to
1024 <ulink url='&YOCTO_GIT_URL;/cgit.cgi/poky/'></ulink> and
1025 clicking on the
1026 <filename><ulink url='&YOCTO_GIT_URL;/cgit.cgi/poky/refs/tags'>[...]</ulink></filename>
1027 link beneath the "Tag" heading.
1028 </para>
1029
1030 <para>
1031 Some key tags are <filename>dylan-9.0.0</filename>,
1032 <filename>dora-10.0.0</filename>, <filename>daisy-11.0.0</filename>,
1033 and <filename>&DISTRO_NAME;-&POKYVERSION;</filename>.
1034 These tags represent Yocto Project releases.
1035 </para>
1036
1037 <para>
1038 When you create a local copy of the Git repository, you also have access to all the
1039 tags.
1040 Similar to branches, you can create and checkout a local working Git branch based
1041 on a tag name.
1042 When you do this, you get a snapshot of the Git repository that reflects
1043 the state of the files when the change was made associated with that tag.
1044 The most common use is to checkout a working branch that matches a specific
1045 Yocto Project release.
1046 Here is an example:
1047 <literallayout class='monospaced'>
1048 $ cd ~
1049 $ git clone git://git.yoctoproject.org/poky
1050 $ cd poky
1051 $ git checkout -b my-&DISTRO_NAME;-&POKYVERSION; &DISTRO_NAME;-&POKYVERSION;
1052 </literallayout>
1053 In this example, the name of the top-level directory of your local Yocto Project
1054 Files Git repository is <filename>poky</filename>.
1055 And, the name of the local branch you have created and checked out is
1056 <filename>my-&DISTRO_NAME;-&POKYVERSION;</filename>.
1057 The files in your repository now exactly match the Yocto Project &DISTRO;
1058 Release tag (<filename>&DISTRO_NAME;-&POKYVERSION;</filename>).
1059 It is important to understand that when you create and checkout a local
1060 working branch based on a tag, your environment matches a specific point
1061 in time and not the entire development branch.
1062 </para>
1063 </section>
1064
1065 <section id='basic-commands'>
1066 <title>Basic Commands</title>
1067
1068 <para>
1069 Git has an extensive set of commands that lets you manage changes and perform
1070 collaboration over the life of a project.
1071 Conveniently though, you can manage with a small set of basic operations and workflows
1072 once you understand the basic philosophy behind Git.
1073 You do not have to be an expert in Git to be functional.
1074 A good place to look for instruction on a minimal set of Git commands is
1075 <ulink url='http://git-scm.com/documentation'>here</ulink>.
1076 If you need to download Git, you can do so
1077 <ulink url='http://git-scm.com/download'>here</ulink>.
1078 </para>
1079
1080 <para>
1081 If you do not know much about Git, you should educate
1082 yourself by visiting the links previously mentioned.
1083 </para>
1084
1085 <para>
1086 The following list briefly describes some basic Git operations as a way to get started.
1087 As with any set of commands, this list (in most cases) simply shows the base command and
1088 omits the many arguments they support.
1089 See the Git documentation for complete descriptions and strategies on how to use these commands:
1090 <itemizedlist>
1091 <listitem><para><emphasis><filename>git init</filename>:</emphasis> Initializes an empty Git repository.
1092 You cannot use Git commands unless you have a <filename>.git</filename> repository.</para></listitem>
1093 <listitem><para><emphasis><filename>git clone</filename>:</emphasis>
1094 Creates a local clone of a Git repository.
1095 During collaboration, this command allows you to create a
1096 local Git repository that is on equal footing with a fellow
1097 developer’s Git repository.
1098 </para></listitem>
1099 <listitem><para><emphasis><filename>git add</filename>:</emphasis> Stages updated file contents
1100 to the index that
1101 Git uses to track changes.
1102 You must stage all files that have changed before you can commit them.</para></listitem>
1103 <listitem><para><emphasis><filename>git commit</filename>:</emphasis> Creates a "commit" that documents
1104 the changes you made.
1105 Commits are used for historical purposes, for determining if a maintainer of a project
1106 will allow the change, and for ultimately pushing the change from your local Git repository
1107 into the project’s upstream (or master) repository.</para></listitem>
1108 <listitem><para><emphasis><filename>git status</filename>:</emphasis> Reports any modified files that
1109 possibly need to be staged and committed.</para></listitem>
1110 <listitem><para><emphasis><filename>git checkout &lt;branch-name&gt;</filename>:</emphasis> Changes
1111 your working branch.
1112 This command is analogous to "cd".</para></listitem>
1113 <listitem><para><emphasis><filename>git checkout –b &lt;working-branch&gt;</filename>:</emphasis> Creates
1114 a working branch on your local machine where you can isolate work.
1115 It is a good idea to use local branches when adding specific features or changes.
1116 This way if you do not like what you have done you can easily get rid of the work.</para></listitem>
1117 <listitem><para><emphasis><filename>git branch</filename>:</emphasis> Reports
1118 existing local branches and
1119 tells you the branch in which you are currently working.</para></listitem>
1120 <listitem><para><emphasis><filename>git branch -D &lt;branch-name&gt;</filename>:</emphasis>
1121 Deletes an existing local branch.
1122 You need to be in a local branch other than the one you are deleting
1123 in order to delete <filename>&lt;branch-name&gt;</filename>.</para></listitem>
1124 <listitem><para><emphasis><filename>git pull</filename>:</emphasis> Retrieves information
1125 from an upstream Git
1126 repository and places it in your local Git repository.
1127 You use this command to make sure you are synchronized with the repository
1128 from which you are basing changes (.e.g. the master branch).</para></listitem>
1129 <listitem><para><emphasis><filename>git push</filename>:</emphasis>
1130 Sends all your committed local changes to an upstream Git
1131 repository (e.g. a contribution repository).
1132 The maintainer of the project draws from these repositories
1133 when adding changes to the project’s master repository or
1134 other development branch.
1135 </para></listitem>
1136 <listitem><para><emphasis><filename>git merge</filename>:</emphasis> Combines or adds changes from one
1137 local branch of your repository with another branch.
1138 When you create a local Git repository, the default branch is named "master".
1139 A typical workflow is to create a temporary branch for isolated work, make and commit your
1140 changes, switch to your local master branch, merge the changes from the temporary branch into the
1141 local master branch, and then delete the temporary branch.</para></listitem>
1142 <listitem><para><emphasis><filename>git cherry-pick</filename>:</emphasis> Choose and apply specific
1143 commits from one branch into another branch.
1144 There are times when you might not be able to merge all the changes in one branch with
1145 another but need to pick out certain ones.</para></listitem>
1146 <listitem><para><emphasis><filename>gitk</filename>:</emphasis> Provides a GUI view of the branches
1147 and changes in your local Git repository.
1148 This command is a good way to graphically see where things have diverged in your
1149 local repository.</para></listitem>
1150 <listitem><para><emphasis><filename>git log</filename>:</emphasis> Reports a history of your changes to the
1151 repository.</para></listitem>
1152 <listitem><para><emphasis><filename>git diff</filename>:</emphasis> Displays line-by-line differences
1153 between your local working files and the same files in the upstream Git repository that your
1154 branch currently tracks.</para></listitem>
1155 </itemizedlist>
1156 </para>
1157 </section>
1158</section>
1159
1160<section id='workflows'>
1161 <title>Workflows</title>
1162
1163 <para>
1164 This section provides some overview on workflows using Git.
1165 In particular, the information covers basic practices that describe roles and actions in a
1166 collaborative development environment.
1167 Again, if you are familiar with this type of development environment, you might want to just
1168 skip this section.
1169 </para>
1170
1171 <para>
1172 The Yocto Project files are maintained using Git in a "master" branch whose Git history
1173 tracks every change and whose structure provides branches for all diverging functionality.
1174 Although there is no need to use Git, many open source projects do so.
1175 For the Yocto Project, a key individual called the "maintainer" is responsible for the "master"
1176 branch of a given Git repository.
1177 The "master" branch is the “upstream” repository where the final builds of the project occur.
1178 The maintainer is responsible for accepting changes from other developers and for
1179 organizing the underlying branch structure to reflect release strategies and so forth.
1180 <note>For information on finding out who is responsible for (maintains)
1181 a particular area of code, see the
1182 "<link linkend='how-to-submit-a-change'>How to Submit a Change</link>"
1183 section.
1184 </note>
1185 </para>
1186
1187 <para>
1188 The project also has an upstream contribution Git repository named
1189 <filename>poky-contrib</filename>.
1190 You can see all the branches in this repository using the web interface
1191 of the
1192 <ulink url='&YOCTO_GIT_URL;'>Source Repositories</ulink> organized
1193 within the "Poky Support" area.
1194 These branches temporarily hold changes to the project that have been
1195 submitted or committed by the Yocto Project development team and by
1196 community members who contribute to the project.
1197 The maintainer determines if the changes are qualified to be moved
1198 from the "contrib" branches into the "master" branch of the Git
1199 repository.
1200 </para>
1201
1202 <para>
1203 Developers (including contributing community members) create and maintain cloned repositories
1204 of the upstream "master" branch.
1205 These repositories are local to their development platforms and are used to develop changes.
1206 When a developer is satisfied with a particular feature or change, they "push" the changes
1207 to the appropriate "contrib" repository.
1208 </para>
1209
1210 <para>
1211 Developers are responsible for keeping their local repository up-to-date with "master".
1212 They are also responsible for straightening out any conflicts that might arise within files
1213 that are being worked on simultaneously by more than one person.
1214 All this work is done locally on the developer’s machines before anything is pushed to a
1215 "contrib" area and examined at the maintainer’s level.
1216 </para>
1217
1218 <para>
1219 A somewhat formal method exists by which developers commit changes and push them into the
1220 "contrib" area and subsequently request that the maintainer include them into "master"
1221 This process is called “submitting a patch” or "submitting a change."
1222 For information on submitting patches and changes, see the
1223 "<link linkend='how-to-submit-a-change'>How to Submit a Change</link>" section.
1224 </para>
1225
1226 <para>
1227 To summarize the environment: a single point of entry exists for
1228 changes into the project’s "master" branch of the Git repository,
1229 which is controlled by the project’s maintainer.
1230 And, a set of developers exist who independently develop, test, and
1231 submit changes to "contrib" areas for the maintainer to examine.
1232 The maintainer then chooses which changes are going to become a
1233 permanent part of the project.
1234 </para>
1235
1236 <para>
1237 <imagedata fileref="figures/git-workflow.png" width="6in" depth="3in" align="left" scalefit="1" />
1238 </para>
1239
1240 <para>
1241 While each development environment is unique, there are some best practices or methods
1242 that help development run smoothly.
1243 The following list describes some of these practices.
1244 For more information about Git workflows, see the workflow topics in the
1245 <ulink url='http://book.git-scm.com'>Git Community Book</ulink>.
1246 <itemizedlist>
1247 <listitem><para><emphasis>Make Small Changes:</emphasis> It is best to keep the changes you commit
1248 small as compared to bundling many disparate changes into a single commit.
1249 This practice not only keeps things manageable but also allows the maintainer
1250 to more easily include or refuse changes.</para>
1251 <para>It is also good practice to leave the repository in a state that allows you to
1252 still successfully build your project. In other words, do not commit half of a feature,
1253 then add the other half as a separate, later commit.
1254 Each commit should take you from one buildable project state to another
1255 buildable state.</para></listitem>
1256 <listitem><para><emphasis>Use Branches Liberally:</emphasis> It is very easy to create, use, and
1257 delete local branches in your working Git repository.
1258 You can name these branches anything you like.
1259 It is helpful to give them names associated with the particular feature or change
1260 on which you are working.
1261 Once you are done with a feature or change and have merged it
1262 into your local master branch, simply discard the temporary
1263 branch.</para></listitem>
1264 <listitem><para><emphasis>Merge Changes:</emphasis> The <filename>git merge</filename>
1265 command allows you to take the
1266 changes from one branch and fold them into another branch.
1267 This process is especially helpful when more than a single developer might be working
1268 on different parts of the same feature.
1269 Merging changes also automatically identifies any collisions or "conflicts"
1270 that might happen as a result of the same lines of code being altered by two different
1271 developers.</para></listitem>
1272 <listitem><para><emphasis>Manage Branches:</emphasis> Because branches are easy to use, you should
1273 use a system where branches indicate varying levels of code readiness.
1274 For example, you can have a "work" branch to develop in, a "test" branch where the code or
1275 change is tested, a "stage" branch where changes are ready to be committed, and so forth.
1276 As your project develops, you can merge code across the branches to reflect ever-increasing
1277 stable states of the development.</para></listitem>
1278 <listitem><para><emphasis>Use Push and Pull:</emphasis> The push-pull workflow is based on the
1279 concept of developers "pushing" local commits to a remote repository, which is
1280 usually a contribution repository.
1281 This workflow is also based on developers "pulling" known states of the project down into their
1282 local development repositories.
1283 The workflow easily allows you to pull changes submitted by other developers from the
1284 upstream repository into your work area ensuring that you have the most recent software
1285 on which to develop.
1286 The Yocto Project has two scripts named <filename>create-pull-request</filename> and
1287 <filename>send-pull-request</filename> that ship with the release to facilitate this
1288 workflow.
1289 You can find these scripts in the <filename>scripts</filename>
1290 folder of the
1291 <link linkend='source-directory'>Source Directory</link>.
1292 For information on how to use these scripts, see the
1293 "<link linkend='pushing-a-change-upstream'>Using Scripts to Push a Change Upstream and Request a Pull</link>" section.
1294 </para></listitem>
1295 <listitem><para><emphasis>Patch Workflow:</emphasis> This workflow allows you to notify the
1296 maintainer through an email that you have a change (or patch) you would like considered
1297 for the "master" branch of the Git repository.
1298 To send this type of change, you format the patch and then send the email using the Git commands
1299 <filename>git format-patch</filename> and <filename>git send-email</filename>.
1300 For information on how to use these scripts, see the
1301 "<link linkend='how-to-submit-a-change'>How to Submit a Change</link>"
1302 section.
1303 </para></listitem>
1304 </itemizedlist>
1305 </para>
1306</section>
1307
1308<section id='tracking-bugs'>
1309 <title>Tracking Bugs</title>
1310
1311 <para>
1312 The Yocto Project uses its own implementation of
1313 <ulink url='http://www.bugzilla.org/about/'>Bugzilla</ulink> to track bugs.
1314 Implementations of Bugzilla work well for group development because they track bugs and code
1315 changes, can be used to communicate changes and problems with developers, can be used to
1316 submit and review patches, and can be used to manage quality assurance.
1317 The home page for the Yocto Project implementation of Bugzilla is
1318 <ulink url='&YOCTO_BUGZILLA_URL;'>&YOCTO_BUGZILLA_URL;</ulink>.
1319 </para>
1320
1321 <para>
1322 Sometimes it is helpful to submit, investigate, or track a bug against the Yocto Project itself
1323 such as when discovering an issue with some component of the build system that acts contrary
1324 to the documentation or your expectations.
1325 Following is the general procedure for submitting a new bug using the Yocto Project
1326 Bugzilla.
1327 You can find more information on defect management, bug tracking, and feature request
1328 processes all accomplished through the Yocto Project Bugzilla on the wiki page
1329 <ulink url='&YOCTO_WIKI_URL;/wiki/Bugzilla_Configuration_and_Bug_Tracking'>here</ulink>.
1330 <orderedlist>
1331 <listitem><para>Always use the Yocto Project implementation of Bugzilla to submit
1332 a bug.</para></listitem>
1333 <listitem><para>When submitting a new bug, be sure to choose the appropriate
1334 Classification, Product, and Component for which the issue was found.
1335 Defects for the Yocto Project fall into one of seven classifications:
1336 Yocto Project Components, Infrastructure, Build System &amp; Metadata,
1337 Documentation, QA/Testing, Runtime and Hardware.
1338 Each of these Classifications break down into multiple Products and, in some
1339 cases, multiple Components.</para></listitem>
1340 <listitem><para>Use the bug form to choose the correct Hardware and Architecture
1341 for which the bug applies.</para></listitem>
1342 <listitem><para>Indicate the Yocto Project version you were using when the issue
1343 occurred.</para></listitem>
1344 <listitem><para>Be sure to indicate the Severity of the bug.
1345 Severity communicates how the bug impacted your work.</para></listitem>
1346 <listitem><para>Select the appropriate "Documentation change" item
1347 for the bug.
1348 Fixing a bug may or may not affect the Yocto Project
1349 documentation.</para></listitem>
1350 <listitem><para>Provide a brief summary of the issue.
1351 Try to limit your summary to just a line or two and be sure to capture the
1352 essence of the issue.</para></listitem>
1353 <listitem><para>Provide a detailed description of the issue.
1354 You should provide as much detail as you can about the context, behavior, output,
1355 and so forth that surrounds the issue.
1356 You can even attach supporting files for output from logs by
1357 using the "Add an attachment" button.</para></listitem>
1358 <listitem><para>Be sure to copy the appropriate people in the
1359 "CC List" for the bug.
1360 See the "<link linkend='how-to-submit-a-change'>How to Submit a Change</link>"
1361 section for information about finding out who is responsible
1362 for code.</para></listitem>
1363 <listitem><para>Submit the bug by clicking the "Submit Bug" button.</para></listitem>
1364 </orderedlist>
1365 </para>
1366</section>
1367
1368<section id='how-to-submit-a-change'>
1369 <title>How to Submit a Change</title>
1370
1371 <para>
1372 Contributions to the Yocto Project and OpenEmbedded are very welcome.
1373 Because the system is extremely configurable and flexible, we recognize that developers
1374 will want to extend, configure or optimize it for their specific uses.
1375 You should send patches to the appropriate mailing list so that they
1376 can be reviewed and merged by the appropriate maintainer.
1377 </para>
1378
1379 <para>
1380 Before submitting any change, be sure to find out who you should be
1381 notifying.
1382 Several methods exist through which you find out who you should be copying
1383 or notifying:
1384 <itemizedlist>
1385 <listitem><para><emphasis>Maintenance File:</emphasis>
1386 Examine the <filename>maintainers.inc</filename> file, which is
1387 located in the
1388 <link linkend='source-directory'>Source Directory</link>
1389 at <filename>meta-yocto/conf/distro/include</filename>, to
1390 see who is responsible for code.
1391 </para></listitem>
1392 <listitem><para><emphasis>Board Support Package (BSP) README Files:</emphasis>
1393 For BSP maintainers of supported BSPs, you can examine
1394 individual BSP <filename>README</filename> files.
1395 In addition, some layers (such as the <filename>meta-intel</filename> layer),
1396 include a <filename>MAINTAINERS</filename> file which contains
1397 a list of all supported BSP maintainers for that layer.
1398 </para></listitem>
1399 <listitem><para><emphasis>Search by File:</emphasis>
1400 Using <link linkend='git'>Git</link>, you can enter the
1401 following command to bring up a short list of all commits
1402 against a specific file:
1403 <literallayout class='monospaced'>
1404 git shortlog -- <replaceable>filename</replaceable>
1405 </literallayout>
1406 Just provide the name of the file for which you are interested.
1407 The information returned is not ordered by history but does
1408 include a list of all committers grouped by name.
1409 From the list, you can see who is responsible for the bulk of
1410 the changes against the file.
1411 </para></listitem>
1412 </itemizedlist>
1413 </para>
1414
1415 <para>
1416 For a list of the Yocto Project and related mailing lists, see the
1417 "<ulink url='&YOCTO_DOCS_REF_URL;#resources-mailinglist'>Mailing lists</ulink>" section in
1418 the Yocto Project Reference Manual.
1419 </para>
1420
1421 <para>
1422 Here is some guidance on which mailing list to use for what type of change:
1423 <itemizedlist>
1424 <listitem><para>For changes to the core
1425 <link linkend='metadata'>Metadata</link>, send your patch to the
1426 <ulink url='&OE_LISTS_URL;/listinfo/openembedded-core'>openembedded-core</ulink> mailing list.
1427 For example, a change to anything under the <filename>meta</filename> or
1428 <filename>scripts</filename> directories
1429 should be sent to this mailing list.</para></listitem>
1430 <listitem><para>For changes to BitBake (anything under the <filename>bitbake</filename>
1431 directory), send your patch to the
1432 <ulink url='&OE_LISTS_URL;/listinfo/bitbake-devel'>bitbake-devel</ulink> mailing list.</para></listitem>
1433 <listitem><para>For changes to <filename>meta-yocto</filename>, send your patch to the
1434 <ulink url='&YOCTO_LISTS_URL;/listinfo/poky'>poky</ulink> mailing list.</para></listitem>
1435 <listitem><para>For changes to other layers hosted on
1436 <filename>yoctoproject.org</filename> (unless the
1437 layer's documentation specifies otherwise), tools, and Yocto Project
1438 documentation, use the
1439 <ulink url='&YOCTO_LISTS_URL;/listinfo/yocto'>yocto</ulink> mailing list.</para></listitem>
1440 <listitem><para>For additional recipes that do not fit into the core Metadata,
1441 you should determine which layer the recipe should go into and submit the
1442 change in the manner recommended by the documentation (e.g. README) supplied
1443 with the layer. If in doubt, please ask on the
1444 <ulink url='&YOCTO_LISTS_URL;/listinfo/yocto'>yocto</ulink> or
1445 <ulink url='&OE_LISTS_URL;/listinfo/openembedded-devel'>openembedded-devel</ulink>
1446 mailing lists.</para></listitem>
1447 </itemizedlist>
1448 </para>
1449
1450 <para>
1451 When you send a patch, be sure to include a "Signed-off-by:"
1452 line in the same style as required by the Linux kernel.
1453 Adding this line signifies that you, the submitter, have agreed to the Developer's Certificate of Origin 1.1
1454 as follows:
1455 <literallayout class='monospaced'>
1456 Developer's Certificate of Origin 1.1
1457
1458 By making a contribution to this project, I certify that:
1459
1460 (a) The contribution was created in whole or in part by me and I
1461 have the right to submit it under the open source license
1462 indicated in the file; or
1463
1464 (b) The contribution is based upon previous work that, to the best
1465 of my knowledge, is covered under an appropriate open source
1466 license and I have the right under that license to submit that
1467 work with modifications, whether created in whole or in part
1468 by me, under the same open source license (unless I am
1469 permitted to submit under a different license), as indicated
1470 in the file; or
1471
1472 (c) The contribution was provided directly to me by some other
1473 person who certified (a), (b) or (c) and I have not modified
1474 it.
1475
1476 (d) I understand and agree that this project and the contribution
1477 are public and that a record of the contribution (including all
1478 personal information I submit with it, including my sign-off) is
1479 maintained indefinitely and may be redistributed consistent with
1480 this project or the open source license(s) involved.
1481 </literallayout>
1482 </para>
1483
1484 <para>
1485 In a collaborative environment, it is necessary to have some sort of standard
1486 or method through which you submit changes.
1487 Otherwise, things could get quite chaotic.
1488 One general practice to follow is to make small, controlled changes.
1489 Keeping changes small and isolated aids review, makes merging/rebasing easier
1490 and keeps the change history clean when anyone needs to refer to it in future.
1491 </para>
1492
1493 <para>
1494 When you make a commit, you must follow certain standards established by the
1495 OpenEmbedded and Yocto Project development teams.
1496 For each commit, you must provide a single-line summary of the change and you
1497 should almost always provide a more detailed description of what you did (i.e.
1498 the body of the commit message).
1499 The only exceptions for not providing a detailed description would be if your
1500 change is a simple, self-explanatory change that needs no further description
1501 beyond the summary.
1502 Here are the guidelines for composing a commit message:
1503 <itemizedlist>
1504 <listitem><para>Provide a single-line, short summary of the change.
1505 This summary is typically viewable in the "shortlist" of changes.
1506 Thus, providing something short and descriptive that gives the reader
1507 a summary of the change is useful when viewing a list of many commits.
1508 This short description should be prefixed by the recipe name (if changing a recipe), or
1509 else the short form path to the file being changed.
1510 </para></listitem>
1511 <listitem><para>For the body of the commit message, provide detailed information
1512 that describes what you changed, why you made the change, and the approach
1513 you used. It may also be helpful if you mention how you tested the change.
1514 Provide as much detail as you can in the body of the commit message.
1515 </para></listitem>
1516 <listitem><para>
1517 If the change addresses a specific bug or issue that is
1518 associated with a bug-tracking ID, include a reference to that
1519 ID in your detailed description.
1520 For example, the Yocto Project uses a specific convention for
1521 bug references - any commit that addresses a specific bug should
1522 use the following form for the detailed description:
1523 <literallayout class='monospaced'>
1524 Fixes [YOCTO #<replaceable>bug-id</replaceable>]
1525
1526 <replaceable>detailed description of change</replaceable>
1527 </literallayout></para></listitem>
1528 Where <replaceable>bug-id</replaceable> is replaced with the
1529 specific bug ID from the Yocto Project Bugzilla instance.
1530 </itemizedlist>
1531 </para>
1532
1533 <para>
1534 You can find more guidance on creating well-formed commit messages at this OpenEmbedded
1535 wiki page:
1536 <ulink url='&OE_HOME_URL;/wiki/Commit_Patch_Message_Guidelines'></ulink>.
1537 </para>
1538
1539 <para>
1540 The next two sections describe general instructions for both pushing
1541 changes upstream and for submitting changes as patches.
1542 </para>
1543
1544 <section id='pushing-a-change-upstream'>
1545 <title>Using Scripts to Push a Change Upstream and Request a Pull</title>
1546
1547 <para>
1548 The basic flow for pushing a change to an upstream "contrib" Git repository is as follows:
1549 <itemizedlist>
1550 <listitem><para>Make your changes in your local Git repository.</para></listitem>
1551 <listitem><para>Stage your changes by using the <filename>git add</filename>
1552 command on each file you changed.</para></listitem>
1553 <listitem><para>
1554 Commit the change by using the
1555 <filename>git commit</filename> command.
1556 Be sure to provide a commit message that follows the
1557 project’s commit message standards as described earlier.
1558 </para></listitem>
1559 <listitem><para>
1560 Push the change to the upstream "contrib" repository by
1561 using the <filename>git push</filename> command.
1562 </para></listitem>
1563 <listitem><para>Notify the maintainer that you have pushed a change by making a pull
1564 request.
1565 The Yocto Project provides two scripts that conveniently let you generate and send
1566 pull requests to the Yocto Project.
1567 These scripts are <filename>create-pull-request</filename> and
1568 <filename>send-pull-request</filename>.
1569 You can find these scripts in the <filename>scripts</filename> directory
1570 within the <link linkend='source-directory'>Source Directory</link>.</para>
1571 <para>Using these scripts correctly formats the requests without introducing any
1572 whitespace or HTML formatting.
1573 The maintainer that receives your patches needs to be able to save and apply them
1574 directly from your emails.
1575 Using these scripts is the preferred method for sending patches.</para>
1576 <para>For help on using these scripts, simply provide the
1577 <filename>-h</filename> argument as follows:
1578 <literallayout class='monospaced'>
1579 $ poky/scripts/create-pull-request -h
1580 $ poky/scripts/send-pull-request -h
1581 </literallayout></para></listitem>
1582 </itemizedlist>
1583 </para>
1584
1585 <para>
1586 You can find general Git information on how to push a change upstream in the
1587 <ulink url='http://book.git-scm.com/3_distributed_workflows.html'>Git Community Book</ulink>.
1588 </para>
1589 </section>
1590
1591 <section id='submitting-a-patch'>
1592 <title>Using Email to Submit a Patch</title>
1593
1594 <para>
1595 You can submit patches without using the <filename>create-pull-request</filename> and
1596 <filename>send-pull-request</filename> scripts described in the previous section.
1597 However, keep in mind, the preferred method is to use the scripts.
1598 </para>
1599
1600 <para>
1601 Depending on the components changed, you need to submit the email to a specific
1602 mailing list.
1603 For some guidance on which mailing list to use, see the list in the
1604 "<link linkend='how-to-submit-a-change'>How to Submit a Change</link>"
1605 section.
1606 For a description of the available mailing lists, see the
1607 "<ulink url='&YOCTO_DOCS_REF_URL;#resources-mailinglist'>Mailing Lists</ulink>"
1608 section in the Yocto Project Reference Manual.
1609 </para>
1610
1611 <para>
1612 Here is the general procedure on how to submit a patch through email without using the
1613 scripts:
1614 <itemizedlist>
1615 <listitem><para>Make your changes in your local Git repository.</para></listitem>
1616 <listitem><para>Stage your changes by using the <filename>git add</filename>
1617 command on each file you changed.</para></listitem>
1618 <listitem><para>Commit the change by using the
1619 <filename>git commit --signoff</filename> command.
1620 Using the <filename>--signoff</filename> option identifies you as the person
1621 making the change and also satisfies the Developer's Certificate of
1622 Origin (DCO) shown earlier.</para>
1623 <para>When you form a commit, you must follow certain standards established by the
1624 Yocto Project development team.
1625 See the earlier section
1626 "<link linkend='how-to-submit-a-change'>How to Submit a Change</link>"
1627 for Yocto Project commit message standards.</para></listitem>
1628 <listitem><para>Format the commit into an email message.
1629 To format commits, use the <filename>git format-patch</filename> command.
1630 When you provide the command, you must include a revision list or a number of patches
1631 as part of the command.
1632 For example, either of these two commands takes your most
1633 recent single commit and formats it as an email message in
1634 the current directory:
1635 <literallayout class='monospaced'>
1636 $ git format-patch -1
1637 </literallayout>
1638 or
1639 <literallayout class='monospaced'>
1640 $ git format-patch HEAD~
1641 </literallayout></para>
1642 <para>After the command is run, the current directory contains a
1643 numbered <filename>.patch</filename> file for the commit.</para>
1644 <para>If you provide several commits as part of the command,
1645 the <filename>git format-patch</filename> command produces a
1646 series of numbered files in the current directory – one for each commit.
1647 If you have more than one patch, you should also use the
1648 <filename>--cover</filename> option with the command, which generates a
1649 cover letter as the first "patch" in the series.
1650 You can then edit the cover letter to provide a description for
1651 the series of patches.
1652 For information on the <filename>git format-patch</filename> command,
1653 see <filename>GIT_FORMAT_PATCH(1)</filename> displayed using the
1654 <filename>man git-format-patch</filename> command.</para>
1655 <note>If you are or will be a frequent contributor to the Yocto Project
1656 or to OpenEmbedded, you might consider requesting a contrib area and the
1657 necessary associated rights.</note></listitem>
1658 <listitem><para>Import the files into your mail client by using the
1659 <filename>git send-email</filename> command.
1660 <note>In order to use <filename>git send-email</filename>, you must have the
1661 the proper Git packages installed.
1662 For Ubuntu, Debian, and Fedora the package is <filename>git-email</filename>.</note></para>
1663 <para>The <filename>git send-email</filename> command sends email by using a local
1664 or remote Mail Transport Agent (MTA) such as
1665 <filename>msmtp</filename>, <filename>sendmail</filename>, or through a direct
1666 <filename>smtp</filename> configuration in your Git <filename>config</filename>
1667 file.
1668 If you are submitting patches through email only, it is very important
1669 that you submit them without any whitespace or HTML formatting that
1670 either you or your mailer introduces.
1671 The maintainer that receives your patches needs to be able to save and
1672 apply them directly from your emails.
1673 A good way to verify that what you are sending will be applicable by the
1674 maintainer is to do a dry run and send them to yourself and then
1675 save and apply them as the maintainer would.</para>
1676 <para>The <filename>git send-email</filename> command is the preferred method
1677 for sending your patches since there is no risk of compromising whitespace
1678 in the body of the message, which can occur when you use your own mail client.
1679 The command also has several options that let you
1680 specify recipients and perform further editing of the email message.
1681 For information on how to use the <filename>git send-email</filename> command,
1682 see <filename>GIT-SEND-EMAIL(1)</filename> displayed using
1683 the <filename>man git-send-email</filename> command.
1684 </para></listitem>
1685 </itemizedlist>
1686 </para>
1687 </section>
1688</section>
1689</chapter>
1690<!--
1691vim: expandtab tw=80 ts=4
1692-->
diff --git a/documentation/dev-manual/dev-manual-qemu.xml b/documentation/dev-manual/dev-manual-qemu.xml
new file mode 100644
index 0000000000..739fd7104b
--- /dev/null
+++ b/documentation/dev-manual/dev-manual-qemu.xml
@@ -0,0 +1,419 @@
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-qemu'>
6
7<title>Using the Quick EMUlator (QEMU)</title>
8
9<para>
10 Quick EMUlator (QEMU) is an Open Source project the Yocto Project uses
11 as part of its development "tool set".
12 As such, the information in this chapter is limited to the
13 Yocto Project integration of QEMU and not QEMU in general.
14 For official information and documentation on QEMU, see the
15 following references:
16 <itemizedlist>
17 <listitem><para><emphasis><ulink url='http://wiki.qemu.org/Main_Page'>QEMU Website</ulink>:</emphasis>
18 The official website for the QEMU Open Source project.
19 </para></listitem>
20 <listitem><para><emphasis><ulink url='http://wiki.qemu.org/Manual'>Documentation</ulink>:</emphasis>
21 The QEMU user manual.
22 </para></listitem>
23 </itemizedlist>
24</para>
25
26<para>
27 This chapter provides an overview of the Yocto Project's integration of
28 QEMU, a description of how you use QEMU and its various options, running
29 under a Network File System (NFS) server, and a few tips and tricks you
30 might find helpful when using QEMU.
31</para>
32
33<section id='qemu-overview'>
34 <title>Overview</title>
35
36 <para>
37 Within the context of the Yocto Project, QEMU is an
38 emulator and virtualization machine that allows you to run a complete
39 image you have built using the Yocto Project as just another task
40 on your build system.
41 QEMU is useful for running and testing images and applications on
42 supported Yocto Project architectures without having actual hardware.
43 Among other things, the Yocto Project uses QEMU to run automated
44 Quality Assurance (QA) tests on final images shipped with each
45 release.
46 </para>
47
48 <para>
49 QEMU is made available with the Yocto Project a number of ways.
50 The easiest and recommended method for getting QEMU is to run the
51 ADT installer. For more information on how to make sure you have
52 QEMU available, see the
53 "<ulink url='&YOCTO_DOCS_ADT_URL;#the-qemu-emulator'>The QEMU Emulator</ulink>"
54 section in the Yocto Project Application Developer's Guide.
55 </para>
56</section>
57
58<section id='qemu-running-qemu'>
59 <title>Running QEMU</title>
60
61 <para>
62 Running QEMU involves having your build environment set up, having the
63 right artifacts available, and understanding how to use the many
64 options that are available to you when you start QEMU using the
65 <filename>runqemu</filename> command.
66 </para>
67
68 <section id='qemu-setting-up-the-environment'>
69 <title>Setting Up the Environment</title>
70
71 <para>
72 You run QEMU in the same environment from which you run BitBake.
73 This means you need to source a build environment script (i.e.
74 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
75 or
76 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>).
77 </para>
78 </section>
79
80 <section id='qemu-using-the-runqemu-command'>
81 <title>Using the <filename>runqemu</filename> Command</title>
82
83 <para>
84 The basic <filename>runqemu</filename> command syntax is as
85 follows:
86 <literallayout class='monospaced'>
87 $ runqemu [<replaceable>option</replaceable> ] [...]
88 </literallayout>
89 Based on what you provide on the command line,
90 <filename>runqemu</filename> does a good job of figuring out what
91 you are trying to do.
92 For example, by default, QEMU looks for the most recently built
93 image according to the timestamp when it needs to look for an
94 image.
95 Minimally, through the use of options, you must provide either
96 a machine name, a virtual machine image
97 (<filename>*.vmdk</filename>), or a kernel image
98 (<filename>*.bin</filename>).
99 </para>
100
101 <para>
102 Following is a description of <filename>runqemu</filename>
103 options you can provide on the command line:
104 <note><title>Tip</title>
105 If you do provide some "illegal" option combination or perhaps
106 you do not provide enough in the way of options,
107 <filename>runqemu</filename> provides appropriate error
108 messaging to help you correct the problem.
109 </note>
110 <itemizedlist>
111 <listitem><para><replaceable>QEMUARCH</replaceable>:
112 The QEMU machine architecture, which must be "qemux86",
113 "qemux86-64", "qemuarm", "qemumips", "qemumipsel",
114 “qemumips64", "qemush4", "qemuppc", "qemumicroblaze",
115 or "qemuzynq".
116 </para></listitem>
117 <listitem><para><filename><replaceable>VM</replaceable></filename>:
118 The virtual machine image, which must be a
119 <filename>.vmdk</filename> file.
120 Use this option when you want to boot a
121 <filename>.vmdk</filename> image.
122 The image filename you provide must contain one of the
123 following strings: "qemux86-64", "qemux86", "qemuarm",
124 "qemumips64", "qemumips", "qemuppc", or "qemush4".
125 </para></listitem>
126 <listitem><para><replaceable>ROOTFS</replaceable>:
127 A root filesystem that has one of the following
128 filetype extensions: "ext2", "ext3", "ext4", "jffs2",
129 "nfs", or "btrfs".
130 If the filename you provide for this option uses “nfs”, it
131 must provide an explicit root filesystem path.
132 </para></listitem>
133 <listitem><para><replaceable>KERNEL</replaceable>:
134 A kernel image, which is a <filename>.bin</filename> file.
135 When you provide a <filename>.bin</filename> file,
136 <filename>runqemu</filename> detects it and assumes the
137 file is a kernel image.
138 </para></listitem>
139 <listitem><para><replaceable>MACHINE</replaceable>:
140 The architecture of the QEMU machine, which must be one
141 of the following: "qemux86",
142 "qemux86-64", "qemuarm", "qemumips", "qemumipsel",
143 “qemumips64", "qemush4", "qemuppc", "qemumicroblaze",
144 or "qemuzynq".
145 The <replaceable>MACHINE</replaceable> and
146 <replaceable>QEMUARCH</replaceable> options are basically
147 identical.
148 If you do not provide a <replaceable>MACHINE</replaceable>
149 option, <filename>runqemu</filename> tries to determine
150 it based on other options.
151 </para></listitem>
152 <listitem><para><filename>ramfs</filename>:
153 Indicates you are booting an initial RAM disk (initramfs)
154 image, which means the <filename>FSTYPE</filename> is
155 <filename>cpio.gz</filename>.
156 </para></listitem>
157 <listitem><para><filename>iso</filename>:
158 Indicates you are booting an ISO image, which means the
159 <filename>FSTYPE</filename> is
160 <filename>.iso</filename>.
161 </para></listitem>
162 <listitem><para><filename>nographic</filename>:
163 Disables the video console, which sets the console to
164 "ttys0".
165 </para></listitem>
166 <listitem><para><filename>serial</filename>:
167 Enables a serial console on
168 <filename>/dev/ttyS0</filename>.
169 </para></listitem>
170 <listitem><para><filename>biosdir</filename>:
171 Establishes a custom directory for BIOS, VGA BIOS and
172 keymaps.
173 </para></listitem>
174 <listitem><para><filename>qemuparams=\"<replaceable>xyz</replaceable>\"</filename>:
175 Specifies custom QEMU parameters.
176 Use this option to pass options other than the simple
177 "kvm" and "serial" options.
178 </para></listitem>
179 <listitem><para><filename>bootparams=\"<replaceable>xyz</replaceable>\"</filename>:
180 Specifies custom boot parameters for the kernel.
181 </para></listitem>
182 <listitem><para><filename>audio</filename>:
183 Enables audio in QEMU.
184 The <replaceable>MACHINE</replaceable> option must be
185 either "qemux86" or "qemux86-64" in order for audio to be
186 enabled.
187 Additionally, the <filename>snd_intel8x0</filename>
188 or <filename>snd_ens1370</filename> driver must be
189 installed in linux guest.
190 </para></listitem>
191 <listitem><para><filename>slirp</filename>:
192 Enables "slirp" networking, which is a different way
193 of networking that does not need root access
194 but also is not as easy to use or comprehensive
195 as the default.
196 </para></listitem>
197 <listitem><para><filename>kvm</filename>:
198 Enables KVM when running "qemux86" or "qemux86-64"
199 QEMU architectures.
200 For KVM to work, all the following conditions must be met:
201 <itemizedlist>
202 <listitem><para>
203 Your <replaceable>MACHINE</replaceable> must be either
204 "qemux86" or "qemux86-64".
205 </para></listitem>
206 <listitem><para>
207 Your build host has to have the KVM modules
208 installed, which are
209 <filename>/dev/kvm</filename>.
210 </para></listitem>
211 <listitem><para>
212 Your build host has to have virtio net device, which
213 are <filename>/dev/vhost-net</filename>.
214 </para></listitem>
215 <listitem><para>
216 The build host <filename>/dev/kvm</filename>
217 directory has to be both writable and readable.
218 </para></listitem>
219 <listitem><para>
220 The build host <filename>/dev/vhost-net</filename>
221 directory has to be either readable or writable
222 and “slirp-enabled”.
223 </para></listitem>
224 </itemizedlist>
225 </para></listitem>
226 <listitem><para><filename>publicvnc</filename>:
227 Enables a VNC server open to all hosts.
228 </para></listitem>
229 </itemizedlist>
230 </para>
231
232 <para>
233 For further understanding regarding option use with
234 <filename>runqemu</filename>, consider some examples.
235 </para>
236
237 <para>
238 This example starts QEMU with
239 <replaceable>MACHINE</replaceable> set to "qemux86".
240 Assuming a standard
241 <link linkend='build-directory'>Build Directory</link>,
242 <filename>runqemu</filename> automatically finds the
243 <filename>bzImage-qemux86.bin</filename> image file and
244 the
245 <filename>core-image-minimal-qemux86-20140707074611.rootfs.ext3</filename>
246 (assuming the current build created a
247 <filename>core-image-minimal</filename> image).
248 <note>
249 When more than one image with the same name exists, QEMU finds
250 and uses the most recently built image according to the
251 timestamp.
252 </note>
253 <literallayout class='monospaced'>
254 $ runqemu qemux86
255 </literallayout>
256 This example produces the exact same results as the
257 previous example.
258 This command, however, specifically provides the image
259 and root filesystem type.
260 <literallayout class='monospaced'>
261 $ runqemu qemux86 core-image-minimal ext3
262 </literallayout>
263 This example specifies to boot an initial RAM disk image
264 and to enable audio in QEMU.
265 For this case, <filename>runqemu</filename> set the
266 internal variable <filename>FSTYPE</filename> to
267 "cpio.gz".
268 Also, for audio to be enabled, an appropriate driver must
269 be installed (see the previous description for the
270 <filename>audio</filename> option for more information).
271 <literallayout class='monospaced'>
272 $ runqemu qemux86 ramfs audio
273 </literallayout>
274 This example does not provide enough information for
275 QEMU to launch.
276 While the command does provide a root filesystem type, it
277 must also minimally provide a
278 <replaceable>MACHINE</replaceable>,
279 <replaceable>KERNEL</replaceable>, or
280 <replaceable>VM</replaceable> option.
281 <literallayout class='monospaced'>
282 $ runqemu ext3
283 </literallayout>
284 This example specifies to boot a virtual machine image
285 (<filename>.vmdk</filename> file).
286 From the <filename>.vmdk</filename>,
287 <filename>runqemu</filename> determines the QEMU
288 architecture (<replaceable>MACHINE</replaceable>) to be
289 "qemux86" and the root filesystem type to be "vmdk".
290 <literallayout class='monospaced'>
291 $ runqemu /home/scott-lenovo/vm/core-image-minimal-qemux86.vmdk
292 </literallayout>
293 </para>
294 </section>
295</section>
296
297<section id='qemu-running-under-a-network-file-system-nfs-server'>
298 <title>Running Under a Network File System (NFS) Server</title>
299
300 <para>
301 One method for running QEMU is to run it on an NFS server.
302 This is useful when you need to access the same file system from both
303 the build and the emulated system at the same time.
304 It is also worth noting that the system does not need root privileges
305 to run.
306 It uses a user space NFS server to avoid that.
307 This section describes how to set up for running QEMU using an NFS
308 server and then how you can start and stop the server.
309 </para>
310
311 <section id='qemu-setting-up-to-use-nfs'>
312 <title>Setting Up to Use NFS</title>
313
314 <para>
315 Once you are able to run QEMU in your environment, you can use the
316 <filename>runqemu-extract-sdk</filename> script, which is located
317 in the <filename>scripts</filename> directory along with
318 <filename>runqemu</filename> script.
319 The <filename>runqemu-extract-sdk</filename> takes a root
320 file system tarball and extracts it into a location that you
321 specify.
322 Then, when you run <filename>runqemu</filename>, you can specify
323 the location that has the file system to pass it to QEMU.
324 Here is an example that takes a file system and extracts it to
325 a directory named <filename>test-nfs</filename>:
326 <literallayout class='monospaced'>
327 runqemu-extract-sdk ./tmp/deploy/images/qemux86/core-image-sato-qemux86.tar.bz2 test-nfs
328 </literallayout>
329 Once you have extracted the file system, you can run
330 <filename>runqemu</filename> normally with the additional
331 location of the file system.
332 You can then also make changes to the files within
333 <filename>./test-nfs</filename> and see those changes appear in the
334 image in real time.
335 Here is an example using the <filename>qemux86</filename> image:
336 <literallayout class='monospaced'>
337 runqemu qemux86 ./test-nfs
338 </literallayout>
339 </para>
340 </section>
341
342 <section id='qemu-starting-and-stopping-nfs'>
343 <title>Starting and Stopping NFS</title>
344
345 <para>
346 You can manually start and stop the NFS share using these
347 commands:
348 <itemizedlist>
349 <listitem><para><emphasis><filename>start</filename>:</emphasis>
350 Starts the NFS share:
351 <literallayout class='monospaced'>
352 runqemu-export-rootfs start <replaceable>file-system-location</replaceable>
353 </literallayout>
354 </para></listitem>
355 <listitem><para><emphasis><filename>stop</filename>:</emphasis>
356 Stops the NFS share:
357 <literallayout class='monospaced'>
358 runqemu-export-rootfs stop <replaceable>file-system-location</replaceable>
359 </literallayout>
360 </para></listitem>
361 <listitem><para><emphasis><filename>restart</filename>:</emphasis>
362 Restarts the NFS share:
363 <literallayout class='monospaced'>
364 runqemu-export-rootfs restart <replaceable>file-system-location</replaceable>
365 </literallayout>
366 </para></listitem>
367 </itemizedlist>
368 </para>
369 </section>
370</section>
371
372<section id='qemu-tips-and-tricks'>
373 <title>Tips and Tricks</title>
374
375 <para>
376 The following list describes things you can do to make running QEMU
377 in the context of the Yocto Project a better experience:
378 <itemizedlist>
379 <listitem><para><emphasis>Switching Between Consoles:</emphasis>
380 When booting or running QEMU, you can switch between
381 supported consoles by using
382 Ctrl+Alt+<replaceable>number</replaceable>.
383 For example, Ctrl+Alt+3 switches you to the serial console as
384 long as that console is enabled.
385 Being able to switch consoles is helpful, for example, if the
386 main QEMU console breaks for some reason.
387 <note>
388 Usually, "2" gets you to the main console and "3" gets you
389 to the serial console.
390 </note>
391 </para></listitem>
392 <listitem><para><emphasis>Removing the Splash Screen:</emphasis>
393 You can remove the splash screen when QEMU is booting by
394 using Alt+left.
395 Removing the splash screen allows you to see what is happening
396 in the background.
397 </para></listitem>
398 <listitem><para><emphasis>Disabling the Cursor Grab:</emphasis>
399 The default QEMU integration captures the cursor within the
400 main window.
401 It does this since standard mouse devices only provide relative
402 input and not absolute coordinates.
403 You then have to break out of the grab using the "Ctrl+Alt" key
404 combination.
405 However, the Yocto Project's integration of QEMU enables the
406 wacom USB touch pad driver by default to allow input of absolute
407 coordinates.
408 This default means that the mouse can enter and leave the
409 main window without the grab taking effect leading to a better
410 user experience.
411 </para></listitem>
412 </itemizedlist>
413 </para>
414</section>
415
416</chapter>
417<!--
418vim: expandtab tw=80 ts=4
419-->
diff --git a/documentation/dev-manual/dev-manual-start.xml b/documentation/dev-manual/dev-manual-start.xml
new file mode 100644
index 0000000000..61434ff72c
--- /dev/null
+++ b/documentation/dev-manual/dev-manual-start.xml
@@ -0,0 +1,418 @@
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.
93 The preferred method is to create a clone of the repository.
94 </para>
95 <para>Working from a copy of the upstream repository allows you
96 to contribute back into the Yocto Project or simply work with
97 the latest software on a development branch.
98 Because Git maintains and creates an upstream repository with
99 a complete history of changes and you are working with a local
100 clone of that repository, you have access to all the Yocto
101 Project development branches and tag names used in the upstream
102 repository.</para>
103 <note>You can view the Yocto Project Source Repositories at
104 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink>
105 </note>
106 <para>The following transcript shows how to clone the
107 <filename>poky</filename> Git repository into the current
108 working directory.
109 The command creates the local repository in a directory
110 named <filename>poky</filename>.
111 For information on Git used within the Yocto Project, see
112 the "<link linkend='git'>Git</link>" section.
113 <literallayout class='monospaced'>
114 $ git clone git://git.yoctoproject.org/poky
115 Cloning into 'poky'...
116 remote: Counting objects: 226790, done.
117 remote: Compressing objects: 100% (57465/57465), done.
118 remote: Total 226790 (delta 165212), reused 225887 (delta 164327)
119 Receiving objects: 100% (226790/226790), 100.98 MiB | 263 KiB/s, done.
120 Resolving deltas: 100% (165212/165212), done.
121 </literallayout></para>
122 <para>For another example of how to set up your own local Git
123 repositories, see this
124 <ulink url='&YOCTO_WIKI_URL;/wiki/Transcript:_from_git_checkout_to_meta-intel_BSP'>
125 wiki page</ulink>, which describes how to create local
126 Git repositories for both
127 <filename>poky</filename> and <filename>meta-intel</filename>.
128 </para></listitem>
129 <listitem id='local-kernel-files'><para><emphasis>Yocto Project Kernel:</emphasis>
130 If you are going to be making modifications to a supported Yocto Project kernel, you
131 need to establish local copies of the source.
132 You can find Git repositories of supported Yocto Project kernels organized under
133 "Yocto Linux Kernel" in the Yocto Project Source Repositories at
134 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink>.</para>
135 <para>This setup can involve creating a bare clone of the Yocto Project kernel and then
136 copying that cloned repository.
137 You can create the bare clone and the copy of the bare clone anywhere you like.
138 For simplicity, it is recommended that you create these structures outside of the
139 Source Directory, which is usually named <filename>poky</filename>.</para>
140 <para>As an example, the following transcript shows how to create the bare clone
141 of the <filename>linux-yocto-3.10</filename> kernel and then create a copy of
142 that clone.
143 <note>When you have a local Yocto Project kernel Git repository, you can
144 reference that repository rather than the upstream Git repository as
145 part of the <filename>clone</filename> command.
146 Doing so can speed up the process.</note></para>
147 <para>In the following example, the bare clone is named
148 <filename>linux-yocto-3.10.git</filename>, while the
149 copy is named <filename>my-linux-yocto-3.10-work</filename>:
150 <literallayout class='monospaced'>
151 $ git clone --bare git://git.yoctoproject.org/linux-yocto-3.10 linux-yocto-3.10.git
152 Cloning into bare repository 'linux-yocto-3.10.git'...
153 remote: Counting objects: 3364487, done.
154 remote: Compressing objects: 100% (507178/507178), done.
155 remote: Total 3364487 (delta 2827715), reused 3364481 (delta 2827709)
156 Receiving objects: 100% (3364487/3364487), 722.95 MiB | 423 KiB/s, done.
157 Resolving deltas: 100% (2827715/2827715), done.
158 </literallayout></para>
159 <para>Now create a clone of the bare clone just created:
160 <literallayout class='monospaced'>
161 $ git clone linux-yocto-3.10.git my-linux-yocto-3.10-work
162 Cloning into 'my-linux-yocto-3.10-work'...
163 done.
164 </literallayout></para></listitem>
165 <listitem id='meta-yocto-kernel-extras-repo'><para><emphasis>
166 The <filename>meta-yocto-kernel-extras</filename> Git Repository</emphasis>:
167 The <filename>meta-yocto-kernel-extras</filename> Git repository contains Metadata needed
168 only if you are modifying and building the kernel image.
169 In particular, it contains the kernel BitBake append (<filename>.bbappend</filename>)
170 files that you
171 edit to point to your locally modified kernel source files and to build the kernel
172 image.
173 Pointing to these local files is much more efficient than requiring a download of the
174 kernel's source files from upstream each time you make changes to the kernel.</para>
175 <para>You can find the <filename>meta-yocto-kernel-extras</filename> Git Repository in the
176 "Yocto Metadata Layers" area of the Yocto Project Source Repositories at
177 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink>.
178 It is good practice to create this Git repository inside the Source Directory.</para>
179 <para>Following is an example that creates the <filename>meta-yocto-kernel-extras</filename> Git
180 repository inside the Source Directory, which is named <filename>poky</filename>
181 in this case:
182 <literallayout class='monospaced'>
183 $ cd ~/poky
184 $ git clone git://git.yoctoproject.org/meta-yocto-kernel-extras meta-yocto-kernel-extras
185 Cloning into 'meta-yocto-kernel-extras'...
186 remote: Counting objects: 727, done.
187 remote: Compressing objects: 100% (452/452), done.
188 remote: Total 727 (delta 260), reused 719 (delta 252)
189 Receiving objects: 100% (727/727), 536.36 KiB | 240 KiB/s, done.
190 Resolving deltas: 100% (260/260), done.
191 </literallayout></para></listitem>
192 <listitem><para id='supported-board-support-packages-(bsps)'><emphasis>Supported Board Support Packages (BSPs):</emphasis>
193 The Yocto Project supports many BSPs, which are maintained in
194 their own layers or in layers designed to contain several
195 BSPs.
196 To get an idea of machine support through BSP layers, you can
197 look at the
198 <ulink url='&YOCTO_RELEASE_DL_URL;/machines'>index of machines</ulink>
199 for the release.</para>
200
201 <para>The Yocto Project uses the following BSP layer naming
202 scheme:
203 <literallayout class='monospaced'>
204 meta-<replaceable>bsp_name</replaceable>
205 </literallayout>
206 where <replaceable>bsp_name</replaceable> is the recognized
207 BSP name.
208 Here are some examples:
209 <literallayout class='monospaced'>
210 meta-crownbay
211 meta-emenlow
212 meta-n450
213 </literallayout>
214 See the
215 "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>"
216 section in the Yocto Project Board Support Package (BSP)
217 Developer's Guide for more information on BSP Layers.</para>
218
219 <para>A useful Git repository released with the Yocto
220 Project is <filename>meta-intel</filename>, which is a
221 parent layer that contains many supported
222 <ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>.
223 You can locate the <filename>meta-intel</filename> Git
224 repository in the "Yocto Metadata Layers" area of the Yocto
225 Project Source Repositories at
226 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink>.</para>
227
228 <para>Using
229 <link linkend='git'>Git</link> to create a local clone of the
230 upstream repository can be helpful if you are working with
231 BSPs.
232 Typically, you set up the <filename>meta-intel</filename>
233 Git repository inside the Source Directory.
234 For example, the following transcript shows the steps to clone
235 <filename>meta-intel</filename>.
236 <note>
237 Be sure to work in the <filename>meta-intel</filename>
238 branch that matches your
239 <link linkend='source-directory'>Source Directory</link>
240 (i.e. <filename>poky</filename>) branch.
241 For example, if you have checked out the "master" branch
242 of <filename>poky</filename> and you are going to use
243 <filename>meta-intel</filename>, be sure to checkout the
244 "master" branch of <filename>meta-intel</filename>.
245 </note>
246 <literallayout class='monospaced'>
247 $ cd ~/poky
248 $ git clone git://git.yoctoproject.org/meta-intel.git
249 Cloning into 'meta-intel'...
250 remote: Counting objects: 8844, done.
251 remote: Compressing objects: 100% (2864/2864), done.
252 remote: Total 8844 (delta 4931), reused 8780 (delta 4867)
253 Receiving objects: 100% (8844/8844), 2.48 MiB | 264 KiB/s, done.
254 Resolving deltas: 100% (4931/4931), done.
255 </literallayout></para>
256
257 <para>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 You can learn more about using QEMU with the Yocto Project in the
354 "<link linkend='dev-manual-qemu'>Using the Quick EMUlator (QEMU)</link>"
355 section.
356 </para>
357
358 <para>
359 Using QEMU to emulate your hardware can result in speed issues
360 depending on the target and host architecture mix.
361 For example, using the <filename>qemux86</filename> image in the emulator
362 on an Intel-based 32-bit (x86) host machine is fast because the target and
363 host architectures match.
364 On the other hand, using the <filename>qemuarm</filename> image on the same Intel-based
365 host can be slower.
366 But, you still achieve faithful emulation of ARM-specific issues.
367 </para>
368
369 <para>
370 To speed things up, the QEMU images support using <filename>distcc</filename>
371 to call a cross-compiler outside the emulated system.
372 If you used <filename>runqemu</filename> to start QEMU, and the
373 <filename>distccd</filename> application is present on the host system, any
374 BitBake cross-compiling toolchain available from the build system is automatically
375 used from within QEMU simply by calling <filename>distcc</filename>.
376 You can accomplish this by defining the cross-compiler variable
377 (e.g. <filename>export CC="distcc"</filename>).
378 Alternatively, if you are using a suitable SDK image or the appropriate
379 stand-alone toolchain is present,
380 the toolchain is also automatically used.
381 </para>
382
383 <note>
384 Several mechanisms exist that let you connect to the system running on the
385 QEMU emulator:
386 <itemizedlist>
387 <listitem><para>QEMU provides a framebuffer interface that makes standard
388 consoles available.</para></listitem>
389 <listitem><para>Generally, headless embedded devices have a serial port.
390 If so, you can configure the operating system of the running image
391 to use that port to run a console.
392 The connection uses standard IP networking.</para></listitem>
393 <listitem><para>
394 SSH servers exist in some QEMU images.
395 The <filename>core-image-sato</filename> QEMU image has a
396 Dropbear secure shell (SSH) server that runs with the root
397 password disabled.
398 The <filename>core-image-full-cmdline</filename> and
399 <filename>core-image-lsb</filename> QEMU images
400 have OpenSSH instead of Dropbear.
401 Including these SSH servers allow you to use standard
402 <filename>ssh</filename> and <filename>scp</filename> commands.
403 The <filename>core-image-minimal</filename> QEMU image,
404 however, contains no SSH server.
405 </para></listitem>
406 <listitem><para>You can use a provided, user-space NFS server to boot the QEMU session
407 using a local copy of the root filesystem on the host.
408 In order to make this connection, you must extract a root filesystem tarball by using the
409 <filename>runqemu-extract-sdk</filename> command.
410 After running the command, you must then point the <filename>runqemu</filename>
411 script to the extracted directory instead of a root filesystem image file.</para></listitem>
412 </itemizedlist>
413 </note>
414</section>
415</chapter>
416<!--
417vim: expandtab tw=80 ts=4
418-->
diff --git a/documentation/dev-manual/dev-manual.xml b/documentation/dev-manual/dev-manual.xml
new file mode 100644
index 0000000000..4e498b8201
--- /dev/null
+++ b/documentation/dev-manual/dev-manual.xml
@@ -0,0 +1,124 @@
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 <revision>
70 <revnumber>1.7</revnumber>
71 <date>October 2014</date>
72 <revremark>Released with the Yocto Project 1.7 Release.</revremark>
73 </revision>
74 <revision>
75 <revnumber>1.7.1</revnumber>
76 <date>January 2015</date>
77 <revremark>Released with the Yocto Project 1.7.1 Release.</revremark>
78 </revision>
79 <revision>
80 <revnumber>1.7.2</revnumber>
81 <date>June 2015</date>
82 <revremark>Released with the Yocto Project 1.7.2 Release.</revremark>
83 </revision>
84 </revhistory>
85
86 <copyright>
87 <year>&COPYRIGHT_YEAR;</year>
88 <holder>Linux Foundation</holder>
89 </copyright>
90
91 <legalnotice>
92 <para>
93 Permission is granted to copy, distribute and/or modify this document under
94 the terms of the <ulink type="http" url="http://creativecommons.org/licenses/by-sa/2.0/uk/">
95 Creative Commons Attribution-Share Alike 2.0 UK: England &amp; Wales</ulink> as published by
96 Creative Commons.
97 </para>
98
99 <note>
100 For the latest version of this manual associated with this
101 Yocto Project release, see the
102 <ulink url='&YOCTO_DOCS_DEV_URL;'>Yocto Project Development Manual</ulink>
103 from the Yocto Project website.
104 </note>
105 </legalnotice>
106
107 </bookinfo>
108
109 <xi:include href="dev-manual-intro.xml"/>
110
111 <xi:include href="dev-manual-start.xml"/>
112
113 <xi:include href="dev-manual-newbie.xml"/>
114
115 <xi:include href="dev-manual-model.xml"/>
116
117 <xi:include href="dev-manual-common-tasks.xml"/>
118
119 <xi:include href="dev-manual-qemu.xml"/>
120
121</book>
122<!--
123vim: expandtab tw=80 ts=4
124-->
diff --git a/documentation/dev-manual/dev-style.css b/documentation/dev-manual/dev-style.css
new file mode 100644
index 0000000000..b900ffc9b2
--- /dev/null
+++ b/documentation/dev-manual/dev-style.css
@@ -0,0 +1,984 @@
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/* This style defines how the permalink character
317 appears by itself and when hovered over with
318 the mouse. */
319
320[alt='Permalink'] { color: #eee; }
321[alt='Permalink']:hover { color: black; }
322
323
324div.informalfigure,
325div.informalexample,
326div.informaltable,
327div.figure,
328div.table,
329div.example {
330 margin: 1em 0em;
331 padding: 1em;
332 page-break-inside: avoid;
333}
334
335
336div.informalfigure p.title b,
337div.informalexample p.title b,
338div.informaltable p.title b,
339div.figure p.title b,
340div.example p.title b,
341div.table p.title b{
342 padding-top: 0em;
343 margin-top: 0em;
344 font-size: 100%;
345 font-weight: normal;
346}
347
348.mediaobject .caption,
349.mediaobject .caption p {
350 text-align: center;
351 font-size: 80%;
352 padding-top: 0.5em;
353 padding-bottom: 0.5em;
354}
355
356.epigraph {
357 padding-left: 55%;
358 margin-bottom: 1em;
359}
360
361.epigraph p {
362 text-align: left;
363}
364
365.epigraph .quote {
366 font-style: italic;
367}
368.epigraph .attribution {
369 font-style: normal;
370 text-align: right;
371}
372
373span.application {
374 font-style: italic;
375}
376
377.programlisting {
378 font-family: monospace;
379 font-size: 80%;
380 white-space: pre;
381 margin: 1.33em 0em;
382 padding: 1.33em;
383}
384
385.tip,
386.warning,
387.caution,
388.note {
389 margin-top: 1em;
390 margin-bottom: 1em;
391
392}
393
394/* force full width of table within div */
395.tip table,
396.warning table,
397.caution table,
398.note table {
399 border: none;
400 width: 100%;
401}
402
403
404.tip table th,
405.warning table th,
406.caution table th,
407.note table th {
408 padding: 0.8em 0.0em 0.0em 0.0em;
409 margin : 0em 0em 0em 0em;
410}
411
412.tip p,
413.warning p,
414.caution p,
415.note p {
416 margin-top: 0.5em;
417 margin-bottom: 0.5em;
418 padding-right: 1em;
419 text-align: left;
420}
421
422.acronym {
423 text-transform: uppercase;
424}
425
426b.keycap,
427.keycap {
428 padding: 0.09em 0.3em;
429 margin: 0em;
430}
431
432.itemizedlist li {
433 clear: none;
434}
435
436.filename {
437 font-size: medium;
438 font-family: Courier, monospace;
439}
440
441
442div.navheader, div.heading{
443 position: absolute;
444 left: 0em;
445 top: 0em;
446 width: 100%;
447 background-color: #cdf;
448 width: 100%;
449}
450
451div.navfooter, div.footing{
452 position: fixed;
453 left: 0em;
454 bottom: 0em;
455 background-color: #eee;
456 width: 100%;
457}
458
459
460div.navheader td,
461div.navfooter td {
462 font-size: 66%;
463}
464
465div.navheader table th {
466 /*font-family: Georgia, Times, serif;*/
467 /*font-size: x-large;*/
468 font-size: 80%;
469}
470
471div.navheader table {
472 border-left: 0em;
473 border-right: 0em;
474 border-top: 0em;
475 width: 100%;
476}
477
478div.navfooter table {
479 border-left: 0em;
480 border-right: 0em;
481 border-bottom: 0em;
482 width: 100%;
483}
484
485div.navheader table td a,
486div.navfooter table td a {
487 color: #777;
488 text-decoration: none;
489}
490
491/* normal text in the footer */
492div.navfooter table td {
493 color: black;
494}
495
496div.navheader table td a:visited,
497div.navfooter table td a:visited {
498 color: #444;
499}
500
501
502/* links in header and footer */
503div.navheader table td a:hover,
504div.navfooter table td a:hover {
505 text-decoration: underline;
506 background-color: transparent;
507 color: #33a;
508}
509
510div.navheader hr,
511div.navfooter hr {
512 display: none;
513}
514
515
516.qandaset tr.question td p {
517 margin: 0em 0em 1em 0em;
518 padding: 0em 0em 0em 0em;
519}
520
521.qandaset tr.answer td p {
522 margin: 0em 0em 1em 0em;
523 padding: 0em 0em 0em 0em;
524}
525.answer td {
526 padding-bottom: 1.5em;
527}
528
529.emphasis {
530 font-weight: bold;
531}
532
533
534 /************* /
535 / decorations /
536/ *************/
537
538.titlepage {
539}
540
541.part .title {
542}
543
544.subtitle {
545 border: none;
546}
547
548/*
549h1 {
550 border: none;
551}
552
553h2 {
554 border-top: solid 0.2em;
555 border-bottom: solid 0.06em;
556}
557
558h3 {
559 border-top: 0em;
560 border-bottom: solid 0.06em;
561}
562
563h4 {
564 border: 0em;
565 border-bottom: solid 0.06em;
566}
567
568h5 {
569 border: 0em;
570}
571*/
572
573.programlisting {
574 border: solid 1px;
575}
576
577div.figure,
578div.table,
579div.informalfigure,
580div.informaltable,
581div.informalexample,
582div.example {
583 border: 1px solid;
584}
585
586
587
588.tip,
589.warning,
590.caution,
591.note {
592 border: 1px solid;
593}
594
595.tip table th,
596.warning table th,
597.caution table th,
598.note table th {
599 border-bottom: 1px solid;
600}
601
602.question td {
603 border-top: 1px solid black;
604}
605
606.answer {
607}
608
609
610b.keycap,
611.keycap {
612 border: 1px solid;
613}
614
615
616div.navheader, div.heading{
617 border-bottom: 1px solid;
618}
619
620
621div.navfooter, div.footing{
622 border-top: 1px solid;
623}
624
625 /********* /
626 / colors /
627/ *********/
628
629body {
630 color: #333;
631 background: white;
632}
633
634a {
635 background: transparent;
636}
637
638a:hover {
639 background-color: #dedede;
640}
641
642
643h1,
644h2,
645h3,
646h4,
647h5,
648h6,
649h7,
650h8 {
651 background-color: transparent;
652}
653
654hr {
655 border-color: #aaa;
656}
657
658
659.tip, .warning, .caution, .note {
660 border-color: #fff;
661}
662
663
664.tip table th,
665.warning table th,
666.caution table th,
667.note table th {
668 border-bottom-color: #fff;
669}
670
671
672.warning {
673 background-color: #f0f0f2;
674}
675
676.caution {
677 background-color: #f0f0f2;
678}
679
680.tip {
681 background-color: #f0f0f2;
682}
683
684.note {
685 background-color: #f0f0f2;
686}
687
688.glossary dl dt,
689.variablelist dl dt,
690.variablelist dl dt span.term {
691 color: #044;
692}
693
694div.figure,
695div.table,
696div.example,
697div.informalfigure,
698div.informaltable,
699div.informalexample {
700 border-color: #aaa;
701}
702
703pre.programlisting {
704 color: black;
705 background-color: #fff;
706 border-color: #aaa;
707 border-width: 2px;
708}
709
710.guimenu,
711.guilabel,
712.guimenuitem {
713 background-color: #eee;
714}
715
716
717b.keycap,
718.keycap {
719 background-color: #eee;
720 border-color: #999;
721}
722
723
724div.navheader {
725 border-color: black;
726}
727
728
729div.navfooter {
730 border-color: black;
731}
732
733
734 /*********** /
735 / graphics /
736/ ***********/
737
738/*
739body {
740 background-image: url("images/body_bg.jpg");
741 background-attachment: fixed;
742}
743
744.navheader,
745.note,
746.tip {
747 background-image: url("images/note_bg.jpg");
748 background-attachment: fixed;
749}
750
751.warning,
752.caution {
753 background-image: url("images/warning_bg.jpg");
754 background-attachment: fixed;
755}
756
757.figure,
758.informalfigure,
759.example,
760.informalexample,
761.table,
762.informaltable {
763 background-image: url("images/figure_bg.jpg");
764 background-attachment: fixed;
765}
766
767*/
768h1,
769h2,
770h3,
771h4,
772h5,
773h6,
774h7{
775}
776
777/*
778Example of how to stick an image as part of the title.
779
780div.article .titlepage .title
781{
782 background-image: url("figures/white-on-black.png");
783 background-position: center;
784 background-repeat: repeat-x;
785}
786*/
787
788div.preface .titlepage .title,
789div.colophon .title,
790div.chapter .titlepage .title,
791div.article .titlepage .title
792{
793}
794
795div.section div.section .titlepage .title,
796div.sect2 .titlepage .title {
797 background: none;
798}
799
800
801h1.title {
802 background-color: transparent;
803 background-repeat: no-repeat;
804 height: 256px;
805 text-indent: -9000px;
806 overflow:hidden;
807}
808
809h2.subtitle {
810 background-color: transparent;
811 text-indent: -9000px;
812 overflow:hidden;
813 width: 0px;
814 display: none;
815}
816
817 /*************************************** /
818 / pippin.gimp.org specific alterations /
819/ ***************************************/
820
821/*
822div.heading, div.navheader {
823 color: #777;
824 font-size: 80%;
825 padding: 0;
826 margin: 0;
827 text-align: left;
828 position: absolute;
829 top: 0px;
830 left: 0px;
831 width: 100%;
832 height: 50px;
833 background: url('/gfx/heading_bg.png') transparent;
834 background-repeat: repeat-x;
835 background-attachment: fixed;
836 border: none;
837}
838
839div.heading a {
840 color: #444;
841}
842
843div.footing, div.navfooter {
844 border: none;
845 color: #ddd;
846 font-size: 80%;
847 text-align:right;
848
849 width: 100%;
850 padding-top: 10px;
851 position: absolute;
852 bottom: 0px;
853 left: 0px;
854
855 background: url('/gfx/footing_bg.png') transparent;
856}
857*/
858
859
860
861 /****************** /
862 / nasty ie tweaks /
863/ ******************/
864
865/*
866div.heading, div.navheader {
867 width:expression(document.body.clientWidth + "px");
868}
869
870div.footing, div.navfooter {
871 width:expression(document.body.clientWidth + "px");
872 margin-left:expression("-5em");
873}
874body {
875 padding:expression("4em 5em 0em 5em");
876}
877*/
878
879 /**************************************** /
880 / mozilla vendor specific css extensions /
881/ ****************************************/
882/*
883div.navfooter, div.footing{
884 -moz-opacity: 0.8em;
885}
886
887div.figure,
888div.table,
889div.informalfigure,
890div.informaltable,
891div.informalexample,
892div.example,
893.tip,
894.warning,
895.caution,
896.note {
897 -moz-border-radius: 0.5em;
898}
899
900b.keycap,
901.keycap {
902 -moz-border-radius: 0.3em;
903}
904*/
905
906table tr td table tr td {
907 display: none;
908}
909
910
911hr {
912 display: none;
913}
914
915table {
916 border: 0em;
917}
918
919 .photo {
920 float: right;
921 margin-left: 1.5em;
922 margin-bottom: 1.5em;
923 margin-top: 0em;
924 max-width: 17em;
925 border: 1px solid gray;
926 padding: 3px;
927 background: white;
928}
929 .seperator {
930 padding-top: 2em;
931 clear: both;
932 }
933
934 #validators {
935 margin-top: 5em;
936 text-align: right;
937 color: #777;
938 }
939 @media print {
940 body {
941 font-size: 8pt;
942 }
943 .noprint {
944 display: none;
945 }
946 }
947
948
949.tip,
950.note {
951 background: #f0f0f2;
952 color: #333;
953 padding: 20px;
954 margin: 20px;
955}
956
957.tip h3,
958.note h3 {
959 padding: 0em;
960 margin: 0em;
961 font-size: 2em;
962 font-weight: bold;
963 color: #333;
964}
965
966.tip a,
967.note a {
968 color: #333;
969 text-decoration: underline;
970}
971
972.footnote {
973 font-size: small;
974 color: #333;
975}
976
977/* Changes the announcement text */
978.tip h3,
979.warning h3,
980.caution h3,
981.note h3 {
982 font-size:large;
983 color: #00557D;
984}
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..5770be6883
--- /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..283f483112
--- /dev/null
+++ b/documentation/kernel-dev/kernel-dev-advanced.xml
@@ -0,0 +1,1074 @@
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-<replaceable>my_bsp_layer</replaceable>/
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 <replaceable>base</replaceable>/
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 <replaceable>typical-patch</replaceable>
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 <replaceable>common</replaceable>/<replaceable>kernel_type</replaceable>/<replaceable>machine</replaceable>
972 </literallayout>
973 </para>
974
975 <para>
976 If you had two kernel types, "standard" and "small" for
977 instance, three machines, and <replaceable>common</replaceable>
978 as <filename>mydir</filename>, the branches in your
979 Git repository might look like this:
980 <literallayout class='monospaced'>
981 mydir/base
982 mydir/standard/base
983 mydir/standard/machine_a
984 mydir/standard/machine_b
985 mydir/standard/machine_c
986 mydir/small/base
987 mydir/small/machine_a
988 </literallayout>
989 </para>
990
991 <para>
992 This organization can help clarify the branch relationships.
993 In this case, <filename>mydir/standard/machine_a</filename>
994 includes everything in <filename>mydir/base</filename> and
995 <filename>mydir/standard/base</filename>.
996 The "standard" and "small" branches add sources specific to those
997 kernel types that for whatever reason are not appropriate for the
998 other branches.
999 <note>The "base" branches are an artifact of the way Git manages
1000 its data internally on the filesystem: Git will not allow you
1001 to use <filename>mydir/standard</filename> and
1002 <filename>mydir/standard/machine_a</filename> because it
1003 would have to create a file and a directory named "standard".
1004 </note>
1005 </para>
1006 </section>
1007
1008 <section id='feature-branches'>
1009 <title>Feature Branches</title>
1010
1011 <para>
1012 When you are actively developing new features, it can be more
1013 efficient to work with that feature as a branch, rather than
1014 as a set of patches that have to be regularly updated.
1015 The Yocto Project Linux kernel tools provide for this with
1016 the <filename>git merge</filename> command.
1017 </para>
1018
1019 <para>
1020 To merge a feature branch into a BSP, insert the
1021 <filename>git merge</filename> command after any
1022 <filename>branch</filename> commands:
1023 <literallayout class='monospaced'>
1024 mybsp.scc:
1025 define KMACHINE mybsp
1026 define KTYPE standard
1027 define KARCH i386
1028 include standard.scc
1029
1030 branch mynewbranch
1031 git merge myfeature
1032
1033 include mybsp-hw.scc
1034 </literallayout>
1035 </para>
1036 </section>
1037</section>
1038
1039<section id='scc-reference'>
1040 <title>SCC Description File Reference</title>
1041
1042 <para>
1043 This section provides a brief reference for the commands you can use
1044 within an SCC description file (<filename>.scc</filename>):
1045 <itemizedlist>
1046 <listitem><para><filename>branch [ref]</filename>:
1047 Creates a new branch relative to the current branch
1048 (typically <filename>${KTYPE}</filename>) using
1049 the currently checked-out branch, or "ref" if specified.
1050 </para></listitem>
1051 <listitem><para><filename>define</filename>:
1052 Defines variables, such as <filename>KMACHINE</filename>,
1053 <filename>KTYPE</filename>, <filename>KARCH</filename>,
1054 and <filename>KFEATURE_DESCRIPTION</filename>.</para></listitem>
1055 <listitem><para><filename>include SCC_FILE</filename>:
1056 Includes an SCC file in the current file.
1057 The file is parsed as if you had inserted it inline.
1058 </para></listitem>
1059 <listitem><para><filename>kconf [hardware|non-hardware] CFG_FILE</filename>:
1060 Queues a configuration fragment for merging into the final
1061 Linux <filename>.config</filename> file.</para></listitem>
1062 <listitem><para><filename>git merge GIT_BRANCH</filename>:
1063 Merges the feature branch into the current branch.
1064 </para></listitem>
1065 <listitem><para><filename>patch PATCH_FILE</filename>:
1066 Applies the patch to the current Git branch.</para></listitem>
1067 </itemizedlist>
1068 </para>
1069</section>
1070
1071</chapter>
1072<!--
1073vim: expandtab tw=80 ts=4
1074-->
diff --git a/documentation/kernel-dev/kernel-dev-common.xml b/documentation/kernel-dev/kernel-dev-common.xml
new file mode 100644
index 0000000000..58cc98ddff
--- /dev/null
+++ b/documentation/kernel-dev/kernel-dev-common.xml
@@ -0,0 +1,915 @@
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 typically be located as follows
89 within your custom layer:
90 <literallayout class='monospaced'>
91 <replaceable>your-layer</replaceable>/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 <replaceable>your-layer</replaceable>/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 - Darren 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
449 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-fetch'><filename>do_fetch</filename></ulink>
450 task for the recipe.
451 You can avoid triggering this task by not using BitBake to
452 run the
453 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-cleanall'><filename>cleanall</filename></ulink>,
454 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-cleansstate'><filename>cleansstate</filename></ulink>,
455 or forced
456 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-fetch'><filename>fetch</filename></ulink>
457 commands.
458 Also, do not modify the recipe itself while working
459 with temporary changes or BitBake might run the
460 <filename>fetch</filename> command depending on the
461 changes to the recipe.
462 </para>
463
464 <para>
465 To test your temporary changes, instruct BitBake to run the
466 <filename>compile</filename> again.
467 The <filename>-f</filename> option forces the command to run
468 even though BitBake might think it has already done so:
469 <literallayout class='monospaced'>
470 $ bitbake linux-yocto -c compile -f
471 </literallayout>
472 If the compile fails, you can update the sources and repeat
473 the <filename>compile</filename>.
474 Once compilation is successful, you can inspect and test
475 the resulting build (i.e. kernel, modules, and so forth) from
476 the <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>:
477 <literallayout class='monospaced'>
478 ${WORKDIR}/linux-${MACHINE}-${KTYPE}-build
479 </literallayout>
480 Alternatively, you can run the <filename>deploy</filename>
481 command to place the kernel image in the
482 <filename>tmp/deploy/images</filename> directory:
483 <literallayout class='monospaced'>
484 $ bitbake linux-yocto -c deploy
485 </literallayout>
486 And, of course, you can perform the remaining installation and
487 packaging steps by issuing:
488 <literallayout class='monospaced'>
489 $ bitbake linux-yocto
490 </literallayout>
491 </para>
492
493 <para>
494 For rapid iterative development, the edit-compile-repeat loop
495 described in this section is preferable to rebuilding the
496 entire recipe because the installation and packaging tasks
497 are very time consuming.
498 </para>
499
500 <para>
501 Once you are satisfied with your source code modifications,
502 you can make them permanent by generating patches and
503 applying them to the
504 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
505 statement as described in the
506 "<link linkend='applying-patches'>Applying Patches</link>"
507 section.
508 If you are not familiar with generating patches, refer to the
509 "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-the-patch'>Creating the Patch</ulink>"
510 section in the Yocto Project Development Manual.
511 </para>
512 </section>
513 </section>
514
515 <section id='working-with-your-own-sources'>
516 <title>Working With Your Own Sources</title>
517
518 <para>
519 If you cannot work with one of the Linux kernel
520 versions supported by existing linux-yocto recipes, you can
521 still make use of the Yocto Project Linux kernel tooling by
522 working with your own sources.
523 When you use your own sources, you will not be able to
524 leverage the existing kernel
525 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink> and
526 stabilization work of the linux-yocto sources.
527 However, you will be able to manage your own Metadata in the same
528 format as the linux-yocto sources.
529 Maintaining format compatibility facilitates converging with
530 linux-yocto on a future, mutually-supported kernel version.
531 </para>
532
533 <para>
534 To help you use your own sources, the Yocto Project provides a
535 linux-yocto custom recipe
536 (<filename>linux-yocto-custom.bb</filename>) that uses
537 <filename>kernel.org</filename> sources
538 and the Yocto Project Linux kernel tools for managing
539 kernel Metadata.
540 You can find this recipe in the
541 <filename>poky</filename> Git repository of the
542 Yocto Project <ulink url='&YOCTO_GIT_URL;'>Source Repository</ulink>
543 at:
544 <literallayout class="monospaced">
545 poky/meta-skeleton/recipes-kernel/linux/linux-yocto-custom.bb
546 </literallayout>
547 </para>
548
549 <para>
550 Here are some basic steps you can use to work with your own sources:
551 <orderedlist>
552 <listitem><para>Copy the <filename>linux-yocto-custom.bb</filename>
553 recipe to your layer and give it a meaningful name.
554 The name should include the version of the Linux kernel you
555 are using (e.g. <filename>linux-yocto-myproject_3.5.bb</filename>,
556 where "3.5" is the base version of the Linux kernel
557 with which you would be working).</para></listitem>
558 <listitem><para>In the same directory inside your layer,
559 create a matching directory
560 to store your patches and configuration files (e.g.
561 <filename>linux-yocto-myproject</filename>).
562 </para></listitem>
563 <listitem><para>Edit the following variables in your recipe
564 as appropriate for your project:
565 <itemizedlist>
566 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>:
567 The <filename>SRC_URI</filename> should be a Git
568 repository that uses one of the supported Git fetcher
569 protocols (i.e. <filename>file</filename>,
570 <filename>git</filename>, <filename>http</filename>,
571 and so forth).
572 The skeleton recipe provides an example
573 <filename>SRC_URI</filename> as a syntax reference.
574 </para></listitem>
575 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-LINUX_VERSION'><filename>LINUX_VERSION</filename></ulink>:
576 The Linux kernel version you are using (e.g.
577 "3.4").</para></listitem>
578 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-LINUX_VERSION_EXTENSION'><filename>LINUX_VERSION_EXTENSION</filename></ulink>:
579 The Linux kernel <filename>CONFIG_LOCALVERSION</filename>
580 that is compiled into the resulting kernel and visible
581 through the <filename>uname</filename> command.
582 </para></listitem>
583 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-SRCREV'><filename>SRCREV</filename></ulink>:
584 The commit ID from which you want to build.
585 </para></listitem>
586 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink>:
587 Treat this variable the same as you would in any other
588 recipe.
589 Increment the variable to indicate to the OpenEmbedded
590 build system that the recipe has changed.
591 </para></listitem>
592 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>:
593 The default <filename>PV</filename> assignment is
594 typically adequate.
595 It combines the <filename>LINUX_VERSION</filename>
596 with the Source Control Manager (SCM) revision
597 as derived from the
598 <ulink url='&YOCTO_DOCS_REF_URL;#var-SRCPV'><filename>SRCPV</filename></ulink>
599 variable.
600 The combined results are a string with
601 the following form:
602 <literallayout class='monospaced'>
603 3.4.11+git1+68a635bf8dfb64b02263c1ac80c948647cc76d5f_1+218bd8d2022b9852c60d32f0d770931e3cf343e2
604 </literallayout>
605 While lengthy, the extra verbosity in <filename>PV</filename>
606 helps ensure you are using the exact
607 sources from which you intend to build.
608 </para></listitem>
609 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-COMPATIBLE_MACHINE'><filename>COMPATIBLE_MACHINE</filename></ulink>:
610 A list of the machines supported by your new recipe.
611 This variable in the example recipe is set
612 by default to a regular expression that matches
613 only the empty string, "(^$)".
614 This default setting triggers an explicit build
615 failure.
616 You must change it to match a list of the machines
617 that your new recipe supports.
618 For example, to support the <filename>qemux86</filename>
619 and <filename>qemux86-64</filename> machines, use
620 the following form:
621 <literallayout class='monospaced'>
622 COMPATIBLE_MACHINE = "qemux86|qemux86-64"
623 </literallayout></para></listitem>
624 </itemizedlist></para></listitem>
625 <listitem><para>Provide further customizations to your recipe
626 as needed just as you would customize an existing
627 linux-yocto recipe.
628 See the "<link linkend='modifying-an-existing-recipe'>Modifying
629 an Existing Recipe</link>" section for information.
630 </para></listitem>
631 </orderedlist>
632 </para>
633 </section>
634
635 <section id='working-with-out-of-tree-modules'>
636 <title>Working with Out-of-Tree Modules</title>
637
638 <para>
639 This section describes steps to build out-of-tree modules on
640 your target and describes how to incorporate out-of-tree modules
641 in the build.
642 </para>
643
644 <section id='building-out-of-tree-modules-on-the-target'>
645 <title>Building Out-of-Tree Modules on the Target</title>
646
647 <para>
648 If you want to be able to build out-of-tree modules on
649 the target, there are some steps you need to take
650 on the target that is running your SDK image.
651 Briefly, the <filename>kernel-dev</filename> package
652 is installed by default on all
653 <filename>*.sdk</filename> images.
654 However, you need to create some scripts prior to
655 attempting to build the out-of-tree modules on the target
656 that is running that image.
657 </para>
658
659 <para>
660 Prior to attempting to build the out-of-tree modules,
661 you need to be on the target as root and you need to
662 change to the <filename>/usr/src/kernel</filename> directory.
663 Next, <filename>make</filename> the scripts:
664 <literallayout class='monospaced'>
665 # cd /usr/src/kernel
666 # make scripts
667 </literallayout>
668 Because all SDK image recipes include
669 <filename>dev-pkgs</filename>, the
670 <filename>kernel-dev</filename> packages will be installed
671 as part of the SDK image.
672 The SDK uses the scripts when building out-of-tree
673 modules.
674 Once you have switched to that directory and created the
675 scripts, you should be able to build your out-of-tree modules
676 on the target.
677 </para>
678 </section>
679
680 <section id='incorporating-out-of-tree-modules'>
681 <title>Incorporating Out-of-Tree Modules</title>
682
683 <para>
684 While it is always preferable to work with sources integrated
685 into the Linux kernel sources, if you need an external kernel
686 module, the <filename>hello-mod.bb</filename> recipe is
687 available as a template from which you can create your
688 own out-of-tree Linux kernel module recipe.
689 </para>
690
691 <para>
692 This template recipe is located in the
693 <filename>poky</filename> Git repository of the
694 Yocto Project <ulink url='&YOCTO_GIT_URL;'>Source Repository</ulink>
695 at:
696 <literallayout class="monospaced">
697 poky/meta-skeleton/recipes-kernel/hello-mod/hello-mod_0.1.bb
698 </literallayout>
699 </para>
700
701 <para>
702 To get started, copy this recipe to your layer and give it a
703 meaningful name (e.g. <filename>mymodule_1.0.bb</filename>).
704 In the same directory, create a new directory named
705 <filename>files</filename> where you can store any source files,
706 patches, or other files necessary for building
707 the module that do not come with the sources.
708 Finally, update the recipe as needed for the module.
709 Typically, you will need to set the following variables:
710 <itemizedlist>
711 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-DESCRIPTION'><filename>DESCRIPTION</filename></ulink>
712 </para></listitem>
713 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-LICENSE'><filename>LICENSE*</filename></ulink>
714 </para></listitem>
715 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
716 </para></listitem>
717 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>
718 </para></listitem>
719 </itemizedlist>
720 </para>
721
722 <para>
723 Depending on the build system used by the module sources,
724 you might need to make some adjustments.
725 For example, a typical module <filename>Makefile</filename>
726 looks much like the one provided with the
727 <filename>hello-mod</filename> template:
728 <literallayout class='monospaced'>
729 obj-m := hello.o
730
731 SRC := $(shell pwd)
732
733 all:
734 $(MAKE) -C $(KERNEL_SRC) M=$(SRC)
735
736 modules_install:
737 $(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules_install
738 ...
739 </literallayout>
740 </para>
741
742 <para>
743 The important point to note here is the
744 <ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_SRC'><filename>KERNEL_SRC</filename></ulink>
745 variable.
746 The
747 <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-module'><filename>module</filename></ulink>
748 class sets this variable and the
749 <ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_PATH'><filename>KERNEL_PATH</filename></ulink>
750 variable to
751 <filename>${<ulink url='&YOCTO_DOCS_REF_URL;#var-STAGING_KERNEL_DIR'><filename>STAGING_KERNEL_DIR</filename></ulink>}</filename>
752 with the necessary Linux kernel build information to build
753 modules.
754 If your module <filename>Makefile</filename> uses a different
755 variable, you might want to override the
756 <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-compile'><filename>do_compile()</filename></ulink>
757 step, or create a patch to
758 the <filename>Makefile</filename> to work with the more typical
759 <filename>KERNEL_SRC</filename> or
760 <filename>KERNEL_PATH</filename> variables.
761 </para>
762
763 <para>
764 After you have prepared your recipe, you will likely want to
765 include the module in your images.
766 To do this, see the documentation for the following variables in
767 the Yocto Project Reference Manual and set one of them
768 appropriately for your machine configuration file:
769 <itemizedlist>
770 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_ESSENTIAL_EXTRA_RDEPENDS'><filename>MACHINE_ESSENTIAL_EXTRA_RDEPENDS</filename></ulink>
771 </para></listitem>
772 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS'><filename>MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS</filename></ulink>
773 </para></listitem>
774 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_EXTRA_RDEPENDS'><filename>MACHINE_EXTRA_RDEPENDS</filename></ulink>
775 </para></listitem>
776 <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_EXTRA_RRECOMMENDS'><filename>MACHINE_EXTRA_RRECOMMENDS</filename></ulink>
777 </para></listitem>
778 </itemizedlist>
779 </para>
780
781 <para>
782 Modules are often not required for boot and can be excluded from
783 certain build configurations.
784 The following allows for the most flexibility:
785 <literallayout class='monospaced'>
786 MACHINE_EXTRA_RRECOMMENDS += "kernel-module-mymodule"
787 </literallayout>
788 The value is derived by appending the module filename without
789 the <filename>.ko</filename> extension to the string
790 "kernel-module-".
791 </para>
792
793 <para>
794 Because the variable is
795 <ulink url='&YOCTO_DOCS_REF_URL;#var-RRECOMMENDS'><filename>RRECOMMENDS</filename></ulink>
796 and not a
797 <ulink url='&YOCTO_DOCS_REF_URL;#var-RDEPENDS'><filename>RDEPENDS</filename></ulink>
798 variable, the build will not fail if this module is not
799 available to include in the image.
800 </para>
801 </section>
802 </section>
803
804
805 <section id='inspecting-changes-and-commits'>
806 <title>Inspecting Changes and Commits</title>
807
808 <para>
809 A common question when working with a kernel is:
810 "What changes have been applied to this tree?"
811 Rather than using "grep" across directories to see what has
812 changed, you can use Git to inspect or search the kernel tree.
813 Using Git is an efficient way to see what has changed in the tree.
814 </para>
815
816 <section id='what-changed-in-a-kernel'>
817 <title>What Changed in a Kernel?</title>
818
819 <para>
820 Following are a few examples that show how to use Git
821 commands to examine changes.
822 These examples are by no means the only way to see changes.
823 <note>
824 In the following examples, unless you provide a commit
825 range, <filename>kernel.org</filename> history is blended
826 with Yocto Project kernel changes.
827 You can form ranges by using branch names from the
828 kernel tree as the upper and lower commit markers with
829 the Git commands.
830 You can see the branch names through the web interface
831 to the Yocto Project source repositories at
832 <ulink url='http://git.yoctoproject.org/cgit.cgi'></ulink>.
833 </note>
834 To see a full range of the changes, use the
835 <filename>git whatchanged</filename> command and specify a
836 commit range for the branch
837 (<filename>&lt;commit&gt;..&lt;commit&gt;</filename>).
838 </para>
839
840 <para>
841 Here is an example that looks at what has changed in the
842 <filename>emenlow</filename> branch of the
843 <filename>linux-yocto-3.4</filename> kernel.
844 The lower commit range is the commit associated with the
845 <filename>standard/base</filename> branch, while
846 the upper commit range is the commit associated with the
847 <filename>standard/emenlow</filename> branch.
848 <literallayout class='monospaced'>
849 $ git whatchanged origin/standard/base..origin/standard/emenlow
850 </literallayout>
851 </para>
852
853 <para>
854 To see short, one line summaries of changes use the
855 <filename>git log</filename> command:
856 <literallayout class='monospaced'>
857 $ git log --oneline origin/standard/base..origin/standard/emenlow
858 </literallayout>
859 </para>
860
861 <para>
862 Use this command to see code differences for the changes:
863 <literallayout class='monospaced'>
864 $ git diff origin/standard/base..origin/standard/emenlow
865 </literallayout>
866 </para>
867
868 <para>
869 Use this command to see the commit log messages and the
870 text differences:
871 <literallayout class='monospaced'>
872 $ git show origin/standard/base..origin/standard/emenlow
873 </literallayout>
874 </para>
875
876 <para>
877 Use this command to create individual patches for
878 each change.
879 Here is an example that that creates patch files for each
880 commit and places them in your <filename>Documents</filename>
881 directory:
882 <literallayout class='monospaced'>
883 $ git format-patch -o $HOME/Documents origin/standard/base..origin/standard/emenlow
884 </literallayout>
885 </para>
886 </section>
887
888 <section id='showing-a-particular-feature-or-branch-change'>
889 <title>Showing a Particular Feature or Branch Change</title>
890
891 <para>
892 Tags in the Yocto Project kernel tree divide changes for
893 significant features or branches.
894 The <filename>git show &lt;tag&gt;</filename> command shows
895 changes based on a tag.
896 Here is an example that shows <filename>systemtap</filename>
897 changes:
898 <literallayout class='monospaced'>
899 $ git show systemtap
900 </literallayout>
901 You can use the
902 <filename>git branch --contains &lt;tag&gt;</filename> command
903 to show the branches that contain a particular feature.
904 This command shows the branches that contain the
905 <filename>systemtap</filename> feature:
906 <literallayout class='monospaced'>
907 $ git branch --contains systemtap
908 </literallayout>
909 </para>
910 </section>
911 </section>
912</chapter>
913<!--
914vim: expandtab tw=80 ts=4
915-->
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..8676d66c3a
--- /dev/null
+++ b/documentation/kernel-dev/kernel-dev-customization.xsl
@@ -0,0 +1,18 @@
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/1.76.1/xhtml/docbook.xsl" />
5
6 <xsl:include href="../template/permalinks.xsl"/>
7 <xsl:include href="../template/section.title.xsl"/>
8 <xsl:include href="../template/component.title.xsl"/>
9 <xsl:include href="../template/division.title.xsl"/>
10 <xsl:include href="../template/formal.object.heading.xsl"/>
11
12 <xsl:param name="html.stylesheet" select="'kernel-dev-style.css'" />
13 <xsl:param name="chapter.autolabel" select="1" />
14 <xsl:param name="appendix.autolabel">A</xsl:param>
15 <xsl:param name="section.autolabel" select="1" />
16 <xsl:param name="section.label.includes.component.label" select="1" />
17
18</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..2b99ad2dde
--- /dev/null
+++ b/documentation/kernel-dev/kernel-dev-faq.xml
@@ -0,0 +1,140 @@
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
8<section id='kernel-dev-faq-section'>
9 <title>Common Questions and Solutions</title>
10
11 <para>
12 The following lists some solutions for common questions.
13
14
15 <qandaset>
16 <qandaentry>
17 <question>
18 <para>
19 How do I use my own Linux kernel <filename>.config</filename>
20 file?
21 </para>
22 </question>
23 <answer>
24 <para>
25 Refer to the "<link linkend='changing-the-configuration'>Changing the Configuration</link>"
26 section for information.
27 </para>
28 </answer>
29 </qandaentry>
30
31 <qandaentry>
32 <question>
33 <para>
34 How do I create configuration fragments?
35 </para>
36 </question>
37 <answer>
38 <para>
39 Refer to the "<link linkend='generating-configuration-files'>Generating Configuration Files</link>"
40 section for information.
41 </para>
42 </answer>
43 </qandaentry>
44
45 <qandaentry>
46 <question>
47 <para>
48 How do I use my own Linux kernel sources?
49 </para>
50 </question>
51 <answer>
52 <para>
53 Refer to the "<link linkend='working-with-your-own-sources'>Working With Your Own Sources</link>"
54 section for information.
55 </para>
56 </answer>
57 </qandaentry>
58
59 <qandaentry>
60 <question>
61 <para>
62 How do I install/not-install the kernel image on the rootfs?
63 </para>
64 </question>
65 <answer>
66 <para>
67 The kernel image (e.g. <filename>vmlinuz</filename>) is provided
68 by the <filename>kernel-image</filename> package.
69 Image recipes depend on <filename>kernel-base</filename>.
70 To specify whether or not the kernel
71 image is installed in the generated root filesystem, override
72 <filename>RDEPENDS_kernel-base</filename> to include or not
73 include "kernel-image".</para>
74 <para>See the
75 "<ulink url='&YOCTO_DOCS_DEV_URL;#using-bbappend-files'>Using .bbappend Files</ulink>"
76 section in the Yocto Project Development Manual for information on
77 how to use an append file to override metadata.
78 </para>
79 </answer>
80 </qandaentry>
81
82 <qandaentry>
83 <question>
84 <para>
85 How do I install a specific kernel module?
86 </para>
87 </question>
88 <answer>
89 <para>
90 Linux kernel modules are packaged individually.
91 To ensure a specific kernel module is included in an image,
92 include it in the appropriate machine
93 <ulink url='&YOCTO_DOCS_REF_URL;#var-RRECOMMENDS'><filename>RRECOMMENDS</filename></ulink>
94 variable.</para>
95 <para>These other variables are useful for installing specific
96 modules:
97 <literallayout class='monospaced'>
98 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_ESSENTIAL_EXTRA_RDEPENDS'><filename>MACHINE_ESSENTIAL_EXTRA_RDEPENDS</filename></ulink>
99 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS'><filename>MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS</filename></ulink>
100 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_EXTRA_RDEPENDS'><filename>MACHINE_EXTRA_RDEPENDS</filename></ulink>
101 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_EXTRA_RRECOMMENDS'><filename>MACHINE_EXTRA_RRECOMMENDS</filename></ulink>
102 </literallayout>
103 For example, set the following in the <filename>qemux86.conf</filename>
104 file to include the <filename>ab123</filename> kernel modules
105 with images built for the <filename>qemux86</filename> machine:
106 <literallayout class='monospaced'>
107 MACHINE_EXTRA_RRECOMMENDS += "kernel-module-ab123"
108 </literallayout>
109 For more information, see the
110 "<link linkend='incorporating-out-of-tree-modules'>Incorporating Out-of-Tree Modules</link>"
111 section.
112 </para>
113 </answer>
114 </qandaentry>
115
116 <qandaentry>
117 <question>
118 <para>
119 How do I change the Linux kernel command line?
120 </para>
121 </question>
122 <answer>
123 <para>
124 The Linux kernel command line is typically specified in
125 the machine config using the <filename>APPEND</filename> variable.
126 For example, you can add some helpful debug information doing
127 the following:
128 <literallayout class='monospaced'>
129 APPEND += "printk.time=y initcall_debug debug"
130 </literallayout>
131 </para>
132 </answer>
133 </qandaentry>
134 </qandaset>
135 </para>
136</section>
137</appendix>
138<!--
139vim: expandtab tw=80 ts=4
140-->
diff --git a/documentation/kernel-dev/kernel-dev-intro.xml b/documentation/kernel-dev/kernel-dev-intro.xml
new file mode 100644
index 0000000000..38ef36de5a
--- /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://openembedded.org/wiki/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..a72dcff01b
--- /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 <replaceable>bsp_name</replaceable>-<replaceable>kernel_type</replaceable>.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 <replaceable>kernel_type</replaceable>/<replaceable>bsp_name</replaceable>
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}-<replaceable>kernel_type</replaceable>-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..6e0c1c7fc9
--- /dev/null
+++ b/documentation/kernel-dev/kernel-dev-style.css
@@ -0,0 +1,984 @@
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/* This style defines how the permalink character
317 appears by itself and when hovered over with
318 the mouse. */
319
320[alt='Permalink'] { color: #eee; }
321[alt='Permalink']:hover { color: black; }
322
323
324div.informalfigure,
325div.informalexample,
326div.informaltable,
327div.figure,
328div.table,
329div.example {
330 margin: 1em 0em;
331 padding: 1em;
332 page-break-inside: avoid;
333}
334
335
336div.informalfigure p.title b,
337div.informalexample p.title b,
338div.informaltable p.title b,
339div.figure p.title b,
340div.example p.title b,
341div.table p.title b{
342 padding-top: 0em;
343 margin-top: 0em;
344 font-size: 100%;
345 font-weight: normal;
346}
347
348.mediaobject .caption,
349.mediaobject .caption p {
350 text-align: center;
351 font-size: 80%;
352 padding-top: 0.5em;
353 padding-bottom: 0.5em;
354}
355
356.epigraph {
357 padding-left: 55%;
358 margin-bottom: 1em;
359}
360
361.epigraph p {
362 text-align: left;
363}
364
365.epigraph .quote {
366 font-style: italic;
367}
368.epigraph .attribution {
369 font-style: normal;
370 text-align: right;
371}
372
373span.application {
374 font-style: italic;
375}
376
377.programlisting {
378 font-family: monospace;
379 font-size: 80%;
380 white-space: pre;
381 margin: 1.33em 0em;
382 padding: 1.33em;
383}
384
385.tip,
386.warning,
387.caution,
388.note {
389 margin-top: 1em;
390 margin-bottom: 1em;
391
392}
393
394/* force full width of table within div */
395.tip table,
396.warning table,
397.caution table,
398.note table {
399 border: none;
400 width: 100%;
401}
402
403
404.tip table th,
405.warning table th,
406.caution table th,
407.note table th {
408 padding: 0.8em 0.0em 0.0em 0.0em;
409 margin : 0em 0em 0em 0em;
410}
411
412.tip p,
413.warning p,
414.caution p,
415.note p {
416 margin-top: 0.5em;
417 margin-bottom: 0.5em;
418 padding-right: 1em;
419 text-align: left;
420}
421
422.acronym {
423 text-transform: uppercase;
424}
425
426b.keycap,
427.keycap {
428 padding: 0.09em 0.3em;
429 margin: 0em;
430}
431
432.itemizedlist li {
433 clear: none;
434}
435
436.filename {
437 font-size: medium;
438 font-family: Courier, monospace;
439}
440
441
442div.navheader, div.heading{
443 position: absolute;
444 left: 0em;
445 top: 0em;
446 width: 100%;
447 background-color: #cdf;
448 width: 100%;
449}
450
451div.navfooter, div.footing{
452 position: fixed;
453 left: 0em;
454 bottom: 0em;
455 background-color: #eee;
456 width: 100%;
457}
458
459
460div.navheader td,
461div.navfooter td {
462 font-size: 66%;
463}
464
465div.navheader table th {
466 /*font-family: Georgia, Times, serif;*/
467 /*font-size: x-large;*/
468 font-size: 80%;
469}
470
471div.navheader table {
472 border-left: 0em;
473 border-right: 0em;
474 border-top: 0em;
475 width: 100%;
476}
477
478div.navfooter table {
479 border-left: 0em;
480 border-right: 0em;
481 border-bottom: 0em;
482 width: 100%;
483}
484
485div.navheader table td a,
486div.navfooter table td a {
487 color: #777;
488 text-decoration: none;
489}
490
491/* normal text in the footer */
492div.navfooter table td {
493 color: black;
494}
495
496div.navheader table td a:visited,
497div.navfooter table td a:visited {
498 color: #444;
499}
500
501
502/* links in header and footer */
503div.navheader table td a:hover,
504div.navfooter table td a:hover {
505 text-decoration: underline;
506 background-color: transparent;
507 color: #33a;
508}
509
510div.navheader hr,
511div.navfooter hr {
512 display: none;
513}
514
515
516.qandaset tr.question td p {
517 margin: 0em 0em 1em 0em;
518 padding: 0em 0em 0em 0em;
519}
520
521.qandaset tr.answer td p {
522 margin: 0em 0em 1em 0em;
523 padding: 0em 0em 0em 0em;
524}
525.answer td {
526 padding-bottom: 1.5em;
527}
528
529.emphasis {
530 font-weight: bold;
531}
532
533
534 /************* /
535 / decorations /
536/ *************/
537
538.titlepage {
539}
540
541.part .title {
542}
543
544.subtitle {
545 border: none;
546}
547
548/*
549h1 {
550 border: none;
551}
552
553h2 {
554 border-top: solid 0.2em;
555 border-bottom: solid 0.06em;
556}
557
558h3 {
559 border-top: 0em;
560 border-bottom: solid 0.06em;
561}
562
563h4 {
564 border: 0em;
565 border-bottom: solid 0.06em;
566}
567
568h5 {
569 border: 0em;
570}
571*/
572
573.programlisting {
574 border: solid 1px;
575}
576
577div.figure,
578div.table,
579div.informalfigure,
580div.informaltable,
581div.informalexample,
582div.example {
583 border: 1px solid;
584}
585
586
587
588.tip,
589.warning,
590.caution,
591.note {
592 border: 1px solid;
593}
594
595.tip table th,
596.warning table th,
597.caution table th,
598.note table th {
599 border-bottom: 1px solid;
600}
601
602.question td {
603 border-top: 1px solid black;
604}
605
606.answer {
607}
608
609
610b.keycap,
611.keycap {
612 border: 1px solid;
613}
614
615
616div.navheader, div.heading{
617 border-bottom: 1px solid;
618}
619
620
621div.navfooter, div.footing{
622 border-top: 1px solid;
623}
624
625 /********* /
626 / colors /
627/ *********/
628
629body {
630 color: #333;
631 background: white;
632}
633
634a {
635 background: transparent;
636}
637
638a:hover {
639 background-color: #dedede;
640}
641
642
643h1,
644h2,
645h3,
646h4,
647h5,
648h6,
649h7,
650h8 {
651 background-color: transparent;
652}
653
654hr {
655 border-color: #aaa;
656}
657
658
659.tip, .warning, .caution, .note {
660 border-color: #fff;
661}
662
663
664.tip table th,
665.warning table th,
666.caution table th,
667.note table th {
668 border-bottom-color: #fff;
669}
670
671
672.warning {
673 background-color: #f0f0f2;
674}
675
676.caution {
677 background-color: #f0f0f2;
678}
679
680.tip {
681 background-color: #f0f0f2;
682}
683
684.note {
685 background-color: #f0f0f2;
686}
687
688.glossary dl dt,
689.variablelist dl dt,
690.variablelist dl dt span.term {
691 color: #044;
692}
693
694div.figure,
695div.table,
696div.example,
697div.informalfigure,
698div.informaltable,
699div.informalexample {
700 border-color: #aaa;
701}
702
703pre.programlisting {
704 color: black;
705 background-color: #fff;
706 border-color: #aaa;
707 border-width: 2px;
708}
709
710.guimenu,
711.guilabel,
712.guimenuitem {
713 background-color: #eee;
714}
715
716
717b.keycap,
718.keycap {
719 background-color: #eee;
720 border-color: #999;
721}
722
723
724div.navheader {
725 border-color: black;
726}
727
728
729div.navfooter {
730 border-color: black;
731}
732
733
734 /*********** /
735 / graphics /
736/ ***********/
737
738/*
739body {
740 background-image: url("images/body_bg.jpg");
741 background-attachment: fixed;
742}
743
744.navheader,
745.note,
746.tip {
747 background-image: url("images/note_bg.jpg");
748 background-attachment: fixed;
749}
750
751.warning,
752.caution {
753 background-image: url("images/warning_bg.jpg");
754 background-attachment: fixed;
755}
756
757.figure,
758.informalfigure,
759.example,
760.informalexample,
761.table,
762.informaltable {
763 background-image: url("images/figure_bg.jpg");
764 background-attachment: fixed;
765}
766
767*/
768h1,
769h2,
770h3,
771h4,
772h5,
773h6,
774h7{
775}
776
777/*
778Example of how to stick an image as part of the title.
779
780div.article .titlepage .title
781{
782 background-image: url("figures/white-on-black.png");
783 background-position: center;
784 background-repeat: repeat-x;
785}
786*/
787
788div.preface .titlepage .title,
789div.colophon .title,
790div.chapter .titlepage .title,
791div.article .titlepage .title
792{
793}
794
795div.section div.section .titlepage .title,
796div.sect2 .titlepage .title {
797 background: none;
798}
799
800
801h1.title {
802 background-color: transparent;
803 background-repeat: no-repeat;
804 height: 256px;
805 text-indent: -9000px;
806 overflow:hidden;
807}
808
809h2.subtitle {
810 background-color: transparent;
811 text-indent: -9000px;
812 overflow:hidden;
813 width: 0px;
814 display: none;
815}
816
817 /*************************************** /
818 / pippin.gimp.org specific alterations /
819/ ***************************************/
820
821/*
822div.heading, div.navheader {
823 color: #777;
824 font-size: 80%;
825 padding: 0;
826 margin: 0;
827 text-align: left;
828 position: absolute;
829 top: 0px;
830 left: 0px;
831 width: 100%;
832 height: 50px;
833 background: url('/gfx/heading_bg.png') transparent;
834 background-repeat: repeat-x;
835 background-attachment: fixed;
836 border: none;
837}
838
839div.heading a {
840 color: #444;
841}
842
843div.footing, div.navfooter {
844 border: none;
845 color: #ddd;
846 font-size: 80%;
847 text-align:right;
848
849 width: 100%;
850 padding-top: 10px;
851 position: absolute;
852 bottom: 0px;
853 left: 0px;
854
855 background: url('/gfx/footing_bg.png') transparent;
856}
857*/
858
859
860
861 /****************** /
862 / nasty ie tweaks /
863/ ******************/
864
865/*
866div.heading, div.navheader {
867 width:expression(document.body.clientWidth + "px");
868}
869
870div.footing, div.navfooter {
871 width:expression(document.body.clientWidth + "px");
872 margin-left:expression("-5em");
873}
874body {
875 padding:expression("4em 5em 0em 5em");
876}
877*/
878
879 /**************************************** /
880 / mozilla vendor specific css extensions /
881/ ****************************************/
882/*
883div.navfooter, div.footing{
884 -moz-opacity: 0.8em;
885}
886
887div.figure,
888div.table,
889div.informalfigure,
890div.informaltable,
891div.informalexample,
892div.example,
893.tip,
894.warning,
895.caution,
896.note {
897 -moz-border-radius: 0.5em;
898}
899
900b.keycap,
901.keycap {
902 -moz-border-radius: 0.3em;
903}
904*/
905
906table tr td table tr td {
907 display: none;
908}
909
910
911hr {
912 display: none;
913}
914
915table {
916 border: 0em;
917}
918
919 .photo {
920 float: right;
921 margin-left: 1.5em;
922 margin-bottom: 1.5em;
923 margin-top: 0em;
924 max-width: 17em;
925 border: 1px solid gray;
926 padding: 3px;
927 background: white;
928}
929 .seperator {
930 padding-top: 2em;
931 clear: both;
932 }
933
934 #validators {
935 margin-top: 5em;
936 text-align: right;
937 color: #777;
938 }
939 @media print {
940 body {
941 font-size: 8pt;
942 }
943 .noprint {
944 display: none;
945 }
946 }
947
948
949.tip,
950.note {
951 background: #f0f0f2;
952 color: #333;
953 padding: 20px;
954 margin: 20px;
955}
956
957.tip h3,
958.note h3 {
959 padding: 0em;
960 margin: 0em;
961 font-size: 2em;
962 font-weight: bold;
963 color: #333;
964}
965
966.tip a,
967.note a {
968 color: #333;
969 text-decoration: underline;
970}
971
972.footnote {
973 font-size: small;
974 color: #333;
975}
976
977/* Changes the announcement text */
978.tip h3,
979.warning h3,
980.caution h3,
981.note h3 {
982 font-size:large;
983 color: #00557D;
984}
diff --git a/documentation/kernel-dev/kernel-dev.xml b/documentation/kernel-dev/kernel-dev.xml
new file mode 100644
index 0000000000..4ab95cbfce
--- /dev/null
+++ b/documentation/kernel-dev/kernel-dev.xml
@@ -0,0 +1,115 @@
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 <revision>
55 <revnumber>1.7</revnumber>
56 <date>October 2014</date>
57 <revremark>Released with the Yocto Project 1.7 Release.</revremark>
58 </revision>
59 <revision>
60 <revnumber>1.7.1</revnumber>
61 <date>January 2015</date>
62 <revremark>Released with the Yocto Project 1.7.1 Release.</revremark>
63 </revision>
64 <revision>
65 <revnumber>1.7.2</revnumber>
66 <date>June 2015</date>
67 <revremark>Released with the Yocto Project 1.7.2 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/">Creative Commons Attribution-Share Alike 2.0 UK: England &amp; Wales</ulink> as published by Creative Commons.
80 </para>
81 <note>
82 For the latest version of this manual associated with this
83 Yocto Project release, see the
84 <ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;'>Yocto Project Linux Kernel Development Manual</ulink>
85 from the Yocto Project website.
86 </note>
87 </legalnotice>
88
89 </bookinfo>
90
91 <xi:include href="kernel-dev-intro.xml"/>
92
93 <xi:include href="kernel-dev-common.xml"/>
94
95 <xi:include href="kernel-dev-advanced.xml"/>
96
97 <xi:include href="kernel-dev-concepts-appx.xml"/>
98
99 <xi:include href="kernel-dev-maint-appx.xml"/>
100
101<!--
102 <xi:include href="kernel-dev-examples.xml"/>
103-->
104
105 <xi:include href="kernel-dev-faq.xml"/>
106
107<!-- <index id='index'>
108 <title>Index</title>
109 </index>
110-->
111
112</book>
113<!--
114vim: expandtab tw=80 ts=4
115-->
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..9a77bde68b
--- /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..5770be6883
--- /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..a8b9bd6b5b
--- /dev/null
+++ b/documentation/mega-manual/mega-manual-customization.xsl
@@ -0,0 +1,34 @@
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/1.76.1/xhtml/docbook.xsl" />
5
6 <xsl:param name="generate.toc">
7 appendix toc
8 chapter toc
9 article nop
10 book nop
11 part nop
12 preface nop
13 qandadiv nop
14 qandaset nop
15 reference nop
16 section nop
17 set nop
18 </xsl:param>
19
20 <xsl:include href="../template/permalinks.xsl"/>
21 <xsl:include href="../template/section.title.xsl"/>
22 <xsl:include href="../template/component.title.xsl"/>
23 <xsl:include href="../template/division.title.xsl"/>
24 <xsl:include href="../template/formal.object.heading.xsl"/>
25 <xsl:include href="../template/gloss-permalinks.xsl"/>
26
27 <xsl:param name="html.stylesheet" select="'ref-style.css'" />
28 <xsl:param name="chapter.autolabel" select="1" />
29 <xsl:param name="appendix.autolabel">A</xsl:param>
30 <xsl:param name="section.autolabel" select="1" />
31 <xsl:param name="section.label.includes.component.label" select="1" />
32 <xsl:param name="generate.id.attributes" select="1" />
33
34</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..45b77ac958
--- /dev/null
+++ b/documentation/mega-manual/mega-style.css
@@ -0,0 +1,983 @@
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-position: top;
122 margin-top: -256px;
123 padding-right: 50px;
124 margin-left: 50px;
125 text-align: center;
126 width: 600px;
127}
128
129h3.author {
130 margin: 0em 0em 0em 0em;
131 padding: 0em 0em 0em 0em;
132 font-weight: normal;
133 font-size: 100%;
134 color: #333;
135 clear: both;
136}
137
138.author tt.email {
139 font-size: 66%;
140}
141
142.titlepage hr {
143 width: 0em;
144 clear: both;
145}
146
147.revhistory {
148 padding-top: 2em;
149 clear: both;
150}
151
152.toc,
153.list-of-tables,
154.list-of-examples,
155.list-of-figures {
156 padding: 1.33em 0em 2.5em 0em;
157 color: #00557D;
158}
159
160.toc p,
161.list-of-tables p,
162.list-of-figures p,
163.list-of-examples p {
164 padding: 0em 0em 0em 0em;
165 padding: 0em 0em 0.3em;
166 margin: 1.5em 0em 0em 0em;
167}
168
169.toc p b,
170.list-of-tables p b,
171.list-of-figures p b,
172.list-of-examples p b{
173 font-size: 100.0%;
174 font-weight: bold;
175}
176
177.toc dl,
178.list-of-tables dl,
179.list-of-figures dl,
180.list-of-examples dl {
181 margin: 0em 0em 0.5em 0em;
182 padding: 0em 0em 0em 0em;
183}
184
185.toc dt {
186 margin: 0em 0em 0em 0em;
187 padding: 0em 0em 0em 0em;
188}
189
190.toc dd {
191 margin: 0em 0em 0em 2.6em;
192 padding: 0em 0em 0em 0em;
193}
194
195div.glossary dl,
196div.variablelist dl {
197}
198
199.glossary dl dt,
200.variablelist dl dt,
201.variablelist dl dt span.term {
202 font-weight: normal;
203 width: 20em;
204 text-align: right;
205}
206
207.variablelist dl dt {
208 margin-top: 0.5em;
209}
210
211.glossary dl dd,
212.variablelist dl dd {
213 margin-top: -1em;
214 margin-left: 25.5em;
215}
216
217.glossary dd p,
218.variablelist dd p {
219 margin-top: 0em;
220 margin-bottom: 1em;
221}
222
223
224div.calloutlist table td {
225 padding: 0em 0em 0em 0em;
226 margin: 0em 0em 0em 0em;
227}
228
229div.calloutlist table td p {
230 margin-top: 0em;
231 margin-bottom: 1em;
232}
233
234div p.copyright {
235 text-align: left;
236}
237
238div.legalnotice p.legalnotice-title {
239 margin-bottom: 0em;
240}
241
242p {
243 line-height: 1.5em;
244 margin-top: 0em;
245
246}
247
248dl {
249 padding-top: 0em;
250}
251
252hr {
253 border: solid 1px;
254}
255
256
257.mediaobject,
258.mediaobjectco {
259 text-align: center;
260}
261
262img {
263 border: none;
264}
265
266ul {
267 padding: 0em 0em 0em 1.5em;
268}
269
270ul li {
271 padding: 0em 0em 0em 0em;
272}
273
274ul li p {
275 text-align: left;
276}
277
278table {
279 width :100%;
280}
281
282th {
283 padding: 0.25em;
284 text-align: left;
285 font-weight: normal;
286 vertical-align: top;
287}
288
289td {
290 padding: 0.25em;
291 vertical-align: top;
292}
293
294p a[id] {
295 margin: 0px;
296 padding: 0px;
297 display: inline;
298 background-image: none;
299}
300
301a {
302 text-decoration: underline;
303 color: #444;
304}
305
306pre {
307 overflow: auto;
308}
309
310a:hover {
311 text-decoration: underline;
312 /*font-weight: bold;*/
313}
314
315/* This style defines how the permalink character
316 appears by itself and when hovered over with
317 the mouse. */
318
319[alt='Permalink'] { color: #eee; }
320[alt='Permalink']:hover { color: black; }
321
322
323div.informalfigure,
324div.informalexample,
325div.informaltable,
326div.figure,
327div.table,
328div.example {
329 margin: 1em 0em;
330 padding: 1em;
331 page-break-inside: avoid;
332}
333
334
335div.informalfigure p.title b,
336div.informalexample p.title b,
337div.informaltable p.title b,
338div.figure p.title b,
339div.example p.title b,
340div.table p.title b{
341 padding-top: 0em;
342 margin-top: 0em;
343 font-size: 100%;
344 font-weight: normal;
345}
346
347.mediaobject .caption,
348.mediaobject .caption p {
349 text-align: center;
350 font-size: 80%;
351 padding-top: 0.5em;
352 padding-bottom: 0.5em;
353}
354
355.epigraph {
356 padding-left: 55%;
357 margin-bottom: 1em;
358}
359
360.epigraph p {
361 text-align: left;
362}
363
364.epigraph .quote {
365 font-style: italic;
366}
367.epigraph .attribution {
368 font-style: normal;
369 text-align: right;
370}
371
372span.application {
373 font-style: italic;
374}
375
376.programlisting {
377 font-family: monospace;
378 font-size: 80%;
379 white-space: pre;
380 margin: 1.33em 0em;
381 padding: 1.33em;
382}
383
384.tip,
385.warning,
386.caution,
387.note {
388 margin-top: 1em;
389 margin-bottom: 1em;
390
391}
392
393/* force full width of table within div */
394.tip table,
395.warning table,
396.caution table,
397.note table {
398 border: none;
399 width: 100%;
400}
401
402
403.tip table th,
404.warning table th,
405.caution table th,
406.note table th {
407 padding: 0.8em 0.0em 0.0em 0.0em;
408 margin : 0em 0em 0em 0em;
409}
410
411.tip p,
412.warning p,
413.caution p,
414.note p {
415 margin-top: 0.5em;
416 margin-bottom: 0.5em;
417 padding-right: 1em;
418 text-align: left;
419}
420
421.acronym {
422 text-transform: uppercase;
423}
424
425b.keycap,
426.keycap {
427 padding: 0.09em 0.3em;
428 margin: 0em;
429}
430
431.itemizedlist li {
432 clear: none;
433}
434
435.filename {
436 font-size: medium;
437 font-family: Courier, monospace;
438}
439
440
441div.navheader, div.heading{
442 position: absolute;
443 left: 0em;
444 top: 0em;
445 width: 100%;
446 background-color: #cdf;
447 width: 100%;
448}
449
450div.navfooter, div.footing{
451 position: fixed;
452 left: 0em;
453 bottom: 0em;
454 background-color: #eee;
455 width: 100%;
456}
457
458
459div.navheader td,
460div.navfooter td {
461 font-size: 66%;
462}
463
464div.navheader table th {
465 /*font-family: Georgia, Times, serif;*/
466 /*font-size: x-large;*/
467 font-size: 80%;
468}
469
470div.navheader table {
471 border-left: 0em;
472 border-right: 0em;
473 border-top: 0em;
474 width: 100%;
475}
476
477div.navfooter table {
478 border-left: 0em;
479 border-right: 0em;
480 border-bottom: 0em;
481 width: 100%;
482}
483
484div.navheader table td a,
485div.navfooter table td a {
486 color: #777;
487 text-decoration: none;
488}
489
490/* normal text in the footer */
491div.navfooter table td {
492 color: black;
493}
494
495div.navheader table td a:visited,
496div.navfooter table td a:visited {
497 color: #444;
498}
499
500
501/* links in header and footer */
502div.navheader table td a:hover,
503div.navfooter table td a:hover {
504 text-decoration: underline;
505 background-color: transparent;
506 color: #33a;
507}
508
509div.navheader hr,
510div.navfooter hr {
511 display: none;
512}
513
514
515.qandaset tr.question td p {
516 margin: 0em 0em 1em 0em;
517 padding: 0em 0em 0em 0em;
518}
519
520.qandaset tr.answer td p {
521 margin: 0em 0em 1em 0em;
522 padding: 0em 0em 0em 0em;
523}
524.answer td {
525 padding-bottom: 1.5em;
526}
527
528.emphasis {
529 font-weight: bold;
530}
531
532
533 /************* /
534 / decorations /
535/ *************/
536
537.titlepage {
538}
539
540.part .title {
541}
542
543.subtitle {
544 border: none;
545}
546
547/*
548h1 {
549 border: none;
550}
551
552h2 {
553 border-top: solid 0.2em;
554 border-bottom: solid 0.06em;
555}
556
557h3 {
558 border-top: 0em;
559 border-bottom: solid 0.06em;
560}
561
562h4 {
563 border: 0em;
564 border-bottom: solid 0.06em;
565}
566
567h5 {
568 border: 0em;
569}
570*/
571
572.programlisting {
573 border: solid 1px;
574}
575
576div.figure,
577div.table,
578div.informalfigure,
579div.informaltable,
580div.informalexample,
581div.example {
582 border: 1px solid;
583}
584
585
586
587.tip,
588.warning,
589.caution,
590.note {
591 border: 1px solid;
592}
593
594.tip table th,
595.warning table th,
596.caution table th,
597.note table th {
598 border-bottom: 1px solid;
599}
600
601.question td {
602 border-top: 1px solid black;
603}
604
605.answer {
606}
607
608
609b.keycap,
610.keycap {
611 border: 1px solid;
612}
613
614
615div.navheader, div.heading{
616 border-bottom: 1px solid;
617}
618
619
620div.navfooter, div.footing{
621 border-top: 1px solid;
622}
623
624 /********* /
625 / colors /
626/ *********/
627
628body {
629 color: #333;
630 background: white;
631}
632
633a {
634 background: transparent;
635}
636
637a:hover {
638 background-color: #dedede;
639}
640
641
642h1,
643h2,
644h3,
645h4,
646h5,
647h6,
648h7,
649h8 {
650 background-color: transparent;
651}
652
653hr {
654 border-color: #aaa;
655}
656
657
658.tip, .warning, .caution, .note {
659 border-color: #fff;
660}
661
662
663.tip table th,
664.warning table th,
665.caution table th,
666.note table th {
667 border-bottom-color: #fff;
668}
669
670
671.warning {
672 background-color: #f0f0f2;
673}
674
675.caution {
676 background-color: #f0f0f2;
677}
678
679.tip {
680 background-color: #f0f0f2;
681}
682
683.note {
684 background-color: #f0f0f2;
685}
686
687.glossary dl dt,
688.variablelist dl dt,
689.variablelist dl dt span.term {
690 color: #044;
691}
692
693div.figure,
694div.table,
695div.example,
696div.informalfigure,
697div.informaltable,
698div.informalexample {
699 border-color: #aaa;
700}
701
702pre.programlisting {
703 color: black;
704 background-color: #fff;
705 border-color: #aaa;
706 border-width: 2px;
707}
708
709.guimenu,
710.guilabel,
711.guimenuitem {
712 background-color: #eee;
713}
714
715
716b.keycap,
717.keycap {
718 background-color: #eee;
719 border-color: #999;
720}
721
722
723div.navheader {
724 border-color: black;
725}
726
727
728div.navfooter {
729 border-color: black;
730}
731
732
733 /*********** /
734 / graphics /
735/ ***********/
736
737/*
738body {
739 background-image: url("images/body_bg.jpg");
740 background-attachment: fixed;
741}
742
743.navheader,
744.note,
745.tip {
746 background-image: url("images/note_bg.jpg");
747 background-attachment: fixed;
748}
749
750.warning,
751.caution {
752 background-image: url("images/warning_bg.jpg");
753 background-attachment: fixed;
754}
755
756.figure,
757.informalfigure,
758.example,
759.informalexample,
760.table,
761.informaltable {
762 background-image: url("images/figure_bg.jpg");
763 background-attachment: fixed;
764}
765
766*/
767h1,
768h2,
769h3,
770h4,
771h5,
772h6,
773h7{
774}
775
776/*
777Example of how to stick an image as part of the title.
778
779div.article .titlepage .title
780{
781 background-image: url("figures/white-on-black.png");
782 background-position: center;
783 background-repeat: repeat-x;
784}
785*/
786
787div.preface .titlepage .title,
788div.colophon .title,
789div.chapter .titlepage .title,
790div.article .titlepage .title
791{
792}
793
794div.section div.section .titlepage .title,
795div.sect2 .titlepage .title {
796 background: none;
797}
798
799
800h1.title {
801 background-color: transparent;
802 background-repeat: no-repeat;
803 height: 256px;
804 text-indent: -9000px;
805 overflow:hidden;
806}
807
808h2.subtitle {
809 background-color: transparent;
810 text-indent: -9000px;
811 overflow:hidden;
812 width: 0px;
813 display: none;
814}
815
816 /*************************************** /
817 / pippin.gimp.org specific alterations /
818/ ***************************************/
819
820/*
821div.heading, div.navheader {
822 color: #777;
823 font-size: 80%;
824 padding: 0;
825 margin: 0;
826 text-align: left;
827 position: absolute;
828 top: 0px;
829 left: 0px;
830 width: 100%;
831 height: 50px;
832 background: url('/gfx/heading_bg.png') transparent;
833 background-repeat: repeat-x;
834 background-attachment: fixed;
835 border: none;
836}
837
838div.heading a {
839 color: #444;
840}
841
842div.footing, div.navfooter {
843 border: none;
844 color: #ddd;
845 font-size: 80%;
846 text-align:right;
847
848 width: 100%;
849 padding-top: 10px;
850 position: absolute;
851 bottom: 0px;
852 left: 0px;
853
854 background: url('/gfx/footing_bg.png') transparent;
855}
856*/
857
858
859
860 /****************** /
861 / nasty ie tweaks /
862/ ******************/
863
864/*
865div.heading, div.navheader {
866 width:expression(document.body.clientWidth + "px");
867}
868
869div.footing, div.navfooter {
870 width:expression(document.body.clientWidth + "px");
871 margin-left:expression("-5em");
872}
873body {
874 padding:expression("4em 5em 0em 5em");
875}
876*/
877
878 /**************************************** /
879 / mozilla vendor specific css extensions /
880/ ****************************************/
881/*
882div.navfooter, div.footing{
883 -moz-opacity: 0.8em;
884}
885
886div.figure,
887div.table,
888div.informalfigure,
889div.informaltable,
890div.informalexample,
891div.example,
892.tip,
893.warning,
894.caution,
895.note {
896 -moz-border-radius: 0.5em;
897}
898
899b.keycap,
900.keycap {
901 -moz-border-radius: 0.3em;
902}
903*/
904
905table tr td table tr td {
906 display: none;
907}
908
909
910hr {
911 display: none;
912}
913
914table {
915 border: 0em;
916}
917
918 .photo {
919 float: right;
920 margin-left: 1.5em;
921 margin-bottom: 1.5em;
922 margin-top: 0em;
923 max-width: 17em;
924 border: 1px solid gray;
925 padding: 3px;
926 background: white;
927}
928 .seperator {
929 padding-top: 2em;
930 clear: both;
931 }
932
933 #validators {
934 margin-top: 5em;
935 text-align: right;
936 color: #777;
937 }
938 @media print {
939 body {
940 font-size: 8pt;
941 }
942 .noprint {
943 display: none;
944 }
945 }
946
947
948.tip,
949.note {
950 background: #f0f0f2;
951 color: #333;
952 padding: 20px;
953 margin: 20px;
954}
955
956.tip h3,
957.note h3 {
958 padding: 0em;
959 margin: 0em;
960 font-size: 2em;
961 font-weight: bold;
962 color: #333;
963}
964
965.tip a,
966.note a {
967 color: #333;
968 text-decoration: underline;
969}
970
971.footnote {
972 font-size: small;
973 color: #333;
974}
975
976/* Changes the announcement text */
977.tip h3,
978.warning h3,
979.caution h3,
980.note h3 {
981 font-size:large;
982 color: #00557D;
983}
diff --git a/documentation/poky.ent b/documentation/poky.ent
new file mode 100644
index 0000000000..4fa1a08c4f
--- /dev/null
+++ b/documentation/poky.ent
@@ -0,0 +1,66 @@
1<!ENTITY DISTRO "1.7.2">
2<!ENTITY DISTRO_COMPRESSED "172">
3<!ENTITY DISTRO_NAME "dizzy">
4<!ENTITY YOCTO_DOC_VERSION "1.7.2">
5<!ENTITY POKYVERSION "12.0.2">
6<!ENTITY POKYVERSION_COMPRESSED "1202">
7<!ENTITY YOCTO_POKY "poky-&DISTRO_NAME;-&POKYVERSION;">
8<!ENTITY COPYRIGHT_YEAR "2010-2015">
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;/downloads/core/&DISTRO_NAME;&DISTRO_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/">
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 socat">
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 socat">
63<!ENTITY OPENSUSE_HOST_PACKAGES_ESSENTIAL "python gcc gcc-c++ git chrpath make wget python-xml \
64 diffstat texinfo python-curses patch socat">
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 socat">
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..7284aec365
--- /dev/null
+++ b/documentation/profile-manual/profile-manual-customization.xsl
@@ -0,0 +1,19 @@
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/1.76.1/xhtml/docbook.xsl" />
5
6 <xsl:include href="../template/permalinks.xsl"/>
7 <xsl:include href="../template/section.title.xsl"/>
8 <xsl:include href="../template/component.title.xsl"/>
9 <xsl:include href="../template/division.title.xsl"/>
10 <xsl:include href="../template/formal.object.heading.xsl"/>
11
12 <xsl:param name="html.stylesheet" select="'profile-manual-style.css'" />
13 <xsl:param name="chapter.autolabel" select="1" />
14 <xsl:param name="appendix.autolabel" select="A" />
15 <xsl:param name="section.autolabel" select="1" />
16 <xsl:param name="section.label.includes.component.label" select="1" />
17 <xsl:param name="generate.id.attributes" select="1" />
18
19</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..0d3f5a6099
--- /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 Profiling and Tracing 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..f3cca8536d
--- /dev/null
+++ b/documentation/profile-manual/profile-manual-style.css
@@ -0,0 +1,984 @@
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/* This style defines how the permalink character
317 appears by itself and when hovered over with
318 the mouse. */
319
320[alt='Permalink'] { color: #eee; }
321[alt='Permalink']:hover { color: black; }
322
323
324div.informalfigure,
325div.informalexample,
326div.informaltable,
327div.figure,
328div.table,
329div.example {
330 margin: 1em 0em;
331 padding: 1em;
332 page-break-inside: avoid;
333}
334
335
336div.informalfigure p.title b,
337div.informalexample p.title b,
338div.informaltable p.title b,
339div.figure p.title b,
340div.example p.title b,
341div.table p.title b{
342 padding-top: 0em;
343 margin-top: 0em;
344 font-size: 100%;
345 font-weight: normal;
346}
347
348.mediaobject .caption,
349.mediaobject .caption p {
350 text-align: center;
351 font-size: 80%;
352 padding-top: 0.5em;
353 padding-bottom: 0.5em;
354}
355
356.epigraph {
357 padding-left: 55%;
358 margin-bottom: 1em;
359}
360
361.epigraph p {
362 text-align: left;
363}
364
365.epigraph .quote {
366 font-style: italic;
367}
368.epigraph .attribution {
369 font-style: normal;
370 text-align: right;
371}
372
373span.application {
374 font-style: italic;
375}
376
377.programlisting {
378 font-family: monospace;
379 font-size: 80%;
380 white-space: pre;
381 margin: 1.33em 0em;
382 padding: 1.33em;
383}
384
385.tip,
386.warning,
387.caution,
388.note {
389 margin-top: 1em;
390 margin-bottom: 1em;
391
392}
393
394/* force full width of table within div */
395.tip table,
396.warning table,
397.caution table,
398.note table {
399 border: none;
400 width: 100%;
401}
402
403
404.tip table th,
405.warning table th,
406.caution table th,
407.note table th {
408 padding: 0.8em 0.0em 0.0em 0.0em;
409 margin : 0em 0em 0em 0em;
410}
411
412.tip p,
413.warning p,
414.caution p,
415.note p {
416 margin-top: 0.5em;
417 margin-bottom: 0.5em;
418 padding-right: 1em;
419 text-align: left;
420}
421
422.acronym {
423 text-transform: uppercase;
424}
425
426b.keycap,
427.keycap {
428 padding: 0.09em 0.3em;
429 margin: 0em;
430}
431
432.itemizedlist li {
433 clear: none;
434}
435
436.filename {
437 font-size: medium;
438 font-family: Courier, monospace;
439}
440
441
442div.navheader, div.heading{
443 position: absolute;
444 left: 0em;
445 top: 0em;
446 width: 100%;
447 background-color: #cdf;
448 width: 100%;
449}
450
451div.navfooter, div.footing{
452 position: fixed;
453 left: 0em;
454 bottom: 0em;
455 background-color: #eee;
456 width: 100%;
457}
458
459
460div.navheader td,
461div.navfooter td {
462 font-size: 66%;
463}
464
465div.navheader table th {
466 /*font-family: Georgia, Times, serif;*/
467 /*font-size: x-large;*/
468 font-size: 80%;
469}
470
471div.navheader table {
472 border-left: 0em;
473 border-right: 0em;
474 border-top: 0em;
475 width: 100%;
476}
477
478div.navfooter table {
479 border-left: 0em;
480 border-right: 0em;
481 border-bottom: 0em;
482 width: 100%;
483}
484
485div.navheader table td a,
486div.navfooter table td a {
487 color: #777;
488 text-decoration: none;
489}
490
491/* normal text in the footer */
492div.navfooter table td {
493 color: black;
494}
495
496div.navheader table td a:visited,
497div.navfooter table td a:visited {
498 color: #444;
499}
500
501
502/* links in header and footer */
503div.navheader table td a:hover,
504div.navfooter table td a:hover {
505 text-decoration: underline;
506 background-color: transparent;
507 color: #33a;
508}
509
510div.navheader hr,
511div.navfooter hr {
512 display: none;
513}
514
515
516.qandaset tr.question td p {
517 margin: 0em 0em 1em 0em;
518 padding: 0em 0em 0em 0em;
519}
520
521.qandaset tr.answer td p {
522 margin: 0em 0em 1em 0em;
523 padding: 0em 0em 0em 0em;
524}
525.answer td {
526 padding-bottom: 1.5em;
527}
528
529.emphasis {
530 font-weight: bold;
531}
532
533
534 /************* /
535 / decorations /
536/ *************/
537
538.titlepage {
539}
540
541.part .title {
542}
543
544.subtitle {
545 border: none;
546}
547
548/*
549h1 {
550 border: none;
551}
552
553h2 {
554 border-top: solid 0.2em;
555 border-bottom: solid 0.06em;
556}
557
558h3 {
559 border-top: 0em;
560 border-bottom: solid 0.06em;
561}
562
563h4 {
564 border: 0em;
565 border-bottom: solid 0.06em;
566}
567
568h5 {
569 border: 0em;
570}
571*/
572
573.programlisting {
574 border: solid 1px;
575}
576
577div.figure,
578div.table,
579div.informalfigure,
580div.informaltable,
581div.informalexample,
582div.example {
583 border: 1px solid;
584}
585
586
587
588.tip,
589.warning,
590.caution,
591.note {
592 border: 1px solid;
593}
594
595.tip table th,
596.warning table th,
597.caution table th,
598.note table th {
599 border-bottom: 1px solid;
600}
601
602.question td {
603 border-top: 1px solid black;
604}
605
606.answer {
607}
608
609
610b.keycap,
611.keycap {
612 border: 1px solid;
613}
614
615
616div.navheader, div.heading{
617 border-bottom: 1px solid;
618}
619
620
621div.navfooter, div.footing{
622 border-top: 1px solid;
623}
624
625 /********* /
626 / colors /
627/ *********/
628
629body {
630 color: #333;
631 background: white;
632}
633
634a {
635 background: transparent;
636}
637
638a:hover {
639 background-color: #dedede;
640}
641
642
643h1,
644h2,
645h3,
646h4,
647h5,
648h6,
649h7,
650h8 {
651 background-color: transparent;
652}
653
654hr {
655 border-color: #aaa;
656}
657
658
659.tip, .warning, .caution, .note {
660 border-color: #fff;
661}
662
663
664.tip table th,
665.warning table th,
666.caution table th,
667.note table th {
668 border-bottom-color: #fff;
669}
670
671
672.warning {
673 background-color: #f0f0f2;
674}
675
676.caution {
677 background-color: #f0f0f2;
678}
679
680.tip {
681 background-color: #f0f0f2;
682}
683
684.note {
685 background-color: #f0f0f2;
686}
687
688.glossary dl dt,
689.variablelist dl dt,
690.variablelist dl dt span.term {
691 color: #044;
692}
693
694div.figure,
695div.table,
696div.example,
697div.informalfigure,
698div.informaltable,
699div.informalexample {
700 border-color: #aaa;
701}
702
703pre.programlisting {
704 color: black;
705 background-color: #fff;
706 border-color: #aaa;
707 border-width: 2px;
708}
709
710.guimenu,
711.guilabel,
712.guimenuitem {
713 background-color: #eee;
714}
715
716
717b.keycap,
718.keycap {
719 background-color: #eee;
720 border-color: #999;
721}
722
723
724div.navheader {
725 border-color: black;
726}
727
728
729div.navfooter {
730 border-color: black;
731}
732
733
734 /*********** /
735 / graphics /
736/ ***********/
737
738/*
739body {
740 background-image: url("images/body_bg.jpg");
741 background-attachment: fixed;
742}
743
744.navheader,
745.note,
746.tip {
747 background-image: url("images/note_bg.jpg");
748 background-attachment: fixed;
749}
750
751.warning,
752.caution {
753 background-image: url("images/warning_bg.jpg");
754 background-attachment: fixed;
755}
756
757.figure,
758.informalfigure,
759.example,
760.informalexample,
761.table,
762.informaltable {
763 background-image: url("images/figure_bg.jpg");
764 background-attachment: fixed;
765}
766
767*/
768h1,
769h2,
770h3,
771h4,
772h5,
773h6,
774h7{
775}
776
777/*
778Example of how to stick an image as part of the title.
779
780div.article .titlepage .title
781{
782 background-image: url("figures/white-on-black.png");
783 background-position: center;
784 background-repeat: repeat-x;
785}
786*/
787
788div.preface .titlepage .title,
789div.colophon .title,
790div.chapter .titlepage .title,
791div.article .titlepage .title
792{
793}
794
795div.section div.section .titlepage .title,
796div.sect2 .titlepage .title {
797 background: none;
798}
799
800
801h1.title {
802 background-color: transparent;
803 background-repeat: no-repeat;
804 height: 256px;
805 text-indent: -9000px;
806 overflow:hidden;
807}
808
809h2.subtitle {
810 background-color: transparent;
811 text-indent: -9000px;
812 overflow:hidden;
813 width: 0px;
814 display: none;
815}
816
817 /*************************************** /
818 / pippin.gimp.org specific alterations /
819/ ***************************************/
820
821/*
822div.heading, div.navheader {
823 color: #777;
824 font-size: 80%;
825 padding: 0;
826 margin: 0;
827 text-align: left;
828 position: absolute;
829 top: 0px;
830 left: 0px;
831 width: 100%;
832 height: 50px;
833 background: url('/gfx/heading_bg.png') transparent;
834 background-repeat: repeat-x;
835 background-attachment: fixed;
836 border: none;
837}
838
839div.heading a {
840 color: #444;
841}
842
843div.footing, div.navfooter {
844 border: none;
845 color: #ddd;
846 font-size: 80%;
847 text-align:right;
848
849 width: 100%;
850 padding-top: 10px;
851 position: absolute;
852 bottom: 0px;
853 left: 0px;
854
855 background: url('/gfx/footing_bg.png') transparent;
856}
857*/
858
859
860
861 /****************** /
862 / nasty ie tweaks /
863/ ******************/
864
865/*
866div.heading, div.navheader {
867 width:expression(document.body.clientWidth + "px");
868}
869
870div.footing, div.navfooter {
871 width:expression(document.body.clientWidth + "px");
872 margin-left:expression("-5em");
873}
874body {
875 padding:expression("4em 5em 0em 5em");
876}
877*/
878
879 /**************************************** /
880 / mozilla vendor specific css extensions /
881/ ****************************************/
882/*
883div.navfooter, div.footing{
884 -moz-opacity: 0.8em;
885}
886
887div.figure,
888div.table,
889div.informalfigure,
890div.informaltable,
891div.informalexample,
892div.example,
893.tip,
894.warning,
895.caution,
896.note {
897 -moz-border-radius: 0.5em;
898}
899
900b.keycap,
901.keycap {
902 -moz-border-radius: 0.3em;
903}
904*/
905
906table tr td table tr td {
907 display: none;
908}
909
910
911hr {
912 display: none;
913}
914
915table {
916 border: 0em;
917}
918
919 .photo {
920 float: right;
921 margin-left: 1.5em;
922 margin-bottom: 1.5em;
923 margin-top: 0em;
924 max-width: 17em;
925 border: 1px solid gray;
926 padding: 3px;
927 background: white;
928}
929 .seperator {
930 padding-top: 2em;
931 clear: both;
932 }
933
934 #validators {
935 margin-top: 5em;
936 text-align: right;
937 color: #777;
938 }
939 @media print {
940 body {
941 font-size: 8pt;
942 }
943 .noprint {
944 display: none;
945 }
946 }
947
948
949.tip,
950.note {
951 background: #f0f0f2;
952 color: #333;
953 padding: 20px;
954 margin: 20px;
955}
956
957.tip h3,
958.note h3 {
959 padding: 0em;
960 margin: 0em;
961 font-size: 2em;
962 font-weight: bold;
963 color: #333;
964}
965
966.tip a,
967.note a {
968 color: #333;
969 text-decoration: underline;
970}
971
972.footnote {
973 font-size: small;
974 color: #333;
975}
976
977/* Changes the announcement text */
978.tip h3,
979.warning h3,
980.caution h3,
981.note h3 {
982 font-size:large;
983 color: #00557D;
984}
diff --git a/documentation/profile-manual/profile-manual-usage.xml b/documentation/profile-manual/profile-manual-usage.xml
new file mode 100644
index 0000000000..95ad73909c
--- /dev/null
+++ b/documentation/profile-manual/profile-manual-usage.xml
@@ -0,0 +1,3695 @@
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 analogous 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 accommodate 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 <replaceable>target</replaceable>'
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 You can find the primary LTTng Documentation on the
3261 <ulink url='https://lttng.org/docs/'>LTTng Documentation</ulink>
3262 site.
3263 The documentation on this site is appropriate for intermediate to
3264 advanced software developers who are working in a Linux environment
3265 and are interested in efficient software tracing.
3266 </para>
3267
3268 <para>
3269 For information on LTTng in general, visit the
3270 <ulink url='http://lttng.org/lttng2.0'>LTTng Project</ulink>
3271 site.
3272 You can find a "Getting Started" link on this site that takes
3273 you to an LTTng Quick Start.
3274 </para>
3275
3276 <para>
3277 Finally, you can access extensive help information on how to use
3278 the LTTng plug-in to search and analyze captured traces via the
3279 Eclipse help system:
3280 <literallayout class='monospaced'>
3281 Help | Help Contents | LTTng Plug-in User Guide
3282 </literallayout>
3283 </para>
3284 </section>
3285</section>
3286
3287<section id='profile-manual-blktrace'>
3288 <title>blktrace</title>
3289
3290 <para>
3291 blktrace is a tool for tracing and reporting low-level disk I/O.
3292 blktrace provides the tracing half of the equation; its output can
3293 be piped into the blkparse program, which renders the data in a
3294 human-readable form and does some basic analysis:
3295 </para>
3296
3297 <section id='blktrace-setup'>
3298 <title>Setup</title>
3299
3300 <para>
3301 For this section, we'll assume you've already performed the
3302 basic setup outlined in the
3303 "<link linkend='profile-manual-general-setup'>General Setup</link>"
3304 section.
3305 </para>
3306
3307 <para>
3308 blktrace is an application that runs on the target system.
3309 You can run the entire blktrace and blkparse pipeline on the
3310 target, or you can run blktrace in 'listen' mode on the target
3311 and have blktrace and blkparse collect and analyze the data on
3312 the host (see the
3313 "<link linkend='using-blktrace-remotely'>Using blktrace Remotely</link>"
3314 section below).
3315 For the rest of this section we assume you've ssh'ed to the
3316 host and will be running blkrace on the target.
3317 </para>
3318 </section>
3319
3320 <section id='blktrace-basic-usage'>
3321 <title>Basic Usage</title>
3322
3323 <para>
3324 To record a trace, simply run the 'blktrace' command, giving it
3325 the name of the block device you want to trace activity on:
3326 <literallayout class='monospaced'>
3327 root@crownbay:~# blktrace /dev/sdc
3328 </literallayout>
3329 In another shell, execute a workload you want to trace.
3330 <literallayout class='monospaced'>
3331 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
3332 Connecting to downloads.yoctoproject.org (140.211.169.59:80)
3333 linux-2.6.19.2.tar.b 100% |*******************************| 41727k 0:00:00 ETA
3334 </literallayout>
3335 Press Ctrl-C in the blktrace shell to stop the trace. It will
3336 display how many events were logged, along with the per-cpu file
3337 sizes (blktrace records traces in per-cpu kernel buffers and
3338 simply dumps them to userspace for blkparse to merge and sort
3339 later).
3340 <literallayout class='monospaced'>
3341 ^C=== sdc ===
3342 CPU 0: 7082 events, 332 KiB data
3343 CPU 1: 1578 events, 74 KiB data
3344 Total: 8660 events (dropped 0), 406 KiB data
3345 </literallayout>
3346 If you examine the files saved to disk, you see multiple files,
3347 one per CPU and with the device name as the first part of the
3348 filename:
3349 <literallayout class='monospaced'>
3350 root@crownbay:~# ls -al
3351 drwxr-xr-x 6 root root 1024 Oct 27 22:39 .
3352 drwxr-sr-x 4 root root 1024 Oct 26 18:24 ..
3353 -rw-r--r-- 1 root root 339938 Oct 27 22:40 sdc.blktrace.0
3354 -rw-r--r-- 1 root root 75753 Oct 27 22:40 sdc.blktrace.1
3355 </literallayout>
3356 To view the trace events, simply invoke 'blkparse' in the
3357 directory containing the trace files, giving it the device name
3358 that forms the first part of the filenames:
3359 <literallayout class='monospaced'>
3360 root@crownbay:~# blkparse sdc
3361
3362 8,32 1 1 0.000000000 1225 Q WS 3417048 + 8 [jbd2/sdc-8]
3363 8,32 1 2 0.000025213 1225 G WS 3417048 + 8 [jbd2/sdc-8]
3364 8,32 1 3 0.000033384 1225 P N [jbd2/sdc-8]
3365 8,32 1 4 0.000043301 1225 I WS 3417048 + 8 [jbd2/sdc-8]
3366 8,32 1 0 0.000057270 0 m N cfq1225 insert_request
3367 8,32 1 0 0.000064813 0 m N cfq1225 add_to_rr
3368 8,32 1 5 0.000076336 1225 U N [jbd2/sdc-8] 1
3369 8,32 1 0 0.000088559 0 m N cfq workload slice:150
3370 8,32 1 0 0.000097359 0 m N cfq1225 set_active wl_prio:0 wl_type:1
3371 8,32 1 0 0.000104063 0 m N cfq1225 Not idling. st->count:1
3372 8,32 1 0 0.000112584 0 m N cfq1225 fifo= (null)
3373 8,32 1 0 0.000118730 0 m N cfq1225 dispatch_insert
3374 8,32 1 0 0.000127390 0 m N cfq1225 dispatched a request
3375 8,32 1 0 0.000133536 0 m N cfq1225 activate rq, drv=1
3376 8,32 1 6 0.000136889 1225 D WS 3417048 + 8 [jbd2/sdc-8]
3377 8,32 1 7 0.000360381 1225 Q WS 3417056 + 8 [jbd2/sdc-8]
3378 8,32 1 8 0.000377422 1225 G WS 3417056 + 8 [jbd2/sdc-8]
3379 8,32 1 9 0.000388876 1225 P N [jbd2/sdc-8]
3380 8,32 1 10 0.000397886 1225 Q WS 3417064 + 8 [jbd2/sdc-8]
3381 8,32 1 11 0.000404800 1225 M WS 3417064 + 8 [jbd2/sdc-8]
3382 8,32 1 12 0.000412343 1225 Q WS 3417072 + 8 [jbd2/sdc-8]
3383 8,32 1 13 0.000416533 1225 M WS 3417072 + 8 [jbd2/sdc-8]
3384 8,32 1 14 0.000422121 1225 Q WS 3417080 + 8 [jbd2/sdc-8]
3385 8,32 1 15 0.000425194 1225 M WS 3417080 + 8 [jbd2/sdc-8]
3386 8,32 1 16 0.000431968 1225 Q WS 3417088 + 8 [jbd2/sdc-8]
3387 8,32 1 17 0.000435251 1225 M WS 3417088 + 8 [jbd2/sdc-8]
3388 8,32 1 18 0.000440279 1225 Q WS 3417096 + 8 [jbd2/sdc-8]
3389 8,32 1 19 0.000443911 1225 M WS 3417096 + 8 [jbd2/sdc-8]
3390 8,32 1 20 0.000450336 1225 Q WS 3417104 + 8 [jbd2/sdc-8]
3391 8,32 1 21 0.000454038 1225 M WS 3417104 + 8 [jbd2/sdc-8]
3392 8,32 1 22 0.000462070 1225 Q WS 3417112 + 8 [jbd2/sdc-8]
3393 8,32 1 23 0.000465422 1225 M WS 3417112 + 8 [jbd2/sdc-8]
3394 8,32 1 24 0.000474222 1225 I WS 3417056 + 64 [jbd2/sdc-8]
3395 8,32 1 0 0.000483022 0 m N cfq1225 insert_request
3396 8,32 1 25 0.000489727 1225 U N [jbd2/sdc-8] 1
3397 8,32 1 0 0.000498457 0 m N cfq1225 Not idling. st->count:1
3398 8,32 1 0 0.000503765 0 m N cfq1225 dispatch_insert
3399 8,32 1 0 0.000512914 0 m N cfq1225 dispatched a request
3400 8,32 1 0 0.000518851 0 m N cfq1225 activate rq, drv=2
3401 .
3402 .
3403 .
3404 8,32 0 0 58.515006138 0 m N cfq3551 complete rqnoidle 1
3405 8,32 0 2024 58.516603269 3 C WS 3156992 + 16 [0]
3406 8,32 0 0 58.516626736 0 m N cfq3551 complete rqnoidle 1
3407 8,32 0 0 58.516634558 0 m N cfq3551 arm_idle: 8 group_idle: 0
3408 8,32 0 0 58.516636933 0 m N cfq schedule dispatch
3409 8,32 1 0 58.516971613 0 m N cfq3551 slice expired t=0
3410 8,32 1 0 58.516982089 0 m N cfq3551 sl_used=13 disp=6 charge=13 iops=0 sect=80
3411 8,32 1 0 58.516985511 0 m N cfq3551 del_from_rr
3412 8,32 1 0 58.516990819 0 m N cfq3551 put_queue
3413
3414 CPU0 (sdc):
3415 Reads Queued: 0, 0KiB Writes Queued: 331, 26,284KiB
3416 Read Dispatches: 0, 0KiB Write Dispatches: 485, 40,484KiB
3417 Reads Requeued: 0 Writes Requeued: 0
3418 Reads Completed: 0, 0KiB Writes Completed: 511, 41,000KiB
3419 Read Merges: 0, 0KiB Write Merges: 13, 160KiB
3420 Read depth: 0 Write depth: 2
3421 IO unplugs: 23 Timer unplugs: 0
3422 CPU1 (sdc):
3423 Reads Queued: 0, 0KiB Writes Queued: 249, 15,800KiB
3424 Read Dispatches: 0, 0KiB Write Dispatches: 42, 1,600KiB
3425 Reads Requeued: 0 Writes Requeued: 0
3426 Reads Completed: 0, 0KiB Writes Completed: 16, 1,084KiB
3427 Read Merges: 0, 0KiB Write Merges: 40, 276KiB
3428 Read depth: 0 Write depth: 2
3429 IO unplugs: 30 Timer unplugs: 1
3430
3431 Total (sdc):
3432 Reads Queued: 0, 0KiB Writes Queued: 580, 42,084KiB
3433 Read Dispatches: 0, 0KiB Write Dispatches: 527, 42,084KiB
3434 Reads Requeued: 0 Writes Requeued: 0
3435 Reads Completed: 0, 0KiB Writes Completed: 527, 42,084KiB
3436 Read Merges: 0, 0KiB Write Merges: 53, 436KiB
3437 IO unplugs: 53 Timer unplugs: 1
3438
3439 Throughput (R/W): 0KiB/s / 719KiB/s
3440 Events (sdc): 6,592 entries
3441 Skips: 0 forward (0 - 0.0%)
3442 Input file sdc.blktrace.0 added
3443 Input file sdc.blktrace.1 added
3444 </literallayout>
3445 The report shows each event that was found in the blktrace data,
3446 along with a summary of the overall block I/O traffic during
3447 the run. You can look at the
3448 <ulink url='http://linux.die.net/man/1/blkparse'>blkparse</ulink>
3449 manpage to learn the
3450 meaning of each field displayed in the trace listing.
3451 </para>
3452
3453 <section id='blktrace-live-mode'>
3454 <title>Live Mode</title>
3455
3456 <para>
3457 blktrace and blkparse are designed from the ground up to
3458 be able to operate together in a 'pipe mode' where the
3459 stdout of blktrace can be fed directly into the stdin of
3460 blkparse:
3461 <literallayout class='monospaced'>
3462 root@crownbay:~# blktrace /dev/sdc -o - | blkparse -i -
3463 </literallayout>
3464 This enables long-lived tracing sessions to run without
3465 writing anything to disk, and allows the user to look for
3466 certain conditions in the trace data in 'real-time' by
3467 viewing the trace output as it scrolls by on the screen or
3468 by passing it along to yet another program in the pipeline
3469 such as grep which can be used to identify and capture
3470 conditions of interest.
3471 </para>
3472
3473 <para>
3474 There's actually another blktrace command that implements
3475 the above pipeline as a single command, so the user doesn't
3476 have to bother typing in the above command sequence:
3477 <literallayout class='monospaced'>
3478 root@crownbay:~# btrace /dev/sdc
3479 </literallayout>
3480 </para>
3481 </section>
3482
3483 <section id='using-blktrace-remotely'>
3484 <title>Using blktrace Remotely</title>
3485
3486 <para>
3487 Because blktrace traces block I/O and at the same time
3488 normally writes its trace data to a block device, and
3489 in general because it's not really a great idea to make
3490 the device being traced the same as the device the tracer
3491 writes to, blktrace provides a way to trace without
3492 perturbing the traced device at all by providing native
3493 support for sending all trace data over the network.
3494 </para>
3495
3496 <para>
3497 To have blktrace operate in this mode, start blktrace on
3498 the target system being traced with the -l option, along with
3499 the device to trace:
3500 <literallayout class='monospaced'>
3501 root@crownbay:~# blktrace -l /dev/sdc
3502 server: waiting for connections...
3503 </literallayout>
3504 On the host system, use the -h option to connect to the
3505 target system, also passing it the device to trace:
3506 <literallayout class='monospaced'>
3507 $ blktrace -d /dev/sdc -h 192.168.1.43
3508 blktrace: connecting to 192.168.1.43
3509 blktrace: connected!
3510 </literallayout>
3511 On the target system, you should see this:
3512 <literallayout class='monospaced'>
3513 server: connection from 192.168.1.43
3514 </literallayout>
3515 In another shell, execute a workload you want to trace.
3516 <literallayout class='monospaced'>
3517 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
3518 Connecting to downloads.yoctoproject.org (140.211.169.59:80)
3519 linux-2.6.19.2.tar.b 100% |*******************************| 41727k 0:00:00 ETA
3520 </literallayout>
3521 When it's done, do a Ctrl-C on the host system to
3522 stop the trace:
3523 <literallayout class='monospaced'>
3524 ^C=== sdc ===
3525 CPU 0: 7691 events, 361 KiB data
3526 CPU 1: 4109 events, 193 KiB data
3527 Total: 11800 events (dropped 0), 554 KiB data
3528 </literallayout>
3529 On the target system, you should also see a trace
3530 summary for the trace just ended:
3531 <literallayout class='monospaced'>
3532 server: end of run for 192.168.1.43:sdc
3533 === sdc ===
3534 CPU 0: 7691 events, 361 KiB data
3535 CPU 1: 4109 events, 193 KiB data
3536 Total: 11800 events (dropped 0), 554 KiB data
3537 </literallayout>
3538 The blktrace instance on the host will save the target
3539 output inside a hostname-timestamp directory:
3540 <literallayout class='monospaced'>
3541 $ ls -al
3542 drwxr-xr-x 10 root root 1024 Oct 28 02:40 .
3543 drwxr-sr-x 4 root root 1024 Oct 26 18:24 ..
3544 drwxr-xr-x 2 root root 1024 Oct 28 02:40 192.168.1.43-2012-10-28-02:40:56
3545 </literallayout>
3546 cd into that directory to see the output files:
3547 <literallayout class='monospaced'>
3548 $ ls -l
3549 -rw-r--r-- 1 root root 369193 Oct 28 02:44 sdc.blktrace.0
3550 -rw-r--r-- 1 root root 197278 Oct 28 02:44 sdc.blktrace.1
3551 </literallayout>
3552 And run blkparse on the host system using the device name:
3553 <literallayout class='monospaced'>
3554 $ blkparse sdc
3555
3556 8,32 1 1 0.000000000 1263 Q RM 6016 + 8 [ls]
3557 8,32 1 0 0.000036038 0 m N cfq1263 alloced
3558 8,32 1 2 0.000039390 1263 G RM 6016 + 8 [ls]
3559 8,32 1 3 0.000049168 1263 I RM 6016 + 8 [ls]
3560 8,32 1 0 0.000056152 0 m N cfq1263 insert_request
3561 8,32 1 0 0.000061600 0 m N cfq1263 add_to_rr
3562 8,32 1 0 0.000075498 0 m N cfq workload slice:300
3563 .
3564 .
3565 .
3566 8,32 0 0 177.266385696 0 m N cfq1267 arm_idle: 8 group_idle: 0
3567 8,32 0 0 177.266388140 0 m N cfq schedule dispatch
3568 8,32 1 0 177.266679239 0 m N cfq1267 slice expired t=0
3569 8,32 1 0 177.266689297 0 m N cfq1267 sl_used=9 disp=6 charge=9 iops=0 sect=56
3570 8,32 1 0 177.266692649 0 m N cfq1267 del_from_rr
3571 8,32 1 0 177.266696560 0 m N cfq1267 put_queue
3572
3573 CPU0 (sdc):
3574 Reads Queued: 0, 0KiB Writes Queued: 270, 21,708KiB
3575 Read Dispatches: 59, 2,628KiB Write Dispatches: 495, 39,964KiB
3576 Reads Requeued: 0 Writes Requeued: 0
3577 Reads Completed: 90, 2,752KiB Writes Completed: 543, 41,596KiB
3578 Read Merges: 0, 0KiB Write Merges: 9, 344KiB
3579 Read depth: 2 Write depth: 2
3580 IO unplugs: 20 Timer unplugs: 1
3581 CPU1 (sdc):
3582 Reads Queued: 688, 2,752KiB Writes Queued: 381, 20,652KiB
3583 Read Dispatches: 31, 124KiB Write Dispatches: 59, 2,396KiB
3584 Reads Requeued: 0 Writes Requeued: 0
3585 Reads Completed: 0, 0KiB Writes Completed: 11, 764KiB
3586 Read Merges: 598, 2,392KiB Write Merges: 88, 448KiB
3587 Read depth: 2 Write depth: 2
3588 IO unplugs: 52 Timer unplugs: 0
3589
3590 Total (sdc):
3591 Reads Queued: 688, 2,752KiB Writes Queued: 651, 42,360KiB
3592 Read Dispatches: 90, 2,752KiB Write Dispatches: 554, 42,360KiB
3593 Reads Requeued: 0 Writes Requeued: 0
3594 Reads Completed: 90, 2,752KiB Writes Completed: 554, 42,360KiB
3595 Read Merges: 598, 2,392KiB Write Merges: 97, 792KiB
3596 IO unplugs: 72 Timer unplugs: 1
3597
3598 Throughput (R/W): 15KiB/s / 238KiB/s
3599 Events (sdc): 9,301 entries
3600 Skips: 0 forward (0 - 0.0%)
3601 </literallayout>
3602 You should see the trace events and summary just as
3603 you would have if you'd run the same command on the target.
3604 </para>
3605 </section>
3606
3607 <section id='tracing-block-io-via-ftrace'>
3608 <title>Tracing Block I/O via 'ftrace'</title>
3609
3610 <para>
3611 It's also possible to trace block I/O using only
3612 <link linkend='the-trace-events-subsystem'>trace events subsystem</link>,
3613 which can be useful for casual tracing
3614 if you don't want to bother dealing with the userspace tools.
3615 </para>
3616
3617 <para>
3618 To enable tracing for a given device, use
3619 /sys/block/xxx/trace/enable, where xxx is the device name.
3620 This for example enables tracing for /dev/sdc:
3621 <literallayout class='monospaced'>
3622 root@crownbay:/sys/kernel/debug/tracing# echo 1 > /sys/block/sdc/trace/enable
3623 </literallayout>
3624 Once you've selected the device(s) you want to trace,
3625 selecting the 'blk' tracer will turn the blk tracer on:
3626 <literallayout class='monospaced'>
3627 root@crownbay:/sys/kernel/debug/tracing# cat available_tracers
3628 blk function_graph function nop
3629
3630 root@crownbay:/sys/kernel/debug/tracing# echo blk > current_tracer
3631 </literallayout>
3632 Execute the workload you're interested in:
3633 <literallayout class='monospaced'>
3634 root@crownbay:/sys/kernel/debug/tracing# cat /media/sdc/testfile.txt
3635 </literallayout>
3636 And look at the output (note here that we're using
3637 'trace_pipe' instead of trace to capture this trace -
3638 this allows us to wait around on the pipe for data to
3639 appear):
3640 <literallayout class='monospaced'>
3641 root@crownbay:/sys/kernel/debug/tracing# cat trace_pipe
3642 cat-3587 [001] d..1 3023.276361: 8,32 Q R 1699848 + 8 [cat]
3643 cat-3587 [001] d..1 3023.276410: 8,32 m N cfq3587 alloced
3644 cat-3587 [001] d..1 3023.276415: 8,32 G R 1699848 + 8 [cat]
3645 cat-3587 [001] d..1 3023.276424: 8,32 P N [cat]
3646 cat-3587 [001] d..2 3023.276432: 8,32 I R 1699848 + 8 [cat]
3647 cat-3587 [001] d..1 3023.276439: 8,32 m N cfq3587 insert_request
3648 cat-3587 [001] d..1 3023.276445: 8,32 m N cfq3587 add_to_rr
3649 cat-3587 [001] d..2 3023.276454: 8,32 U N [cat] 1
3650 cat-3587 [001] d..1 3023.276464: 8,32 m N cfq workload slice:150
3651 cat-3587 [001] d..1 3023.276471: 8,32 m N cfq3587 set_active wl_prio:0 wl_type:2
3652 cat-3587 [001] d..1 3023.276478: 8,32 m N cfq3587 fifo= (null)
3653 cat-3587 [001] d..1 3023.276483: 8,32 m N cfq3587 dispatch_insert
3654 cat-3587 [001] d..1 3023.276490: 8,32 m N cfq3587 dispatched a request
3655 cat-3587 [001] d..1 3023.276497: 8,32 m N cfq3587 activate rq, drv=1
3656 cat-3587 [001] d..2 3023.276500: 8,32 D R 1699848 + 8 [cat]
3657 </literallayout>
3658 And this turns off tracing for the specified device:
3659 <literallayout class='monospaced'>
3660 root@crownbay:/sys/kernel/debug/tracing# echo 0 > /sys/block/sdc/trace/enable
3661 </literallayout>
3662 </para>
3663 </section>
3664 </section>
3665
3666 <section id='blktrace-documentation'>
3667 <title>Documentation</title>
3668
3669 <para>
3670 Online versions of the man pages for the commands discussed
3671 in this section can be found here:
3672 <itemizedlist>
3673 <listitem><para><ulink url='http://linux.die.net/man/8/blktrace'>http://linux.die.net/man/8/blktrace</ulink>
3674 </para></listitem>
3675 <listitem><para><ulink url='http://linux.die.net/man/1/blkparse'>http://linux.die.net/man/1/blkparse</ulink>
3676 </para></listitem>
3677 <listitem><para><ulink url='http://linux.die.net/man/8/btrace'>http://linux.die.net/man/8/btrace</ulink>
3678 </para></listitem>
3679 </itemizedlist>
3680 </para>
3681
3682 <para>
3683 The above manpages, along with manpages for the other
3684 blktrace utilities (btt, blkiomon, etc) can be found in the
3685 /doc directory of the blktrace tools git repo:
3686 <literallayout class='monospaced'>
3687 $ git clone git://git.kernel.dk/blktrace.git
3688 </literallayout>
3689 </para>
3690 </section>
3691</section>
3692</chapter>
3693<!--
3694vim: expandtab tw=80 ts=4
3695-->
diff --git a/documentation/profile-manual/profile-manual.xml b/documentation/profile-manual/profile-manual.xml
new file mode 100644
index 0000000000..335457816f
--- /dev/null
+++ b/documentation/profile-manual/profile-manual.xml
@@ -0,0 +1,105 @@
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 <revision>
55 <revnumber>1.7</revnumber>
56 <date>October 2014</date>
57 <revremark>Released with the Yocto Project 1.7 Release.</revremark>
58 </revision>
59 <revision>
60 <revnumber>1.7.1</revnumber>
61 <date>January 2015</date>
62 <revremark>Released with the Yocto Project 1.7.1 Release.</revremark>
63 </revision>
64 <revision>
65 <revnumber>1.7.2</revnumber>
66 <date>June 2015</date>
67 <revremark>Released with the Yocto Project 1.7.2 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_PROF_URL;'>Yocto Project Profiling and Tracing Manual</ulink>
88 from the Yocto Project website.
89 </note>
90 </legalnotice>
91
92 </bookinfo>
93
94 <xi:include href="profile-manual-intro.xml"/>
95
96 <xi:include href="profile-manual-arch.xml"/>
97
98 <xi:include href="profile-manual-usage.xml"/>
99
100 <xi:include href="profile-manual-examples.xml"/>
101
102</book>
103<!--
104vim: expandtab tw=80 ts=4
105-->
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..c0c0d619a4
--- /dev/null
+++ b/documentation/ref-manual/closer-look.xml
@@ -0,0 +1,1304 @@
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 <replaceable>target</replaceable></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/<replaceable>distro</replaceable>.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/<replaceable>distro</replaceable>.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/<replaceable>machine</replaceable>.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
572 <link linkend='ref-tasks-fetch'><filename>do_fetch</filename></link>
573 task inside BitBake uses
574 the <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
575 variable and the argument's prefix to determine the correct
576 fetcher module.
577 </para>
578
579 <note>
580 For information on how to have the OpenEmbedded build system
581 generate tarballs for Git repositories and place them in the
582 <link linkend='var-DL_DIR'><filename>DL_DIR</filename></link>
583 directory, see the
584 <link linkend='var-BB_GENERATE_MIRROR_TARBALLS'><filename>BB_GENERATE_MIRROR_TARBALLS</filename></link>
585 variable.
586 </note>
587
588 <para>
589 When fetching a repository, BitBake uses the
590 <link linkend='var-SRCREV'><filename>SRCREV</filename></link>
591 variable to determine the specific revision from which to
592 build.
593 </para>
594 </section>
595
596 <section id='source-mirrors'>
597 <title>Source Mirror(s)</title>
598
599 <para>
600 Two kinds of mirrors exist: pre-mirrors and regular mirrors.
601 The <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>
602 and
603 <link linkend='var-MIRRORS'><filename>MIRRORS</filename></link>
604 variables point to these, respectively.
605 BitBake checks pre-mirrors before looking upstream for any
606 source files.
607 Pre-mirrors are appropriate when you have a shared directory
608 that is not a directory defined by the
609 <link linkend='var-DL_DIR'><filename>DL_DIR</filename></link>
610 variable.
611 A Pre-mirror typically points to a shared directory that is
612 local to your organization.
613 </para>
614
615 <para>
616 Regular mirrors can be any site across the Internet that is
617 used as an alternative location for source code should the
618 primary site not be functioning for some reason or another.
619 </para>
620 </section>
621 </section>
622
623 <section id="package-feeds-dev-environment">
624 <title>Package Feeds</title>
625
626 <para>
627 When the OpenEmbedded build system generates an image or an SDK,
628 it gets the packages from a package feed area located in the
629 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
630 The
631 <link linkend='general-yocto-environment-figure'>general Yocto Project Development Environment figure</link>
632 shows this package feeds area in the upper-right corner.
633 </para>
634
635 <para>
636 This section looks a little closer into the package feeds area used
637 by the build system.
638 Here is a more detailed look at the area:
639 <imagedata fileref="figures/package-feeds.png" align="center" width="7in" depth="6in" />
640 </para>
641
642 <para>
643 Package feeds are an intermediary step in the build process.
644 BitBake generates packages whose types are defined by the
645 <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
646 variable.
647 Before placing the packages into package feeds,
648 the build process validates them with generated output quality
649 assurance checks through the
650 <link linkend='ref-classes-insane'><filename>insane</filename></link>
651 class.
652 </para>
653
654 <para>
655 The package feed area resides in
656 <filename>tmp/deploy</filename> of the Build Directory.
657 Folders are created that correspond to the package type
658 (IPK, DEB, or RPM) created.
659 Further organization is derived through the value of the
660 <link linkend='var-PACKAGE_ARCH'><filename>PACKAGE_ARCH</filename></link>
661 variable for each package.
662 For example, packages can exist for the i586 or qemux86
663 architectures.
664 The package files themselves reside within the appropriate
665 architecture folder.
666 </para>
667
668 <para>
669 BitBake uses the <filename>do_package_write_*</filename> tasks to
670 place generated packages into the package holding area (e.g.
671 <filename>do_package_write_ipk</filename> for IPK packages).
672 See the
673 "<link linkend='ref-tasks-package_write_deb'><filename>do_package_write_deb</filename></link>",
674 "<link linkend='ref-tasks-package_write_ipk'><filename>do_package_write_ipk</filename></link>",
675 "<link linkend='ref-tasks-package_write_rpm'><filename>do_package_write_rpm</filename></link>",
676 and
677 "<link linkend='ref-tasks-package_write_tar'><filename>do_package_write_tar</filename></link>"
678 sections for additional information.
679 </para>
680 </section>
681
682 <section id='bitbake-dev-environment'>
683 <title>BitBake</title>
684
685 <para>
686 The OpenEmbedded build system uses
687 <ulink url='&YOCTO_DOCS_DEV_URL;#bitbake-term'>BitBake</ulink>
688 to produce images.
689 You can see from the
690 <link linkend='general-yocto-environment-figure'>general Yocto Project Development Environment figure</link>,
691 the BitBake area consists of several functional areas.
692 This section takes a closer look at each of those areas.
693 </para>
694
695 <para>
696 Separate documentation exists for the BitBake tool.
697 See the
698 <ulink url='&YOCTO_DOCS_BB_URL;#bitbake-user-manual'>BitBake User Manual</ulink>
699 for reference material on BitBake.
700 </para>
701
702 <section id='source-fetching-dev-environment'>
703 <title>Source Fetching</title>
704
705 <para>
706 The first stages of building a recipe are to fetch and unpack
707 the source code:
708 <imagedata fileref="figures/source-fetching.png" align="center" width="6.5in" depth="5in" />
709 </para>
710
711 <para>
712 The
713 <link linkend='ref-tasks-fetch'><filename>do_fetch</filename></link>
714 and
715 <link linkend='ref-tasks-unpack'><filename>do_unpack</filename></link>
716 tasks fetch the source files and unpack them into the work
717 directory.
718 <note>
719 For every local file (e.g. <filename>file://</filename>)
720 that is part of a recipe's
721 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
722 statement, the OpenEmbedded build system takes a checksum
723 of the file for the recipe and inserts the checksum into
724 the signature for the <filename>do_fetch</filename>.
725 If any local file has been modified, the
726 <filename>do_fetch</filename> task and all tasks that
727 depend on it are re-executed.
728 </note>
729 By default, everything is accomplished in the
730 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>,
731 which has a defined structure.
732 For additional general information on the Build Directory,
733 see the
734 "<link linkend='structure-core-build'><filename>build/</filename></link>"
735 section.
736 </para>
737
738 <para>
739 Unpacked source files are pointed to by the
740 <link linkend='var-S'><filename>S</filename></link> variable.
741 Each recipe has an area in the Build Directory where the
742 unpacked source code resides.
743 The name of that directory for any given recipe is defined from
744 several different variables.
745 You can see the variables that define these directories
746 by looking at the figure:
747 <itemizedlist>
748 <listitem><para><link linkend='var-TMPDIR'><filename>TMPDIR</filename></link> -
749 The base directory where the OpenEmbedded build system
750 performs all its work during the build.
751 </para></listitem>
752 <listitem><para><link linkend='var-PACKAGE_ARCH'><filename>PACKAGE_ARCH</filename></link> -
753 The architecture of the built package or packages.
754 </para></listitem>
755 <listitem><para><link linkend='var-TARGET_OS'><filename>TARGET_OS</filename></link> -
756 The operating system of the target device.
757 </para></listitem>
758 <listitem><para><link linkend='var-PN'><filename>PN</filename></link> -
759 The name of the built package.
760 </para></listitem>
761 <listitem><para><link linkend='var-PV'><filename>PV</filename></link> -
762 The version of the recipe used to build the package.
763 </para></listitem>
764 <listitem><para><link linkend='var-PR'><filename>PR</filename></link> -
765 The revision of the recipe used to build the package.
766 </para></listitem>
767 <listitem><para><link linkend='var-WORKDIR'><filename>WORKDIR</filename></link> -
768 The location within <filename>TMPDIR</filename> where
769 a specific package is built.
770 </para></listitem>
771 <listitem><para><link linkend='var-S'><filename>S</filename></link> -
772 Contains the unpacked source files for a given recipe.
773 </para></listitem>
774 </itemizedlist>
775 </para>
776 </section>
777
778 <section id='patching-dev-environment'>
779 <title>Patching</title>
780
781 <para>
782 Once source code is fetched and unpacked, BitBake locates
783 patch files and applies them to the source files:
784 <imagedata fileref="figures/patching.png" align="center" width="6in" depth="5in" />
785 </para>
786
787 <para>
788 The
789 <link linkend='ref-tasks-patch'><filename>do_patch</filename></link>
790 task processes recipes by
791 using the
792 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
793 variable to locate applicable patch files, which by default
794 are <filename>*.patch</filename> or
795 <filename>*.diff</filename> files, or any file if
796 "apply=yes" is specified for the file in
797 <filename>SRC_URI</filename>.
798 </para>
799
800 <para>
801 BitBake finds and applies multiple patches for a single recipe
802 in the order in which it finds the patches.
803 Patches are applied to the recipe's source files located in the
804 <link linkend='var-S'><filename>S</filename></link> directory.
805 </para>
806
807 <para>
808 For more information on how the source directories are
809 created, see the
810 "<link linkend='source-fetching-dev-environment'>Source Fetching</link>"
811 section.
812 </para>
813 </section>
814
815 <section id='configuration-and-compilation-dev-environment'>
816 <title>Configuration and Compilation</title>
817
818 <para>
819 After source code is patched, BitBake executes tasks that
820 configure and compile the source code:
821 <imagedata fileref="figures/configuration-compile-autoreconf.png" align="center" width="7in" depth="5in" />
822 </para>
823
824 <para>
825 This step in the build process consists of three tasks:
826 <itemizedlist>
827 <listitem><para><emphasis><filename>do_configure</filename>:</emphasis>
828 This task configures the source by enabling and
829 disabling any build-time and configuration options for
830 the software being built.
831 Configurations can come from the recipe itself as well
832 as from an inherited class.
833 Additionally, the software itself might configure itself
834 depending on the target for which it is being built.
835 </para>
836
837 <para>The configurations handled by the
838 <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
839 task are specific
840 to source code configuration for the source code
841 being built by the recipe.</para>
842
843 <para>If you are using the
844 <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
845 class,
846 you can add additional configuration options by using
847 the <link linkend='var-EXTRA_OECONF'><filename>EXTRA_OECONF</filename></link>
848 variable.
849 For information on how this variable works within
850 that class, see the
851 <filename>meta/classes/autotools.bbclass</filename> file.
852 </para></listitem>
853 <listitem><para><emphasis><filename>do_compile</filename>:</emphasis>
854 Once a configuration task has been satisfied, BitBake
855 compiles the source using the
856 <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
857 task.
858 Compilation occurs in the directory pointed to by the
859 <link linkend='var-B'><filename>B</filename></link>
860 variable.
861 Realize that the <filename>B</filename> directory is, by
862 default, the same as the
863 <link linkend='var-S'><filename>S</filename></link>
864 directory.</para></listitem>
865 <listitem><para><emphasis><filename>do_install</filename>:</emphasis>
866 Once compilation is done, BitBake executes the
867 <link linkend='ref-tasks-install'><filename>do_install</filename></link>
868 task.
869 This task copies files from the <filename>B</filename>
870 directory and places them in a holding area pointed to
871 by the
872 <link linkend='var-D'><filename>D</filename></link>
873 variable.</para></listitem>
874 </itemizedlist>
875 </para>
876 </section>
877
878 <section id='package-splitting-dev-environment'>
879 <title>Package Splitting</title>
880
881 <para>
882 After source code is configured and compiled, the
883 OpenEmbedded build system analyzes
884 the results and splits the output into packages:
885 <imagedata fileref="figures/analysis-for-package-splitting.png" align="center" width="7in" depth="7in" />
886 </para>
887
888 <para>
889 The
890 <link linkend='ref-tasks-package'><filename>do_package</filename></link>
891 and
892 <link linkend='ref-tasks-packagedata'><filename>do_packagedata</filename></link>
893 tasks combine to analyze
894 the files found in the
895 <link linkend='var-D'><filename>D</filename></link> directory
896 and split them into subsets based on available packages and
897 files.
898 The analyzing process involves the following as well as other
899 items: splitting out debugging symbols,
900 looking at shared library dependencies between packages,
901 and looking at package relationships.
902 The <filename>do_packagedata</filename> task creates package
903 metadata based on the analysis such that the
904 OpenEmbedded build system can generate the final packages.
905 Working, staged, and intermediate results of the analysis
906 and package splitting process use these areas:
907 <itemizedlist>
908 <listitem><para><link linkend='var-PKGD'><filename>PKGD</filename></link> -
909 The destination directory for packages before they are
910 split.
911 </para></listitem>
912 <listitem><para><link linkend='var-PKGDATA_DIR'><filename>PKGDATA_DIR</filename></link> -
913 A shared, global-state directory that holds data
914 generated during the packaging process.
915 </para></listitem>
916 <listitem><para><link linkend='var-PKGDESTWORK'><filename>PKGDESTWORK</filename></link> -
917 A temporary work area used by the
918 <filename>do_package</filename> task.
919 </para></listitem>
920 <listitem><para><link linkend='var-PKGDEST'><filename>PKGDEST</filename></link> -
921 The parent directory for packages after they have
922 been split.
923 </para></listitem>
924 </itemizedlist>
925 The <link linkend='var-FILES'><filename>FILES</filename></link>
926 variable defines the files that go into each package in
927 <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>.
928 If you want details on how this is accomplished, you can
929 look at the
930 <link linkend='ref-classes-package'><filename>package</filename></link>
931 class.
932 </para>
933
934 <para>
935 Depending on the type of packages being created (RPM, DEB, or
936 IPK), the <filename>do_package_write_*</filename> task
937 creates the actual packages and places them in the
938 Package Feed area, which is
939 <filename>${TMPDIR}/deploy</filename>.
940 You can see the
941 "<link linkend='package-feeds-dev-environment'>Package Feeds</link>"
942 section for more detail on that part of the build process.
943 <note>
944 Support for creating feeds directly from the
945 <filename>deploy/*</filename> directories does not exist.
946 Creating such feeds usually requires some kind of feed
947 maintenance mechanism that would upload the new packages
948 into an official package feed (e.g. the
949 Ångström distribution).
950 This functionality is highly distribution-specific
951 and thus is not provided out of the box.
952 </note>
953 </para>
954 </section>
955
956 <section id='image-generation-dev-environment'>
957 <title>Image Generation</title>
958
959 <para>
960 Once packages are split and stored in the Package Feeds area,
961 the OpenEmbedded build system uses BitBake to generate the
962 root filesystem image:
963 <imagedata fileref="figures/image-generation.png" align="center" width="6in" depth="7in" />
964 </para>
965
966 <para>
967 The image generation process consists of several stages and
968 depends on many variables.
969 The
970 <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link>
971 task uses these key variables
972 to help create the list of packages to actually install:
973 <itemizedlist>
974 <listitem><para><link linkend='var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></link>:
975 Lists out the base set of packages to install from
976 the Package Feeds area.</para></listitem>
977 <listitem><para><link linkend='var-PACKAGE_EXCLUDE'><filename>PACKAGE_EXCLUDE</filename></link>:
978 Specifies packages that should not be installed.
979 </para></listitem>
980 <listitem><para><link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>:
981 Specifies features to include in the image.
982 Most of these features map to additional packages for
983 installation.</para></listitem>
984 <listitem><para><link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>:
985 Specifies the package backend to use and consequently
986 helps determine where to locate packages within the
987 Package Feeds area.</para></listitem>
988 <listitem><para><link linkend='var-IMAGE_LINGUAS'><filename>IMAGE_LINGUAS</filename></link>:
989 Determines the language(s) for which additional
990 language support packages are installed.
991 </para></listitem>
992 </itemizedlist>
993 </para>
994
995 <para>
996 Package installation is under control of the package manager
997 (e.g. smart/rpm, opkg, or apt/dpkg) regardless of whether or
998 not package management is enabled for the target.
999 At the end of the process, if package management is not
1000 enabled for the target, the package manager's data files
1001 are deleted from the root filesystem.
1002 </para>
1003
1004 <para>
1005 During image generation, the build system attempts to run
1006 all post-installation scripts.
1007 Any that fail to run on the build host are run on the
1008 target when the target system is first booted.
1009 If you are using a
1010 <ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-read-only-root-filesystem'>read-only root filesystem</ulink>,
1011 all the post installation scripts must succeed during the
1012 package installation phase since the root filesystem is
1013 read-only.
1014 </para>
1015
1016 <para>
1017 During Optimization, optimizing processes are run across
1018 the image.
1019 These processes include <filename>mklibs</filename> and
1020 <filename>prelink</filename>.
1021 The <filename>mklibs</filename> process optimizes the size
1022 of the libraries.
1023 A <filename>prelink</filename> process optimizes the dynamic
1024 linking of shared libraries to reduce start up time of
1025 executables.
1026 </para>
1027
1028 <para>
1029 Along with writing out the root filesystem image, the
1030 <filename>do_rootfs</filename> task creates a manifest file
1031 (<filename>.manifest</filename>) in the same directory as
1032 the root filesystem image that lists out, line-by-line, the
1033 installed packages.
1034 This manifest file is useful for the
1035 <link linkend='ref-classes-testimage'><filename>testimage</filename></link>
1036 class, for example, to determine whether or not to run
1037 specific tests.
1038 See the
1039 <link linkend='var-IMAGE_MANIFEST'><filename>IMAGE_MANIFEST</filename></link>
1040 variable for additional information.
1041 </para>
1042
1043 <para>
1044 Part of the image generation process includes compressing the
1045 root filesystem image.
1046 Compression is accomplished through several optimization
1047 routines designed to reduce the overall size of the image.
1048 </para>
1049
1050 <para>
1051 After the root filesystem has been constructed, the image
1052 generation process turns everything into an image file or
1053 a set of image files.
1054 The formats used for the root filesystem depend on the
1055 <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
1056 variable.
1057 </para>
1058
1059 <note>
1060 The entire image generation process is run under Pseudo.
1061 Running under Pseudo ensures that the files in the root
1062 filesystem have correct ownership.
1063 </note>
1064 </section>
1065
1066 <section id='sdk-generation-dev-environment'>
1067 <title>SDK Generation</title>
1068
1069 <para>
1070 The OpenEmbedded build system uses BitBake to generate the
1071 Software Development Kit (SDK) installer script:
1072 <imagedata fileref="figures/sdk-generation.png" align="center" width="6in" depth="7in" />
1073 </para>
1074
1075 <note>
1076 For more information on the cross-development toolchain
1077 generation, see the
1078 "<link linkend='cross-development-toolchain-generation'>Cross-Development Toolchain Generation</link>"
1079 section.
1080 For information on advantages gained when building a
1081 cross-development toolchain using the
1082 <link linkend='ref-tasks-populate_sdk'><filename>do_populate_sdk</filename></link>
1083 task, see the
1084 "<ulink url='&YOCTO_DOCS_ADT_URL;#optionally-building-a-toolchain-installer'>Optionally Building a Toolchain Installer</ulink>"
1085 section in the Yocto Project Application Developer's Guide.
1086 </note>
1087
1088 <para>
1089 Like image generation, the SDK script process consists of
1090 several stages and depends on many variables.
1091 The <filename>do_populate_sdk</filename> task uses these
1092 key variables to help create the list of packages to actually
1093 install.
1094 For information on the variables listed in the figure, see the
1095 "<link linkend='sdk-dev-environment'>Application Development SDK</link>"
1096 section.
1097 </para>
1098
1099 <para>
1100 The <filename>do_populate_sdk</filename> task handles two
1101 parts: a target part and a host part.
1102 The target part is the part built for the target hardware and
1103 includes libraries and headers.
1104 The host part is the part of the SDK that runs on the
1105 <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>.
1106 </para>
1107
1108 <para>
1109 Once both parts are constructed, the
1110 <filename>do_populate_sdk</filename> task performs some cleanup
1111 on both parts.
1112 After the cleanup, the task creates a cross-development
1113 environment setup script and any configuration files that
1114 might be needed.
1115 </para>
1116
1117 <para>
1118 The final output of the task is the Cross-development
1119 toolchain installation script (<filename>.sh</filename> file),
1120 which includes the environment setup script.
1121 </para>
1122 </section>
1123 </section>
1124
1125 <section id='images-dev-environment'>
1126 <title>Images</title>
1127
1128 <para>
1129 The images produced by the OpenEmbedded build system
1130 are compressed forms of the
1131 root filesystem that are ready to boot on a target device.
1132 You can see from the
1133 <link linkend='general-yocto-environment-figure'>general Yocto Project Development Environment figure</link>
1134 that BitBake output, in part, consists of images.
1135 This section is going to look more closely at this output:
1136 <imagedata fileref="figures/images.png" align="center" width="5.5in" depth="5.5in" />
1137 </para>
1138
1139 <para>
1140 For a list of example images that the Yocto Project provides,
1141 see the
1142 "<link linkend='ref-images'>Images</link>" chapter.
1143 </para>
1144
1145 <para>
1146 Images are written out to the
1147 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
1148 inside the <filename>tmp/deploy/images/<replaceable>machine</replaceable>/</filename>
1149 folder as shown in the figure.
1150 This folder contains any files expected to be loaded on the
1151 target device.
1152 The
1153 <link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link>
1154 variable points to the <filename>deploy</filename> directory,
1155 while the
1156 <link linkend='var-DEPLOY_DIR_IMAGE'><filename>DEPLOY_DIR_IMAGE</filename></link>
1157 variable points to the appropriate directory containing images for
1158 the current configuration.
1159 <itemizedlist>
1160 <listitem><para><filename><replaceable>kernel-image</replaceable></filename>:
1161 A kernel binary file.
1162 The <link linkend='var-KERNEL_IMAGETYPE'><filename>KERNEL_IMAGETYPE</filename></link>
1163 variable setting determines the naming scheme for the
1164 kernel image file.
1165 Depending on that variable, the file could begin with
1166 a variety of naming strings.
1167 The <filename>deploy/images/<replaceable>machine</replaceable></filename>
1168 directory can contain multiple image files for the
1169 machine.</para></listitem>
1170 <listitem><para><filename><replaceable>root-filesystem-image</replaceable></filename>:
1171 Root filesystems for the target device (e.g.
1172 <filename>*.ext3</filename> or <filename>*.bz2</filename>
1173 files).
1174 The <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
1175 variable setting determines the root filesystem image
1176 type.
1177 The <filename>deploy/images/<replaceable>machine</replaceable></filename>
1178 directory can contain multiple root filesystems for the
1179 machine.</para></listitem>
1180 <listitem><para><filename><replaceable>kernel-modules</replaceable></filename>:
1181 Tarballs that contain all the modules built for the kernel.
1182 Kernel module tarballs exist for legacy purposes and
1183 can be suppressed by setting the
1184 <link linkend='var-MODULE_TARBALL_DEPLOY'><filename>MODULE_TARBALL_DEPLOY</filename></link>
1185 variable to "0".
1186 The <filename>deploy/images/<replaceable>machine</replaceable></filename>
1187 directory can contain multiple kernel module tarballs
1188 for the machine.</para></listitem>
1189 <listitem><para><filename><replaceable>bootloaders</replaceable></filename>:
1190 Bootloaders supporting the image, if applicable to the
1191 target machine.
1192 The <filename>deploy/images/<replaceable>machine</replaceable></filename>
1193 directory can contain multiple bootloaders for the
1194 machine.</para></listitem>
1195 <listitem><para><filename><replaceable>symlinks</replaceable></filename>:
1196 The <filename>deploy/images/<replaceable>machine</replaceable></filename>
1197 folder contains
1198 a symbolic link that points to the most recently built file
1199 for each machine.
1200 These links might be useful for external scripts that
1201 need to obtain the latest version of each file.
1202 </para></listitem>
1203 </itemizedlist>
1204 </para>
1205 </section>
1206
1207 <section id='sdk-dev-environment'>
1208 <title>Application Development SDK</title>
1209
1210 <para>
1211 In the
1212 <link linkend='general-yocto-environment-figure'>general Yocto Project Development Environment figure</link>,
1213 the output labeled "Application Development SDK" represents an
1214 SDK.
1215 This section is going to take a closer look at this output:
1216 <imagedata fileref="figures/sdk.png" align="center" width="5in" depth="4in" />
1217 </para>
1218
1219 <para>
1220 The specific form of this output is a self-extracting
1221 SDK installer (<filename>*.sh</filename>) that, when run,
1222 installs the SDK, which consists of a cross-development
1223 toolchain, a set of libraries and headers, and an SDK
1224 environment setup script.
1225 Running this installer essentially sets up your
1226 cross-development environment.
1227 You can think of the cross-toolchain as the "host"
1228 part because it runs on the SDK machine.
1229 You can think of the libraries and headers as the "target"
1230 part because they are built for the target hardware.
1231 The setup script is added so that you can initialize the
1232 environment before using the tools.
1233 </para>
1234
1235 <note>
1236 <para>
1237 The Yocto Project supports several methods by which you can
1238 set up this cross-development environment.
1239 These methods include downloading pre-built SDK installers,
1240 building and installing your own SDK installer, or running
1241 an Application Development Toolkit (ADT) installer to
1242 install not just cross-development toolchains
1243 but also additional tools to help in this type of
1244 development.
1245 </para>
1246
1247 <para>
1248 For background information on cross-development toolchains
1249 in the Yocto Project development environment, see the
1250 "<link linkend='cross-development-toolchain-generation'>Cross-Development Toolchain Generation</link>"
1251 section.
1252 For information on setting up a cross-development
1253 environment, see the
1254 "<ulink url='&YOCTO_DOCS_ADT_URL;#installing-the-adt'>Installing the ADT and Toolchains</ulink>"
1255 section in the Yocto Project Application Developer's Guide.
1256 </para>
1257 </note>
1258
1259 <para>
1260 Once built, the SDK installers are written out to the
1261 <filename>deploy/sdk</filename> folder inside the
1262 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
1263 as shown in the figure at the beginning of this section.
1264 Several variables exist that help configure these files:
1265 <itemizedlist>
1266 <listitem><para><link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link>:
1267 Points to the <filename>deploy</filename>
1268 directory.</para></listitem>
1269 <listitem><para><link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>:
1270 Specifies the architecture of the machine
1271 on which the cross-development tools are run to
1272 create packages for the target hardware.
1273 </para></listitem>
1274 <listitem><para><link linkend='var-SDKIMAGE_FEATURES'><filename>SDKIMAGE_FEATURES</filename></link>:
1275 Lists the features to include in the "target" part
1276 of the SDK.
1277 </para></listitem>
1278 <listitem><para><link linkend='var-TOOLCHAIN_HOST_TASK'><filename>TOOLCHAIN_HOST_TASK</filename></link>:
1279 Lists packages that make up the host
1280 part of the SDK (i.e. the part that runs on
1281 the <filename>SDKMACHINE</filename>).
1282 When you use
1283 <filename>bitbake -c populate_sdk <replaceable>imagename</replaceable></filename>
1284 to create the SDK, a set of default packages
1285 apply.
1286 This variable allows you to add more packages.
1287 </para></listitem>
1288 <listitem><para><link linkend='var-TOOLCHAIN_TARGET_TASK'><filename>TOOLCHAIN_TARGET_TASK</filename></link>:
1289 Lists packages that make up the target part
1290 of the SDK (i.e. the part built for the
1291 target hardware).
1292 </para></listitem>
1293 <listitem><para><link linkend='var-SDKPATH'><filename>SDKPATH</filename></link>:
1294 Defines the default SDK installation path offered by the
1295 installation script.
1296 </para></listitem>
1297 </itemizedlist>
1298 </para>
1299 </section>
1300
1301</chapter>
1302<!--
1303vim: expandtab tw=80 ts=4
1304-->
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..da6ce20eef
--- /dev/null
+++ b/documentation/ref-manual/faq.xml
@@ -0,0 +1,799 @@
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 <replaceable>target</replaceable> and <replaceable>target</replaceable><filename>-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 <note>
648 You can find more information on the
649 "<ulink url='&YOCTO_WIKI_URL;/wiki/Working_Behind_a_Network_Proxy'>Working Behind a Network Proxy</ulink>"
650 Wiki page.
651 </note>
652 </answer>
653 </qandaentry>
654
655 <qandaentry>
656 <question>
657 <para>
658 Can I get rid of build output so I can start over?
659 </para>
660 </question>
661 <answer>
662 <para>
663 Yes - you can easily do this.
664 When you use BitBake to build an image, all the build output
665 goes into the directory created when you run the
666 build environment setup script (i.e.
667 <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
668 or
669 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>).
670 By default, this <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
671 is named <filename>build</filename> but can be named
672 anything you want.
673 </para>
674
675 <para>
676 Within the Build Directory, is the <filename>tmp</filename>
677 directory.
678 To remove all the build output yet preserve any source code or
679 downloaded files from previous builds, simply remove the
680 <filename>tmp</filename> directory.
681 </para>
682 </answer>
683 </qandaentry>
684
685 <qandaentry>
686 <question>
687 <para>
688 Why do <filename>${bindir}</filename> and <filename>${libdir}</filename> have strange values for <filename>-native</filename> recipes?
689 </para>
690 </question>
691 <answer>
692 <para>
693 Executables and libraries might need to be used from a
694 directory other than the directory into which they were
695 initially installed.
696 Complicating this situation is the fact that sometimes these
697 executables and libraries are compiled with the expectation
698 of being run from that initial installation target directory.
699 If this is the case, moving them causes problems.
700 </para>
701
702 <para>
703 This scenario is a fundamental problem for package maintainers
704 of mainstream Linux distributions as well as for the
705 OpenEmbedded build system.
706 As such, a well-established solution exists.
707 Makefiles, Autotools configuration scripts, and other build
708 systems are expected to respect environment variables such as
709 <filename>bindir</filename>, <filename>libdir</filename>,
710 and <filename>sysconfdir</filename> that indicate where
711 executables, libraries, and data reside when a program is
712 actually run.
713 They are also expected to respect a
714 <filename>DESTDIR</filename> environment variable, which is
715 prepended to all the other variables when the build system
716 actually installs the files.
717 It is understood that the program does not actually run from
718 within <filename>DESTDIR</filename>.
719 </para>
720
721 <para>
722 When the OpenEmbedded build system uses a recipe to build a
723 target-architecture program (i.e. one that is intended for
724 inclusion on the image being built), that program eventually
725 runs from the root file system of that image.
726 Thus, the build system provides a value of "/usr/bin" for
727 <filename>bindir</filename>, a value of "/usr/lib" for
728 <filename>libdir</filename>, and so forth.
729 </para>
730
731 <para>
732 Meanwhile, <filename>DESTDIR</filename> is a path within the
733 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
734 However, when the recipe builds a native program (i.e. one
735 that is intended to run on the build machine), that program
736 is never installed directly to the build machine's root
737 file system.
738 Consequently, the build system uses paths within the Build
739 Directory for <filename>DESTDIR</filename>,
740 <filename>bindir</filename> and related variables.
741 To better understand this, consider the following two paths
742 where the first is relatively normal and the second is not:
743 <note>
744 Due to these lengthy examples, the paths are artificially
745 broken across lines for readability.
746 </note>
747 <literallayout class='monospaced'>
748 /home/maxtothemax/poky-bootchart2/build/tmp/work/i586-poky-linux/zlib/
749 1.2.8-r0/sysroot-destdir/usr/bin
750
751 /home/maxtothemax/poky-bootchart2/build/tmp/work/x86_64-linux/
752 zlib-native/1.2.8-r0/sysroot-destdir/home/maxtothemax/poky-bootchart2/
753 build/tmp/sysroots/x86_64-linux/usr/bin
754 </literallayout>
755 Even if the paths look unusual, they both are correct -
756 the first for a target and the second for a native recipe.
757 These paths are a consequence of the
758 <filename>DESTDIR</filename> mechanism and while they
759 appear strange, they are correct and in practice very effective.
760 </para>
761 </answer>
762 </qandaentry>
763
764 <qandaentry>
765 <question>
766 <para>
767 The files provided by my <filename>-native</filename> recipe do
768 not appear to be available to other recipes.
769 Files are missing from the native sysroot, my recipe is
770 installing to the wrong place, or I am getting permissions
771 errors during the do_install task in my recipe! What is wrong?
772 </para>
773 </question>
774 <answer>
775 <para>
776 This situation results when a build system does
777 not recognize the environment variables supplied to it by
778 <ulink url='&YOCTO_DOCS_DEV_URL;#bitbake-term'>BitBake</ulink>.
779 The incident that prompted this FAQ entry involved a Makefile
780 that used an environment variable named
781 <filename>BINDIR</filename> instead of the more standard
782 variable <filename>bindir</filename>.
783 The makefile's hardcoded default value of "/usr/bin" worked
784 most of the time, but not for the recipe's
785 <filename>-native</filename> variant.
786 For another example, permissions errors might be caused
787 by a Makefile that ignores <filename>DESTDIR</filename> or uses
788 a different name for that environment variable.
789 Check the the build system to see if these kinds of
790 issues exist.
791 </para>
792 </answer>
793 </qandaentry>
794
795</qandaset>
796</chapter>
797<!--
798vim: expandtab tw=80 ts=4
799-->
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..9a77bde68b
--- /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..19e9895ee6
--- /dev/null
+++ b/documentation/ref-manual/introduction.xml
@@ -0,0 +1,572 @@
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-tasks'>Tasks</link>:</emphasis>
73 Describes the tasks defined by the OpenEmbedded build system.
74 </para></listitem>
75 <listitem><para><emphasis>
76 <link linkend='ref-qa-checks'>QA Error and Warning Messages</link>:</emphasis>
77 Lists and describes QA warning and error messages.
78 </para></listitem>
79 <listitem><para><emphasis>
80 <link linkend='ref-images'>Images</link>:</emphasis>
81 Describes the standard images that the Yocto Project supports.
82 </para></listitem>
83 <listitem><para><emphasis>
84 <link linkend='ref-features'>Features</link>:</emphasis>
85 Describes mechanisms for creating distribution, machine, and image
86 features during the build process using the OpenEmbedded build system.</para></listitem>
87 <listitem><para><emphasis>
88 <link linkend='ref-variables-glos'>Variables Glossary</link>:</emphasis>
89 Presents most variables used by the OpenEmbedded build system, which
90 uses BitBake.
91 Entries describe the function of the variable and how to apply them.
92 </para></listitem>
93 <listitem><para><emphasis>
94 <link linkend='ref-varlocality'>Variable Context</link>:</emphasis>
95 Provides variable locality or context.</para></listitem>
96 <listitem><para><emphasis>
97 <link linkend='faq'>FAQ</link>:</emphasis>
98 Provides answers for commonly asked questions in the Yocto Project
99 development environment.</para></listitem>
100 <listitem><para><emphasis>
101 <link linkend='resources'>Contributing to the Yocto Project</link>:</emphasis>
102 Provides guidance on how you can contribute back to the Yocto
103 Project.</para></listitem>
104 </itemizedlist>
105 </para>
106</section>
107
108
109<section id='intro-requirements'>
110<title>System Requirements</title>
111 <para>
112 For general Yocto Project system requirements, see the
113 "<ulink url='&YOCTO_DOCS_QS_URL;#yp-resources'>What You Need and How You Get It</ulink>" section
114 in the Yocto Project Quick Start.
115 The remainder of this section provides details on system requirements
116 not covered in the Yocto Project Quick Start.
117 </para>
118
119 <section id='detailed-supported-distros'>
120 <title>Supported Linux Distributions</title>
121
122 <para>
123 Currently, the Yocto Project is supported on the following
124 distributions:
125 <note>
126 <para>
127 Yocto Project releases are tested against the stable Linux
128 distributions in the following list.
129 The Yocto Project should work on other distributions but
130 validation is not performed against them.
131 </para>
132
133 <para>
134 In particular, the Yocto Project does not support
135 and currently has no plans to support
136 rolling-releases or development distributions due to their
137 constantly changing nature.
138 We welcome patches and bug reports, but keep in mind that
139 our priority is on the supported platforms listed below.
140 </para>
141
142 <para>
143 If you encounter problems, please go to
144 <ulink url='&YOCTO_BUGZILLA_URL;'>Yocto Project Bugzilla</ulink>
145 and submit a bug.
146 We are interested in hearing about your experience.
147 </para>
148 </note>
149 <itemizedlist>
150<!-- <listitem><para>Ubuntu 10.04</para></listitem>
151 <listitem><para>Ubuntu 11.10</para></listitem> -->
152 <listitem><para>Ubuntu 12.04 (LTS)</para></listitem>
153 <listitem><para>Ubuntu 13.10</para></listitem>
154 <listitem><para>Ubuntu 14.04 (LTS)</para></listitem>
155<!-- <listitem><para>Fedora 16 (Verne)</para></listitem>
156 <listitem><para>Fedora 17 (Spherical)</para></listitem> -->
157 <listitem><para>Fedora release 19 (Schrödinger's Cat)</para></listitem>
158 <listitem><para>Fedora release 20 (Heisenbug)</para></listitem>
159<!-- <listitem><para>CentOS release 5.6 (Final)</para></listitem>
160 <listitem><para>CentOS release 5.7 (Final)</para></listitem>
161 <listitem><para>CentOS release 5.8 (Final)</para></listitem>
162 <listitem><para>CentOS release 6.3 (Final)</para></listitem> -->
163 <listitem><para>CentOS release 6.4</para></listitem>
164 <listitem><para>CentOS release 6.5</para></listitem>
165<!-- <listitem><para>Debian GNU/Linux 6.0 (Squeeze)</para></listitem> -->
166 <listitem><para>Debian GNU/Linux 7.0 (Wheezy)</para></listitem>
167 <listitem><para>Debian GNU/Linux 7.1 (Wheezy)</para></listitem>
168 <listitem><para>Debian GNU/Linux 7.2 (Wheezy)</para></listitem>
169 <listitem><para>Debian GNU/Linux 7.3 (Wheezy)</para></listitem>
170 <listitem><para>Debian GNU/Linux 7.4 (Wheezy)</para></listitem>
171 <listitem><para>Debian GNU/Linux 7.5 (Wheezy)</para></listitem>
172 <listitem><para>Debian GNU/Linux 7.6 (Wheezy)</para></listitem>
173<!-- <listitem><para>openSUSE 11.4</para></listitem>
174 <listitem><para>openSUSE 12.1</para></listitem> -->
175 <listitem><para>openSUSE 12.2</para></listitem>
176 <listitem><para>openSUSE 12.3</para></listitem>
177 <listitem><para>openSUSE 13.1</para></listitem>
178 </itemizedlist>
179 </para>
180
181 <note>
182 While the Yocto Project Team attempts to ensure all Yocto Project
183 releases are one hundred percent compatible with each officially
184 supported Linux distribution, instances might exist where you
185 encounter a problem while using the Yocto Project on a specific
186 distribution.
187 For example, the CentOS 6.4 distribution does not include the
188 Gtk+ 2.20.0 and PyGtk 2.21.0 (or higher) packages, which are
189 required to run
190 <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/hob'>Hob</ulink>.
191 </note>
192 </section>
193
194 <section id='required-packages-for-the-host-development-system'>
195 <title>Required Packages for the Host Development System</title>
196
197 <para>
198 The list of packages you need on the host development system can
199 be large when covering all build scenarios using the Yocto Project.
200 This section provides required packages according to
201 Linux distribution and function.
202 </para>
203
204 <section id='ubuntu-packages'>
205 <title>Ubuntu and Debian</title>
206
207 <para>
208 The following list shows the required packages by function
209 given a supported Ubuntu or Debian Linux distribution:
210 <itemizedlist>
211 <listitem><para><emphasis>Essentials:</emphasis>
212 Packages needed to build an image on a headless
213 system:
214 <literallayout class='monospaced'>
215 $ sudo apt-get install &UBUNTU_HOST_PACKAGES_ESSENTIAL;
216 </literallayout></para></listitem>
217 <listitem><para><emphasis>Graphical and Eclipse Plug-In Extras:</emphasis>
218 Packages recommended if the host system has graphics
219 support or if you are going to use the Eclipse
220 IDE:
221 <literallayout class='monospaced'>
222 $ sudo apt-get install libsdl1.2-dev xterm
223 </literallayout></para></listitem>
224 <listitem><para><emphasis>Documentation:</emphasis>
225 Packages needed if you are going to build out the
226 Yocto Project documentation manuals:
227 <literallayout class='monospaced'>
228 $ sudo apt-get install make xsltproc docbook-utils fop dblatex xmlto
229 </literallayout></para></listitem>
230 <listitem><para><emphasis>ADT Installer Extras:</emphasis>
231 Packages needed if you are going to be using the
232 <ulink url='&YOCTO_DOCS_ADT_URL;#using-the-adt-installer'>Application Development Toolkit (ADT) Installer</ulink>:
233 <literallayout class='monospaced'>
234 $ sudo apt-get install autoconf automake libtool libglib2.0-dev
235 </literallayout></para></listitem>
236 </itemizedlist>
237 </para>
238 </section>
239
240 <section id='fedora-packages'>
241 <title>Fedora Packages</title>
242
243 <para>
244 The following list shows the required packages by function
245 given a supported Fedora Linux distribution:
246 <itemizedlist>
247 <listitem><para><emphasis>Essentials:</emphasis>
248 Packages needed to build an image for a headless
249 system:
250 <literallayout class='monospaced'>
251 $ sudo yum install &FEDORA_HOST_PACKAGES_ESSENTIAL;
252 </literallayout></para></listitem>
253 <listitem><para><emphasis>Graphical and Eclipse Plug-In Extras:</emphasis>
254 Packages recommended if the host system has graphics
255 support or if you are going to use the Eclipse
256 IDE:
257 <literallayout class='monospaced'>
258 $ sudo yum install SDL-devel xterm perl-Thread-Queue
259 </literallayout></para></listitem>
260 <listitem><para><emphasis>Documentation:</emphasis>
261 Packages needed if you are going to build out the
262 Yocto Project documentation manuals:
263 <literallayout class='monospaced'>
264 $ sudo yum install make docbook-style-dsssl docbook-style-xsl \
265 docbook-dtds docbook-utils fop libxslt dblatex xmlto
266 </literallayout></para></listitem>
267 <listitem><para><emphasis>ADT Installer Extras:</emphasis>
268 Packages needed if you are going to be using the
269 <ulink url='&YOCTO_DOCS_ADT_URL;#using-the-adt-installer'>Application Development Toolkit (ADT) Installer</ulink>:
270 <literallayout class='monospaced'>
271 $ sudo yum install autoconf automake libtool glib2-devel
272 </literallayout></para></listitem>
273 </itemizedlist>
274 </para>
275 </section>
276
277 <section id='opensuse-packages'>
278 <title>openSUSE Packages</title>
279
280 <para>
281 The following list shows the required packages by function
282 given a supported openSUSE Linux distribution:
283 <itemizedlist>
284 <listitem><para><emphasis>Essentials:</emphasis>
285 Packages needed to build an image for a headless
286 system:
287 <literallayout class='monospaced'>
288 $ sudo zypper install &OPENSUSE_HOST_PACKAGES_ESSENTIAL;
289 </literallayout></para></listitem>
290 <listitem><para><emphasis>Graphical and Eclipse Plug-In Extras:</emphasis>
291 Packages recommended if the host system has graphics
292 support or if you are going to use the Eclipse
293 IDE:
294 <literallayout class='monospaced'>
295 $ sudo zypper install libSDL-devel xterm
296 </literallayout></para></listitem>
297 <listitem><para><emphasis>Documentation:</emphasis>
298 Packages needed if you are going to build out the
299 Yocto Project documentation manuals:
300 <literallayout class='monospaced'>
301 $ sudo zypper install make fop xsltproc dblatex xmlto
302 </literallayout></para></listitem>
303 <listitem><para><emphasis>ADT Installer Extras:</emphasis>
304 Packages needed if you are going to be using the
305 <ulink url='&YOCTO_DOCS_ADT_URL;#using-the-adt-installer'>Application Development Toolkit (ADT) Installer</ulink>:
306 <literallayout class='monospaced'>
307 $ sudo zypper install autoconf automake libtool glib2-devel
308 </literallayout></para></listitem>
309 </itemizedlist>
310 </para>
311 </section>
312
313 <section id='centos-packages'>
314 <title>CentOS Packages</title>
315
316 <para>
317 The following list shows the required packages by function
318 given a supported CentOS Linux distribution:
319 <note>
320 For CentOS 6.x, some of the versions of the components
321 provided by the distribution are too old (e.g. Git, Python,
322 and tar).
323 It is recommended that you install the buildtools in order
324 to provide versions that will work with the OpenEmbedded
325 build system.
326 For information on how to install the buildtools tarball,
327 see the
328 "<link linkend='required-git-tar-and-python-versions'>Required Git, Tar, and Python Versions</link>"
329 section.
330 </note>
331 <itemizedlist>
332 <listitem><para><emphasis>Essentials:</emphasis>
333 Packages needed to build an image for a headless
334 system:
335 <literallayout class='monospaced'>
336 $ sudo yum install &CENTOS_HOST_PACKAGES_ESSENTIAL;
337 </literallayout></para></listitem>
338 <listitem><para><emphasis>Graphical and Eclipse Plug-In Extras:</emphasis>
339 Packages recommended if the host system has graphics
340 support or if you are going to use the Eclipse
341 IDE:
342 <literallayout class='monospaced'>
343 $ sudo yum install SDL-devel xterm
344 </literallayout></para></listitem>
345 <listitem><para><emphasis>Documentation:</emphasis>
346 Packages needed if you are going to build out the
347 Yocto Project documentation manuals:
348 <literallayout class='monospaced'>
349 $ sudo yum install make docbook-style-dsssl docbook-style-xsl \
350 docbook-dtds docbook-utils fop libxslt dblatex xmlto
351 </literallayout></para></listitem>
352 <listitem><para><emphasis>ADT Installer Extras:</emphasis>
353 Packages needed if you are going to be using the
354 <ulink url='&YOCTO_DOCS_ADT_URL;#using-the-adt-installer'>Application Development Toolkit (ADT) Installer</ulink>:
355 <literallayout class='monospaced'>
356 $ sudo yum install autoconf automake libtool glib2-devel
357 </literallayout></para></listitem>
358 </itemizedlist>
359 </para>
360 </section>
361 </section>
362
363 <section id='required-git-tar-and-python-versions'>
364 <title>Required Git, tar, and Python Versions</title>
365
366 <para>
367 In order to use the build system, your host development system
368 must meet the following version requirements for Git, tar, and
369 Python:
370 <itemizedlist>
371 <listitem><para>Git 1.7.8 or greater</para></listitem>
372 <listitem><para>tar 1.24 or greater</para></listitem>
373 <listitem><para>Python 2.7.3 or greater not including
374 Python 3.x, which is not supported.</para></listitem>
375 </itemizedlist>
376 </para>
377
378 <para>
379 If your host development system does not meet all these requirements,
380 you can resolve this by installing a <filename>buildtools</filename>
381 tarball that contains these tools.
382 You can get the tarball one of two ways: download a pre-built
383 tarball or use BitBake to build the tarball.
384 </para>
385
386 <section id='downloading-a-pre-built-buildtools-tarball'>
387 <title>Downloading a Pre-Built <filename>buildtools</filename> Tarball</title>
388
389 <para>
390 Downloading and running a pre-built buildtools installer is
391 the easiest of the two methods by which you can get these tools:
392 <orderedlist>
393 <listitem><para>
394 Locate and download the <filename>*.sh</filename> at
395 <ulink url='&YOCTO_DL_URL;/releases/yocto/yocto-&DISTRO;/buildtools/'></ulink>.
396 </para></listitem>
397 <listitem><para>
398 Execute the installation script.
399 Here is an example:
400 <literallayout class='monospaced'>
401 $ sh poky-glibc-x86_64-buildtools-tarball-x86_64-buildtools-nativesdk-standalone-&DISTRO;.sh
402 </literallayout>
403 During execution, a prompt appears that allows you to
404 choose the installation directory.
405 For example, you could choose the following:
406 <literallayout class='monospaced'>
407 /home/<replaceable>your-username</replaceable>/buildtools
408 </literallayout>
409 </para></listitem>
410 <listitem><para>
411 Source the tools environment setup script by using a
412 command like the following:
413 <literallayout class='monospaced'>
414 $ source /home/<replaceable>your-username</replaceable>/buildtools/environment-setup-i586-poky-linux
415 </literallayout>
416 Of course, you need to supply your installation directory and be
417 sure to use the right file (i.e. i585 or x86-64).
418 </para>
419 <para>
420 After you have sourced the setup script,
421 the tools are added to <filename>PATH</filename>
422 and any other environment variables required to run the
423 tools are initialized.
424 The results are working versions versions of Git, tar,
425 Python and <filename>chrpath</filename>.
426 </para></listitem>
427 </orderedlist>
428 </para>
429 </section>
430
431 <section id='building-your-own-buildtools-tarball'>
432 <title>Building Your Own <filename>buildtools</filename> Tarball</title>
433
434 <para>
435 Building and running your own buildtools installer applies
436 only when you have a build host that can already run BitBake.
437 In this case, you use that machine to build the
438 <filename>.sh</filename> file and then
439 take steps to transfer and run it on a
440 machine that does not meet the minimal Git, tar, and Python
441 requirements.
442 </para>
443
444 <para>
445 Here are the steps to take to build and run your own
446 buildtools installer:
447 <orderedlist>
448 <listitem><para>
449 On the machine that is able to run BitBake,
450 be sure you have set up your build environment with
451 the setup script
452 (<link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
453 or
454 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>).
455 </para></listitem>
456 <listitem><para>
457 Run the BitBake command to build the tarball:
458 <literallayout class='monospaced'>
459 $ bitbake buildtools-tarball
460 </literallayout>
461 <note>
462 The
463 <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>
464 variable in your <filename>local.conf</filename> file
465 determines whether you build tools for a 32-bit
466 or 64-bit system.
467 </note>
468 Once the build completes, you can find the
469 <filename>.sh</filename> file that installs
470 the tools in the <filename>tmp/deploy/sdk</filename>
471 subdirectory of the
472 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
473 The installer file has the string "buildtools"
474 in the name.
475 </para></listitem>
476 <listitem><para>
477 Transfer the <filename>.sh</filename> file from the
478 build host to the machine that does not meet the
479 Git, tar, or Python requirements.
480 </para></listitem>
481 <listitem><para>
482 On the machine that does not meet the requirements,
483 run the <filename>.sh</filename> file
484 to install the tools.
485 Here is an example:
486 <literallayout class='monospaced'>
487 $ sh poky-glibc-x86_64-buildtools-tarball-x86_64-buildtools-nativesdk-standalone-&DISTRO;.sh
488 </literallayout>
489 During execution, a prompt appears that allows you to
490 choose the installation directory.
491 For example, you could choose the following:
492 <literallayout class='monospaced'>
493 /home/<replaceable>your-username</replaceable>/buildtools
494 </literallayout>
495 </para></listitem>
496 <listitem><para>
497 Source the tools environment setup script by using a
498 command like the following:
499 <literallayout class='monospaced'>
500 $ source /home/<replaceable>your-username</replaceable>/buildtools/environment-setup-i586-poky-linux
501 </literallayout>
502 Of course, you need to supply your installation directory and be
503 sure to use the right file (i.e. i585 or x86-64).
504 </para>
505 <para>
506 After you have sourced the setup script,
507 the tools are added to <filename>PATH</filename>
508 and any other environment variables required to run the
509 tools are initialized.
510 The results are working versions versions of Git, tar,
511 Python and <filename>chrpath</filename>.
512 </para></listitem>
513 </orderedlist>
514 </para>
515 </section>
516 </section>
517</section>
518
519<section id='intro-getit'>
520 <title>Obtaining the Yocto Project</title>
521 <para>
522 The Yocto Project development team makes the Yocto Project available through a number
523 of methods:
524 <itemizedlist>
525 <listitem><para><emphasis>Source Repositories:</emphasis>
526 Working from a copy of the upstream
527 <filename>poky</filename> repository is the
528 preferred method for obtaining and using a Yocto Project
529 release.
530 You can view the Yocto Project Source Repositories at
531 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink>.
532 In particular, you can find the
533 <filename>poky</filename> repository at
534 <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/'></ulink>.
535 </para></listitem>
536 <listitem><para><emphasis>Releases:</emphasis> Stable, tested
537 releases are available as tarballs through
538 <ulink url='&YOCTO_DL_URL;/releases/yocto/'/>.</para></listitem>
539 <listitem><para><emphasis>Nightly Builds:</emphasis> These
540 tarball releases are available at
541 <ulink url='http://autobuilder.yoctoproject.org/nightly'/>.
542 These builds include Yocto Project releases, meta-toolchain
543 tarball installation scripts, and experimental builds.
544 </para></listitem>
545 <listitem><para><emphasis>Yocto Project Website:</emphasis> You can
546 find tarball releases of the Yocto Project and supported BSPs
547 at the
548 <ulink url='&YOCTO_HOME_URL;'>Yocto Project website</ulink>.
549 Along with these downloads, you can find lots of other
550 information at this site.
551 </para></listitem>
552 </itemizedlist>
553 </para>
554</section>
555
556<section id='intro-getit-dev'>
557 <title>Development Checkouts</title>
558 <para>
559 Development using the Yocto Project requires a local
560 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
561 You can set up the Source Directory by cloning a copy of the upstream
562 <ulink url='&YOCTO_DOCS_DEV_URL;#poky'>poky</ulink> Git repository.
563 For information on how to do this, see the
564 "<ulink url='&YOCTO_DOCS_DEV_URL;#getting-setup'>Getting Set Up</ulink>"
565 section in the Yocto Project Development Manual.
566 </para>
567</section>
568
569</chapter>
570<!--
571vim: expandtab tw=80 ts=4
572-->
diff --git a/documentation/ref-manual/migration.xml b/documentation/ref-manual/migration.xml
new file mode 100644
index 0000000000..d072ecfa0e
--- /dev/null
+++ b/documentation/ref-manual/migration.xml
@@ -0,0 +1,2019 @@
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='general-migration-considerations'>
15 <title>General Migration Considerations</title>
16
17 <para>
18 Some considerations are not tied to a specific Yocto Project
19 release.
20 This section presents information you should consider when
21 migrating to any new Yocto Project release.
22 <itemizedlist>
23 <listitem><para><emphasis>Dealing with Customized Recipes</emphasis>:
24 Issues could arise if you take older recipes that contain
25 customizations and simply copy them forward expecting them
26 to work after you migrate to new Yocto Project metadata.
27 For example, suppose you have a recipe in your layer that is
28 a customized version of a core recipe copied from the earlier
29 release, rather than through the use of an append file.
30 When you migrate to a newer version of Yocto Project, the
31 metadata (e.g. perhaps an include file used by the recipe)
32 could have changed in a way that would break the build.
33 Say, for example, a function is removed from an include file
34 and the customized recipe tries to call that function.
35 </para>
36
37 <para>You could "forward-port" all your customizations in your
38 recipe so that everything works for the new release.
39 However, this is not the optimal solution as you would have
40 to repeat this process with each new release if changes
41 occur that give rise to problems.</para>
42
43 <para>The better solution (where practical) is to use append
44 files (<filename>*.bbappend</filename>) to capture any
45 customizations you want to make to a recipe.
46 Doing so, isolates your changes from the main recipe making
47 them much more manageable.
48 However, sometimes it is not practical to use an append
49 file.
50 A good example of this is when introducing a newer or older
51 version of a recipe in another layer.</para>
52 </listitem>
53 <listitem><para><emphasis>Updating Append Files</emphasis>:
54 Since append files generally only contain your customizations,
55 they often do not need to be adjusted for new releases.
56 However, if the <filename>.bbappend</filename> file is
57 specific to a particular version of the recipe (i.e. its
58 name does not use the % wildcard) and the version of the
59 recipe to which it is appending has changed, then you will
60 at a minimum need to rename the append file to match the
61 name of the recipe file.
62 A mismatch between an append file and its corresponding
63 recipe file (<filename>.bb</filename>) will
64 trigger an error during parsing.</para>
65 <para>Depending on the type of customization the append file
66 applies, other incompatibilities might occur when you
67 upgrade.
68 For example, if your append file applies a patch and the
69 recipe to which it is appending is updated to a newer
70 version, the patch might no longer apply.
71 If this is the case and assuming the patch is still needed,
72 you must modify the patch file so that it does apply.
73 </para></listitem>
74 </itemizedlist>
75 </para>
76</section>
77
78<section id='moving-to-the-yocto-project-1.3-release'>
79 <title>Moving to the Yocto Project 1.3 Release</title>
80
81 <para>
82 This section provides migration information for moving to the
83 Yocto Project 1.3 Release from the prior release.
84 </para>
85
86 <section id='1.3-local-configuration'>
87 <title>Local Configuration</title>
88
89 <para>
90 Differences include changes for
91 <link linkend='var-SSTATE_MIRRORS'><filename>SSTATE_MIRRORS</filename></link>
92 and <filename>bblayers.conf</filename>.
93 </para>
94
95 <section id='migration-1.3-sstate-mirrors'>
96 <title>SSTATE_MIRRORS</title>
97
98 <para>
99 The shared state cache (sstate-cache), as pointed to by
100 <link linkend='var-SSTATE_DIR'><filename>SSTATE_DIR</filename></link>, by default
101 now has two-character subdirectories to prevent issues arising
102 from too many files in the same directory.
103 Also, native sstate-cache packages will go into a subdirectory named using
104 the distro ID string.
105 If you copy the newly structured sstate-cache to a mirror location
106 (either local or remote) and then point to it in
107 <link linkend='var-SSTATE_MIRRORS'><filename>SSTATE_MIRRORS</filename></link>,
108 you need to append "PATH" to the end of the mirror URL so that
109 the path used by BitBake before the mirror substitution is
110 appended to the path used to access the mirror.
111 Here is an example:
112 <literallayout class='monospaced'>
113 SSTATE_MIRRORS = "file://.* http://<replaceable>someserver</replaceable>.tld/share/sstate/PATH"
114 </literallayout>
115 </para>
116 </section>
117
118 <section id='migration-1.3-bblayers-conf'>
119 <title>bblayers.conf</title>
120
121 <para>
122 The <filename>meta-yocto</filename> layer consists of two parts
123 that correspond to the Poky reference distribution and the
124 reference hardware Board Support Packages (BSPs), respectively:
125 <filename>meta-yocto</filename> and
126 <filename>meta-yocto-bsp</filename>.
127 When running BitBake or Hob for the first time after upgrading,
128 your <filename>conf/bblayers.conf</filename> file will be
129 updated to handle this change and you will be asked to
130 re-run or restart for the changes to take effect.
131 </para>
132 </section>
133 </section>
134
135 <section id='1.3-recipes'>
136 <title>Recipes</title>
137
138 <para>
139 Differences include changes for the following:
140 <itemizedlist>
141 <listitem><para>Python function whitespace</para></listitem>
142 <listitem><para><filename>proto=</filename> in <filename>SRC_URI</filename></para></listitem>
143 <listitem><para><filename>nativesdk</filename></para></listitem>
144 <listitem><para>Task recipes</para></listitem>
145 <listitem><para><filename>IMAGE_FEATURES</filename></para></listitem>
146 <listitem><para>Removed recipes</para></listitem>
147 </itemizedlist>
148 </para>
149
150 <section id='migration-1.3-python-function-whitespace'>
151 <title>Python Function Whitespace</title>
152
153 <para>
154 All Python functions must now use four spaces for indentation.
155 Previously, an inconsistent mix of spaces and tabs existed,
156 which made extending these functions using
157 <filename>_append</filename> or <filename>_prepend</filename>
158 complicated given that Python treats whitespace as
159 syntactically significant.
160 If you are defining or extending any Python functions (e.g.
161 <filename>populate_packages</filename>, <filename>do_unpack</filename>,
162 <filename>do_patch</filename> and so forth) in custom recipes
163 or classes, you need to ensure you are using consistent
164 four-space indentation.
165 </para>
166 </section>
167
168 <section id='migration-1.3-proto=-in-src-uri'>
169 <title>proto= in SRC_URI</title>
170
171 <para>
172 Any use of <filename>proto=</filename> in
173 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
174 needs to be changed to <filename>protocol=</filename>.
175 In particular, this applies to the following URIs:
176 <itemizedlist>
177 <listitem><para><filename>svn://</filename></para></listitem>
178 <listitem><para><filename>bzr://</filename></para></listitem>
179 <listitem><para><filename>hg://</filename></para></listitem>
180 <listitem><para><filename>osc://</filename></para></listitem>
181 </itemizedlist>
182 Other URIs were already using <filename>protocol=</filename>.
183 This change improves consistency.
184 </para>
185 </section>
186
187 <section id='migration-1.3-nativesdk'>
188 <title>nativesdk</title>
189
190 <para>
191 The suffix <filename>nativesdk</filename> is now implemented
192 as a prefix, which simplifies a lot of the packaging code for
193 <filename>nativesdk</filename> recipes.
194 All custom <filename>nativesdk</filename> recipes and any
195 references need to be updated to use
196 <filename>nativesdk-*</filename> instead of
197 <filename>*-nativesdk</filename>.
198 </para>
199 </section>
200
201 <section id='migration-1.3-task-recipes'>
202 <title>Task Recipes</title>
203
204 <para>
205 "Task" recipes are now known as "Package groups" and have
206 been renamed from <filename>task-*.bb</filename> to
207 <filename>packagegroup-*.bb</filename>.
208 Existing references to the previous <filename>task-*</filename>
209 names should work in most cases as there is an automatic
210 upgrade path for most packages.
211 However, you should update references in your own recipes and
212 configurations as they could be removed in future releases.
213 You should also rename any custom <filename>task-*</filename>
214 recipes to <filename>packagegroup-*</filename>, and change
215 them to inherit <filename>packagegroup</filename> instead of
216 <filename>task</filename>, as well as taking the opportunity
217 to remove anything now handled by
218 <filename>packagegroup.bbclass</filename>, such as providing
219 <filename>-dev</filename> and <filename>-dbg</filename>
220 packages, setting
221 <link linkend='var-LIC_FILES_CHKSUM'><filename>LIC_FILES_CHKSUM</filename></link>,
222 and so forth.
223 See the
224 "<link linkend='ref-classes-packagegroup'><filename>packagegroup.bbclass</filename></link>"
225 section for further details.
226 </para>
227 </section>
228
229 <section id='migration-1.3-image-features'>
230 <title>IMAGE_FEATURES</title>
231
232 <para>
233 Image recipes that previously included "apps-console-core"
234 in <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
235 should now include "splash" instead to enable the boot-up
236 splash screen.
237 Retaining "apps-console-core" will still include the splash
238 screen but generates a warning.
239 The "apps-x11-core" and "apps-x11-games"
240 <filename>IMAGE_FEATURES</filename> features have been removed.
241 </para>
242 </section>
243
244 <section id='migration-1.3-removed-recipes'>
245 <title>Removed Recipes</title>
246
247 <para>
248 The following recipes have been removed.
249 For most of them, it is unlikely that you would have any
250 references to them in your own
251 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>.
252 However, you should check your metadata against this list to be sure:
253 <itemizedlist>
254 <listitem><para><emphasis><filename>libx11-trim</filename></emphasis>:
255 Replaced by <filename>libx11</filename>, which has a negligible
256 size difference with modern Xorg.</para></listitem>
257 <listitem><para><emphasis><filename>xserver-xorg-lite</filename></emphasis>:
258 Use <filename>xserver-xorg</filename>, which has a negligible
259 size difference when DRI and GLX modules are not installed.</para></listitem>
260 <listitem><para><emphasis><filename>xserver-kdrive</filename></emphasis>:
261 Effectively unmaintained for many years.</para></listitem>
262 <listitem><para><emphasis><filename>mesa-xlib</filename></emphasis>:
263 No longer serves any purpose.</para></listitem>
264 <listitem><para><emphasis><filename>galago</filename></emphasis>:
265 Replaced by telepathy.</para></listitem>
266 <listitem><para><emphasis><filename>gail</filename></emphasis>:
267 Functionality was integrated into GTK+ 2.13.</para></listitem>
268 <listitem><para><emphasis><filename>eggdbus</filename></emphasis>:
269 No longer needed.</para></listitem>
270 <listitem><para><emphasis><filename>gcc-*-intermediate</filename></emphasis>:
271 The build has been restructured to avoid the need for
272 this step.</para></listitem>
273 <listitem><para><emphasis><filename>libgsmd</filename></emphasis>:
274 Unmaintained for many years.
275 Functionality now provided by
276 <filename>ofono</filename> instead.</para></listitem>
277 <listitem><para><emphasis>contacts, dates, tasks, eds-tools</emphasis>:
278 Largely unmaintained PIM application suite.
279 It has been moved to <filename>meta-gnome</filename>
280 in <filename>meta-openembedded</filename>.</para></listitem>
281 </itemizedlist>
282 In addition to the previously listed changes, the
283 <filename>meta-demoapps</filename> directory has also been removed
284 because the recipes in it were not being maintained and many
285 had become obsolete or broken.
286 Additionally, these recipes were not parsed in the default configuration.
287 Many of these recipes are already provided in an updated and
288 maintained form within the OpenEmbedded community layers such as
289 <filename>meta-oe</filename> and <filename>meta-gnome</filename>.
290 For the remainder, you can now find them in the
291 <filename>meta-extras</filename> repository, which is in the
292 Yocto Project
293 <ulink url='&YOCTO_DOCS_DEV_URL;#source-repositories'>Source Repositories</ulink>.
294 </para>
295 </section>
296 </section>
297
298 <section id='1.3-linux-kernel-naming'>
299 <title>Linux Kernel Naming</title>
300
301 <para>
302 The naming scheme for kernel output binaries has been changed to
303 now include
304 <link linkend='var-PE'><filename>PE</filename></link> as part of the
305 filename:
306 <literallayout class='monospaced'>
307 KERNEL_IMAGE_BASE_NAME ?= "${KERNEL_IMAGETYPE}-${PE}-${PV}-${PR}-${MACHINE}-${DATETIME}"
308 </literallayout>
309 </para>
310
311 <para>
312 Because the <filename>PE</filename> variable is not set by default,
313 these binary files could result with names that include two dash
314 characters.
315 Here is an example:
316 <literallayout class='monospaced'>
317 bzImage--3.10.9+git0+cd502a8814_7144bcc4b8-r0-qemux86-64-20130830085431.bin
318 </literallayout>
319 </para>
320 </section>
321</section>
322
323<section id='moving-to-the-yocto-project-1.4-release'>
324 <title>Moving to the Yocto Project 1.4 Release</title>
325
326 <para>
327 This section provides migration information for moving to the
328 Yocto Project 1.4 Release from the prior release.
329 </para>
330
331 <section id='migration-1.4-bitbake'>
332 <title>BitBake</title>
333
334 <para>
335 Differences include the following:
336 <itemizedlist>
337 <listitem><para><emphasis>Comment Continuation:</emphasis>
338 If a comment ends with a line continuation (\) character,
339 then the next line must also be a comment.
340 Any instance where this is not the case, now triggers
341 a warning.
342 You must either remove the continuation character, or be
343 sure the next line is a comment.
344 </para></listitem>
345 <listitem><para><emphasis>Package Name Overrides:</emphasis>
346 The runtime package specific variables
347 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>,
348 <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>,
349 <link linkend='var-RSUGGESTS'><filename>RSUGGESTS</filename></link>,
350 <link linkend='var-RPROVIDES'><filename>RPROVIDES</filename></link>,
351 <link linkend='var-RCONFLICTS'><filename>RCONFLICTS</filename></link>,
352 <link linkend='var-RREPLACES'><filename>RREPLACES</filename></link>,
353 <link linkend='var-FILES'><filename>FILES</filename></link>,
354 <link linkend='var-ALLOW_EMPTY'><filename>ALLOW_EMPTY</filename></link>,
355 and the pre, post, install, and uninstall script functions
356 <filename>pkg_preinst</filename>,
357 <filename>pkg_postinst</filename>,
358 <filename>pkg_prerm</filename>, and
359 <filename>pkg_postrm</filename> should always have a
360 package name override.
361 For example, use <filename>RDEPENDS_${PN}</filename> for
362 the main package instead of <filename>RDEPENDS</filename>.
363 BitBake uses more strict checks when it parses recipes.
364 </para></listitem>
365 </itemizedlist>
366 </para>
367 </section>
368
369 <section id='migration-1.4-build-behavior'>
370 <title>Build Behavior</title>
371
372 <para>
373 Differences include the following:
374 <itemizedlist>
375 <listitem><para><emphasis>Shared State Code:</emphasis>
376 The shared state code has been optimized to avoid running
377 unnecessary tasks.
378 For example, the following no longer populates the target
379 sysroot since that is not necessary:
380 <literallayout class='monospaced'>
381 $ bitbake -c rootfs <replaceable>some-image</replaceable>
382 </literallayout>
383 Instead, the system just needs to extract the output
384 package contents, re-create the packages, and construct
385 the root filesystem.
386 This change is unlikely to cause any problems unless
387 you have missing declared dependencies.
388 </para></listitem>
389 <listitem><para><emphasis>Scanning Directory Names:</emphasis>
390 When scanning for files in
391 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>,
392 the build system now uses
393 <link linkend='var-FILESOVERRIDES'><filename>FILESOVERRIDES</filename></link>
394 instead of <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>
395 for the directory names.
396 In general, the values previously in
397 <filename>OVERRIDES</filename> are now in
398 <filename>FILESOVERRIDES</filename> as well.
399 However, if you relied upon an additional value
400 you previously added to <filename>OVERRIDES</filename>,
401 you might now need to add it to
402 <filename>FILESOVERRIDES</filename> unless you are already
403 adding it through the
404 <link linkend='var-MACHINEOVERRIDES'><filename>MACHINEOVERRIDES</filename></link>
405 or <link linkend='var-DISTROOVERRIDES'><filename>DISTROOVERRIDES</filename></link>
406 variables, as appropriate.
407 For more related changes, see the
408 "<link linkend='migration-1.4-variables'>Variables</link>"
409 section.
410 </para></listitem>
411 </itemizedlist>
412 </para>
413 </section>
414
415
416 <section id='migration-1.4-proxies-and-fetching-source'>
417 <title>Proxies and Fetching Source</title>
418
419 <para>
420 A new <filename>oe-git-proxy</filename> script has been added to
421 replace previous methods of handling proxies and fetching source
422 from Git.
423 See the <filename>meta-yocto/conf/site.conf.sample</filename> file
424 for information on how to use this script.
425 </para>
426 </section>
427
428 <section id='migration-1.4-custom-interfaces-file-netbase-change'>
429 <title>Custom Interfaces File (netbase change)</title>
430
431 <para>
432 If you have created your own custom
433 <filename>etc/network/interfaces</filename> file by creating
434 an append file for the <filename>netbase</filename> recipe,
435 you now need to create an append file for the
436 <filename>init-ifupdown</filename> recipe instead, which you can
437 find in the
438 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
439 at <filename>meta/recipes-core/init-ifupdown</filename>.
440 For information on how to use append files, see the
441 "<ulink url='&YOCTO_DOCS_DEV_URL;#using-bbappend-files'>Using .bbappend Files</ulink>"
442 in the Yocto Project Development Manual.
443 </para>
444 </section>
445
446 <section id='migration-1.4-remote-debugging'>
447 <title>Remote Debugging</title>
448
449 <para>
450 Support for remote debugging with the Eclipse IDE is now
451 separated into an image feature
452 (<filename>eclipse-debug</filename>) that corresponds to the
453 <filename>packagegroup-core-eclipse-debug</filename> package group.
454 Previously, the debugging feature was included through the
455 <filename>tools-debug</filename> image feature, which corresponds
456 to the <filename>packagegroup-core-tools-debug</filename>
457 package group.
458 </para>
459 </section>
460
461 <section id='migration-1.4-variables'>
462 <title>Variables</title>
463
464 <para>
465 The following variables have changed:
466 <itemizedlist>
467 <listitem><para><emphasis><filename>SANITY_TESTED_DISTROS</filename>:</emphasis>
468 This variable now uses a distribution ID, which is composed
469 of the host distributor ID followed by the release.
470 Previously,
471 <link linkend='var-SANITY_TESTED_DISTROS'><filename>SANITY_TESTED_DISTROS</filename></link>
472 was composed of the description field.
473 For example, "Ubuntu 12.10" becomes "Ubuntu-12.10".
474 You do not need to worry about this change if you are not
475 specifically setting this variable, or if you are
476 specifically setting it to "".
477 </para></listitem>
478 <listitem><para><emphasis><filename>SRC_URI</filename>:</emphasis>
479 The <filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}</filename>,
480 <filename>${</filename><link linkend='var-PF'><filename>PF</filename></link><filename>}</filename>,
481 <filename>${</filename><link linkend='var-P'><filename>P</filename></link><filename>}</filename>,
482 and <filename>FILE_DIRNAME</filename> directories have been
483 dropped from the default value of the
484 <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>
485 variable, which is used as the search path for finding files
486 referred to in
487 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>.
488 If you have a recipe that relied upon these directories,
489 which would be unusual, then you will need to add the
490 appropriate paths within the recipe or, alternatively,
491 rearrange the files.
492 The most common locations are still covered by
493 <filename>${BP}</filename>, <filename>${BPN}</filename>,
494 and "files", which all remain in the default value of
495 <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>.
496 </para></listitem>
497 </itemizedlist>
498 </para>
499 </section>
500
501 <section id='migration-target-package-management-with-rpm'>
502 <title>Target Package Management with RPM</title>
503
504 <para>
505 If runtime package management is enabled and the RPM backend
506 is selected, Smart is now installed for package download, dependency
507 resolution, and upgrades instead of Zypper.
508 For more information on how to use Smart, run the following command
509 on the target:
510 <literallayout class='monospaced'>
511 smart --help
512 </literallayout>
513 </para>
514 </section>
515
516 <section id='migration-1.4-recipes-moved'>
517 <title>Recipes Moved</title>
518
519 <para>
520 The following recipes were moved from their previous locations
521 because they are no longer used by anything in
522 the OpenEmbedded-Core:
523 <itemizedlist>
524 <listitem><para><emphasis><filename>clutter-box2d</filename>:</emphasis>
525 Now resides in the <filename>meta-oe</filename> layer.
526 </para></listitem>
527 <listitem><para><emphasis><filename>evolution-data-server</filename>:</emphasis>
528 Now resides in the <filename>meta-gnome</filename> layer.
529 </para></listitem>
530 <listitem><para><emphasis><filename>gthumb</filename>:</emphasis>
531 Now resides in the <filename>meta-gnome</filename> layer.
532 </para></listitem>
533 <listitem><para><emphasis><filename>gtkhtml2</filename>:</emphasis>
534 Now resides in the <filename>meta-oe</filename> layer.
535 </para></listitem>
536 <listitem><para><emphasis><filename>gupnp</filename>:</emphasis>
537 Now resides in the <filename>meta-multimedia</filename> layer.
538 </para></listitem>
539 <listitem><para><emphasis><filename>gypsy</filename>:</emphasis>
540 Now resides in the <filename>meta-oe</filename> layer.
541 </para></listitem>
542 <listitem><para><emphasis><filename>libcanberra</filename>:</emphasis>
543 Now resides in the <filename>meta-gnome</filename> layer.
544 </para></listitem>
545 <listitem><para><emphasis><filename>libgdata</filename>:</emphasis>
546 Now resides in the <filename>meta-gnome</filename> layer.
547 </para></listitem>
548 <listitem><para><emphasis><filename>libmusicbrainz</filename>:</emphasis>
549 Now resides in the <filename>meta-multimedia</filename> layer.
550 </para></listitem>
551 <listitem><para><emphasis><filename>metacity</filename>:</emphasis>
552 Now resides in the <filename>meta-gnome</filename> layer.
553 </para></listitem>
554 <listitem><para><emphasis><filename>polkit</filename>:</emphasis>
555 Now resides in the <filename>meta-oe</filename> layer.
556 </para></listitem>
557 <listitem><para><emphasis><filename>zeroconf</filename>:</emphasis>
558 Now resides in the <filename>meta-networking</filename> layer.
559 </para></listitem>
560 </itemizedlist>
561 </para>
562 </section>
563
564 <section id='migration-1.4-removals-and-renames'>
565 <title>Removals and Renames</title>
566
567 <para>
568 The following list shows what has been removed or renamed:
569 <itemizedlist>
570 <listitem><para><emphasis><filename>evieext</filename>:</emphasis>
571 Removed because it has been removed from
572 <filename>xserver</filename> since 2008.
573 </para></listitem>
574 <listitem><para><emphasis>Gtk+ DirectFB:</emphasis>
575 Removed support because upstream Gtk+ no longer supports it
576 as of version 2.18.
577 </para></listitem>
578 <listitem><para><emphasis><filename>libxfontcache / xfontcacheproto</filename>:</emphasis>
579 Removed because they were removed from the Xorg server in 2008.
580 </para></listitem>
581 <listitem><para><emphasis><filename>libxp / libxprintapputil / libxprintutil / printproto</filename>:</emphasis>
582 Removed because the XPrint server was removed from
583 Xorg in 2008.
584 </para></listitem>
585 <listitem><para><emphasis><filename>libxtrap / xtrapproto</filename>:</emphasis>
586 Removed because their functionality was broken upstream.
587 </para></listitem>
588 <listitem><para><emphasis>linux-yocto 3.0 kernel:</emphasis>
589 Removed with linux-yocto 3.8 kernel being added.
590 The linux-yocto 3.2 and linux-yocto 3.4 kernels remain
591 as part of the release.
592 </para></listitem>
593 <listitem><para><emphasis><filename>lsbsetup</filename>:</emphasis>
594 Removed with functionality now provided by
595 <filename>lsbtest</filename>.
596 </para></listitem>
597 <listitem><para><emphasis><filename>matchbox-stroke</filename>:</emphasis>
598 Removed because it was never more than a proof-of-concept.
599 </para></listitem>
600 <listitem><para><emphasis><filename>matchbox-wm-2 / matchbox-theme-sato-2</filename>:</emphasis>
601 Removed because they are not maintained.
602 However, <filename>matchbox-wm</filename> and
603 <filename>matchbox-theme-sato</filename> are still
604 provided.
605 </para></listitem>
606 <listitem><para><emphasis><filename>mesa-dri</filename>:</emphasis>
607 Renamed to <filename>mesa</filename>.
608 </para></listitem>
609 <listitem><para><emphasis><filename>mesa-xlib</filename>:</emphasis>
610 Removed because it was no longer useful.
611 </para></listitem>
612 <listitem><para><emphasis><filename>mutter</filename>:</emphasis>
613 Removed because nothing ever uses it and the recipe is
614 very old.
615 </para></listitem>
616 <listitem><para><emphasis><filename>orinoco-conf</filename>:</emphasis>
617 Removed because it has become obsolete.
618 </para></listitem>
619 <listitem><para><emphasis><filename>update-modules</filename>:</emphasis>
620 Removed because it is no longer used.
621 The kernel module <filename>postinstall</filename> and
622 <filename>postrm</filename> scripts can now do the same
623 task without the use of this script.
624 </para></listitem>
625 <listitem><para><emphasis><filename>web</filename>:</emphasis>
626 Removed because it is not maintained. Superseded by
627 <filename>web-webkit</filename>.
628 </para></listitem>
629 <listitem><para><emphasis><filename>xf86bigfontproto</filename>:</emphasis>
630 Removed because upstream it has been disabled by default
631 since 2007.
632 Nothing uses <filename>xf86bigfontproto</filename>.
633 </para></listitem>
634 <listitem><para><emphasis><filename>xf86rushproto</filename>:</emphasis>
635 Removed because its dependency in
636 <filename>xserver</filename> was spurious and it was
637 removed in 2005.
638 </para></listitem>
639 <listitem><para><emphasis><filename>zypper / libzypp / sat-solver</filename>:</emphasis>
640 Removed and been functionally replaced with Smart
641 (<filename>python-smartpm</filename>) when RPM packaging
642 is used and package management is enabled on the target.
643 </para></listitem>
644 </itemizedlist>
645 </para>
646 </section>
647</section>
648
649<section id='moving-to-the-yocto-project-1.5-release'>
650 <title>Moving to the Yocto Project 1.5 Release</title>
651
652 <para>
653 This section provides migration information for moving to the
654 Yocto Project 1.5 Release from the prior release.
655 </para>
656
657 <section id='migration-1.5-host-dependency-changes'>
658 <title>Host Dependency Changes</title>
659
660 <para>
661 The OpenEmbedded build system now has some additional requirements
662 on the host system:
663 <itemizedlist>
664 <listitem><para>Python 2.7.3+</para></listitem>
665 <listitem><para>Tar 1.24+</para></listitem>
666 <listitem><para>Git 1.7.8+</para></listitem>
667 <listitem><para>Patched version of Make if you are using
668 3.82.
669 Most distributions that provide Make 3.82 use the patched
670 version.</para></listitem>
671 </itemizedlist>
672 If the Linux distribution you are using on your build host
673 does not provide packages for these, you can install and use
674 the Buildtools tarball, which provides an SDK-like environment
675 containing them.
676 </para>
677
678 <para>
679 For more information on this requirement, see the
680 "<link linkend='required-git-tar-and-python-versions'>Required Git, tar, and Python Versions</link>"
681 section.
682 </para>
683 </section>
684
685 <section id='migration-1.5-atom-pc-bsp'>
686 <title><filename>atom-pc</filename> Board Support Package (BSP)</title>
687
688 <para>
689 The <filename>atom-pc</filename> hardware reference BSP has been
690 replaced by a <filename>genericx86</filename> BSP.
691 This BSP is not necessarily guaranteed to work on all x86
692 hardware, but it will run on a wider range of systems than the
693 <filename>atom-pc</filename> did.
694 <note>
695 Additionally, a <filename>genericx86-64</filename> BSP has
696 been added for 64-bit Atom systems.
697 </note>
698 </para>
699 </section>
700
701 <section id='migration-1.5-bitbake'>
702 <title>BitBake</title>
703
704 <para>
705 The following changes have been made that relate to BitBake:
706 <itemizedlist>
707 <listitem><para>
708 BitBake now supports a <filename>_remove</filename>
709 operator.
710 The addition of this operator means you will have to
711 rename any items in recipe space (functions, variables)
712 whose names currently contain
713 <filename>_remove_</filename> or end with
714 <filename>_remove</filename> to avoid unexpected behavior.
715 </para></listitem>
716 <listitem><para>
717 BitBake's global method pool has been removed.
718 This method is not particularly useful and led to clashes
719 between recipes containing functions that had the
720 same name.</para></listitem>
721 <listitem><para>
722 The "none" server backend has been removed.
723 The "process" server backend has been serving well as the
724 default for a long time now.</para></listitem>
725 <listitem><para>
726 The <filename>bitbake-runtask</filename> script has been
727 removed.</para></listitem>
728 <listitem><para>
729 <filename>${</filename><link linkend='var-P'><filename>P</filename></link><filename>}</filename>
730 and
731 <filename>${</filename><link linkend='var-PF'><filename>PF</filename></link><filename>}</filename>
732 are no longer added to
733 <link linkend='var-PROVIDES'><filename>PROVIDES</filename></link>
734 by default in <filename>bitbake.conf</filename>.
735 These version-specific <filename>PROVIDES</filename>
736 items were seldom used.
737 Attempting to use them could result in two versions being
738 built simultaneously rather than just one version due to
739 the way BitBake resolves dependencies.</para></listitem>
740 </itemizedlist>
741 </para>
742 </section>
743
744 <section id='migration-1.5-qa-warnings'>
745 <title>QA Warnings</title>
746
747 <para>
748 The following changes have been made to the package QA checks:
749 <itemizedlist>
750 <listitem><para>
751 If you have customized
752 <link linkend='var-ERROR_QA'><filename>ERROR_QA</filename></link>
753 or <link linkend='var-WARN_QA'><filename>WARN_QA</filename></link>
754 values in your configuration, check that they contain all of
755 the issues that you wish to be reported.
756 Previous Yocto Project versions contained a bug that meant
757 that any item not mentioned in <filename>ERROR_QA</filename>
758 or <filename>WARN_QA</filename> would be treated as a
759 warning.
760 Consequently, several important items were not already in
761 the default value of <filename>WARN_QA</filename>.
762 All of the possible QA checks are now documented in the
763 "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
764 section.</para></listitem>
765 <listitem><para>
766 An additional QA check has been added to check if
767 <filename>/usr/share/info/dir</filename> is being installed.
768 Your recipe should delete this file within
769 <link linkend='ref-tasks-install'><filename>do_install</filename></link>
770 if "make install" is installing it.
771 </para></listitem>
772 <listitem><para>
773 If you are using the buildhistory class, the check for the
774 package version going backwards is now controlled using a
775 standard QA check.
776 Thus, if you have customized your
777 <filename>ERROR_QA</filename> or
778 <filename>WARN_QA</filename> values and still wish to have
779 this check performed, you should add
780 "version-going-backwards" to your value for one or the
781 other variables depending on how you wish it to be handled.
782 See the documented QA checks in the
783 "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
784 section.
785 </para></listitem>
786 </itemizedlist>
787 </para>
788 </section>
789
790 <section id='migration-1.5-directory-layout-changes'>
791 <title>Directory Layout Changes</title>
792
793 <para>
794 The following directory changes exist:
795 <itemizedlist>
796 <listitem><para>
797 Output SDK installer files are now named to include the
798 image name and tuning architecture through the
799 <link linkend='var-SDK_NAME'><filename>SDK_NAME</filename></link>
800 variable.</para></listitem>
801 <listitem><para>
802 Images and related files are now installed into a directory
803 that is specific to the machine, instead of a parent
804 directory containing output files for multiple machines.
805 The
806 <link linkend='var-DEPLOY_DIR_IMAGE'><filename>DEPLOY_DIR_IMAGE</filename></link>
807 variable continues to point to the directory containing
808 images for the current
809 <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
810 and should be used anywhere there is a need to refer to
811 this directory.
812 The <filename>runqemu</filename> script now uses this
813 variable to find images and kernel binaries and will use
814 BitBake to determine the directory.
815 Alternatively, you can set the
816 <filename>DEPLOY_DIR_IMAGE</filename> variable in the
817 external environment.</para></listitem>
818 <listitem><para>
819 When buildhistory is enabled, its output is now written
820 under the
821 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
822 rather than
823 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>.
824 Doing so makes it easier to delete
825 <filename>TMPDIR</filename> and preserve the build history.
826 Additionally, data for produced SDKs is now split by
827 <link linkend='var-IMAGE_NAME'><filename>IMAGE_NAME</filename></link>.
828 </para></listitem>
829 <listitem><para>
830 The <filename>pkgdata</filename> directory produced as
831 part of the packaging process has been collapsed into a
832 single machine-specific directory.
833 This directory is located under
834 <filename>sysroots</filename> and uses a machine-specific
835 name (i.e.
836 <filename>tmp/sysroots/<replaceable>machine</replaceable>/pkgdata</filename>).
837 </para></listitem>
838 </itemizedlist>
839 </para>
840 </section>
841
842 <section id='migration-1.5-shortened-git-srcrev-values'>
843 <title>Shortened Git <filename>SRCREV</filename> Values</title>
844
845 <para>
846 BitBake will now shorten revisions from Git repositories from the
847 normal 40 characters down to 10 characters within
848 <link linkend='var-SRCPV'><filename>SRCPV</filename></link>
849 for improved usability in path and file names.
850 This change should be safe within contexts where these revisions
851 are used because the chances of spatially close collisions
852 is very low.
853 Distant collisions are not a major issue in the way
854 the values are used.
855 </para>
856 </section>
857
858 <section id='migration-1.5-image-features'>
859 <title><filename>IMAGE_FEATURES</filename></title>
860
861 <para>
862 The following changes have been made that relate to
863 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>:
864 <itemizedlist>
865 <listitem><para>
866 The value of
867 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
868 is now validated to ensure invalid feature items are not
869 added.
870 Some users mistakenly add package names to this variable
871 instead of using
872 <link linkend='var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></link>
873 in order to have the package added to the image, which does
874 not work.
875 This change is intended to catch those kinds of situations.
876 Valid <filename>IMAGE_FEATURES</filename> are drawn from
877 <link linkend='var-PACKAGE_GROUP'><filename>PACKAGE_GROUP</filename></link>
878 definitions,
879 <link linkend='var-COMPLEMENTARY_GLOB'><filename>COMPLEMENTARY_GLOB</filename></link>
880 and a new "validitems" varflag on
881 <filename>IMAGE_FEATURES</filename>.
882 The "validitems" varflag change allows additional features
883 to be added if they are not provided using the previous
884 two mechanisms.
885 </para></listitem>
886 <listitem><para>
887 The previously deprecated "apps-console-core"
888 <filename>IMAGE_FEATURES</filename> item is no longer
889 supported.
890 Add "splash" to <filename>IMAGE_FEATURES</filename> if you
891 wish to have the splash screen enabled, since this is
892 all that apps-console-core was doing.</para></listitem>
893 </itemizedlist>
894 </para>
895 </section>
896
897 <section id='migration-1.5-run'>
898 <title><filename>/run</filename></title>
899
900 <para>
901 The <filename>/run</filename> directory from the Filesystem
902 Hierarchy Standard 3.0 has been introduced.
903 You can find some of the implications for this change
904 <ulink url='http://cgit.openembedded.org/openembedded-core/commit/?id=0e326280a15b0f2c4ef2ef4ec441f63f55b75873'>here</ulink>.
905 The change also means that recipes that install files to
906 <filename>/var/run</filename> must be changed.
907 You can find a guide on how to make these changes
908 <ulink url='http://permalink.gmane.org/gmane.comp.handhelds.openembedded/58530'>here</ulink>.
909 </para>
910 </section>
911
912 <section id='migration-1.5-removal-of-package-manager-database-within-image-recipes'>
913 <title>Removal of Package Manager Database Within Image Recipes</title>
914
915 <para>
916 The image <filename>core-image-minimal</filename> no longer adds
917 <filename>remove_packaging_data_files</filename> to
918 <link linkend='var-ROOTFS_POSTPROCESS_COMMAND'><filename>ROOTFS_POSTPROCESS_COMMAND</filename></link>.
919 This addition is now handled automatically when "package-management"
920 is not in
921 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>.
922 If you have custom image recipes that make this addition,
923 you should remove the lines, as they are not needed and might
924 interfere with correct operation of postinstall scripts.
925 </para>
926 </section>
927
928 <section id='migration-1.5-images-now-rebuild-only-on-changes-instead-of-every-time'>
929 <title>Images Now Rebuild Only on Changes Instead of Every Time</title>
930
931 <para>
932 The
933 <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link>
934 and other related image
935 construction tasks are no longer marked as "nostamp".
936 Consequently, they will only be re-executed when their inputs have
937 changed.
938 Previous versions of the OpenEmbedded build system always rebuilt
939 the image when requested rather when necessary.
940 </para>
941 </section>
942
943 <section id='migration-1.5-task-recipes'>
944 <title>Task Recipes</title>
945
946 <para>
947 The previously deprecated <filename>task.bbclass</filename> has
948 now been dropped.
949 For recipes that previously inherited from this class, you should
950 rename them from <filename>task-*</filename> to
951 <filename>packagegroup-*</filename> and inherit packagegroup
952 instead.
953 </para>
954
955 <para>
956 For more information, see the
957 "<link linkend='ref-classes-packagegroup'><filename>packagegroup.bbclass</filename></link>"
958 section.
959 </para>
960 </section>
961
962 <section id='migration-1.5-busybox'>
963 <title>BusyBox</title>
964
965 <para>
966 By default, we now split BusyBox into two binaries:
967 one that is suid root for those components that need it, and
968 another for the rest of the components.
969 Splitting BusyBox allows for optimization that eliminates the
970 <filename>tinylogin</filename> recipe as recommended by upstream.
971 You can disable this split by setting
972 <link linkend='var-BUSYBOX_SPLIT_SUID'><filename>BUSYBOX_SPLIT_SUID</filename></link>
973 to "0".
974 </para>
975 </section>
976
977 <section id='migration-1.5-automated-image-testing'>
978 <title>Automated Image Testing</title>
979
980 <para>
981 A new automated image testing framework has been added
982 through the
983 <link linkend='ref-classes-testimage'><filename>testimage*.bbclass</filename></link>
984 class.
985 This framework replaces the older
986 <filename>imagetest-qemu</filename> framework.
987 </para>
988
989 <para>
990 You can learn more about performing automated image tests in the
991 "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
992 section.
993 </para>
994 </section>
995
996 <section id='migration-1.5-build-history'>
997 <title>Build History</title>
998
999 <para>
1000 Following are changes to Build History:
1001 <itemizedlist>
1002 <listitem><para>
1003 Installed package sizes:
1004 <filename>installed-package-sizes.txt</filename> for an
1005 image now records the size of the files installed by each
1006 package instead of the size of each compressed package
1007 archive file.</para></listitem>
1008 <listitem><para>
1009 The dependency graphs (<filename>depends*.dot</filename>)
1010 now use the actual package names instead of replacing
1011 dashes, dots and plus signs with underscores.
1012 </para></listitem>
1013 <listitem><para>
1014 The <filename>buildhistory-diff</filename> and
1015 <filename>buildhistory-collect-srcrevs</filename>
1016 utilities have improved command-line handling.
1017 Use the <filename>&dash;&dash;help</filename> option for
1018 each utility for more information on the new syntax.
1019 </para></listitem>
1020 </itemizedlist>
1021 For more information on Build History, see the
1022 "<link linkend='maintaining-build-output-quality'>Maintaining Build Output Quality</link>"
1023 section.
1024 </para>
1025 </section>
1026
1027 <section id='migration-1.5-udev'>
1028 <title><filename>udev</filename></title>
1029
1030 <para>
1031 Following are changes to <filename>udev</filename>:
1032 <itemizedlist>
1033 <listitem><para>
1034 <filename>udev</filename> no longer brings in
1035 <filename>udev-extraconf</filename> automatically
1036 through
1037 <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>,
1038 since this was originally intended to be optional.
1039 If you need the extra rules, then add
1040 <filename>udev-extraconf</filename> to your image.
1041 </para></listitem>
1042 <listitem><para>
1043 <filename>udev</filename> no longer brings in
1044 <filename>pciutils-ids</filename> or
1045 <filename>usbutils-ids</filename> through
1046 <filename>RRECOMMENDS</filename>.
1047 These are not needed by <filename>udev</filename> itself
1048 and removing them saves around 350KB.
1049 </para></listitem>
1050 </itemizedlist>
1051 </para>
1052 </section>
1053
1054 <section id='migration-1.5-removed-renamed-recipes'>
1055 <title>Removed and Renamed Recipes</title>
1056
1057 <itemizedlist>
1058 <listitem><para>
1059 The <filename>linux-yocto</filename> 3.2 kernel has been
1060 removed.</para></listitem>
1061 <listitem><para>
1062 <filename>libtool-nativesdk</filename> has been renamed to
1063 <filename>nativesdk-libtool</filename>.</para></listitem>
1064 <listitem><para>
1065 <filename>tinylogin</filename> has been removed.
1066 It has been replaced by a suid portion of Busybox.
1067 See the
1068 "<link linkend='migration-1.5-busybox'>BusyBox</link>" section
1069 for more information.</para></listitem>
1070 <listitem><para>
1071 <filename>external-python-tarball</filename> has been renamed
1072 to <filename>buildtools-tarball</filename>.
1073 </para></listitem>
1074 <listitem><para>
1075 <filename>web-webkit</filename> has been removed.
1076 It has been functionally replaced by
1077 <filename>midori</filename>.</para></listitem>
1078 <listitem><para>
1079 <filename>imake</filename> has been removed.
1080 It is no longer needed by any other recipe.
1081 </para></listitem>
1082 <listitem><para>
1083 <filename>transfig-native</filename> has been removed.
1084 It is no longer needed by any other recipe.
1085 </para></listitem>
1086 <listitem><para>
1087 <filename>anjuta-remote-run</filename> has been removed.
1088 Anjuta IDE integration has not been officially supported for
1089 several releases.</para></listitem>
1090 </itemizedlist>
1091 </section>
1092
1093 <section id='migration-1.5-other-changes'>
1094 <title>Other Changes</title>
1095
1096 <para>
1097 Following is a list of short entries describing other changes:
1098 <itemizedlist>
1099 <listitem><para>
1100 <filename>run-postinsts</filename>: Make this generic.
1101 </para></listitem>
1102 <listitem><para>
1103 <filename>base-files</filename>: Remove the unnecessary
1104 <filename>media/</filename><replaceable>xxx</replaceable> directories.
1105 </para></listitem>
1106 <listitem><para>
1107 <filename>alsa-state</filename>: Provide an empty
1108 <filename>asound.conf</filename> by default.
1109 </para></listitem>
1110 <listitem><para>
1111 <filename>classes/image</filename>: Ensure
1112 <link linkend='var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></link>
1113 supports pre-renamed package names.</para></listitem>
1114 <listitem><para>
1115 <filename>classes/rootfs_rpm</filename>: Implement
1116 <link linkend='var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></link>
1117 for RPM.</para></listitem>
1118 <listitem><para>
1119 <filename>systemd</filename>: Remove
1120 <filename>systemd_unitdir</filename> if
1121 <filename>systemd</filename> is not in
1122 <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.
1123 </para></listitem>
1124 <listitem><para>
1125 <filename>systemd</filename>: Remove
1126 <filename>init.d</filename> dir if
1127 <filename>systemd</filename> unit file is present and
1128 <filename>sysvinit</filename> is not a distro feature.
1129 </para></listitem>
1130 <listitem><para>
1131 <filename>libpam</filename>: Deny all services for the
1132 <filename>OTHER</filename> entries.
1133 </para></listitem>
1134 <listitem><para>
1135 <filename>image.bbclass</filename>: Move
1136 <filename>runtime_mapping_rename</filename> to avoid
1137 conflict with <filename>multilib</filename>.
1138 See
1139 <ulink url='https://bugzilla.yoctoproject.org/show_bug.cgi?id=4993'><filename>YOCTO #4993</filename></ulink>
1140 in Bugzilla for more information.
1141 </para></listitem>
1142 <listitem><para>
1143 <filename>linux-dtb</filename>: Use kernel build system
1144 to generate the <filename>dtb</filename> files.
1145 </para></listitem>
1146 <listitem><para>
1147 <filename>kern-tools</filename>: Switch from guilt to
1148 new <filename>kgit-s2q</filename> tool.
1149 </para></listitem>
1150 </itemizedlist>
1151 </para>
1152 </section>
1153</section>
1154
1155<section id='moving-to-the-yocto-project-1.6-release'>
1156 <title>Moving to the Yocto Project 1.6 Release</title>
1157
1158 <para>
1159 This section provides migration information for moving to the
1160 Yocto Project 1.6 Release from the prior release.
1161 </para>
1162
1163
1164 <section id='migration-1.6-archiver-class'>
1165 <title><filename>archiver</filename> Class</title>
1166
1167 <para>
1168 The
1169 <link linkend='ref-classes-archiver'><filename>archiver</filename></link>
1170 class has been rewritten and its configuration has been simplified.
1171 For more details on the source archiver, see the
1172 "<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>"
1173 section in the Yocto Project Development Manual.
1174 </para>
1175 </section>
1176
1177 <section id='migration-1.6-packaging-changes'>
1178 <title>Packaging Changes</title>
1179
1180 <para>
1181 The following packaging changes have been made:
1182 <itemizedlist>
1183 <listitem><para>
1184 The <filename>binutils</filename> recipe no longer produces
1185 a <filename>binutils-symlinks</filename> package.
1186 <filename>update-alternatives</filename> is now used to
1187 handle the preferred <filename>binutils</filename>
1188 variant on the target instead.
1189 </para></listitem>
1190 <listitem><para>
1191 The tc (traffic control) utilities have been split out of
1192 the main <filename>iproute2</filename> package and put
1193 into the <filename>iproute2-tc</filename> package.
1194 </para></listitem>
1195 <listitem><para>
1196 The <filename>gtk-engines</filename> schemas have been
1197 moved to a dedicated
1198 <filename>gtk-engines-schemas</filename> package.
1199 </para></listitem>
1200 <listitem><para>
1201 The <filename>armv7a</filename> with thumb package
1202 architecture suffix has changed.
1203 The suffix for these packages with the thumb
1204 optimization enabled is "t2" as it should be.
1205 Use of this suffix was not the case in the 1.5 release.
1206 Architecture names will change within package feeds as a
1207 result.
1208 </para></listitem>
1209 </itemizedlist>
1210 </para>
1211 </section>
1212
1213 <section id='migration-1.6-bitbake'>
1214 <title>BitBake</title>
1215
1216 <para>
1217 The following changes have been made to
1218 <ulink url='&YOCTO_DOCS_DEV_URL;#bitbake-term'>BitBake</ulink>.
1219 </para>
1220
1221 <section id='migration-1.6-matching-branch-requirement-for-git-fetching'>
1222 <title>Matching Branch Requirement for Git Fetching</title>
1223
1224 <para>
1225 When fetching source from a Git repository using
1226 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>,
1227 BitBake will now validate the
1228 <link linkend='var-SRCREV'><filename>SRCREV</filename></link>
1229 value against the branch.
1230 You can specify the branch using the following form:
1231 <literallayout class='monospaced'>
1232 SRC_URI = "git://server.name/repository;branch=<replaceable>branchname</replaceable>"
1233 </literallayout>
1234 If you do not specify a branch, BitBake looks
1235 in the default "master" branch.
1236 </para>
1237
1238 <para>
1239 Alternatively, if you need to bypass this check (e.g.
1240 if you are fetching a revision corresponding to a tag that
1241 is not on any branch), you can add ";nobranch=1" to
1242 the end of the URL within <filename>SRC_URI</filename>.
1243 </para>
1244 </section>
1245
1246 <section id='migration-1.6-bitbake-deps'>
1247 <title>Python Definition substitutions</title>
1248
1249 <para>
1250 BitBake had some previously deprecated Python definitions
1251 within its <filename>bb</filename> module removed.
1252 You should use their sub-module counterparts instead:
1253 <itemizedlist>
1254 <listitem><para><filename>bb.MalformedUrl</filename>:
1255 Use <filename>bb.fetch.MalformedUrl</filename>.
1256 </para></listitem>
1257 <listitem><para><filename>bb.fetch.encodeurl</filename>:
1258 Use <filename>bb.fetch.encodeurl</filename>.
1259 </para></listitem>
1260 <listitem><para><filename>bb.decodeurl</filename>:
1261 Use <filename>bb.fetch.decodeurl</filename>
1262 </para></listitem>
1263 <listitem><para><filename>bb.mkdirhier</filename>:
1264 Use <filename>bb.utils.mkdirhier</filename>.
1265 </para></listitem>
1266 <listitem><para><filename>bb.movefile</filename>:
1267 Use <filename>bb.utils.movefile</filename>.
1268 </para></listitem>
1269 <listitem><para><filename>bb.copyfile</filename>:
1270 Use <filename>bb.utils.copyfile</filename>.
1271 </para></listitem>
1272 <listitem><para><filename>bb.which</filename>:
1273 Use <filename>bb.utils.which</filename>.
1274 </para></listitem>
1275 <listitem><para><filename>bb.vercmp_string</filename>:
1276 Use <filename>bb.utils.vercmp_string</filename>.
1277 </para></listitem>
1278 <listitem><para><filename>bb.vercmp</filename>:
1279 Use <filename>bb.utils.vercmp</filename>.
1280 </para></listitem>
1281 </itemizedlist>
1282 </para>
1283 </section>
1284
1285 <section id='migration-1.6-bitbake-fetcher'>
1286 <title>SVK Fetcher</title>
1287
1288 <para>
1289 The SVK fetcher has been removed from BitBake.
1290 </para>
1291 </section>
1292
1293 <section id='migration-1.6-bitbake-console-output'>
1294 <title>Console Output Error Redirection</title>
1295
1296 <para>
1297 The BitBake console UI will now output errors to
1298 <filename>stderr</filename> instead of
1299 <filename>stdout</filename>.
1300 Consequently, if you are piping or redirecting the output of
1301 <filename>bitbake</filename> to somewhere else, and you wish
1302 to retain the errors, you will need to add
1303 <filename>2>&amp;1</filename> (or something similar) to the
1304 end of your <filename>bitbake</filename> command line.
1305 </para>
1306 </section>
1307
1308 <section id='migration-1.6-task-taskname-overrides'>
1309 <title><filename>task-</filename><replaceable>taskname</replaceable> Overrides</title>
1310
1311 <para>
1312 <filename>task-</filename><replaceable>taskname</replaceable> overrides have been
1313 adjusted so that tasks whose names contain underscores have the
1314 underscores replaced by hyphens for the override so that they
1315 now function properly.
1316 For example, the task override for
1317 <link linkend='ref-tasks-populate_sdk'><filename>do_populate_sdk</filename></link>
1318 is <filename>task-populate-sdk</filename>.
1319 </para>
1320 </section>
1321 </section>
1322
1323 <section id='migration-1.6-variable-changes'>
1324 <title>Changes to Variables</title>
1325
1326 <para>
1327 The following variables have changed.
1328 For information on the OpenEmbedded build system variables, see the
1329 "<link linkend='ref-variables-glos'>Variables Glossary</link>" Chapter.
1330 </para>
1331
1332 <section id='migration-1.6-variable-changes-TMPDIR'>
1333 <title><filename>TMPDIR</filename></title>
1334
1335 <para>
1336 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
1337 can no longer be on an NFS mount.
1338 NFS does not offer full POSIX locking and inode consistency
1339 and can cause unexpected issues if used to store
1340 <filename>TMPDIR</filename>.
1341 </para>
1342
1343 <para>
1344 The check for this occurs on startup.
1345 If <filename>TMPDIR</filename> is detected on an NFS mount,
1346 an error occurs.
1347 </para>
1348 </section>
1349
1350 <section id='migration-1.6-variable-changes-PRINC'>
1351 <title><filename>PRINC</filename></title>
1352
1353 <para>
1354 The
1355 <link linkend='var-PRINC'><filename>PRINC</filename></link>
1356 variable has been deprecated and triggers a warning if
1357 detected during a build.
1358 For
1359 <link linkend='var-PR'><filename>PR</filename></link>
1360 increments on changes, use the PR service instead.
1361 You can find out more about this service in the
1362 "<ulink url='&YOCTO_DOCS_DEV_URL;#working-with-a-pr-service'>Working With a PR Service</ulink>"
1363 section in the Yocto Project Development Manual.
1364 </para>
1365 </section>
1366
1367 <section id='migration-1.6-variable-changes-IMAGE_TYPES'>
1368 <title><filename>IMAGE_TYPES</filename></title>
1369
1370 <para>
1371 The "sum.jffs2" option for
1372 <link linkend='var-IMAGE_TYPES'><filename>IMAGE_TYPES</filename></link>
1373 has been replaced by the "jffs2.sum" option, which fits the
1374 processing order.
1375 </para>
1376 </section>
1377
1378 <section id='migration-1.6-variable-changes-COPY_LIC_MANIFEST'>
1379 <title><filename>COPY_LIC_MANIFEST</filename></title>
1380
1381 <para>
1382 The
1383 <link linkend='var-COPY_LIC_MANIFEST'><filename>COPY_LIC_MANIFEST</filename></link>
1384 variable must
1385 now be set to "1" rather than any value in order to enable
1386 it.
1387 </para>
1388 </section>
1389
1390 <section id='migration-1.6-variable-changes-COPY_LIC_DIRS'>
1391 <title><filename>COPY_LIC_DIRS</filename></title>
1392
1393 <para>
1394 The
1395 <link linkend='var-COPY_LIC_DIRS'><filename>COPY_LIC_DIRS</filename></link>
1396 variable must
1397 now be set to "1" rather than any value in order to enable
1398 it.
1399 </para>
1400 </section>
1401
1402 <section id='migration-1.6-variable-changes-PACKAGE_GROUP'>
1403 <title><filename>PACKAGE_GROUP</filename></title>
1404
1405 <para>
1406 The
1407 <link linkend='var-PACKAGE_GROUP'><filename>PACKAGE_GROUP</filename></link>
1408 variable has been renamed to
1409 <link linkend='var-FEATURE_PACKAGES'><filename>FEATURE_PACKAGES</filename></link>
1410 to more accurately reflect its purpose.
1411 You can still use <filename>PACKAGE_GROUP</filename> but
1412 the OpenEmbedded build system produces a warning message when
1413 it encounters the variable.
1414 </para>
1415 </section>
1416 </section>
1417
1418 <section id='migration-1.6-directory-layout-changes'>
1419 <title>Directory Layout Changes</title>
1420
1421 <para>
1422 The <filename>meta-hob</filename> layer has been removed from
1423 the top-level of the
1424 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
1425 The contents of this layer are no longer needed by the Hob
1426 user interface for building images and toolchains.
1427 </para>
1428 </section>
1429
1430 <section id='migration-1.6-package-test-ptest'>
1431 <title>Package Test (ptest)</title>
1432
1433 <para>
1434 Package Tests (ptest) are built but not installed by default.
1435 For information on using Package Tests, see the
1436 "<ulink url='&YOCTO_DOCS_DEV_URL;#testing-packages-with-ptest'>Setting up and running package test (ptest)</ulink>"
1437 section in the Yocto Project Development Manual.
1438 For information on the <filename>ptest</filename> class, see the
1439 "<link linkend='ref-classes-ptest'><filename>ptest.bbclass</filename></link>"
1440 section.
1441 </para>
1442 </section>
1443
1444 <section id='migration-1.6-build-changes'>
1445 <title>Build Changes</title>
1446
1447 <para>
1448 Separate build and source directories have been enabled
1449 by default for selected recipes where it is known to work
1450 (a whitelist) and for all recipes that inherit the
1451 <link linkend='ref-classes-cmake'><filename>cmake</filename></link>
1452 class.
1453 In future releases the
1454 <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
1455 class will enable a separate build directory by default as
1456 well.
1457 Recipes building Autotools-based
1458 software that fails to build with a separate build directory
1459 should be changed to inherit from the
1460 <link linkend='ref-classes-autotools-brokensep'><filename>autotools-brokensep</filename></link>
1461 class instead of the <filename>autotools</filename> class.
1462 </para>
1463 </section>
1464
1465 <section id='migration-1.6-building-qemu-native'>
1466 <title><filename>qemu-native</filename></title>
1467
1468 <para>
1469 <filename>qemu-native</filename> now builds without
1470 SDL-based graphical output support by default.
1471 The following additional lines are needed in your
1472 <filename>local.conf</filename> to enable it:
1473 <literallayout class='monospaced'>
1474 PACKAGECONFIG_pn-qemu-native = "sdl"
1475 ASSUME_PROVIDED += "libsdl-native"
1476 </literallayout>
1477 <note>
1478 The default <filename>local.conf</filename>
1479 contains these statements.
1480 Consequently, if you are building a headless system and using
1481 a default <filename>local.conf</filename> file, you will need
1482 comment these two lines out.
1483 </note>
1484 </para>
1485 </section>
1486
1487 <section id='migration-1.6-core-image-basic'>
1488 <title><filename>core-image-basic</filename></title>
1489
1490 <para>
1491 <filename>core-image-basic</filename> has been renamed to
1492 <filename>core-image-full-cmdline</filename>.
1493 </para>
1494
1495 <para>
1496 In addition to <filename>core-image-basic</filename> being renamed,
1497 <filename>packagegroup-core-basic</filename> has been renamed to
1498 <filename>packagegroup-core-full-cmdline</filename> to match.
1499 </para>
1500 </section>
1501
1502 <section id='migration-1.6-licensing'>
1503 <title>Licensing</title>
1504
1505 <para>
1506 The top-level <filename>LICENSE</filename> file has been changed
1507 to better describe the license of the various components of
1508 OE-Core.
1509 However, the licensing itself remains unchanged.
1510 </para>
1511
1512 <para>
1513 Normally, this change would not cause any side-effects.
1514 However, some recipes point to this file within
1515 <link linkend='var-LIC_FILES_CHKSUM'><filename>LIC_FILES_CHKSUM</filename></link>
1516 (as <filename>${COREBASE}/LICENSE</filename>) and thus the
1517 accompanying checksum must be changed from
1518 3f40d7994397109285ec7b81fdeb3b58 to
1519 4d92cd373abda3937c2bc47fbc49d690.
1520 A better alternative is to have
1521 <filename>LIC_FILES_CHKSUM</filename> point to a file
1522 describing the license that is distributed with the source
1523 that the recipe is building, if possible, rather than pointing
1524 to <filename>${COREBASE}/LICENSE</filename>.
1525 </para>
1526 </section>
1527
1528 <section id='migration-1.6-cflags-options'>
1529 <title><filename>CFLAGS</filename> Options</title>
1530
1531 <para>
1532 The "-fpermissive" option has been removed from the default
1533 <link linkend='var-CFLAGS'><filename>CFLAGS</filename></link>
1534 value.
1535 You need to take action on individual recipes that fail when
1536 building with this option.
1537 You need to either patch the recipes to fix the issues reported by
1538 the compiler, or you need to add "-fpermissive" to
1539 <filename>CFLAGS</filename> in the recipes.
1540 </para>
1541 </section>
1542
1543 <section id='migration-1.6-custom-images'>
1544 <title>Custom Image Output Types</title>
1545
1546 <para>
1547 Custom image output types, as selected using
1548 <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>,
1549 must declare their dependencies on other image types (if any) using
1550 a new
1551 <link linkend='var-IMAGE_TYPEDEP'><filename>IMAGE_TYPEDEP</filename></link>
1552 variable.
1553 </para>
1554 </section>
1555
1556 <section id='migration-1.6-do-package-write-task'>
1557 <title>Tasks</title>
1558
1559 <para>
1560 The <filename>do_package_write</filename> task has been removed.
1561 The task is no longer needed.
1562 </para>
1563 </section>
1564
1565 <section id='migration-1.6-update-alternatives-provider'>
1566 <title><filename>update-alternative</filename> Provider</title>
1567
1568 <para>
1569 The default <filename>update-alternatives</filename> provider has
1570 been changed from <filename>opkg</filename> to
1571 <filename>opkg-utils</filename>.
1572 This change resolves some troublesome circular dependencies.
1573 The runtime package has also been renamed from
1574 <filename>update-alternatives-cworth</filename>
1575 to <filename>update-alternatives-opkg</filename>.
1576 </para>
1577 </section>
1578
1579 <section id='migration-1.6-virtclass-overrides'>
1580 <title><filename>virtclass</filename> Overrides</title>
1581
1582 <para>
1583 The <filename>virtclass</filename> overrides are now deprecated.
1584 Use the equivalent class overrides instead (e.g.
1585 <filename>virtclass-native</filename> becomes
1586 <filename>class-native</filename>.)
1587 </para>
1588 </section>
1589
1590 <section id='migration-1.6-removed-renamed-recipes'>
1591 <title>Removed and Renamed Recipes</title>
1592
1593 <para>
1594 The following recipes have been removed:
1595 <itemizedlist>
1596 <listitem><para><filename>packagegroup-toolset-native</filename> -
1597 This recipe is largely unused.
1598 </para></listitem>
1599 <listitem><para><filename>linux-yocto-3.8</filename> -
1600 Support for the Linux yocto 3.8 kernel has been dropped.
1601 Support for the 3.10 and 3.14 kernels have been added
1602 with the <filename>linux-yocto-3.10</filename> and
1603 <filename>linux-yocto-3.14</filename> recipes.
1604 </para></listitem>
1605 <listitem><para><filename>ocf-linux</filename> -
1606 This recipe has been functionally replaced using
1607 <filename>cryptodev-linux</filename>.
1608 </para></listitem>
1609 <listitem><para><filename>genext2fs</filename> -
1610 <filename>genext2fs</filename> is no longer used by the
1611 build system and is unmaintained upstream.
1612 </para></listitem>
1613 <listitem><para><filename>js</filename> -
1614 This provided an ancient version of Mozilla's javascript
1615 engine that is no longer needed.
1616 </para></listitem>
1617 <listitem><para><filename>zaurusd</filename> -
1618 The recipe has been moved to the
1619 <filename>meta-handheld</filename> layer.
1620 </para></listitem>
1621 <listitem><para><filename>eglibc 2.17</filename> -
1622 Replaced by the <filename>eglibc 2.19</filename>
1623 recipe.
1624 </para></listitem>
1625 <listitem><para><filename>gcc 4.7.2</filename> -
1626 Replaced by the now stable
1627 <filename>gcc 4.8.2</filename>.
1628 </para></listitem>
1629 <listitem><para><filename>external-sourcery-toolchain</filename> -
1630 this recipe is now maintained in the
1631 <filename>meta-sourcery</filename> layer.
1632 </para></listitem>
1633 <listitem><para><filename>linux-libc-headers-yocto 3.4+git</filename> -
1634 Now using version 3.10 of the
1635 <filename>linux-libc-headers</filename> by default.
1636 </para></listitem>
1637 <listitem><para><filename>meta-toolchain-gmae</filename> -
1638 This recipe is obsolete.
1639 </para></listitem>
1640 <listitem><para><filename>packagegroup-core-sdk-gmae</filename> -
1641 This recipe is obsolete.
1642 </para></listitem>
1643 <listitem><para><filename>packagegroup-core-standalone-gmae-sdk-target</filename> -
1644 This recipe is obsolete.
1645 </para></listitem>
1646 </itemizedlist>
1647 </para>
1648 </section>
1649
1650 <section id='migration-1.6-removed-classes'>
1651 <title>Removed Classes</title>
1652
1653 <para>
1654 The following classes have become obsolete and have been removed:
1655 <itemizedlist>
1656 <listitem><para><filename>module_strip</filename>
1657 </para></listitem>
1658 <listitem><para><filename>pkg_metainfo</filename>
1659 </para></listitem>
1660 <listitem><para><filename>pkg_distribute</filename>
1661 </para></listitem>
1662 <listitem><para><filename>image-empty</filename>
1663 </para></listitem>
1664 </itemizedlist>
1665 </para>
1666 </section>
1667
1668 <section id='migration-1.6-reference-bsps'>
1669 <title>Reference Board Support Packages (BSPs)</title>
1670
1671 <para>
1672 The following reference BSPs changes occurred:
1673 <itemizedlist>
1674 <listitem><para>The BeagleBoard
1675 (<filename>beagleboard</filename>) ARM reference hardware
1676 has been replaced by the BeagleBone
1677 (<filename>beaglebone</filename>) hardware.
1678 </para></listitem>
1679 <listitem><para>The RouterStation Pro
1680 (<filename>routerstationpro</filename>) MIPS reference
1681 hardware has been replaced by the EdgeRouter Lite
1682 (<filename>edgerouter</filename>) hardware.
1683 </para></listitem>
1684 </itemizedlist>
1685 The previous reference BSPs for the
1686 <filename>beagleboard</filename> and
1687 <filename>routerstationpro</filename> machines are still available
1688 in a new <filename>meta-yocto-bsp-old</filename> layer in the
1689 <ulink url='&YOCTO_GIT_URL;'>Source Repositories</ulink>
1690 at
1691 <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>.
1692 </para>
1693 </section>
1694</section>
1695
1696<section id='moving-to-the-yocto-project-1.7-release'>
1697 <title>Moving to the Yocto Project 1.7 Release</title>
1698
1699 <para>
1700 This section provides migration information for moving to the
1701 Yocto Project 1.7 Release from the prior release.
1702 </para>
1703
1704 <section id='migration-1.7-changes-to-setting-qemu-packageconfig-options'>
1705 <title>Changes to Setting QEMU <filename>PACKAGECONFIG</filename> Options in <filename>local.conf</filename></title>
1706
1707 <para>
1708 The QEMU recipe now uses a number of
1709 <link linkend='var-PACKAGECONFIG'><filename>PACKAGECONFIG</filename></link>
1710 options to enable various optional features.
1711 The method used to set defaults for these options means that
1712 existing
1713 <filename>local.conf</filename> files will need to be be
1714 modified to append to <filename>PACKAGECONFIG</filename> for
1715 <filename>qemu-native</filename> and
1716 <filename>nativesdk-qemu</filename> instead of setting it.
1717 In other words, to enable graphical output for QEMU, you should
1718 now have these lines in <filename>local.conf</filename>:
1719 <literallayout class='monospaced'>
1720 PACKAGECONFIG_append_pn-qemu-native = " sdl"
1721 PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl"
1722 </literallayout>
1723 </para>
1724 </section>
1725
1726 <section id='migration-1.7-minimum-git-version'>
1727 <title>Minimum Git version</title>
1728
1729 <para>
1730 The minimum
1731 <ulink url='&YOCTO_DOCS_DEV_URL;#git'>Git</ulink> version required
1732 on the build host is now 1.7.8 because the
1733 <filename>&dash;&dash;list</filename> option is now required by
1734 BitBake's Git fetcher.
1735 As always, if your host distribution does not provide a version of
1736 Git that meets this requirement, you can use the
1737 <filename>buildtools-tarball</filename> that does.
1738 See the
1739 "<link linkend='required-git-tar-and-python-versions'>Required Git, tar, and Python Versions</link>"
1740 section for more information.
1741 </para>
1742 </section>
1743
1744 <section id='migration-1.7-autotools-class-changes'>
1745 <title>Autotools Class Changes</title>
1746
1747 <para>
1748 The following
1749 <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
1750 class changes occurred:
1751 <itemizedlist>
1752 <listitem><para><emphasis>
1753 A separate build directory is now used by default:</emphasis>
1754 The <filename>autotools</filename> class has been changed
1755 to use a directory for building
1756 (<link linkend='var-B'><filename>B</filename></link>),
1757 which is separate from the source directory
1758 (<link linkend='var-S'><filename>S</filename></link>).
1759 This is commonly referred to as
1760 <filename>B != S</filename>, or an out-of-tree build.</para>
1761 <para>If the software being built is already capable of
1762 building in a directory separate from the source, you
1763 do not need to do anything.
1764 However, if the software is not capable of being built
1765 in this manner, you will
1766 need to either patch the software so that it can build
1767 separately, or you will need to change the recipe to
1768 inherit the
1769 <link linkend='ref-classes-autotools-brokensep'><filename>autotools-brokensep</filename></link>
1770 class instead of the <filename>autotools</filename> class.
1771 </para></listitem>
1772 <listitem><para><emphasis>
1773 The <filename>&dash;&dash;foreign</filename> option is
1774 no longer passed to <filename>automake</filename> when
1775 running <filename>autoconf</filename>:</emphasis>
1776 This option tells <filename>automake</filename> that a
1777 particular software package does not follow the GNU
1778 standards and therefore should not be expected
1779 to distribute certain files such as
1780 <filename>ChangeLog</filename>,
1781 <filename>AUTHORS</filename>, and so forth.
1782 Because the majority of upstream software packages already
1783 tell <filename>automake</filename> to enable foreign mode
1784 themselves, the option is mostly superfluous.
1785 However, some recipes will need patches for this change.
1786 You can easily make the change by patching
1787 <filename>configure.ac</filename> so that it passes
1788 "foreign" to <filename>AM_INIT_AUTOMAKE()</filename>.
1789 See
1790 <ulink url='http://cgit.openembedded.org/openembedded-core/commit/?id=01943188f85ce6411717fb5bf702d609f55813f2'>this commit</ulink>
1791 for an example showing how to make the patch.
1792 </para></listitem>
1793 </itemizedlist>
1794 </para>
1795 </section>
1796
1797 <section id='migration-1.7-binary-configuration-scripts-disabled'>
1798 <title>Binary Configuration Scripts Disabled</title>
1799
1800 <para>
1801 Some of the core recipes that package binary configuration scripts
1802 now disable the scripts due to the
1803 scripts previously requiring error-prone path substitution.
1804 Software that links against these libraries using these scripts
1805 should use the much more robust <filename>pkg-config</filename>
1806 instead.
1807 The list of recipes changed in this version (and their
1808 configuration scripts) is as follows:
1809 <literallayout class='monospaced'>
1810 directfb (directfb-config)
1811 freetype (freetype-config)
1812 gpgme (gpgme-config)
1813 libassuan (libassuan-config)
1814 libcroco (croco-6.0-config)
1815 libgcrypt (libgcrypt-config)
1816 libgpg-error (gpg-error-config)
1817 libksba (ksba-config)
1818 libpcap (pcap-config)
1819 libpcre (pcre-config)
1820 libpng (libpng-config, libpng16-config)
1821 libsdl (sdl-config)
1822 libusb-compat (libusb-config)
1823 libxml2 (xml2-config)
1824 libxslt (xslt-config)
1825 ncurses (ncurses-config)
1826 neon (neon-config)
1827 npth (npth-config)
1828 pth (pth-config)
1829 taglib (taglib-config)
1830 </literallayout>
1831 Additionally, support for <filename>pkg-config</filename> has been
1832 added to some recipes in the previous list in the rare cases
1833 where the upstream software package does not already provide
1834 it.
1835 </para>
1836 </section>
1837
1838 <section id='migration-1.7-glibc-replaces-eglibc'>
1839 <title><filename>eglibc 2.19</filename> Replaced with <filename>glibc 2.20</filename></title>
1840
1841 <para>
1842 Because <filename>eglibc</filename> and
1843 <filename>glibc</filename> were already fairly close, this
1844 replacement should not require any significant changes to other
1845 software that links to <filename>eglibc</filename>.
1846 However, there were a number of minor changes in
1847 <filename>glibc 2.20</filename> upstream that could require
1848 patching some software (e.g. the removal of the
1849 <filename>_BSD_SOURCE</filename> feature test macro).
1850 </para>
1851
1852 <para>
1853 <filename>glibc 2.20</filename> requires version 2.6.32 or greater
1854 of the Linux kernel.
1855 Thus, older kernels will no longer be usable in conjunction with it.
1856 </para>
1857
1858 <para>
1859 For full details on the changes in <filename>glibc 2.20</filename>,
1860 see the upstream release notes
1861 <ulink url='https://sourceware.org/ml/libc-alpha/2014-09/msg00088.html'>here</ulink>.
1862 </para>
1863 </section>
1864
1865 <section id='migration-1.7-kernel-module-autoloading'>
1866 <title>Kernel Module Autoloading</title>
1867
1868 <para>
1869 The
1870 <link linkend='var-module_autoload'><filename>module_autoload_*</filename></link>
1871 variable is now deprecated and a new
1872 <link linkend='var-KERNEL_MODULE_AUTOLOAD'><filename>KERNEL_MODULE_AUTOLOAD</filename></link>
1873 variable should be used instead.
1874 Also,
1875 <link linkend='var-module_conf'><filename>module_conf_*</filename></link>
1876 must now be used in conjunction with a new
1877 <link linkend='var-KERNEL_MODULE_PROBECONF'><filename>KERNEL_MODULE_PROBECONF</filename></link>
1878 variable.
1879 The new variables no longer require you to specify the module name
1880 as part of the variable name.
1881 This change not only simplifies usage but also allows the values
1882 of these variables to be appropriately incorporated into task
1883 signatures and thus trigger the appropriate tasks to re-execute
1884 when changed.
1885 You should replace any references to
1886 <filename>module_autoload_*</filename> with
1887 <filename>KERNEL_MODULE_AUTOLOAD</filename>, and add any modules
1888 for which <filename>module_conf_*</filename> is specified to
1889 <filename>KERNEL_MODULE_PROBECONF</filename>.
1890 </para>
1891
1892 <para>
1893 For more information, see the
1894 <link linkend='var-KERNEL_MODULE_AUTOLOAD'><filename>KERNEL_MODULE_AUTOLOAD</filename></link>
1895 and
1896 <link linkend='var-KERNEL_MODULE_PROBECONF'><filename>KERNEL_MODULE_PROBECONF</filename></link>
1897 variables.
1898 </para>
1899 </section>
1900
1901 <section id='migration-1.7-qa-check-changes'>
1902 <title>QA Check Changes</title>
1903
1904 <para>
1905 The following changes have occurred to the QA check process:
1906 <itemizedlist>
1907 <listitem><para>
1908 Additional QA checks <filename>file-rdeps</filename>
1909 and <filename>build-deps</filename> have been added in
1910 order to verify that file dependencies are satisfied
1911 (e.g. package contains a script requiring
1912 <filename>/bin/bash</filename>) and build-time dependencies
1913 are declared, respectively.
1914 For more information, please see the
1915 "<link linkend='ref-qa-checks'>QA Error and Warning Messages</link>"
1916 chapter.
1917 </para></listitem>
1918 <listitem><para>
1919 Package QA checks are now performed during a new
1920 <link linkend='ref-tasks-package_qa'><filename>do_package_qa</filename></link>
1921 task rather than being part of the
1922 <link linkend='ref-tasks-package'><filename>do_package</filename></link>
1923 task.
1924 This allows more parallel execution.
1925 This change is unlikely to be an issue except for highly
1926 customized recipes that disable packaging tasks themselves
1927 by marking them as <filename>noexec</filename>.
1928 For those packages, you will need to disable the
1929 <filename>do_package_qa</filename> task as well.
1930 </para></listitem>
1931 <listitem><para>
1932 Files being overwritten during the
1933 <link linkend='ref-tasks-populate_sysroot'><filename>do_populate_sysroot</filename></link>
1934 task now trigger an error instead of a warning.
1935 Recipes should not be overwriting files written to the
1936 sysroot by other recipes.
1937 If you have these types of recipes, you need to alter them
1938 so that they do not overwrite these files.</para>
1939 <para>You might now receive this error after changes in
1940 configuration or metadata resulting in orphaned files
1941 being left in the sysroot.
1942 If you do receive this error, the way to resolve the issue
1943 is to delete your
1944 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
1945 or to move it out of the way and then re-start the build.
1946 Anything that has been fully built up to that point and
1947 does not need rebuilding will be restored from the shared
1948 state cache and the rest of the build will be able to
1949 proceed as normal.
1950 </para></listitem>
1951 </itemizedlist>
1952 </para>
1953 </section>
1954
1955 <section id='migration-1.7-removed-recipes'>
1956 <title>Removed Recipes</title>
1957
1958 <para>
1959 The following recipes have been removed:
1960 <itemizedlist>
1961 <listitem><para>
1962 <filename>x-load</filename>:
1963 This recipe has been superseded by
1964 U-boot SPL for all Cortex-based TI SoCs.
1965 For legacy boards, the <filename>meta-ti</filename>
1966 layer, which contains a maintained recipe, should be used
1967 instead.
1968 </para></listitem>
1969 <listitem><para>
1970 <filename>ubootchart</filename>:
1971 This recipe is obsolete.
1972 A <filename>bootchart2</filename> recipe has been added
1973 to functionally replace it.
1974 </para></listitem>
1975 <listitem><para>
1976 <filename>linux-yocto 3.4</filename>:
1977 Support for the linux-yocto 3.4 kernel has been dropped.
1978 Support for the 3.10 and 3.14 kernels remains, while
1979 support for version 3.17 has been added.
1980 </para></listitem>
1981 <listitem><para>
1982 <filename>eglibc</filename> has been removed in favor of
1983 <filename>glibc</filename>.
1984 See the
1985 "<link linkend='migration-1.7-glibc-replaces-eglibc'><filename>eglibc 2.19</filename> Replaced with <filename>glibc 2.20</filename></link>"
1986 section for more information.
1987 </para></listitem>
1988 </itemizedlist>
1989 </para>
1990 </section>
1991
1992 <section id='migration-1.7-miscellaneous-changes'>
1993 <title>Miscellaneous Changes</title>
1994
1995 <para>
1996 The following miscellaneous change occurred:
1997 <itemizedlist>
1998 <listitem><para>
1999 The build history feature now writes
2000 <filename>build-id.txt</filename> instead of
2001 <filename>build-id</filename>.
2002 Additionally, <filename>build-id.txt</filename>
2003 now contains the full build header as printed by
2004 BitBake upon starting the build.
2005 You should manually remove old "build-id" files from your
2006 existing build history repositories to avoid confusion.
2007 For information on the build history feature, see the
2008 "<link linkend='maintaining-build-output-quality'>Maintaining Build Output Quality</link>"
2009 section.
2010 </para></listitem>
2011 </itemizedlist>
2012 </para>
2013 </section>
2014</section>
2015
2016</chapter>
2017<!--
2018vim: expandtab tw=80 ts=4
2019-->
diff --git a/documentation/ref-manual/ref-bitbake.xml b/documentation/ref-manual/ref-bitbake.xml
new file mode 100644
index 0000000000..30aff6431f
--- /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>glibc</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..f60b907e85
--- /dev/null
+++ b/documentation/ref-manual/ref-classes.xml
@@ -0,0 +1,3489 @@
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 By default, the <filename>autotools</filename> class
106 uses out-of-tree builds
107 (<link linkend='var-B'><filename>B</filename></link> <filename>!=</filename>
108 <link linkend='var-S'><filename>S</filename></link>).
109 If the software being built by a recipe does not support
110 using out-of-tree builds, you should have the recipe inherit the
111 <link linkend='ref-classes-autotools-brokensep'><filename>autotools-brokensep</filename></link>
112 class.
113 </para>
114
115 <para>
116 It's useful to have some idea of how the tasks defined by this class work
117 and what they do behind the scenes.
118 <itemizedlist>
119 <listitem><para><link linkend='ref-tasks-configure'><filename>do_configure</filename></link> &dash;
120 Regenerates the
121 configure script (using <filename>autoreconf</filename>) and then launches it
122 with a standard set of arguments used during cross-compilation.
123 You can pass additional parameters to <filename>configure</filename> through the
124 <filename><link linkend='var-EXTRA_OECONF'>EXTRA_OECONF</link></filename> variable.
125 </para></listitem>
126 <listitem><para><link linkend='ref-tasks-compile'><filename>do_compile</filename></link> &dash; Runs <filename>make</filename> with
127 arguments that specify the compiler and linker.
128 You can pass additional arguments through
129 the <filename><link linkend='var-EXTRA_OEMAKE'>EXTRA_OEMAKE</link></filename> variable.
130 </para></listitem>
131 <listitem><para><link linkend='ref-tasks-install'><filename>do_install</filename></link> &dash; Runs <filename>make install</filename>
132 and passes in
133 <filename>${</filename><link linkend='var-D'><filename>D</filename></link><filename>}</filename>
134 as <filename>DESTDIR</filename>.
135 </para></listitem>
136 </itemizedlist>
137 </para>
138</section>
139
140<section id='ref-classes-autotools-brokensep'>
141 <title><filename>autotools-brokensep.bbclass</filename></title>
142
143 <para>
144 The <filename>autotools-brokensep</filename> class behaves the same
145 as the
146 <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
147 class but builds with
148 <link linkend='var-B'><filename>B</filename></link> ==
149 <link linkend='var-S'><filename>S</filename></link>.
150 This method is useful when out-of-tree build support is either not
151 present or is broken.
152 <note>
153 It is recommended that out-of-tree support be fixed and used
154 if at all possible.
155 </note>
156 </para>
157</section>
158
159<section id='ref-classes-base'>
160 <title><filename>base.bbclass</filename></title>
161
162 <para>
163 The <filename>base</filename> class is special in that every
164 <filename>.bb</filename> file implicitly inherits the class.
165 This class contains definitions for standard basic
166 tasks such as fetching, unpacking, configuring (empty by default),
167 compiling (runs any <filename>Makefile</filename> present), installing
168 (empty by default) and packaging (empty by default).
169 These classes are often overridden or extended by other classes
170 such as the
171 <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
172 class or the
173 <link linkend='ref-classes-package'><filename>package</filename></link>
174 class.
175 The class also contains some commonly used functions such as
176 <filename>oe_runmake</filename>.
177 </para>
178</section>
179
180<section id='ref-classes-bin-package'>
181 <title><filename>bin_package.bbclass</filename></title>
182
183 <para>
184 The <filename>bin_package</filename> class is a
185 helper class for recipes that extract the contents of a binary package
186 (e.g. an RPM) and install those contents rather than building the
187 binary from source.
188 The binary package is extracted and new packages in the configured
189 output package format are created.
190 Extraction and installation of proprietary binaries is a good example
191 use for this class.
192 <note>
193 For RPMs and other packages that do not contain a subdirectory,
194 you should specify a "subdir" parameter.
195 Here is an example where <filename>${BP}</filename> is used so that
196 the files are extracted into the subdirectory expected by the
197 default value of
198 <link linkend='var-S'><filename>S</filename></link>:
199 <literallayout class='monospaced'>
200 SRC_URI = "http://example.com/downloads/somepackage.rpm;subdir=${BP}"
201 </literallayout>
202 </note>
203 </para>
204</section>
205
206<section id='ref-classes-binconfig'>
207 <title><filename>binconfig.bbclass</filename></title>
208
209 <para>
210 The <filename>binconfig</filename> class helps to correct paths in
211 shell scripts.
212 </para>
213
214 <para>
215 Before <filename>pkg-config</filename> had become widespread, libraries
216 shipped shell scripts to give information about the libraries and
217 include paths needed to build software (usually named
218 <filename>LIBNAME-config</filename>).
219 This class assists any recipe using such scripts.
220 </para>
221
222 <para>
223 During staging, the OpenEmbedded build system installs such scripts
224 into the <filename>sysroots/</filename> directory.
225 Inheriting this class results in all paths in these scripts being
226 changed to point into the <filename>sysroots/</filename> directory so
227 that all builds that use the script use the correct directories
228 for the cross compiling layout.
229 See the
230 <link linkend='var-BINCONFIG_GLOB'><filename>BINCONFIG_GLOB</filename></link>
231 variable for more information.
232 </para>
233</section>
234
235<section id='ref-classes-binconfig-disabled'>
236 <title><filename>binconfig-disabled.bbclass</filename></title>
237
238 <para>
239 An alternative version of the
240 <link linkend='ref-classes-binconfig'><filename>binconfig</filename></link>
241 class, which disables binary configuration scripts by making them
242 return an error in favor of using <filename>pkg-config</filename>
243 to query the information.
244 The scripts to be disabled should be specified using the
245 <link linkend='var-BINCONFIG'><filename>BINCONFIG</filename></link>
246 variable within the recipe inheriting the class.
247 </para>
248</section>
249
250<section id='ref-classes-blacklist'>
251 <title><filename>blacklist.bbclass</filename></title>
252
253 <para>
254 The <filename>blacklist</filename> class prevents
255 the OpenEmbedded build system from building specific recipes
256 (blacklists them).
257 To use this class, inherit the class globally and set
258 <link linkend='var-PNBLACKLIST'><filename>PNBLACKLIST</filename></link>
259 for each recipe you wish to blacklist.
260 Specify the <link linkend='var-PN'><filename>PN</filename></link>
261 value as a variable flag (varflag) and provide a reason, which is
262 reported, if the package is requested to be built as the value.
263 For example, if you want to blacklist a recipe called "exoticware",
264 you add the following to your <filename>local.conf</filename>
265 or distribution configuration:
266 <literallayout class='monospaced'>
267 INHERIT += "blacklist"
268 PNBLACKLIST[exoticware] = "Not supported by our organization."
269 </literallayout>
270 </para>
271</section>
272
273<section id='ref-classes-boot-directdisk'>
274 <title><filename>boot-directdisk.bbclass</filename></title>
275
276 <para>
277 The <filename>boot-directdisk</filename> class
278 creates an image that can be placed directly onto a hard disk using
279 <filename>dd</filename> and then booted.
280 The image uses SYSLINUX.
281 </para>
282
283 <para>
284 The end result is a 512 boot sector populated with a
285 Master Boot Record (MBR) and partition table followed by an MSDOS
286 FAT16 partition containing SYSLINUX and a Linux kernel completed by
287 the <filename>ext2</filename> and <filename>ext3</filename>
288 root filesystems.
289 </para>
290</section>
291
292<section id='ref-classes-bootimg'>
293 <title><filename>bootimg.bbclass</filename></title>
294
295 <para>
296 The <filename>bootimg</filename> class creates a bootable
297 image using SYSLINUX, your kernel, and an optional initial RAM disk
298 (<filename>initrd</filename>).
299 </para>
300
301 <para>
302 When you use this class, two things happen:
303 <itemizedlist>
304 <listitem><para>
305 A <filename>.hddimg</filename> file is created.
306 This file is an MSDOS filesystem that contains SYSLINUX,
307 a kernel, an <filename>initrd</filename>, and a root filesystem
308 image.
309 All three of these can be written to hard drives directly and
310 also booted on a USB flash disks using <filename>dd</filename>.
311 </para></listitem>
312 <listitem><para>
313 A CD <filename>.iso</filename> image is created.
314 When this file is booted, the <filename>initrd</filename>
315 boots and processes the label selected in SYSLINUX.
316 Actions based on the label are then performed (e.g. installing
317 to a hard drive).</para></listitem>
318 </itemizedlist>
319 </para>
320
321 <para>
322 The <filename>bootimg</filename> class supports the
323 <link linkend='var-INITRD'><filename>INITRD</filename></link>,
324 <link linkend='var-NOISO'><filename>NOISO</filename></link>,
325 <link linkend='var-NOHDD'><filename>NOHDD</filename></link>, and
326 <link linkend='var-ROOTFS'><filename>ROOTFS</filename></link>
327 variables.
328 </para>
329</section>
330
331<section id='ref-classes-bugzilla'>
332 <title><filename>bugzilla.bbclass</filename></title>
333
334 <para>
335 The <filename>bugzilla</filename> class supports setting up an
336 instance of Bugzilla in which you can automatically files bug reports
337 in response to build failures.
338 For this class to work, you need to enable the XML-RPC interface in
339 the instance of Bugzilla.
340 </para>
341</section>
342
343<section id='ref-classes-buildhistory'>
344 <title><filename>buildhistory.bbclass</filename></title>
345
346 <para>
347 The <filename>buildhistory</filename> class records a
348 history of build output metadata, which can be used to detect possible
349 regressions as well as used for analysis of the build output.
350 For more information on using Build History, see the
351 "<link linkend='maintaining-build-output-quality'>Maintaining Build Output Quality</link>"
352 section.
353 </para>
354</section>
355
356<section id='ref-classes-buildstats'>
357 <title><filename>buildstats.bbclass</filename></title>
358
359 <para>
360 The <filename>buildstats</filename> class records
361 performance statistics about each task executed during the build
362 (e.g. elapsed time, CPU usage, and I/O usage).
363 </para>
364
365 <para>
366 When you use this class, the output goes into the
367 <link linkend='var-BUILDSTATS_BASE'><filename>BUILDSTATS_BASE</filename></link>
368 directory, which defaults to <filename>${TMPDIR}/buildstats/</filename>.
369 You can analyze the elapsed time using
370 <filename>scripts/pybootchartgui/pybootchartgui.py</filename>, which
371 produces a cascading chart of the entire build process and can be
372 useful for highlighting bottlenecks.
373 </para>
374
375 <para>
376 Collecting build statistics is enabled by default through the
377 <link linkend='var-USER_CLASSES'><filename>USER_CLASSES</filename></link>
378 variable from your <filename>local.conf</filename> file.
379 Consequently, you do not have to do anything to enable the class.
380 However, if you want to disable the class, simply remove "buildstats"
381 from the <filename>USER_CLASSES</filename> list.
382 </para>
383</section>
384
385<section id='ref-classes-buildstats-summary'>
386 <title><filename>buildstats-summary.bbclass</filename></title>
387
388 <para>
389 When inherited globally, prints statistics at the end of the build
390 on sstate re-use.
391 In order to function, this class requires the
392 <link linkend='ref-classes-buildstats'><filename>buildstats</filename></link>
393 class be enabled.
394 </para>
395</section>
396
397<section id='ref-classes-ccache'>
398 <title><filename>ccache.bbclass</filename></title>
399
400 <para>
401 The <filename>ccache</filename> class enables the
402 <ulink url='http://ccache.samba.org/'>C/C++ Compiler Cache</ulink>
403 for the build.
404 This class is used to give a minor performance boost during the build.
405 However, using the class can lead to unexpected side-effects.
406 Thus, it is recommended that you do not use this class.
407 See <ulink url='http://ccache.samba.org/'></ulink> for information on
408 the C/C++ Compiler Cache.
409 </para>
410</section>
411
412<section id='ref-classes-chrpath'>
413 <title><filename>chrpath.bbclass</filename></title>
414
415 <para>
416 The <filename>chrpath</filename> class
417 is a wrapper around the "chrpath" utility, which is used during the
418 build process for <filename>nativesdk</filename>,
419 <filename>cross</filename>, and
420 <filename>cross-canadian</filename> recipes to change
421 <filename>RPATH</filename> records within binaries in order to make
422 them relocatable.
423 </para>
424</section>
425
426<section id='ref-classes-clutter'>
427 <title><filename>clutter.bbclass</filename></title>
428
429 <para>
430 The <filename>clutter</filename> class consolidates the
431 major and minor version naming and other common items used by Clutter
432 and related recipes.
433 <note>
434 Unlike some other classes related to specific libraries, recipes
435 building other software that uses Clutter do not need to
436 inherit this class unless they use the same recipe versioning
437 scheme that the Clutter and related recipes do.
438 </note>
439 </para>
440</section>
441
442<section id='ref-classes-cmake'>
443 <title><filename>cmake.bbclass</filename></title>
444
445 <para>
446 The <filename>cmake</filename> class allows for
447 recipes that need to build software using the CMake build system.
448 You can use the
449 <link linkend='var-EXTRA_OECMAKE'><filename>EXTRA_OECMAKE</filename></link>
450 variable to specify additional configuration options to be passed on
451 the <filename>cmake</filename> command line.
452 </para>
453</section>
454
455<section id='ref-classes-cml1'>
456 <title><filename>cml1.bbclass</filename></title>
457
458 <para>
459 The <filename>cml1</filename> class provides basic support for the
460 Linux kernel style build configuration system.
461 </para>
462</section>
463
464<section id='ref-classes-compress_doc'>
465 <title><filename>compress_doc.bbclass</filename></title>
466
467 <para>
468 Enables compression for man pages and info pages.
469 This class is intended to be inherited globally.
470 The default compression mechanism is gz (gzip) but you can
471 select an alternative mechanism by setting the
472 <link linkend='var-DOC_COMPRESS'><filename>DOC_COMPRESS</filename></link>
473 variable.
474 </para>
475</section>
476
477<section id='ref-classes-copyleft_compliance'>
478 <title><filename>copyleft_compliance.bbclass</filename></title>
479
480 <para>
481 The <filename>copyleft_compliance</filename> class
482 preserves source code for the purposes of license compliance.
483 This class is an alternative to the <filename>archiver</filename>
484 class and is still used by some users even though it has been
485 deprecated in favor of the
486 <link linkend='ref-classes-archiver'><filename>archiver</filename></link>
487 class.
488 </para>
489</section>
490
491<section id='ref-classes-copyleft_filter'>
492 <title><filename>copyleft_filter.bbclass</filename></title>
493
494 <para>
495 A class used by the
496 <link linkend='ref-classes-archiver'><filename>archiver</filename></link>
497 and
498 <link linkend='ref-classes-copyleft_compliance'><filename>copyleft_compliance</filename></link>
499 classes for filtering licenses.
500 The <filename>copyleft_filter</filename> class is an internal class
501 and is not intended to be used directly.
502 </para>
503</section>
504
505<section id='ref-classes-core-image'>
506 <title><filename>core-image.bbclass</filename></title>
507
508 <para>
509 The <filename>core-image</filename> class
510 provides common definitions for the
511 <filename>core-image-*</filename> image recipes, such as support for
512 additional
513 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>.
514 </para>
515</section>
516
517<section id='ref-classes-cpan'>
518 <title><filename>cpan.bbclass</filename></title>
519
520 <para>
521 The <filename>cpan</filename> class supports Perl modules.
522 </para>
523
524 <para>
525 Recipes for Perl modules are simple.
526 These recipes usually only need to point to the source's archive and
527 then inherit the proper class file.
528 Building is split into two methods depending on which method the module
529 authors used.
530 <itemizedlist>
531 <listitem><para>Modules that use old
532 <filename>Makefile.PL</filename>-based build system require
533 <filename>cpan.bbclass</filename> in their recipes.
534 </para></listitem>
535 <listitem><para>Modules that use
536 <filename>Build.PL</filename>-based build system require
537 using <filename>cpan_build.bbclass</filename> in their recipes.
538 </para></listitem>
539 </itemizedlist>
540 </para>
541</section>
542
543<section id='ref-classes-cross'>
544 <title><filename>cross.bbclass</filename></title>
545
546 <para>
547 The <filename>cross</filename> class provides support for the recipes
548 that build the cross-compilation tools.
549 </para>
550</section>
551
552<section id='ref-classes-cross-canadian'>
553 <title><filename>cross-canadian.bbclass</filename></title>
554
555 <para>
556 The <filename>cross-canadian</filename> class
557 provides support for the recipes that build the Canadian
558 Cross-compilation tools for SDKs.
559 See the
560 "<link linkend='cross-development-toolchain-generation'>Cross-Development Toolchain Generation</link>"
561 section for more discussion on these cross-compilation tools.
562 </para>
563</section>
564
565<section id='ref-classes-crosssdk'>
566 <title><filename>crosssdk.bbclass</filename></title>
567
568 <para>
569 The <filename>crosssdk</filename> class
570 provides support for the recipes that build the cross-compilation
571 tools used for building SDKs.
572 See the
573 "<link linkend='cross-development-toolchain-generation'>Cross-Development Toolchain Generation</link>"
574 section for more discussion on these cross-compilation tools.
575 </para>
576</section>
577
578<section id='ref-classes-debian'>
579 <title><filename>debian.bbclass</filename></title>
580
581 <para>
582 The <filename>debian</filename> class renames output packages so that
583 they follow the Debian naming policy (i.e. <filename>glibc</filename>
584 becomes <filename>libc6</filename> and <filename>glibc-devel</filename>
585 becomes <filename>libc6-dev</filename>.)
586 Renaming includes the library name and version as part of the package
587 name.
588 </para>
589
590 <para>
591 If a recipe creates packages for multiple libraries
592 (shared object files of <filename>.so</filename> type), use the
593 <link linkend='var-LEAD_SONAME'><filename>LEAD_SONAME</filename></link>
594 variable in the recipe to specify the library on which to apply the
595 naming scheme.
596 </para>
597</section>
598
599<section id='ref-classes-deploy'>
600 <title><filename>deploy.bbclass</filename></title>
601
602 <para>
603 The <filename>deploy</filename> class handles deploying files
604 to the
605 <link linkend='var-DEPLOY_DIR_IMAGE'><filename>DEPLOY_DIR_IMAGE</filename></link>
606 directory.
607 The main function of this class is to allow the deploy step to be
608 accelerated by shared state.
609 Recipes that inherit this class should define their own
610 <link linkend='ref-tasks-deploy'><filename>do_deploy</filename></link>
611 function to copy the files to be deployed to
612 <link linkend='var-DEPLOYDIR'><filename>DEPLOYDIR</filename></link>,
613 and use <filename>addtask</filename> to add the task at the appropriate
614 place, which is usually after
615 <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
616 or
617 <link linkend='ref-tasks-install'><filename>do_install</filename></link>.
618 The class then takes care of staging the files from
619 <filename>DEPLOYDIR</filename> to
620 <filename>DEPLOY_DIR_IMAGE</filename>.
621 </para>
622</section>
623
624<section id='ref-classes-devshell'>
625 <title><filename>devshell.bbclass</filename></title>
626
627 <para>
628 The <filename>devshell</filename> class adds the
629 <filename>do_devshell</filename> task.
630 Distribution policy dictates whether to include this class.
631 See the
632 "<ulink url='&YOCTO_DOCS_DEV_URL;#platdev-appdev-devshell'>Using a Development Shell</ulink>" section
633 in the Yocto Project Development Manual for more information about
634 using <filename>devshell</filename>.
635 </para>
636</section>
637
638<section id='ref-classes-distro_features_check'>
639 <title><filename>distro_features_check.bbclass</filename></title>
640
641 <para>
642 The <filename>distro_features_check</filename> class
643 allows individual recipes to check for required and conflicting
644 <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.
645 </para>
646
647 <para>
648 This class provides support for the
649 <link linkend='var-REQUIRED_DISTRO_FEATURES'><filename>REQUIRED_DISTRO_FEATURES</filename></link>
650 and
651 <link linkend='var-CONFLICT_DISTRO_FEATURES'><filename>CONFLICT_DISTRO_FEATURES</filename></link>
652 variables.
653 If any conditions specified in the recipe using the above variables are
654 not met, the recipe will be skipped.
655 </para>
656</section>
657
658<section id='ref-classes-distrodata'>
659 <title><filename>distrodata.bbclass</filename></title>
660
661 <para>
662 The <filename>distrodata</filename> class
663 provides for automatic checking for upstream recipe updates.
664 The class creates a comma-separated value (CSV) spreadsheet that
665 contains information about the recipes.
666 The information provides the <filename>do_distrodata</filename> and
667 <filename>do_distro_check</filename> tasks, which do upstream checking
668 and also verify if a package is used in multiple major distributions.
669 </para>
670
671 <para>
672 The class is not included by default.
673 To use it, you must include the following files and set the
674 <link linkend='var-INHERIT'><filename>INHERIT</filename></link>
675 variable:
676 <literallayout class='monospaced'>
677 include conf/distro/include/distro_alias.inc
678 include conf/distro/include/recipe_color.inc
679 include conf/distro/include/maintainers.inc
680 include conf/distro/include/upstream_tracking.inc
681 include conf/distro/include/package_regex.inc
682 INHERIT+= "distrodata"
683 </literallayout>
684 </para>
685</section>
686
687<section id='ref-classes-distutils'>
688 <title><filename>distutils.bbclass</filename></title>
689
690 <para>
691 The <filename>distutils</filename> class supports recipes for Python
692 version 2.x extensions, which are simple.
693 These recipes usually only need to point to the source's archive and
694 then inherit the proper class.
695 Building is split into two methods depending on which method the
696 module authors used.
697 <itemizedlist>
698 <listitem><para>Extensions that use an Autotools-based build system
699 require Autotools and
700 <filename>distutils</filename>-based classes in their recipes.
701 </para></listitem>
702 <listitem><para>Extensions that use build systems based on
703 <filename>distutils</filename> require
704 the <filename>distutils</filename> class in their recipes.
705 </para></listitem>
706 <listitem><para>Extensions that use build systems based on
707 <filename>setuptools</filename> require the
708 <link linkend='ref-classes-setuptools'><filename>setuptools</filename></link>
709 class in their recipes.
710 </para></listitem>
711 </itemizedlist>
712 </para>
713</section>
714
715<section id='ref-classes-distutils3'>
716 <title><filename>distutils3.bbclass</filename></title>
717
718 <para>
719 The <filename>distutils3</filename> class supports recipes for Python
720 version 3.x extensions, which are simple.
721 These recipes usually only need to point to the source's archive and
722 then inherit the proper class.
723 Building is split into two methods depending on which method the
724 module authors used.
725 <itemizedlist>
726 <listitem><para>Extensions that use an Autotools-based build system
727 require Autotools and
728 <filename>distutils</filename>-based classes in their recipes.
729 </para></listitem>
730 <listitem><para>Extensions that use
731 <filename>distutils</filename>-based build systems require
732 the <filename>distutils</filename> class in their recipes.
733 </para></listitem>
734 <listitem><para>Extensions that use build systems based on
735 <filename>setuptools3</filename> require the
736 <link linkend='ref-classes-setuptools'><filename>setuptools3</filename></link>
737 class in their recipes.
738 </para></listitem>
739 </itemizedlist>
740 </para>
741</section>
742
743<section id='ref-classes-externalsrc'>
744 <title><filename>externalsrc.bbclass</filename></title>
745
746 <para>
747 The <filename>externalsrc</filename> class supports building software
748 from source code that is external to the OpenEmbedded build system.
749 Building software from an external source tree means that the build
750 system's normal fetch, unpack, and patch process is not used.
751 </para>
752
753 <para>
754 By default, the OpenEmbedded build system uses the
755 <link linkend='var-S'><filename>S</filename></link> and
756 <link linkend='var-B'><filename>B</filename></link> variables to
757 locate unpacked recipe source code and to build it, respectively.
758 When your recipe inherits the <filename>externalsrc</filename> class,
759 you use the
760 <link linkend='var-EXTERNALSRC'><filename>EXTERNALSRC</filename></link>
761 and
762 <link linkend='var-EXTERNALSRC_BUILD'><filename>EXTERNALSRC_BUILD</filename></link>
763 variables to ultimately define <filename>S</filename> and
764 <filename>B</filename>.
765 </para>
766
767 <para>
768 By default, this class expects the source code to support recipe builds
769 that use the <link linkend='var-B'><filename>B</filename></link>
770 variable to point to the directory in which the OpenEmbedded build
771 system places the generated objects built from the recipes.
772 By default, the <filename>B</filename> directory is set to the
773 following, which is separate from the source directory
774 (<filename>S</filename>):
775 <literallayout class='monospaced'>
776 ${WORKDIR}/${BPN}/{PV}/
777 </literallayout>
778 See these variables for more information:
779 <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>,
780 <link linkend='var-BPN'><filename>BPN</filename></link>, and
781 <link linkend='var-PV'><filename>PV</filename></link>,
782 </para>
783
784 <para>
785 For more information on the
786 <filename>externalsrc</filename> class, see the comments in
787 <filename>meta/classes/externalsrc.bbclass</filename> in the
788 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
789 For information on how to use the <filename>externalsrc</filename>
790 class, see the
791 "<ulink url='&YOCTO_DOCS_DEV_URL;#building-software-from-an-external-source'>Building Software from an External Source</ulink>"
792 section in the Yocto Project Development Manual.
793 </para>
794</section>
795
796<section id='ref-classes-extrausers'>
797 <title><filename>extrausers.bbclass</filename></title>
798
799 <para>
800 The <filename>extrausers</filename> class allows
801 additional user and group configuration to be applied at the image
802 level.
803 Inheriting this class either globally or from an image recipe allows
804 additional user and group operations to be performed using the
805 <link linkend='var-EXTRA_USERS_PARAMS'><filename>EXTRA_USERS_PARAMS</filename></link>
806 variable.
807 <note>
808 The user and group operations added using the
809 <filename>extrausers</filename> class are not tied to a specific
810 recipe outside of the recipe for the image.
811 Thus, the operations can be performed across the image as a whole.
812 Use the
813 <link linkend='ref-classes-useradd'><filename>useradd</filename></link>
814 class to add user and group configuration to a specific recipe.
815 </note>
816 Here is an example that uses this class in an image recipe:
817 <literallayout class='monospaced'>
818 inherit extrausers
819 EXTRA_USERS_PARAMS = "\
820 useradd -p '' tester; \
821 groupadd developers; \
822 userdel nobody; \
823 groupdel -g video; \
824 groupmod -g 1020 developers; \
825 usermod -s /bin/sh tester; \
826 "
827 </literallayout>
828 Here is an example that adds two users named "tester-jim" and
829 "tester-sue" and assigns passwords:
830 <literallayout class='monospaced'>
831 inherit extrausers
832 EXTRA_USERS_PARAMS = "\
833 useradd -P tester01 tester-jim; \
834 useradd -P tester01 tester-sue; \
835 "
836 </literallayout>
837 Finally, here is an example that sets the root password to
838 "1876*18":
839 <literallayout class='monospaced'>
840 inherit extrausers
841 EXTRA_USERS_PARAMS = "\
842 useradd -P 1876*18 root; \
843 "
844 </literallayout>
845 </para>
846</section>
847
848<section id='ref-classes-fontcache'>
849 <title><filename>fontcache.bbclass</filename></title>
850
851 <para>
852 The <filename>fontcache</filename> class generates the
853 proper post-install and post-remove (postinst and postrm)
854 scriptlets for font packages.
855 These scriptlets call <filename>fc-cache</filename> (part of
856 <filename>Fontconfig</filename>) to add the fonts to the font
857 information cache.
858 Since the cache files are architecture-specific,
859 <filename>fc-cache</filename> runs using QEMU if the postinst
860 scriptlets need to be run on the build host during image creation.
861 </para>
862
863 <para>
864 If the fonts being installed are in packages other than the main
865 package, set
866 <link linkend='var-FONT_PACKAGES'><filename>FONT_PACKAGES</filename></link>
867 to specify the packages containing the fonts.
868 </para>
869</section>
870
871<section id='ref-classes-gconf'>
872 <title><filename>gconf.bbclass</filename></title>
873
874 <para>
875 The <filename>gconf</filename> class provides common
876 functionality for recipes that need to install GConf schemas.
877 The schemas will be put into a separate package
878 (<filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}-gconf</filename>)
879 that is created automatically when this class is inherited.
880 This package uses the appropriate post-install and post-remove
881 (postinst/postrm) scriptlets to register and unregister the schemas
882 in the target image.
883 </para>
884</section>
885
886<section id='ref-classes-gettext'>
887 <title><filename>gettext.bbclass</filename></title>
888
889 <para>
890 The <filename>gettext</filename> class provides support for
891 building software that uses the GNU <filename>gettext</filename>
892 internationalization and localization system.
893 All recipes building software that use
894 <filename>gettext</filename> should inherit this class.
895 </para>
896</section>
897
898<section id='ref-classes-gnome'>
899 <title><filename>gnome.bbclass</filename></title>
900
901 <para>
902 The <filename>gnome</filename> class supports recipes that
903 build software from the GNOME stack.
904 This class inherits the
905 <link linkend='ref-classes-gnomebase'><filename>gnomebase</filename></link>,
906 <link linkend='ref-classes-gtk-icon-cache'><filename>gtk-icon-cache</filename></link>,
907 <link linkend='ref-classes-gconf'><filename>gconf</filename></link> and
908 <link linkend='ref-classes-mime'><filename>mime</filename></link> classes.
909 The class also disables GObject introspection where applicable.
910 </para>
911</section>
912
913<section id='ref-classes-gnomebase'>
914 <title><filename>gnomebase.bbclass</filename></title>
915
916 <para>
917 The <filename>gnomebase</filename> class is the base
918 class for recipes that build software from the GNOME stack.
919 This class sets
920 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link> to
921 download the source from the GNOME mirrors as well as extending
922 <link linkend='var-FILES'><filename>FILES</filename></link>
923 with the typical GNOME installation paths.
924 </para>
925</section>
926
927<section id='ref-classes-grub-efi'>
928 <title><filename>grub-efi.bbclass</filename></title>
929
930 <para>
931 The <filename>grub-efi</filename>
932 class provides <filename>grub-efi</filename>-specific functions for
933 building bootable images.
934 </para>
935
936 <para>
937 This class supports several variables:
938 <itemizedlist>
939 <listitem><para>
940 <link linkend='var-INITRD'><filename>INITRD</filename></link>:
941 Indicates list of filesystem images to concatenate and use
942 as an initial RAM disk (initrd) (optional).
943 </para></listitem>
944 <listitem><para>
945 <link linkend='var-ROOTFS'><filename>ROOTFS</filename></link>:
946 Indicates a filesystem image to include as the root filesystem
947 (optional).</para></listitem>
948 <listitem><para>
949 <link linkend='var-GRUB_GFXSERIAL'><filename>GRUB_GFXSERIAL</filename></link>:
950 Set this to "1" to have graphics and serial in the boot menu.
951 </para></listitem>
952 <listitem><para>
953 <link linkend='var-LABELS'><filename>LABELS</filename></link>:
954 A list of targets for the automatic configuration.
955 </para></listitem>
956 <listitem><para>
957 <link linkend='var-APPEND'><filename>APPEND</filename></link>:
958 An override list of append strings for each
959 <filename>LABEL</filename>.
960 </para></listitem>
961 <listitem><para>
962 <link linkend='var-GRUB_OPTS'><filename>GRUB_OPTS</filename></link>:
963 Additional options to add to the configuration (optional).
964 Options are delimited using semi-colon characters
965 (<filename>;</filename>).</para></listitem>
966 <listitem><para>
967 <link linkend='var-GRUB_TIMEOUT'><filename>GRUB_TIMEOUT</filename></link>:
968 Timeout before executing the default <filename>LABEL</filename>
969 (optional).
970 </para></listitem>
971 </itemizedlist>
972 </para>
973</section>
974
975<section id='ref-classes-gsettings'>
976 <title><filename>gsettings.bbclass</filename></title>
977
978 <para>
979 The <filename>gsettings</filename> class
980 provides common functionality for recipes that need to install
981 GSettings (glib) schemas.
982 The schemas are assumed to be part of the main package.
983 Appropriate post-install and post-remove (postinst/postrm)
984 scriptlets are added to register and unregister the schemas in the
985 target image.
986 </para>
987</section>
988
989<section id='ref-classes-gtk-doc'>
990 <title><filename>gtk-doc.bbclass</filename></title>
991
992 <para>
993 The <filename>gtk-doc</filename> class
994 is a helper class to pull in the appropriate
995 <filename>gtk-doc</filename> dependencies and disable
996 <filename>gtk-doc</filename>.
997 </para>
998</section>
999
1000<section id='ref-classes-gtk-icon-cache'>
1001 <title><filename>gtk-icon-cache.bbclass</filename></title>
1002
1003 <para>
1004 The <filename>gtk-icon-cache</filename> class
1005 generates the proper post-install and post-remove (postinst/postrm)
1006 scriptlets for packages that use GTK+ and install icons.
1007 These scriptlets call <filename>gtk-update-icon-cache</filename> to add
1008 the fonts to GTK+'s icon cache.
1009 Since the cache files are architecture-specific,
1010 <filename>gtk-update-icon-cache</filename> is run using QEMU if the
1011 postinst scriptlets need to be run on the build host during image
1012 creation.
1013 </para>
1014</section>
1015
1016<section id='ref-classes-gtk-immodules-cache'>
1017 <title><filename>gtk-immodules-cache.bbclass</filename></title>
1018
1019 <para>
1020 The <filename>gtk-immodules-cache</filename> class
1021 generates the proper post-install and post-remove (postinst/postrm)
1022 scriptlets for packages that install GTK+ input method modules for
1023 virtual keyboards.
1024 These scriptlets call <filename>gtk-update-icon-cache</filename> to add
1025 the input method modules to the cache.
1026 Since the cache files are architecture-specific,
1027 <filename>gtk-update-icon-cache</filename> is run using QEMU if the
1028 postinst scriptlets need to be run on the build host during image
1029 creation.
1030 </para>
1031
1032 <para>
1033 If the input method modules being installed are in packages other than
1034 the main package, set
1035 <link linkend='var-GTKIMMODULES_PACKAGES'><filename>GTKIMMODULES_PACKAGES</filename></link>
1036 to specify the packages containing the modules.
1037 </para>
1038</section>
1039
1040<section id='ref-classes-gummiboot'>
1041 <title><filename>gummiboot.bbclass</filename></title>
1042
1043 <para>
1044 The <filename>gummiboot</filename> class provides functions specific
1045 to the gummiboot bootloader for building bootable images.
1046 This is an internal class and is not intended to be
1047 used directly.
1048 Set the
1049 <link linkend='var-EFI_PROVIDER'><filename>EFI_PROVIDER</filename></link>
1050 variable to "gummiboot" to use this class.
1051 </para>
1052
1053 <para>
1054 For information on more variables used and supported in this class,
1055 see the
1056 <link linkend='var-GUMMIBOOT_CFG'><filename>GUMMIBOOT_CFG</filename></link>,
1057 <link linkend='var-GUMMIBOOT_ENTRIES'><filename>GUMMIBOOT_ENTRIES</filename></link>,
1058 and
1059 <link linkend='var-GUMMIBOOT_TIMEOUT'><filename>GUMMIBOOT_TIMEOUT</filename></link>
1060 variables.
1061 </para>
1062
1063 <para>
1064 You can also see the
1065 <ulink url='http://freedesktop.org/wiki/Software/gummiboot/'>Gummiboot documentation</ulink>
1066 for more information.
1067 </para>
1068</section>
1069
1070<section id='ref-classes-gzipnative'>
1071 <title><filename>gzipnative.bbclass</filename></title>
1072
1073 <para>
1074 The <filename>gzipnative</filename>
1075 class enables the use of native versions of <filename>gzip</filename>
1076 and <filename>pigz</filename> rather than the versions of these tools
1077 from the build host.
1078 </para>
1079</section>
1080
1081<section id='ref-classes-icecc'>
1082 <title><filename>icecc.bbclass</filename></title>
1083
1084 <para>
1085 The <filename>icecc</filename> class supports
1086 <ulink url='https://github.com/icecc/icecream'>Icecream</ulink>, which
1087 facilitates taking compile jobs and distributing them among remote
1088 machines.
1089 </para>
1090
1091 <para>
1092 The class stages directories with symlinks from <filename>gcc</filename>
1093 and <filename>g++</filename> to <filename>icecc</filename>, for both
1094 native and cross compilers.
1095 Depending on each configure or compile, the OpenEmbedded build system
1096 adds the directories at the head of the <filename>PATH</filename> list
1097 and then sets the <filename>ICECC_CXX</filename> and
1098 <filename>ICEC_CC</filename> variables, which are the paths to the
1099 <filename>g++</filename> and <filename>gcc</filename> compilers,
1100 respectively.
1101 </para>
1102
1103 <para>
1104 For the cross compiler, the class creates a <filename>tar.gz</filename>
1105 file that contains the Yocto Project toolchain and sets
1106 <filename>ICECC_VERSION</filename>, which is the version of the
1107 cross-compiler used in the cross-development toolchain, accordingly.
1108 </para>
1109
1110 <para>
1111 The class handles all three different compile stages
1112 (i.e native ,cross-kernel and target) and creates the necessary
1113 environment <filename>tar.gz</filename> file to be used by the remote
1114 machines.
1115 The class also supports SDK generation.
1116 </para>
1117
1118 <para>
1119 If <link linkend='var-ICECC_PATH'><filename>ICECC_PATH</filename></link>
1120 is not set in your <filename>local.conf</filename> file, then the
1121 class tries to locate the <filename>icecc</filename> binary
1122 using <filename>which</filename>.
1123
1124 If
1125 <link linkend='var-ICECC_ENV_EXEC'><filename>ICECC_ENV_EXEC</filename></link>
1126 is set in your <filename>local.conf</filename> file, the variable should
1127 point to the <filename>icecc-create-env</filename> script
1128 provided by the user.
1129 If you do not point to a user-provided script, the build system
1130 uses the default script provided by the recipe
1131 <filename>icecc-create-env-native.bb</filename>.
1132 <note>
1133 This script is a modified version and not the one that comes with
1134 <filename>icecc</filename>.
1135 </note>
1136 </para>
1137
1138 <para>
1139 If you do not want the Icecream distributed compile support to apply
1140 to specific recipes or classes, you can effectively "blacklist" them
1141 by listing the recipes and classes using the
1142 <link linkend='var-ICECC_USER_PACKAGE_BL'><filename>ICECC_USER_PACKAGE_BL</filename></link>
1143 and
1144 <link linkend='var-ICECC_USER_CLASS_BL'><filename>ICECC_USER_CLASS_BL</filename></link>,
1145 variables, respectively, in your <filename>local.conf</filename> file.
1146 Doing so causes the OpenEmbedded build system to handle these
1147 compilations locally.
1148 </para>
1149
1150 <para>
1151 Additionally, you can list recipes using the
1152 <link linkend='var-ICECC_USER_PACKAGE_WL'><filename>ICECC_USER_PACKAGE_WL</filename></link>
1153 variable in your <filename>local.conf</filename> file to force
1154 <filename>icecc</filename> to be enabled for recipes using an empty
1155 <link linkend='var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></link>
1156 variable.
1157 </para>
1158
1159 <para>
1160 Inheriting the <filename>icecc</filename> class changes all sstate
1161 signatures.
1162 Consequently, if a development team has a dedicated build system
1163 that populates
1164 <link linkend='var-SSTATE_MIRRORS'><filename>STATE_MIRRORS</filename></link>
1165 and they want to reuse sstate from
1166 <filename>STATE_MIRRORS</filename>, then all developers and the
1167 build system need to either inherit the <filename>icecc</filename>
1168 class or nobody should.
1169 </para>
1170
1171 <para>
1172 At the distribution level, you can inherit the
1173 <filename>icecc</filename> class to be sure that all builders start
1174 with the same sstate signatures.
1175 After inheriting the class, you can then disable the feature by setting
1176 the
1177 <link linkend='var-ICECC_DISABLED'><filename>ICECC_DISABLED</filename></link>
1178 variable to "1" as follows:
1179 <literallayout class='monospaced'>
1180 INHERIT_DISTRO_append = " icecc"
1181 ICECC_DISABLED ??= "1"
1182 </literallayout>
1183 This practice makes sure everyone is using the same signatures but also
1184 requires individuals that do want to use Icecream to enable the feature
1185 individually as follows in your <filename>local.conf</filename> file:
1186 <literallayout class='monospaced'>
1187 ICECC_DISABLED = ""
1188 </literallayout>
1189 </para>
1190</section>
1191
1192<section id='ref-classes-image'>
1193 <title><filename>image.bbclass</filename></title>
1194
1195 <para>
1196 The <filename>image</filename> class helps support creating images
1197 in different formats.
1198 First, the root filesystem is created from packages using
1199 one of the <filename>rootfs*.bbclass</filename>
1200 files (depending on the package format used) and then one or more image
1201 files are created.
1202 <itemizedlist>
1203 <listitem><para>The
1204 <filename><link linkend='var-IMAGE_FSTYPES'>IMAGE_FSTYPES</link></filename>
1205 variable controls the types of images to generate.
1206 </para></listitem>
1207 <listitem><para>The
1208 <filename><link linkend='var-IMAGE_INSTALL'>IMAGE_INSTALL</link></filename>
1209 variable controls the list of packages to install into the
1210 image.</para></listitem>
1211 </itemizedlist>
1212 For information on customizing images, see the
1213 "<ulink url='&YOCTO_DOCS_DEV_URL;#usingpoky-extend-customimage'>Customizing Images</ulink>"
1214 section in the Yocto Project Development Manual.
1215 For information on how images are created, see the
1216 "<link linkend='images-dev-environment'>Images</link>" section elsewhere
1217 in this manual.
1218 </para>
1219</section>
1220
1221<section id='ref-classes-image_types'>
1222 <title><filename>image_types.bbclass</filename></title>
1223
1224 <para>
1225 The <filename>image_types</filename> class defines all of
1226 the standard image output types that you can enable through the
1227 <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
1228 variable.
1229 You can use this class as a reference on how to add support for custom
1230 image output types.
1231 </para>
1232
1233 <para>
1234 By default, this class is enabled through the
1235 <link linkend='var-IMAGE_CLASSES'><filename>IMAGE_CLASSES</filename></link>
1236 variable in
1237 <link linkend='ref-classes-image'><filename>image.bbclass</filename></link>.
1238 If you define your own image types using a custom BitBake class and
1239 then use <filename>IMAGE_CLASSES</filename> to enable it, the custom
1240 class must either inherit <filename>image_types</filename> or
1241 <filename>image_types</filename> must also appear in
1242 <filename>IMAGE_CLASSES</filename>.
1243 </para>
1244</section>
1245
1246<section id='ref-classes-image_types_uboot'>
1247 <title><filename>image_types_uboot.bbclass</filename></title>
1248
1249 <para>
1250 The <filename>image_types_uboot</filename> class
1251 defines additional image types specifically for the U-Boot bootloader.
1252 </para>
1253</section>
1254
1255<section id='ref-classes-image-live'>
1256 <title><filename>image-live.bbclass</filename></title>
1257
1258 <para>
1259 The <filename>image-live</filename> class supports building "live"
1260 images.
1261 </para>
1262
1263 <para>
1264 Normally, you do not use this class directly.
1265 Instead, you add "live" to
1266 <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>.
1267 For example, if you were building an ISO image, you would add "live"
1268 to <filename>IMAGE_FSTYPES</filename>, set the
1269 <link linkend='var-NOISO'><filename>NOISO</filename></link> variable to
1270 "0" and the build system would use the <filename>image-live</filename>
1271 class to build the ISO image.
1272 </para>
1273</section>
1274
1275<section id='ref-classes-image-mklibs'>
1276 <title><filename>image-mklibs.bbclass</filename></title>
1277
1278 <para>
1279 The <filename>image-mklibs</filename> class
1280 enables the use of the <filename>mklibs</filename> utility during the
1281 <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link>
1282 task, which optimizes the size of
1283 libraries contained in the image.
1284 </para>
1285
1286 <para>
1287 By default, the class is enabled in the
1288 <filename>local.conf.template</filename> using the
1289 <link linkend='var-USER_CLASSES'><filename>USER_CLASSES</filename></link>
1290 variable as follows:
1291 <literallayout class='monospaced'>
1292 USER_CLASSES ?= "buildstats image-mklibs image-prelink"
1293 </literallayout>
1294 </para>
1295</section>
1296
1297<section id='ref-classes-image-prelink'>
1298 <title><filename>image-prelink.bbclass</filename></title>
1299
1300 <para>
1301 The <filename>image-prelink</filename> class
1302 enables the use of the <filename>prelink</filename> utility during
1303 the
1304 <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link>
1305 task, which optimizes the dynamic
1306 linking of shared libraries to reduce executable startup time.
1307 </para>
1308
1309 <para>
1310 By default, the class is enabled in the
1311 <filename>local.conf.template</filename> using the
1312 <link linkend='var-USER_CLASSES'><filename>USER_CLASSES</filename></link>
1313 variable as follows:
1314 <literallayout class='monospaced'>
1315 USER_CLASSES ?= "buildstats image-mklibs image-prelink"
1316 </literallayout>
1317 </para>
1318</section>
1319
1320<section id='ref-classes-image-swab'>
1321 <title><filename>image-swab.bbclass</filename></title>
1322
1323 <para>
1324 The <filename>image-swab</filename> class enables the
1325 <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/swabber'>Swabber</ulink>
1326 tool in order to detect and log accesses to the host system during
1327 the OpenEmbedded build process.
1328 <note>
1329 This class is currently unmaintained.
1330 </note>
1331 </para>
1332</section>
1333
1334<section id='ref-classes-image-vmdk'>
1335 <title><filename>image-vmdk.bbclass</filename></title>
1336
1337 <para>
1338 The <filename>image-vmdk</filename> class supports building VMware
1339 VMDK images.
1340 Normally, you do not use this class directly.
1341 Instead, you add "vmdk" to
1342 <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>.
1343 </para>
1344</section>
1345
1346<section id='ref-classes-insane'>
1347 <title><filename>insane.bbclass</filename></title>
1348
1349 <para>
1350 The <filename>insane</filename> class adds a step to the package
1351 generation process so that output quality assurance checks are
1352 generated by the OpenEmbedded build system.
1353 A range of checks are performed that check the build's output
1354 for common problems that show up during runtime.
1355 Distribution policy usually dictates whether to include this class.
1356 </para>
1357
1358 <para>
1359 You can configure the sanity checks so that specific test failures
1360 either raise a warning or an error message.
1361 Typically, failures for new tests generate a warning.
1362 Subsequent failures for the same test would then generate an error
1363 message once the metadata is in a known and good condition.
1364 See the
1365 "<link linkend='ref-qa-checks'>QA Error and Warning Messages</link>"
1366 Chapter for a list of all the warning and error messages
1367 you might encounter using a default configuration.
1368 </para>
1369
1370 <para>
1371 Use the
1372 <link linkend='var-WARN_QA'><filename>WARN_QA</filename></link> and
1373 <link linkend='var-ERROR_QA'><filename>ERROR_QA</filename></link>
1374 variables to control the behavior of
1375 these checks at the global level (i.e. in your custom distro
1376 configuration).
1377 However, to skip one or more checks in recipes, you should use
1378 <link linkend='var-INSANE_SKIP'><filename>INSANE_SKIP</filename></link>.
1379 For example, to skip the check for symbolic link
1380 <filename>.so</filename> files in the main package of a recipe,
1381 add the following to the recipe.
1382 You need to realize that the package name override, in this example
1383 <filename>${PN}</filename>, must be used:
1384 <literallayout class='monospaced'>
1385 INSANE_SKIP_${PN} += "dev-so"
1386 </literallayout>
1387 Please keep in mind that the QA checks exist in order to detect real
1388 or potential problems in the packaged output.
1389 So exercise caution when disabling these checks.
1390 </para>
1391
1392 <para>
1393 The following list shows the tests you can list with the
1394 <filename>WARN_QA</filename> and <filename>ERROR_QA</filename>
1395 variables:
1396 <itemizedlist>
1397 <listitem><para><emphasis><filename>already-stripped:</filename></emphasis>
1398 Checks that produced binaries have not already been
1399 stripped prior to the build system extracting debug symbols.
1400 It is common for upstream software projects to default to
1401 stripping debug symbols for output binaries.
1402 In order for debugging to work on the target using
1403 <filename>-dbg</filename> packages, this stripping must be
1404 disabled.
1405 </para></listitem>
1406 <listitem><para><emphasis><filename>arch:</filename></emphasis>
1407 Checks the Executable and Linkable Format (ELF) type, bit size,
1408 and endianness of any binaries to ensure they match the target
1409 architecture.
1410 This test fails if any binaries do not match the type since
1411 there would be an incompatibility.
1412 The test could indicate that the
1413 wrong compiler or compiler options have been used.
1414 Sometimes software, like bootloaders, might need to bypass
1415 this check.
1416 </para></listitem>
1417 <listitem><para><emphasis><filename>buildpaths:</filename></emphasis>
1418 Checks for paths to locations on the build host inside the
1419 output files.
1420 Currently, this test triggers too many false positives and
1421 thus is not normally enabled.
1422 </para></listitem>
1423 <listitem><para><emphasis><filename>build-deps:</filename></emphasis>
1424 Determines if a build-time dependency that is specified through
1425 <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>,
1426 explicit
1427 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>,
1428 or task-level dependencies exists to match any runtime
1429 dependency.
1430 This determination is particularly useful to discover where
1431 runtime dependencies are detected and added during packaging.
1432 If no explicit dependency has been specified within the
1433 metadata, at the packaging stage it is too late to ensure that
1434 the dependency is built, and thus you can end up with an
1435 error when the package is installed into the image during the
1436 <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link>
1437 task because the auto-detected dependency was not satisfied.
1438 An example of this would be where the
1439 <link linkend='ref-classes-update-rc.d'><filename>update-rc.d</filename></link>
1440 class automatically adds a dependency on the
1441 <filename>initscripts-functions</filename> package to packages
1442 that install an initscript that refers to
1443 <filename>/etc/init.d/functions</filename>.
1444 The recipe should really have an explicit
1445 <filename>RDEPENDS</filename> for the package in question on
1446 <filename>initscripts-functions</filename> so that the
1447 OpenEmbedded build system is able to ensure that the
1448 <filename>initscripts</filename> recipe is actually built and
1449 thus the <filename>initscripts-functions</filename> package is
1450 made available.
1451 </para></listitem>
1452 <listitem><para><emphasis><filename>compile-host-path:</filename></emphasis>
1453 Checks the
1454 <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
1455 log for indications
1456 that paths to locations on the build host were used.
1457 Using such paths might result in host contamination of the
1458 build output.
1459 </para></listitem>
1460 <listitem><para><emphasis><filename>debug-deps:</filename></emphasis>
1461 Checks that all packages except <filename>-dbg</filename>
1462 packages do not depend on <filename>-dbg</filename>
1463 packages, which would cause a packaging bug.
1464 </para></listitem>
1465 <listitem><para><emphasis><filename>debug-files:</filename></emphasis>
1466 Checks for <filename>.debug</filename> directories in anything but the
1467 <filename>-dbg</filename> package.
1468 The debug files should all be in the <filename>-dbg</filename> package.
1469 Thus, anything packaged elsewhere is incorrect packaging.</para></listitem>
1470 <listitem><para><emphasis><filename>dep-cmp:</filename></emphasis>
1471 Checks for invalid version comparison statements in runtime
1472 dependency relationships between packages (i.e. in
1473 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>,
1474 <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>,
1475 <link linkend='var-RSUGGESTS'><filename>RSUGGESTS</filename></link>,
1476 <link linkend='var-RPROVIDES'><filename>RPROVIDES</filename></link>,
1477 <link linkend='var-RREPLACES'><filename>RREPLACES</filename></link>,
1478 and
1479 <link linkend='var-RCONFLICTS'><filename>RCONFLICTS</filename></link>
1480 variable values).
1481 Any invalid comparisons might trigger failures or undesirable
1482 behavior when passed to the package manager.
1483 </para></listitem>
1484 <listitem><para><emphasis><filename>desktop:</filename></emphasis>
1485 Runs the <filename>desktop-file-validate</filename> program
1486 against any <filename>.desktop</filename> files to validate
1487 their contents against the specification for
1488 <filename>.desktop</filename> files.</para></listitem>
1489 <listitem><para><emphasis><filename>dev-deps:</filename></emphasis>
1490 Checks that all packages except <filename>-dev</filename>
1491 or <filename>-staticdev</filename> packages do not depend on
1492 <filename>-dev</filename> packages, which would be a
1493 packaging bug.</para></listitem>
1494 <listitem><para><emphasis><filename>dev-so:</filename></emphasis>
1495 Checks that the <filename>.so</filename> symbolic links are in the
1496 <filename>-dev</filename> package and not in any of the other packages.
1497 In general, these symlinks are only useful for development purposes.
1498 Thus, the <filename>-dev</filename> package is the correct location for
1499 them.
1500 Some very rare cases do exist for dynamically loaded modules where
1501 these symlinks are needed instead in the main package.
1502 </para></listitem>
1503 <listitem><para><emphasis><filename>file-rdeps:</filename></emphasis>
1504 Checks that file-level dependencies identified by the
1505 OpenEmbedded build system at packaging time are satisfied.
1506 For example, a shell script might start with the line
1507 <filename>#!/bin/bash</filename>.
1508 This line would translate to a file dependency on
1509 <filename>/bin/bash</filename>.
1510 Of the three package managers that the OpenEmbedded build
1511 system supports, only RPM directly handles file-level
1512 dependencies, resolving them automatically to packages
1513 providing the files.
1514 However, the lack of that functionality in the other two
1515 package managers does not mean the dependencies do not still
1516 need resolving.
1517 This QA check attempts to ensure that explicitly declared
1518 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
1519 exist to handle any file-level dependency detected in
1520 packaged files.
1521 </para></listitem>
1522 <listitem><para><emphasis><filename>files-invalid:</filename></emphasis>
1523 Checks for
1524 <link linkend='var-FILES'><filename>FILES</filename></link>
1525 variable values that contain "//", which is invalid.
1526 </para></listitem>
1527 <listitem><para><emphasis><filename>incompatible-license:</filename></emphasis>
1528 Report when packages are excluded from being created due to
1529 being marked with a license that is in
1530 <link linkend='var-INCOMPATIBLE_LICENSE'><filename>INCOMPATIBLE_LICENSE</filename></link>.
1531 </para></listitem>
1532 <listitem><para><emphasis><filename>install-host-path:</filename></emphasis>
1533 Checks the
1534 <link linkend='ref-tasks-install'><filename>do_install</filename></link>
1535 log for indications
1536 that paths to locations on the build host were used.
1537 Using such paths might result in host contamination of the
1538 build output.
1539 </para></listitem>
1540 <listitem><para><emphasis><filename>installed-vs-shipped:</filename></emphasis>
1541 Reports when files have been installed within
1542 <filename>do_install</filename> but have not been included in
1543 any package by way of the
1544 <link linkend='var-FILES'><filename>FILES</filename></link>
1545 variable.
1546 Files that do not appear in any package cannot be present in
1547 an image later on in the build process.
1548 Ideally, all installed files should be packaged or not
1549 installed at all.
1550 These files can be deleted at the end of
1551 <filename>do_install</filename> if the files are not
1552 needed in any package.
1553 </para></listitem>
1554 <listitem><para><emphasis><filename>la:</filename></emphasis>
1555 Checks <filename>.la</filename> files for any <filename>TMPDIR</filename>
1556 paths.
1557 Any <filename>.la</filename> file containing these paths is incorrect since
1558 <filename>libtool</filename> adds the correct sysroot prefix when using the
1559 files automatically itself.</para></listitem>
1560 <listitem><para><emphasis><filename>ldflags:</filename></emphasis>
1561 Ensures that the binaries were linked with the
1562 <link linkend='var-LDFLAGS'><filename>LDFLAGS</filename></link>
1563 options provided by the build system.
1564 If this test fails, check that the <filename>LDFLAGS</filename> variable
1565 is being passed to the linker command.</para></listitem>
1566 <listitem><para><emphasis><filename>libdir:</filename></emphasis>
1567 Checks for libraries being installed into incorrect
1568 (possibly hardcoded) installation paths.
1569 For example, this test will catch recipes that install
1570 <filename>/lib/bar.so</filename> when
1571 <filename>${base_libdir}</filename> is "lib32".
1572 Another example is when recipes install
1573 <filename>/usr/lib64/foo.so</filename> when
1574 <filename>${libdir}</filename> is "/usr/lib".
1575 </para></listitem>
1576 <listitem><para><emphasis><filename>libexec:</filename></emphasis>
1577 Checks if a package contains files in
1578 <filename>/usr/libexec</filename>.
1579 This check is not performed if the
1580 <filename>libexecdir</filename> variable has been set
1581 explicitly to <filename>/usr/libexec</filename>.
1582 </para></listitem>
1583 <listitem><para><emphasis><filename>packages-list:</filename></emphasis>
1584 Checks for the same package being listed multiple times through
1585 the <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>
1586 variable value.
1587 Installing the package in this manner can cause errors during
1588 packaging.
1589 </para></listitem>
1590 <listitem><para><emphasis><filename>perm-config:</filename></emphasis>
1591 Reports lines in <filename>fs-perms.txt</filename> that have
1592 an invalid format.
1593 </para></listitem>
1594 <listitem><para><emphasis><filename>perm-line:</filename></emphasis>
1595 Reports lines in <filename>fs-perms.txt</filename> that have
1596 an invalid format.
1597 </para></listitem>
1598 <listitem><para><emphasis><filename>perm-link:</filename></emphasis>
1599 Reports lines in <filename>fs-perms.txt</filename> that
1600 specify 'link' where the specified target already exists.
1601 </para></listitem>
1602 <listitem><para><emphasis><filename>perms:</filename></emphasis>
1603 Currently, this check is unused but reserved.
1604 </para></listitem>
1605 <listitem><para><emphasis><filename>pkgconfig:</filename></emphasis>
1606 Checks <filename>.pc</filename> files for any
1607 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>/<link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>
1608 paths.
1609 Any <filename>.pc</filename> file containing these paths is incorrect
1610 since <filename>pkg-config</filename> itself adds the correct sysroot prefix
1611 when the files are accessed.</para></listitem>
1612 <listitem><para><emphasis><filename>pkgname:</filename></emphasis>
1613 Checks that all packages in
1614 <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>
1615 have names that do not contain invalid characters (i.e.
1616 characters other than 0-9, a-z, ., +, and -).
1617 </para></listitem>
1618 <listitem><para><emphasis><filename>pkgv-undefined:</filename></emphasis>
1619 Checks to see if the <filename>PKGV</filename> variable
1620 is undefined during
1621 <link linkend='ref-tasks-package'><filename>do_package</filename></link>.
1622 </para></listitem>
1623 <listitem><para><emphasis><filename>pkgvarcheck:</filename></emphasis>
1624 Checks through the variables
1625 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>,
1626 <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>,
1627 <link linkend='var-RSUGGESTS'><filename>RSUGGESTS</filename></link>,
1628 <link linkend='var-RCONFLICTS'><filename>RCONFLICTS</filename></link>,
1629 <link linkend='var-RPROVIDES'><filename>RPROVIDES</filename></link>,
1630 <link linkend='var-RREPLACES'><filename>RREPLACES</filename></link>,
1631 <link linkend='var-FILES'><filename>FILES</filename></link>,
1632 <link linkend='var-ALLOW_EMPTY'><filename>ALLOW_EMPTY</filename></link>,
1633 <filename>pkg_preinst</filename>,
1634 <filename>pkg_postinst</filename>,
1635 <filename>pkg_prerm</filename>
1636 and <filename>pkg_postrm</filename>, and reports if there are
1637 variable sets that are not package-specific.
1638 Using these variables without a package suffix is bad practice,
1639 and might unnecessarily complicate dependencies of other packages
1640 within the same recipe or have other unintended consequences.
1641 </para></listitem>
1642 <listitem><para><emphasis><filename>pn-overrides:</filename></emphasis>
1643 Checks that a recipe does not have a name
1644 (<link linkend='var-PN'><filename>PN</filename></link>) value
1645 that appears in
1646 <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>.
1647 If a recipe is named such that its <filename>PN</filename>
1648 value matches something already in
1649 <filename>OVERRIDES</filename> (e.g. <filename>PN</filename>
1650 happens to be the same as
1651 <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
1652 or
1653 <link linkend='var-DISTRO'><filename>DISTRO</filename></link>),
1654 it can have unexpected consequences.
1655 For example, assignments such as
1656 <filename>FILES_${PN} = "xyz"</filename> effectively turn into
1657 <filename>FILES = "xyz"</filename>.
1658 </para></listitem>
1659 <listitem><para><emphasis><filename>rpaths:</filename></emphasis>
1660 Checks for rpaths in the binaries that contain build system paths such
1661 as <filename>TMPDIR</filename>.
1662 If this test fails, bad <filename>-rpath</filename> options are being
1663 passed to the linker commands and your binaries have potential security
1664 issues.</para></listitem>
1665 <listitem><para><emphasis><filename>split-strip:</filename></emphasis>
1666 Reports that splitting or stripping debug symbols from binaries
1667 has failed.
1668 </para></listitem>
1669 <listitem><para><emphasis><filename>staticdev:</filename></emphasis>
1670 Checks for static library files (<filename>*.a</filename>) in
1671 non-<filename>staticdev</filename> packages.
1672 </para></listitem>
1673 <listitem><para><emphasis><filename>symlink-to-sysroot:</filename></emphasis>
1674 Checks for symlinks in packages that point into
1675 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
1676 on the host.
1677 Such symlinks will work on the host, but are clearly invalid
1678 when running on the target.
1679 </para></listitem>
1680 <listitem><para><emphasis><filename>textrel:</filename></emphasis>
1681 Checks for ELF binaries that contain relocations in their
1682 <filename>.text</filename> sections, which can result in a
1683 performance impact at runtime.</para></listitem>
1684 <listitem><para><emphasis><filename>unsafe-references-in-binaries:</filename></emphasis>
1685 Reports when a binary installed in
1686 <filename>${base_libdir}</filename>,
1687 <filename>${base_bindir}</filename>, or
1688 <filename>${base_sbindir}</filename>, depends on another
1689 binary installed under <filename>${exec_prefix}</filename>.
1690 This dependency is a concern if you want the system to remain
1691 basically operable if <filename>/usr</filename> is mounted
1692 separately and is not mounted.
1693 <note>
1694 Defaults for binaries installed in
1695 <filename>${base_libdir}</filename>,
1696 <filename>${base_bindir}</filename>, and
1697 <filename>${base_sbindir}</filename> are
1698 <filename>/lib</filename>, <filename>/bin</filename>, and
1699 <filename>/sbin</filename>, respectively.
1700 The default for a binary installed
1701 under <filename>${exec_prefix}</filename> is
1702 <filename>/usr</filename>.
1703 </note>
1704 </para></listitem>
1705 <listitem><para><emphasis><filename>unsafe-references-in-scripts:</filename></emphasis>
1706 Reports when a script file installed in
1707 <filename>${base_libdir}</filename>,
1708 <filename>${base_bindir}</filename>, or
1709 <filename>${base_sbindir}</filename>, depends on files
1710 installed under <filename>${exec_prefix}</filename>.
1711 This dependency is a concern if you want the system to remain
1712 basically operable if <filename>/usr</filename> is mounted
1713 separately and is not mounted.
1714 <note>
1715 Defaults for binaries installed in
1716 <filename>${base_libdir}</filename>,
1717 <filename>${base_bindir}</filename>, and
1718 <filename>${base_sbindir}</filename> are
1719 <filename>/lib</filename>, <filename>/bin</filename>, and
1720 <filename>/sbin</filename>, respectively.
1721 The default for a binary installed
1722 under <filename>${exec_prefix}</filename> is
1723 <filename>/usr</filename>.
1724 </note>
1725 </para></listitem>
1726 <listitem><para><emphasis><filename>useless-rpaths:</filename></emphasis>
1727 Checks for dynamic library load paths (rpaths) in the binaries that
1728 by default on a standard system are searched by the linker (e.g.
1729 <filename>/lib</filename> and <filename>/usr/lib</filename>).
1730 While these paths will not cause any breakage, they do waste space and
1731 are unnecessary.</para></listitem>
1732 <listitem><para><emphasis><filename>var-undefined:</filename></emphasis>
1733 Reports when variables fundamental to packaging (i.e.
1734 <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>,
1735 <link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link>,
1736 <link linkend='var-D'><filename>D</filename></link>,
1737 <link linkend='var-PN'><filename>PN</filename></link>, and
1738 <link linkend='var-PKGD'><filename>PKGD</filename></link>) are
1739 undefined during
1740 <link linkend='ref-tasks-package'><filename>do_package</filename></link>.
1741 </para></listitem>
1742 <listitem><para><emphasis><filename>version-going-backwards:</filename></emphasis>
1743 If Build History is enabled, reports when a package
1744 being written out has a lower version than the previously
1745 written package under the same name.
1746 If you are placing output packages into a feed and
1747 upgrading packages on a target system using that feed, the
1748 version of a package going backwards can result in the target
1749 system not correctly upgrading to the "new" version of the
1750 package.
1751 <note>
1752 If you are not using runtime package management on your
1753 target system, then you do not need to worry about
1754 this situation.
1755 </note>
1756 </para></listitem>
1757 <listitem><para><emphasis><filename>xorg-driver-abi:</filename></emphasis>
1758 Checks that all packages containing Xorg drivers have ABI
1759 dependencies.
1760 The <filename>xserver-xorg</filename> recipe provides driver
1761 ABI names.
1762 All drivers should depend on the ABI versions that they have
1763 been built against.
1764 Driver recipes that include
1765 <filename>xorg-driver-input.inc</filename>
1766 or <filename>xorg-driver-video.inc</filename> will
1767 automatically get these versions.
1768 Consequently, you should only need to explicitly add
1769 dependencies to binary driver recipes.
1770 </para></listitem>
1771 </itemizedlist>
1772 </para>
1773</section>
1774
1775<section id='ref-classes-insserv'>
1776 <title><filename>insserv.bbclass</filename></title>
1777
1778 <para>
1779 The <filename>insserv</filename> class
1780 uses the <filename>insserv</filename> utility to update the order of
1781 symbolic links in <filename>/etc/rc?.d/</filename> within an image
1782 based on dependencies specified by LSB headers in the
1783 <filename>init.d</filename> scripts themselves.
1784 </para>
1785</section>
1786
1787<section id='ref-classes-kernel'>
1788 <title><filename>kernel.bbclass</filename></title>
1789
1790 <para>
1791 The <filename>kernel</filename> class handles building Linux kernels.
1792 The class contains code to build all kernel trees.
1793 All needed headers are staged into the
1794 <filename><link linkend='var-STAGING_KERNEL_DIR'>STAGING_KERNEL_DIR</link></filename>
1795 directory to allow out-of-tree module builds using
1796 the
1797 <link linkend='ref-classes-module'><filename>module</filename></link>
1798 class.
1799 </para>
1800
1801 <para>
1802 This means that each built kernel module is packaged separately and inter-module
1803 dependencies are created by parsing the <filename>modinfo</filename> output.
1804 If all modules are required, then installing the <filename>kernel-modules</filename>
1805 package installs all packages with modules and various other kernel packages
1806 such as <filename>kernel-vmlinux</filename>.
1807 </para>
1808
1809 <para>
1810 Various other classes are used by the <filename>kernel</filename>
1811 and <filename>module</filename> classes internally including the
1812 <link linkend='ref-classes-kernel-arch'><filename>kernel-arch</filename></link>,
1813 <link linkend='ref-classes-module-base'><filename>module-base</filename></link>,
1814 and
1815 <link linkend='ref-classes-linux-kernel-base'><filename>linux-kernel-base</filename></link>
1816 classes.
1817 </para>
1818</section>
1819
1820<section id='ref-classes-kernel-arch'>
1821 <title><filename>kernel-arch.bbclass</filename></title>
1822
1823 <para>
1824 The <filename>kernel-arch</filename> class
1825 sets the <filename>ARCH</filename> environment variable for Linux
1826 kernel compilation (including modules).
1827 </para>
1828</section>
1829
1830<section id='ref-classes-kernel-module-split'>
1831 <title><filename>kernel-module-split.bbclass</filename></title>
1832
1833 <para>
1834 The <filename>kernel-module-split</filename> class
1835 provides common functionality for splitting Linux kernel modules into
1836 separate packages.
1837 </para>
1838</section>
1839
1840<section id='ref-classes-kernel-yocto'>
1841 <title><filename>kernel-yocto.bbclass</filename></title>
1842
1843 <para>
1844 The <filename>kernel-yocto</filename> class
1845 provides common functionality for building from linux-yocto style
1846 kernel source repositories.
1847 </para>
1848</section>
1849
1850<section id='ref-classes-lib_package'>
1851 <title><filename>lib_package.bbclass</filename></title>
1852
1853 <para>
1854 The <filename>lib_package</filename> class
1855 supports recipes that build libraries and produce executable
1856 binaries, where those binaries should not be installed by default
1857 along with the library.
1858 Instead, the binaries are added to a separate
1859 <filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}-bin</filename>
1860 package to make their installation optional.
1861 </para>
1862</section>
1863
1864<section id='ref-classes-license'>
1865 <title><filename>license.bbclass</filename></title>
1866
1867 <para>
1868 The <filename>license</filename> class provides license
1869 manifest creation and license exclusion.
1870 This class is enabled by default using the default value for the
1871 <link linkend='var-INHERIT_DISTRO'><filename>INHERIT_DISTRO</filename></link>
1872 variable.
1873 </para>
1874</section>
1875
1876<section id='ref-classes-linux-kernel-base'>
1877 <title><filename>linux-kernel-base.bbclass</filename></title>
1878
1879 <para>
1880 The <filename>linux-kernel-base</filename> class
1881 provides common functionality for recipes that build out of the Linux
1882 kernel source tree.
1883 These builds goes beyond the kernel itself.
1884 For example, the Perf recipe also inherits this class.
1885 </para>
1886</section>
1887
1888<section id='ref-classes-logging'>
1889 <title><filename>logging.bbclass</filename></title>
1890
1891 <para>
1892 The <filename>logging</filename> class provides the standard
1893 shell functions used to log messages for various BitBake severity levels
1894 (i.e. <filename>bbplain</filename>, <filename>bbnote</filename>,
1895 <filename>bbwarn</filename>, <filename>bberror</filename>,
1896 <filename>bbfatal</filename>, and <filename>bbdebug</filename>).
1897 </para>
1898
1899 <para>
1900 This class is enabled by default since it is inherited by
1901 the <filename>base</filename> class.
1902 </para>
1903</section>
1904
1905<section id='ref-classes-meta'>
1906 <title><filename>meta.bbclass</filename></title>
1907
1908 <para>
1909 The <filename>meta</filename> class is inherited by recipes
1910 that do not build any output packages themselves, but act as a "meta"
1911 target for building other recipes.
1912 </para>
1913</section>
1914
1915<section id='ref-classes-metadata_scm'>
1916 <title><filename>metadata_scm.bbclass</filename></title>
1917
1918 <para>
1919 The <filename>metadata_scm</filename> class provides functionality for
1920 querying the branch and revision of a Source Code Manager (SCM)
1921 repository.
1922 </para>
1923
1924 <para>
1925 The <link linkend='ref-classes-base'><filename>base</filename></link>
1926 class uses this class to print the revisions of each layer before
1927 starting every build.
1928 The <filename>metadata_scm</filename> class is enabled by default
1929 because it is inherited by the <filename>base</filename> class.
1930 </para>
1931</section>
1932
1933<section id='ref-classes-mime'>
1934 <title><filename>mime.bbclass</filename></title>
1935
1936 <para>
1937 The <filename>mime</filename> class generates the proper
1938 post-install and post-remove (postinst/postrm) scriptlets for packages
1939 that install MIME type files.
1940 These scriptlets call <filename>update-mime-database</filename> to add
1941 the MIME types to the shared database.
1942 </para>
1943</section>
1944
1945<section id='ref-classes-mirrors'>
1946 <title><filename>mirrors.bbclass</filename></title>
1947
1948 <para>
1949 The <filename>mirrors</filename> class sets up some standard
1950 <link linkend='var-MIRRORS'><filename>MIRRORS</filename></link> entries
1951 for source code mirrors.
1952 These mirrors provide a fall-back path in case the upstream source
1953 specified in
1954 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
1955 within recipes is unavailable.
1956 </para>
1957
1958 <para>
1959 This class is enabled by default since it is inherited by the
1960 <link linkend='ref-classes-base'><filename>base</filename></link> class.
1961 </para>
1962</section>
1963
1964<section id='ref-classes-module'>
1965 <title><filename>module.bbclass</filename></title>
1966
1967 <para>
1968 The <filename>module</filename> class provides support for building
1969 out-of-tree Linux kernel modules.
1970 The class inherits the
1971 <link linkend='ref-classes-module-base'><filename>module-base</filename></link>
1972 and
1973 <link linkend='ref-classes-kernel-module-split'><filename>kernel-module-split</filename></link>
1974 classes, and implements the
1975 <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
1976 and
1977 <link linkend='ref-tasks-install'><filename>do_install</filename></link>
1978 tasks.
1979 The class provides everything needed to build and package a kernel
1980 module.
1981 </para>
1982
1983 <para>
1984 For general information on out-of-tree Linux kernel modules, see the
1985 "<ulink url='&YOCTO_DOCS_KERNEL_URL;#incorporating-out-of-tree-modules'>Incorporating Out-of-Tree Modules</ulink>"
1986 section in the Yocto Project Linux Kernel Development Manual.
1987 </para>
1988</section>
1989
1990<section id='ref-classes-module-base'>
1991 <title><filename>module-base.bbclass</filename></title>
1992
1993 <para>
1994 The <filename>module-base</filename> class provides the base
1995 functionality for building Linux kernel modules.
1996 Typically, a recipe that builds software that includes one or
1997 more kernel modules and has its own means of building
1998 the module inherits this class as opposed to inheriting the
1999 <link linkend='ref-classes-module'><filename>module</filename></link>
2000 class.
2001 </para>
2002</section>
2003
2004<section id='ref-classes-multilib*'>
2005 <title><filename>multilib*.bbclass</filename></title>
2006
2007 <para>
2008 The <filename>multilib*</filename> classes provide support
2009 for building libraries with different target optimizations or target
2010 architectures and installing them side-by-side in the same image.
2011 </para>
2012
2013 <para>
2014 For more information on using the Multilib feature, see the
2015 "<ulink url='&YOCTO_DOCS_DEV_URL;#combining-multiple-versions-library-files-into-one-image'>Combining Multiple Versions of Library Files into One Image</ulink>"
2016 section in the Yocto Project Development Manual.
2017 </para>
2018</section>
2019
2020<section id='ref-classes-native'>
2021 <title><filename>native.bbclass</filename></title>
2022
2023 <para>
2024 The <filename>native</filename> class provides common
2025 functionality for recipes that wish to build tools to run on the build
2026 host (i.e. tools that use the compiler or other tools from the
2027 build host).
2028 </para>
2029
2030 <para>
2031 You can create a recipe that builds tools that run natively on the
2032 host a couple different ways:
2033 <itemizedlist>
2034 <listitem><para>Create a <replaceable>myrecipe</replaceable><filename>-native.bb</filename>
2035 that inherits the <filename>native</filename> class.
2036 If you use this method, you must order the inherit statement
2037 in the recipe after all other inherit statements so that the
2038 <filename>native</filename> class is inherited last.
2039 </para></listitem>
2040 <listitem><para>Create or modify a target recipe that contains
2041 the following:
2042 <literallayout class='monospaced'>
2043 <link linkend='var-BBCLASSEXTEND'><filename>BBCLASSEXTEND</filename></link> = "native"
2044 </literallayout>
2045 Inside the recipe, use <filename>_class-native</filename> and
2046 <filename>_class-target</filename> overrides to specify any
2047 functionality specific to the respective native or target
2048 case.</para></listitem>
2049 </itemizedlist>
2050 </para>
2051
2052 <para>
2053 Although applied differently, the <filename>native</filename> class is
2054 used with both methods.
2055 The advantage of the second method is that you do not need to have two
2056 separate recipes (assuming you need both) for native and target.
2057 All common parts of the recipe are automatically shared.
2058 </para>
2059</section>
2060
2061<section id='ref-classes-nativesdk'>
2062 <title><filename>nativesdk.bbclass</filename></title>
2063
2064 <para>
2065 The <filename>nativesdk</filename> class provides common
2066 functionality for recipes that wish to build tools to run as part of
2067 an SDK (i.e. tools that run on
2068 <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>).
2069 </para>
2070
2071 <para>
2072 You can create a recipe that builds tools that run on the SDK machine
2073 a couple different ways:
2074 <itemizedlist>
2075 <listitem><para>Create a <replaceable>myrecipe</replaceable><filename>-nativesdk.bb</filename>
2076 recipe that inherits the <filename>nativesdk</filename> class.
2077 If you use this method, you must order the inherit statement
2078 in the recipe after all other inherit statements so that the
2079 <filename>nativesdk</filename> class is inherited last.
2080 </para></listitem>
2081 <listitem><para>Create a <filename>nativesdk</filename> variant
2082 of any recipe by adding the following:
2083 <literallayout class='monospaced'>
2084 <link linkend='var-BBCLASSEXTEND'><filename>BBCLASSEXTEND</filename></link> = "nativesdk"
2085 </literallayout>
2086 Inside the recipe, use <filename>_class-nativesdk</filename> and
2087 <filename>_class-target</filename> overrides to specify any
2088 functionality specific to the respective SDK machine or target
2089 case.</para></listitem>
2090 </itemizedlist>
2091 </para>
2092
2093 <para>
2094 Although applied differently, the <filename>nativesdk</filename> class
2095 is used with both methods.
2096 The advantage of the second method is that you do not need to have two
2097 separate recipes (assuming you need both) for the SDK machine and the
2098 target.
2099 All common parts of the recipe are automatically shared.
2100 </para>
2101</section>
2102
2103<section id='ref-classes-oelint'>
2104 <title><filename>oelint.bbclass</filename></title>
2105
2106 <para>
2107 The <filename>oelint</filename> class is an
2108 obsolete lint checking tool that exists in
2109 <filename>meta/classes</filename> in the
2110 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
2111 </para>
2112
2113 <para>
2114 A number of classes exist that are could be generally useful in
2115 OE-Core but are never actually used within OE-Core itself.
2116 The <filename>oelint</filename> class is one such example.
2117 However, being aware of this class can reduce the proliferation of
2118 different versions of similar classes across multiple layers.
2119 </para>
2120</section>
2121
2122<section id='ref-classes-own-mirrors'>
2123 <title><filename>own-mirrors.bbclass</filename></title>
2124
2125 <para>
2126 The <filename>own-mirrors</filename> class makes it
2127 easier to set up your own
2128 <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>
2129 from which to first fetch source before attempting to fetch it from the
2130 upstream specified in
2131 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
2132 within each recipe.
2133 </para>
2134
2135 <para>
2136 To use this class, inherit it globally and specify
2137 <link linkend='var-SOURCE_MIRROR_URL'><filename>SOURCE_MIRROR_URL</filename></link>.
2138 Here is an example:
2139 <literallayout class='monospaced'>
2140 INHERIT += "own-mirrors"
2141 SOURCE_MIRROR_URL = "http://example.com/my-source-mirror"
2142 </literallayout>
2143 You can specify only a single URL in
2144 <filename>SOURCE_MIRROR_URL</filename>.
2145 </para>
2146</section>
2147
2148<section id='ref-classes-package'>
2149 <title><filename>package.bbclass</filename></title>
2150
2151 <para>
2152 The <filename>package</filename> class supports generating
2153 packages from a build's output.
2154 The core generic functionality is in
2155 <filename>package.bbclass</filename>.
2156 The code specific to particular package types resides in these
2157 package-specific classes:
2158 <link linkend='ref-classes-package_deb'><filename>package_deb</filename></link>,
2159 <link linkend='ref-classes-package_rpm'><filename>package_rpm</filename></link>,
2160 <link linkend='ref-classes-package_ipk'><filename>package_ipk</filename></link>,
2161 and
2162 <link linkend='ref-classes-package_tar'><filename>package_tar</filename></link>.
2163 </para>
2164
2165 <para>
2166 You can control the list of resulting package formats by using the
2167 <filename><link linkend='var-PACKAGE_CLASSES'>PACKAGE_CLASSES</link></filename>
2168 variable defined in your <filename>conf/local.conf</filename>
2169 configuration file, which is located in the
2170 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
2171 When defining the variable, you can specify one or more package types.
2172 Since images are generated from packages, a packaging class is
2173 needed to enable image generation.
2174 The first class listed in this variable is used for image generation.
2175 </para>
2176
2177 <para>
2178 If you take the optional step to set up a repository (package feed)
2179 on the development host that can be used by Smart, you can
2180 install packages from the feed while you are running the image
2181 on the target (i.e. runtime installation of packages).
2182 For more information, see the
2183 "<ulink url='&YOCTO_DOCS_DEV_URL;#using-runtime-package-management'>Using Runtime Package Management</ulink>"
2184 section in the Yocto Project Development Manual.
2185 </para>
2186
2187 <para>
2188 The package-specific class you choose can affect build-time performance
2189 and has space ramifications.
2190 In general, building a package with IPK takes about thirty percent less
2191 time as compared to using RPM to build the same or similar package.
2192 This comparison takes into account a complete build of the package with
2193 all dependencies previously built.
2194 The reason for this discrepancy is because the RPM package manager
2195 creates and processes more
2196 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink> than the
2197 IPK package manager.
2198 Consequently, you might consider setting
2199 <filename>PACKAGE_CLASSES</filename> to "package_ipk" if you are
2200 building smaller systems.
2201 </para>
2202
2203 <para>
2204 Before making your package manager decision, however, you should
2205 consider some further things about using RPM:
2206 <itemizedlist>
2207 <listitem><para>
2208 RPM starts to provide more abilities than IPK due to
2209 the fact that it processes more Metadata.
2210 For example, this information includes individual file types,
2211 file checksum generation and evaluation on install, sparse file
2212 support, conflict detection and resolution for Multilib systems,
2213 ACID style upgrade, and repackaging abilities for rollbacks.
2214 </para></listitem>
2215 <listitem><para>
2216 For smaller systems, the extra space used for the Berkeley
2217 Database and the amount of metadata when using RPM can affect
2218 your ability to perform on-device upgrades.
2219 </para></listitem>
2220 </itemizedlist>
2221 </para>
2222
2223 <para>
2224 You can find additional information on the effects of the package
2225 class at these two Yocto Project mailing list links:
2226 <itemizedlist>
2227 <listitem><para><ulink url='&YOCTO_LISTS_URL;/pipermail/poky/2011-May/006362.html'>
2228 https://lists.yoctoproject.org/pipermail/poky/2011-May/006362.html</ulink></para></listitem>
2229 <listitem><para><ulink url='&YOCTO_LISTS_URL;/pipermail/poky/2011-May/006363.html'>
2230 https://lists.yoctoproject.org/pipermail/poky/2011-May/006363.html</ulink></para></listitem>
2231 </itemizedlist>
2232 </para>
2233</section>
2234
2235<section id='ref-classes-package_deb'>
2236 <title><filename>package_deb.bbclass</filename></title>
2237
2238 <para>
2239 The <filename>package_deb</filename> class
2240 provides support for creating packages that use the
2241 <filename>.deb</filename> file format.
2242 The class ensures the packages are written out to the
2243 <filename>${</filename><link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link><filename>}/deb</filename>
2244 directory in a <filename>.deb</filename> file format.
2245 </para>
2246
2247 <para>
2248 This class inherits the
2249 <link linkend='ref-classes-package'><filename>package</filename></link>
2250 class and is enabled through the
2251 <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
2252 variable in the <filename>local.conf</filename> file.
2253 </para>
2254</section>
2255
2256<section id='ref-classes-package_ipk'>
2257 <title><filename>package_ipk.bbclass</filename></title>
2258
2259 <para>
2260 The <filename>package_ipk</filename> class
2261 provides support for creating packages that use the
2262 <filename>.ipk</filename> file format.
2263 The class ensures the packages are written out to the
2264 <filename>${</filename><link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link><filename>}/ipk</filename>
2265 directory in a <filename>.ipk</filename> file format.
2266 </para>
2267
2268 <para>
2269 This class inherits the
2270 <link linkend='ref-classes-package'><filename>package</filename></link>
2271 class and is enabled through the
2272 <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
2273 variable in the <filename>local.conf</filename> file.
2274 </para>
2275</section>
2276
2277<section id='ref-classes-package_rpm'>
2278 <title><filename>package_rpm.bbclass</filename></title>
2279
2280 <para>
2281 The <filename>package_rpm</filename> class
2282 provides support for creating packages that use the
2283 <filename>.rpm</filename> file format.
2284 The class ensures the packages are written out to the
2285 <filename>${</filename><link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link><filename>}/rpm</filename>
2286 directory in a <filename>.rpm</filename> file format.
2287 </para>
2288
2289 <para>
2290 This class inherits the
2291 <link linkend='ref-classes-package'><filename>package</filename></link>
2292 class and is enabled through the
2293 <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
2294 variable in the <filename>local.conf</filename> file.
2295 </para>
2296</section>
2297
2298<section id='ref-classes-package_tar'>
2299 <title><filename>package_tar.bbclass</filename></title>
2300
2301 <para>
2302 The <filename>package_tar</filename>
2303 class provides support for creating packages that use the
2304 <filename>.tar</filename> file format.
2305 The class ensures the packages are written out to the
2306 <filename>${</filename><link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link><filename>}/tar</filename>
2307 directory in a <filename>.tar</filename> file format.
2308 </para>
2309
2310 <para>
2311 This class inherits the
2312 <link linkend='ref-classes-package'><filename>package</filename></link>
2313 class and is enabled through the
2314 <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
2315 variable in the <filename>local.conf</filename> file.
2316 <note>
2317 You cannot specify the <filename>package_tar</filename> class
2318 first using the <filename>PACKAGE_CLASSES</filename> variable.
2319 You must use <filename>.deb</filename>,
2320 <filename>.ipk</filename>, or <filename>.rpm</filename> file
2321 formats for your image or SDK.
2322 </note>
2323 </para>
2324</section>
2325
2326<section id='ref-classes-packagedata'>
2327 <title><filename>packagedata.bbclass</filename></title>
2328
2329 <para>
2330 The <filename>packagedata</filename> class provides
2331 common functionality for reading <filename>pkgdata</filename> files
2332 found in
2333 <link linkend='var-PKGDATA_DIR'><filename>PKGDATA_DIR</filename></link>.
2334 These files contain information about each output package produced by
2335 the OpenEmbedded build system.
2336 </para>
2337
2338 <para>
2339 This class is enabled by default because it is inherited by the
2340 <link linkend='ref-classes-package'><filename>package</filename></link>
2341 class.
2342 </para>
2343</section>
2344
2345<section id='ref-classes-packagegroup'>
2346 <title><filename>packagegroup.bbclass</filename></title>
2347
2348 <para>
2349 The <filename>packagegroup</filename> class sets default values
2350 appropriate for package group recipes (e.g.
2351 <filename><link linkend='var-PACKAGES'>PACKAGES</link></filename>,
2352 <filename><link linkend='var-PACKAGE_ARCH'>PACKAGE_ARCH</link></filename>,
2353 <filename><link linkend='var-ALLOW_EMPTY'>ALLOW_EMPTY</link></filename>,
2354 and so forth).
2355 It is highly recommended that all package group recipes inherit this class.
2356 </para>
2357
2358 <para>
2359 For information on how to use this class, see the
2360 "<ulink url='&YOCTO_DOCS_DEV_URL;#usingpoky-extend-customimage-customtasks'>Customizing Images Using Custom Package Groups</ulink>"
2361 section in the Yocto Project Development Manual.
2362 </para>
2363
2364 <para>
2365 Previously, this class was called the <filename>task</filename> class.
2366 </para>
2367</section>
2368
2369<section id='ref-classes-packageinfo'>
2370 <title><filename>packageinfo.bbclass</filename></title>
2371
2372 <para>
2373 The <filename>packageinfo</filename> class
2374 gives a BitBake user interface the ability to retrieve information
2375 about output packages from the <filename>pkgdata</filename> files.
2376 </para>
2377
2378 <para>
2379 This class is enabled automatically when using the
2380 <ulink url='&YOCTO_HOME_URL;/tools-resources/projects/hob'>Hob</ulink>
2381 user interface.
2382 </para>
2383</section>
2384
2385<section id='ref-classes-patch'>
2386 <title><filename>patch.bbclass</filename></title>
2387
2388 <para>
2389 The <filename>patch</filename> class provides all functionality for
2390 applying patches during the
2391 <link linkend='ref-tasks-patch'><filename>do_patch</filename></link>
2392 task.
2393 </para>
2394
2395 <para>
2396 This class is enabled by default because it is inherited by the
2397 <link linkend='ref-classes-base'><filename>base</filename></link>
2398 class.
2399 </para>
2400</section>
2401
2402<section id='ref-classes-perlnative'>
2403 <title><filename>perlnative.bbclass</filename></title>
2404
2405 <para>
2406 When inherited by a recipe, the <filename>perlnative</filename> class
2407 supports using the native version of Perl built by the build system
2408 rather than using the version provided by the build host.
2409 </para>
2410</section>
2411
2412<section id='ref-classes-pixbufcache'>
2413 <title><filename>pixbufcache.bbclass</filename></title>
2414
2415 <para>
2416 The <filename>pixbufcache</filename> class generates the proper
2417 post-install and post-remove (postinst/postrm) scriptlets for packages
2418 that install pixbuf loaders, which are used with
2419 <filename>gdk-pixbuf</filename>.
2420 These scriptlets call <filename>update_pixbuf_cache</filename>
2421 to add the pixbuf loaders to the cache.
2422 Since the cache files are architecture-specific,
2423 <filename>update_pixbuf_cache</filename> is run using QEMU if the
2424 postinst scriptlets need to be run on the build host during image
2425 creation.
2426 </para>
2427
2428 <para>
2429 If the pixbuf loaders being installed are in packages other
2430 than the recipe's main package, set
2431 <link linkend='var-PIXBUF_PACKAGES'><filename>PIXBUF_PACKAGES</filename></link>
2432 to specify the packages containing the loaders.
2433 </para>
2434</section>
2435
2436<section id='ref-classes-pkgconfig'>
2437 <title><filename>pkgconfig.bbclass</filename></title>
2438
2439 <para>
2440 The <filename>pkg-config</filename> class provides a standard way to get
2441 header and library information.
2442 This class aims to smooth integration of
2443 <filename>pkg-config</filename> into libraries that use it.
2444 </para>
2445
2446 <para>
2447 During staging, BitBake installs <filename>pkg-config</filename> data into the
2448 <filename>sysroots/</filename> directory.
2449 By making use of sysroot functionality within <filename>pkg-config</filename>,
2450 this class no longer has to manipulate the files.
2451 </para>
2452</section>
2453
2454<section id='ref-classes-populate-sdk'>
2455 <title><filename>populate_sdk.bbclass</filename></title>
2456
2457 <para>
2458 The <filename>populate_sdk</filename> class provides support for
2459 SDK-only recipes.
2460 For information on advantages gained when building a cross-development
2461 toolchain using the
2462 <link linkend='ref-tasks-populate_sdk'><filename>do_populate_sdk</filename></link>
2463 task, see the
2464 "<ulink url='&YOCTO_DOCS_ADT_URL;#optionally-building-a-toolchain-installer'>Optionally Building a Toolchain Installer</ulink>"
2465 section in the Yocto Project Application Developer's Guide.
2466 </para>
2467</section>
2468
2469<section id='ref-classes-populate-sdk-*'>
2470 <title><filename>populate_sdk_*.bbclass</filename></title>
2471
2472 <para>
2473 The <filename>populate_sdk_*</filename> classes support SDK creation
2474 and consist of the following classes:
2475 <itemizedlist>
2476 <listitem><para><emphasis><filename>populate_sdk_base</filename>:</emphasis>
2477 The base class supporting SDK creation under all package
2478 managers (i.e. DEB, RPM, and opkg).</para></listitem>
2479 <listitem><para><emphasis><filename>populate_sdk_deb</filename>:</emphasis>
2480 Supports creation of the SDK given the Debian package manager.
2481 </para></listitem>
2482 <listitem><para><emphasis><filename>populate_sdk_rpm</filename>:</emphasis>
2483 Supports creation of the SDK given the RPM package manager.
2484 </para></listitem>
2485 <listitem><para><emphasis><filename>populate_sdk_ipk</filename>:</emphasis>
2486 Supports creation of the SDK given the opkg (IPK format)
2487 package manager.
2488 </para></listitem>
2489 </itemizedlist>
2490 </para>
2491
2492 <para>
2493 The <filename>populate_sdk_base</filename> class inherits the
2494 appropriate <filename>populate_sdk_*</filename> (i.e.
2495 <filename>deb</filename>, <filename>rpm</filename>, and
2496 <filename>ipk</filename>) based on
2497 <link linkend='var-IMAGE_PKGTYPE'><filename>IMAGE_PKGTYPE</filename></link>.
2498 </para>
2499
2500 <para>
2501 The base class ensures all source and destination directories are
2502 established and then populates the SDK.
2503 After populating the SDK, the <filename>populate_sdk_base</filename>
2504 class constructs two sysroots:
2505 <filename>${</filename><link linkend='var-SDK_ARCH'><filename>SDK_ARCH</filename></link><filename>}-nativesdk</filename>,
2506 which contains the cross-compiler and associated tooling, and the
2507 target, which contains a target root filesystem that is configured for
2508 the SDK usage.
2509 These two images reside in
2510 <link linkend='var-SDK_OUTPUT'><filename>SDK_OUTPUT</filename></link>,
2511 which consists of the following:
2512 <literallayout class='monospaced'>
2513 ${SDK_OUTPUT}/${SDK_ARCH}<replaceable>-nativesdk-pkgs</replaceable>
2514 ${SDK_OUTPUT}/${SDKTARGETSYSROOT}/<replaceable>target-pkgs</replaceable>
2515 </literallayout>
2516 </para>
2517
2518 <para>
2519 Finally, the base populate SDK class creates the toolchain
2520 environment setup script, the tarball of the SDK, and the installer.
2521 </para>
2522
2523 <para>
2524 The respective <filename>populate_sdk_deb</filename>,
2525 <filename>populate_sdk_rpm</filename>, and
2526 <filename>populate_sdk_ipk</filename> classes each support the
2527 specific type of SDK.
2528 These classes are inherited by and used with the
2529 <filename>populate_sdk_base</filename> class.
2530 </para>
2531
2532 <para>
2533 For more information on the cross-development toolchain
2534 generation, see the
2535 "<link linkend='cross-development-toolchain-generation'>Cross-Development Toolchain Generation</link>"
2536 section.
2537 For information on advantages gained when building a
2538 cross-development toolchain using the
2539 <link linkend='ref-tasks-populate_sdk'><filename>do_populate_sdk</filename></link>
2540 task, see the
2541 "<ulink url='&YOCTO_DOCS_ADT_URL;#optionally-building-a-toolchain-installer'>Optionally Building a Toolchain Installer</ulink>"
2542 section in the Yocto Project Application Developer's Guide.
2543 </para>
2544</section>
2545
2546<section id='ref-classes-prexport'>
2547 <title><filename>prexport.bbclass</filename></title>
2548
2549 <para>
2550 The <filename>prexport</filename> class provides functionality for
2551 exporting
2552 <link linkend='var-PR'><filename>PR</filename></link> values.
2553 <note>
2554 This class is not intended to be used directly.
2555 Rather, it is enabled when using
2556 "<filename>bitbake-prserv-tool export</filename>".
2557 </note>
2558 </para>
2559</section>
2560
2561<section id='ref-classes-primport'>
2562 <title><filename>primport.bbclass</filename></title>
2563
2564 <para>
2565 The <filename>primport</filename> class provides functionality for
2566 importing
2567 <link linkend='var-PR'><filename>PR</filename></link> values.
2568 <note>
2569 This class is not intended to be used directly.
2570 Rather, it is enabled when using
2571 "<filename>bitbake-prserv-tool import</filename>".
2572 </note>
2573 </para>
2574</section>
2575
2576<section id='ref-classes-prserv'>
2577 <title><filename>prserv.bbclass</filename></title>
2578
2579 <para>
2580 The <filename>prserv</filename> class provides functionality for
2581 using a
2582 <ulink url='&YOCTO_DOCS_DEV_URL;#working-with-a-pr-service'>PR service</ulink>
2583 in order to automatically manage the incrementing of the
2584 <link linkend='var-PR'><filename>PR</filename></link> variable for
2585 each recipe.
2586 </para>
2587
2588 <para>
2589 This class is enabled by default because it is inherited by the
2590 <link linkend='ref-classes-package'><filename>package</filename></link>
2591 class.
2592 However, the OpenEmbedded build system will not enable the
2593 functionality of this class unless
2594 <link linkend='var-PRSERV_HOST'><filename>PRSERV_HOST</filename></link>
2595 has been set.
2596 </para>
2597</section>
2598
2599<section id='ref-classes-ptest'>
2600 <title><filename>ptest.bbclass</filename></title>
2601
2602 <para>
2603 The <filename>ptest</filename> class provides functionality for
2604 packaging and installing runtime tests for recipes that build software
2605 that provides these tests.
2606 </para>
2607
2608 <para>
2609 This class is intended to be inherited by individual recipes.
2610 However, the class' functionality is largely disabled unless "ptest"
2611 appears in
2612 <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.
2613 See the
2614 "<ulink url='&YOCTO_DOCS_DEV_URL;#testing-packages-with-ptest'>Testing Packages With ptest</ulink>"
2615 section in the Yocto Project Development Manual for more information
2616 on ptest.
2617 </para>
2618</section>
2619
2620<section id='ref-classes-ptest-gnome'>
2621 <title><filename>ptest-gnome.bbclass</filename></title>
2622
2623 <para>
2624 Enables package tests (ptests) specifically for GNOME packages,
2625 which have tests intended to be executed with
2626 <filename>gnome-desktop-testing</filename>.
2627 </para>
2628
2629 <para>
2630 For information on setting up and running ptests, see the
2631 "<ulink url='&YOCTO_DOCS_DEV_URL;#testing-packages-with-ptest'>Testing Packages With ptest</ulink>"
2632 section in the Yocto Project Development Manual.
2633 </para>
2634</section>
2635
2636<section id='ref-classes-python-dir'>
2637 <title><filename>python-dir.bbclass</filename></title>
2638
2639 <para>
2640 The <filename>python-dir</filename> class provides the base version,
2641 location, and site package location for Python.
2642 </para>
2643</section>
2644
2645<section id='ref-classes-pythonnative'>
2646 <title><filename>pythonnative.bbclass</filename></title>
2647
2648 <para>
2649 When inherited by a recipe, the <filename>pythonnative</filename> class
2650 supports using the native version of Python built by the build system
2651 rather than using the version provided by the build host.
2652 </para>
2653</section>
2654
2655<section id='ref-classes-qemu'>
2656 <title><filename>qemu.bbclass</filename></title>
2657
2658 <para>
2659 The <filename>qemu</filename> class provides functionality for recipes
2660 that either need QEMU or test for the existence of QEMU.
2661 Typically, this class is used to run programs for a target system on
2662 the build host using QEMU's application emulation mode.
2663 </para>
2664</section>
2665
2666<section id='ref-classes-qmake*'>
2667 <title><filename>qmake*.bbclass</filename></title>
2668
2669 <para>
2670 The <filename>qmake*</filename> classes support recipes that
2671 need to build software that uses Qt's <filename>qmake</filename>
2672 build system and are comprised of the following:
2673 <itemizedlist>
2674 <listitem><para><emphasis><filename>qmake_base</filename>:</emphasis>
2675 Provides base functionality for all versions of
2676 <filename>qmake</filename>.</para></listitem>
2677 <listitem><para><emphasis><filename>qmake2</filename>:</emphasis>
2678 Extends base functionality for <filename>qmake</filename> 2.x as
2679 used by Qt 4.x.</para></listitem>
2680 </itemizedlist>
2681 </para>
2682
2683 <para>
2684 If you need to set any configuration variables or pass any options to
2685 <filename>qmake</filename>, you can add these to the
2686 <link linkend='var-EXTRA_QMAKEVARS_PRE'><filename>EXTRA_QMAKEVARS_PRE</filename></link>
2687 or
2688 <link linkend='var-EXTRA_QMAKEVARS_POST'><filename>EXTRA_QMAKEVARS_POST</filename></link>
2689 variables, depending on whether the arguments need to be before or
2690 after the <filename>.pro</filename> file list on the command line,
2691 respectively.
2692 </para>
2693
2694 <para>
2695 By default, all <filename>.pro</filename> files are built.
2696 If you want to specify your own subset of <filename>.pro</filename>
2697 files to be built, specify them in the
2698 <link linkend='var-QMAKE_PROFILES'><filename>QMAKE_PROFILES</filename></link>
2699 variable.
2700 </para>
2701</section>
2702
2703<section id='ref-classes-qt4*'>
2704 <title><filename>qt4*.bbclass</filename></title>
2705
2706 <para>
2707 The <filename>qt4*</filename> classes support recipes that need to
2708 build software that uses the Qt development framework version 4.x
2709 and consist of the following:
2710 <itemizedlist>
2711 <listitem><para><emphasis><filename>qt4e</filename>:</emphasis>
2712 Supports building against Qt/Embedded, which uses the
2713 framebuffer for graphical output.</para></listitem>
2714 <listitem><para><emphasis><filename>qt4x11</filename>:</emphasis>
2715 Supports building against Qt/X11.</para></listitem>
2716 </itemizedlist>
2717 </para>
2718
2719 <para>
2720 The classes inherit the
2721 <link linkend='ref-classes-qmake*'><filename>qmake2</filename></link>
2722 class.
2723 </para>
2724</section>
2725
2726<section id='ref-classes-relocatable'>
2727 <title><filename>relocatable.bbclass</filename></title>
2728
2729 <para>
2730 The <filename>relocatable</filename> class enables relocation of
2731 binaries when they are installed into the sysroot.
2732 </para>
2733
2734 <para>
2735 This class makes use of the
2736 <link linkend='ref-classes-chrpath'><filename>chrpath</filename></link>
2737 class and is used by both the
2738 <link linkend='ref-classes-cross'><filename>cross</filename></link>
2739 and
2740 <link linkend='ref-classes-native'><filename>native</filename></link>
2741 classes.
2742 </para>
2743</section>
2744
2745<section id='ref-classes-report-error'>
2746 <title><filename>report-error.bbclass</filename></title>
2747
2748 <para>
2749 The <filename>report-error</filename> class supports enabling the
2750 <ulink url='&YOCTO_DOCS_DEV_URL;#using-the-error-reporting-tool'>error reporting tool</ulink>,
2751 which allows you to submit build error information to a central
2752 database.
2753 </para>
2754
2755 <para>
2756 The class collects debug information for recipe, recipe version, task,
2757 machine, distro, build system, target system, host distro, branch,
2758 commit, and log.
2759 From the information, report files using a JSON format are created and
2760 stored in
2761 <filename>${</filename><link linkend='var-LOG_DIR'><filename>LOG_DIR</filename></link><filename>}/error-report</filename>.
2762 </para>
2763</section>
2764
2765<section id='ref-classes-rm-work'>
2766 <title><filename>rm_work.bbclass</filename></title>
2767
2768 <para>
2769 The <filename>rm_work</filename> class supports deletion of temporary
2770 workspace, which can ease your hard drive demands during builds.
2771 </para>
2772
2773 <para>
2774 The OpenEmbedded build system can use a substantial amount of disk
2775 space during the build process.
2776 A portion of this space is the work files under the
2777 <filename>${TMPDIR}/work</filename> directory for each recipe.
2778 Once the build system generates the packages for a recipe, the work
2779 files for that recipe are no longer needed.
2780 However, by default, the build system preserves these files
2781 for inspection and possible debugging purposes.
2782 If you would rather have these files deleted to save disk space
2783 as the build progresses, you can enable <filename>rm_work</filename>
2784 by adding the following to your <filename>local.conf</filename> file,
2785 which is found in the
2786 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
2787 <literallayout class='monospaced'>
2788 INHERIT += "rm_work"
2789 </literallayout>
2790 If you are modifying and building source code out of the work directory
2791 for a recipe, enabling <filename>rm_work</filename> will potentially
2792 result in your changes to the source being lost.
2793 To exclude some recipes from having their work directories deleted by
2794 <filename>rm_work</filename>, you can add the names of the recipe or
2795 recipes you are working on to the <filename>RM_WORK_EXCLUDE</filename>
2796 variable, which can also be set in your <filename>local.conf</filename>
2797 file.
2798 Here is an example:
2799 <literallayout class='monospaced'>
2800 RM_WORK_EXCLUDE += "busybox glibc"
2801 </literallayout>
2802 </para>
2803</section>
2804
2805<section id='ref-classes-rootfs*'>
2806 <title><filename>rootfs*.bbclass</filename></title>
2807
2808 <para>
2809 The <filename>rootfs*</filename> classes support creating
2810 the root filesystem for an image and consist of the following classes:
2811 <itemizedlist>
2812 <listitem><para>
2813 The <filename>rootfs_deb</filename> class, which supports
2814 creation of root filesystems for images built using
2815 <filename>.deb</filename> packages.</para></listitem>
2816 <listitem><para>
2817 The <filename>rootfs_rpm</filename> class, which supports
2818 creation of root filesystems for images built using
2819 <filename>.rpm</filename> packages.</para></listitem>
2820 <listitem><para>
2821 The <filename>rootfs_ipk</filename> class, which supports
2822 creation of root filesystems for images built using
2823 <filename>.ipk</filename> packages.</para></listitem>
2824 </itemizedlist>
2825 </para>
2826
2827 <para>
2828 The root filesystem is created from packages using one of the
2829 <filename>rootfs*.bbclass</filename> files as determined by the
2830 <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
2831 variable.
2832 </para>
2833
2834 <para>
2835 For information on how root filesystem images are created, see the
2836 "<link linkend='image-generation-dev-environment'>Image Generation</link>"
2837 section.
2838 </para>
2839</section>
2840
2841<section id='ref-classes-sanity'>
2842 <title><filename>sanity.bbclass</filename></title>
2843
2844 <para>
2845 The <filename>sanity</filename> class checks to see if prerequisite
2846 software is present on the host system so that users can be notified
2847 of potential problems that might affect their build.
2848 The class also performs basic user configuration checks from
2849 the <filename>local.conf</filename> configuration file to
2850 prevent common mistakes that cause build failures.
2851 Distribution policy usually determines whether to include this class.
2852 </para>
2853</section>
2854
2855<section id='ref-classes-scons'>
2856 <title><filename>scons.bbclass</filename></title>
2857
2858 <para>
2859 The <filename>scons</filename> class supports recipes that need to
2860 build software that uses the SCons build system.
2861 You can use the
2862 <link linkend='var-EXTRA_OESCONS'><filename>EXTRA_OESCONS</filename></link>
2863 variable to specify additional configuration options you want to pass
2864 SCons command line.
2865 </para>
2866</section>
2867
2868<section id='ref-classes-sdl'>
2869 <title><filename>sdl.bbclass</filename></title>
2870
2871 <para>
2872 The <filename>sdl</filename> class supports recipes that need to build
2873 software that uses the Simple DirectMedia Layer (SDL) library.
2874 </para>
2875</section>
2876
2877<section id='ref-classes-setuptools'>
2878 <title><filename>setuptools.bbclass</filename></title>
2879
2880 <para>
2881 The <filename>setuptools</filename> class supports Python
2882 version 2.x extensions that use build systems based on
2883 <filename>setuptools</filename>.
2884 If your recipe uses these build systems, the recipe needs to
2885 inherit the <filename>setuptools</filename> class.
2886 </para>
2887</section>
2888
2889<section id='ref-classes-setuptools3'>
2890 <title><filename>setuptools3.bbclass</filename></title>
2891
2892 <para>
2893 The <filename>setuptools3</filename> class supports Python
2894 version 3.x extensions that use build systems based on
2895 <filename>setuptools3</filename>.
2896 If your recipe uses these build systems, the recipe needs to
2897 inherit the <filename>setuptools3</filename> class.
2898 </para>
2899</section>
2900
2901<section id='ref-classes-sip'>
2902 <title><filename>sip.bbclass</filename></title>
2903
2904 <para>
2905 The <filename>sip</filename> class
2906 supports recipes that build or package SIP-based Python bindings.
2907 </para>
2908</section>
2909
2910<section id='ref-classes-siteconfig'>
2911 <title><filename>siteconfig.bbclass</filename></title>
2912
2913 <para>
2914 The <filename>siteconfig</filename> class
2915 provides functionality for handling site configuration.
2916 The class is used by the
2917 <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
2918 class to accelerate the
2919 <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
2920 task.
2921 </para>
2922</section>
2923
2924<section id='ref-classes-siteinfo'>
2925 <title><filename>siteinfo.bbclass</filename></title>
2926
2927 <para>
2928 The <filename>siteinfo</filename> class provides information about
2929 the targets that might be needed by other classes or recipes.
2930 </para>
2931
2932 <para>
2933 As an example, consider Autotools, which can require tests that must
2934 execute on the target hardware.
2935 Since this is not possible in general when cross compiling, site
2936 information is used to provide cached test results so these tests can
2937 be skipped over but still make the correct values available.
2938 The
2939 <filename><link linkend='structure-meta-site'>meta/site directory</link></filename>
2940 contains test results sorted into different categories such as
2941 architecture, endianness, and the <filename>libc</filename> used.
2942 Site information provides a list of files containing data relevant to
2943 the current build in the
2944 <filename><link linkend='var-CONFIG_SITE'>CONFIG_SITE</link></filename> variable
2945 that Autotools automatically picks up.
2946 </para>
2947
2948 <para>
2949 The class also provides variables like
2950 <filename><link linkend='var-SITEINFO_ENDIANNESS'>SITEINFO_ENDIANNESS</link></filename>
2951 and <filename><link linkend='var-SITEINFO_BITS'>SITEINFO_BITS</link></filename>
2952 that can be used elsewhere in the metadata.
2953 </para>
2954
2955 <para>
2956 Because the
2957 <link linkend='ref-classes-base'><filename>base</filename></link> class
2958 includes the <filename>siteinfo</filename> class, it is always active.
2959 </para>
2960</section>
2961
2962<section id='ref-classes-spdx'>
2963 <title><filename>spdx.bbclass</filename></title>
2964
2965 <para>
2966 The <filename>spdx</filename> class integrates real-time license
2967 scanning, generation of SPDX standard output, and verification
2968 of license information during the build.
2969 <note>
2970 This class is currently at the prototype stage in the 1.6
2971 release.
2972 </note>
2973 </para>
2974</section>
2975
2976<section id='ref-classes-sstate'>
2977 <title><filename>sstate.bbclass</filename></title>
2978
2979 <para>
2980 The <filename>sstate</filename> class provides support for Shared
2981 State (sstate).
2982 By default, the class is enabled through the
2983 <link linkend='var-INHERIT_DISTRO'><filename>INHERIT_DISTRO</filename></link>
2984 variable's default value.
2985 </para>
2986
2987 <para>
2988 For more information on sstate, see the
2989 "<link linkend='shared-state-cache'>Shared State Cache</link>"
2990 section.
2991 </para>
2992</section>
2993
2994<section id='ref-classes-staging'>
2995 <title><filename>staging.bbclass</filename></title>
2996
2997 <para>
2998 The <filename>staging</filename> class provides support for staging
2999 files into the sysroot during the
3000 <link linkend='ref-tasks-populate_sysroot'><filename>do_populate_sysroot</filename></link>
3001 task.
3002 The class is enabled by default because it is inherited by the
3003 <link linkend='ref-classes-base'><filename>base</filename></link>
3004 class.
3005 </para>
3006</section>
3007
3008<section id='ref-classes-syslinux'>
3009 <title><filename>syslinux.bbclass</filename></title>
3010
3011 <para>
3012 The <filename>syslinux</filename> class provides syslinux-specific
3013 functions for building bootable images.
3014 </para>
3015
3016 <para>
3017 The class supports the following variables:
3018 <itemizedlist>
3019 <listitem><para><link linkend='var-INITRD'><filename>INITRD</filename></link>:
3020 Indicates list of filesystem images to concatenate and use as
3021 an initial RAM disk (initrd).
3022 This variable is optional.</para></listitem>
3023 <listitem><para><link linkend='var-ROOTFS'><filename>ROOTFS</filename></link>:
3024 Indicates a filesystem image to include as the root filesystem.
3025 This variable is optional.</para></listitem>
3026 <listitem><para><link linkend='var-AUTO_SYSLINUXMENU'><filename>AUTO_SYSLINUXMENU</filename></link>:
3027 Enables creating an automatic menu when set to "1".
3028 </para></listitem>
3029 <listitem><para><link linkend='var-LABELS'><filename>LABELS</filename></link>:
3030 Lists targets for automatic configuration.
3031 </para></listitem>
3032 <listitem><para><link linkend='var-APPEND'><filename>APPEND</filename></link>:
3033 Lists append string overrides for each label.
3034 </para></listitem>
3035 <listitem><para><link linkend='var-SYSLINUX_OPTS'><filename>SYSLINUX_OPTS</filename></link>:
3036 Lists additional options to add to the syslinux file.
3037 Semicolon characters separate multiple options.
3038 </para></listitem>
3039 <listitem><para><link linkend='var-SYSLINUX_SPLASH'><filename>SYSLINUX_SPLASH</filename></link>:
3040 Lists a background for the VGA boot menu when you are using the
3041 boot menu.</para></listitem>
3042 <listitem><para><link linkend='var-SYSLINUX_DEFAULT_CONSOLE'><filename>SYSLINUX_DEFAULT_CONSOLE</filename></link>:
3043 Set to "console=ttyX" to change kernel boot default console.
3044 </para></listitem>
3045 <listitem><para><link linkend='var-SYSLINUX_SERIAL'><filename>SYSLINUX_SERIAL</filename></link>:
3046 Sets an alternate serial port.
3047 Or, turns off serial when the variable is set with an
3048 empty string.</para></listitem>
3049 <listitem><para><link linkend='var-SYSLINUX_SERIAL_TTY'><filename>SYSLINUX_SERIAL_TTY</filename></link>:
3050 Sets an alternate "console=tty..." kernel boot argument.
3051 </para></listitem>
3052 </itemizedlist>
3053 </para>
3054</section>
3055
3056<section id='ref-classes-systemd'>
3057 <title><filename>systemd.bbclass</filename></title>
3058
3059 <para>
3060 The <filename>systemd</filename> class provides support for recipes
3061 that install systemd unit files.
3062 </para>
3063
3064 <para>
3065 The functionality for this class is disabled unless you have "systemd"
3066 in
3067 <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.
3068 </para>
3069
3070 <para>
3071 Under this class, the recipe or Makefile (i.e. whatever the recipe is
3072 calling during the
3073 <link linkend='ref-tasks-install'><filename>do_install</filename></link>
3074 task) installs unit files into
3075 <filename>${</filename><link linkend='var-D'><filename>D</filename></link><filename>}${systemd_unitdir}/system</filename>.
3076 If the unit files being installed go into packages other than the
3077 main package, you need to set
3078 <link linkend='var-SYSTEMD_PACKAGES'><filename>SYSTEMD_PACKAGES</filename></link>
3079 in your recipe to identify the packages in which the files will be
3080 installed.
3081 </para>
3082
3083 <para>
3084 You should set
3085 <link linkend='var-SYSTEMD_SERVICE'><filename>SYSTEMD_SERVICE</filename></link>
3086 to the name of the service file.
3087 You should also use a package name override to indicate the package
3088 to which the value applies.
3089 If the value applies to the recipe's main package, use
3090 <filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}</filename>.
3091 Here is an example from the connman recipe:
3092 <literallayout class='monospaced'>
3093 SYSTEMD_SERVICE_${PN} = "connman.service"
3094 </literallayout>
3095 Services are set up to start on boot automatically unless
3096 you have set
3097 <link linkend='var-SYSTEMD_AUTO_ENABLE'><filename>SYSTEMD_AUTO_ENABLE</filename></link>
3098 to "disable".
3099 </para>
3100
3101 <para>
3102 For more information on <filename>systemd</filename>, see the
3103 "<ulink url='&YOCTO_DOCS_DEV_URL;#selecting-an-initialization-manager'>Selecting an Initialization Manager</ulink>"
3104 section in the Yocto Project Development Manual.
3105 </para>
3106</section>
3107
3108<section id='ref-classes-terminal'>
3109 <title><filename>terminal.bbclass</filename></title>
3110
3111 <para>
3112 The <filename>terminal</filename> class provides support for starting
3113 a terminal session.
3114 The
3115 <link linkend='var-OE_TERMINAL'><filename>OE_TERMINAL</filename></link>
3116 variable controls which terminal emulator is used for the session.
3117 </para>
3118
3119 <para>
3120 Other classes use the <filename>terminal</filename> class anywhere a
3121 separate terminal session needs to be started.
3122 For example, the
3123 <link linkend='ref-classes-patch'><filename>patch</filename></link>
3124 class assuming
3125 <link linkend='var-PATCHRESOLVE'><filename>PATCHRESOLVE</filename></link>
3126 is set to "user", the
3127 <link linkend='ref-classes-cml1'><filename>cml1</filename></link>
3128 class, and the
3129 <link linkend='ref-classes-devshell'><filename>devshell</filename></link>
3130 class all use the <filename>terminal</filename> class.
3131 </para>
3132</section>
3133
3134<section id='ref-classes-testimage'>
3135 <title><filename>testimage.bbclass</filename></title>
3136
3137 <para>
3138 The <filename>testimage</filename> class supports running automated
3139 tests against images using QEMU and on actual hardware.
3140 The class handles loading the tests and starting the image.
3141 </para>
3142
3143 <para>
3144 To use the class, you need to perform steps to set up the
3145 environment.
3146 The tests are commands that run on the target system over
3147 <filename>ssh</filename>.
3148 they are written in Python and make use of the
3149 <filename>unittest</filename> module.
3150 </para>
3151
3152 <para>
3153 For information on how to enable, run, and create new tests, see the
3154 "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
3155 section.
3156 </para>
3157</section>
3158
3159<section id='ref-classes-texinfo'>
3160 <title><filename>texinfo.bbclass</filename></title>
3161
3162 <para>
3163 This class should be inherited by recipes whose upstream packages
3164 invoke the <filename>texinfo</filename> utilities at build-time.
3165 Native and cross recipes are made to use the dummy scripts provided
3166 by <filename>texinfo-dummy-native</filename>, for improved performance.
3167 Target architecture recipes use the genuine
3168 Texinfo utilities.
3169 By default, they use the Texinfo utilities on the host system.
3170 <note>
3171 If you want to use the Texinfo recipe shipped with the build
3172 system, you can remove "texinfo-native" from
3173 <link linkend='var-ASSUME_PROVIDED'><filename>ASSUME_PROVIDED</filename></link>
3174 and makeinfo from
3175 <link linkend='var-SANITY_REQUIRED_UTILITIES'><filename>SANITY_REQUIRED_UTILITIES</filename></link>.
3176 </note>
3177 </para>
3178</section>
3179
3180<section id='ref-classes-tinderclient'>
3181 <title><filename>tinderclient.bbclass</filename></title>
3182
3183 <para>
3184 The <filename>tinderclient</filename> class submits build results to
3185 an external Tinderbox instance.
3186 <note>
3187 This class is currently unmaintained.
3188 </note>
3189 </para>
3190</section>
3191
3192<section id='ref-classes-toaster'>
3193 <title><filename>toaster.bbclass</filename></title>
3194
3195 <para>
3196 The <filename>toaster</filename> class collects information about
3197 packages and images and sends them as events that the BitBake
3198 user interface can receive.
3199 The class is enabled when the Toaster user interface is running.
3200 </para>
3201
3202 <para>
3203 This class is not intended to be used directly.
3204 </para>
3205</section>
3206
3207<section id='ref-classes-toolchain-scripts'>
3208 <title><filename>toolchain-scripts.bbclass</filename></title>
3209
3210 <para>
3211 The <filename>toolchain-scripts</filename> class provides the scripts
3212 used for setting up the environment for installed SDKs.
3213 </para>
3214</section>
3215
3216<section id='ref-classes-typecheck'>
3217 <title><filename>typecheck.bbclass</filename></title>
3218
3219 <para>
3220 The <filename>typecheck</filename> class provides support for
3221 validating the values of variables set at the configuration level
3222 against their defined types.
3223 The OpenEmbedded build system allows you to define the type of a
3224 variable using the "type" varflag.
3225 Here is an example:
3226 <literallayout class='monospaced'>
3227 IMAGE_FEATURES[type] = "list"
3228 </literallayout>
3229 </para>
3230</section>
3231
3232<section id='ref-classes-uboot-config'>
3233 <title><filename>uboot-config.bbclass</filename></title>
3234
3235 <para>
3236 The <filename>uboot-config</filename> class provides support for
3237 U-Boot configuration for a machine.
3238 Specify the machine in your recipe as follows:
3239 <literallayout class='monospaced'>
3240 UBOOT_CONFIG ??= &lt;default&gt;
3241 UBOOT_CONFIG[foo] = "config,images"
3242 </literallayout>
3243 You can also specify the machine using this method:
3244 <literallayout class='monospaced'>
3245 UBOOT_MACHINE = "config"
3246 </literallayout>
3247 See the
3248 <link linkend='var-UBOOT_CONFIG'><filename>UBOOT_CONFIG</filename></link>
3249 and
3250 <link linkend='var-UBOOT_MACHINE'><filename>UBOOT_MACHINE</filename></link>
3251 variables for additional information.
3252 </para>
3253</section>
3254
3255<section id='ref-classes-uninative'>
3256 <title><filename>uninative.bbclass</filename></title>
3257
3258 <para>
3259 Provides a means of reusing <filename>native/cross</filename> over
3260 multiple distros.
3261 <note>
3262 Currently, the method used by the <filename>uninative</filename>
3263 class is experimental.
3264 </note>
3265 For more information, see the commit message
3266 <ulink url='http://cgit.openembedded.org/openembedded-core/commit/?id=e66c96ae9c7ba21ebd04a4807390f0031238a85a'>here</ulink>.
3267 </para>
3268</section>
3269
3270<section id='ref-classes-update-alternatives'>
3271 <title><filename>update-alternatives.bbclass</filename></title>
3272
3273 <para>
3274 The <filename>update-alternatives</filename> class helps the
3275 alternatives system when multiple sources provide the same command.
3276 This situation occurs when several programs that have the same or
3277 similar function are installed with the same name.
3278 For example, the <filename>ar</filename> command is available from the
3279 <filename>busybox</filename>, <filename>binutils</filename> and
3280 <filename>elfutils</filename> packages.
3281 The <filename>update-alternatives</filename> class handles
3282 renaming the binaries so that multiple packages can be installed
3283 without conflicts.
3284 The <filename>ar</filename> command still works regardless of which
3285 packages are installed or subsequently removed.
3286 The class renames the conflicting binary in each package and symlinks
3287 the highest priority binary during installation or removal of packages.
3288 </para>
3289
3290 <para>
3291 To use this class, you need to define a number of variables:
3292 <itemizedlist>
3293 <listitem><para><link linkend='var-ALTERNATIVE'><filename>ALTERNATIVE</filename></link>
3294 </para></listitem>
3295 <listitem><para><link linkend='var-ALTERNATIVE_LINK_NAME'><filename>ALTERNATIVE_LINK_NAME</filename></link>
3296 </para></listitem>
3297 <listitem><para><link linkend='var-ALTERNATIVE_TARGET'><filename>ALTERNATIVE_TARGET</filename></link>
3298 </para></listitem>
3299 <listitem><para><link linkend='var-ALTERNATIVE_PRIORITY'><filename>ALTERNATIVE_PRIORITY</filename></link>
3300 </para></listitem>
3301 </itemizedlist>
3302 These variables list alternative commands needed by a package,
3303 provide pathnames for links, default links for targets, and
3304 so forth.
3305 For details on how to use this class, see the comments in the
3306 <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/poky/tree/meta/classes/update-alternatives.bbclass'><filename>update-alternatives.bbclass</filename></ulink>.
3307 </para>
3308
3309 <note>
3310 You can use the <filename>update-alternatives</filename> command
3311 directly in your recipes.
3312 However, this class simplifies things in most cases.
3313 </note>
3314</section>
3315
3316<section id='ref-classes-update-rc.d'>
3317 <title><filename>update-rc.d.bbclass</filename></title>
3318
3319 <para>
3320 The <filename>update-rc.d</filename> class uses
3321 <filename>update-rc.d</filename> to safely install an
3322 initialization script on behalf of the package.
3323 The OpenEmbedded build system takes care of details such as making
3324 sure the script is stopped before a package is removed and started when
3325 the package is installed.
3326 </para>
3327
3328 <para>
3329 Three variables control this class:
3330 <filename><link linkend='var-INITSCRIPT_PACKAGES'>INITSCRIPT_PACKAGES</link></filename>,
3331 <filename><link linkend='var-INITSCRIPT_NAME'>INITSCRIPT_NAME</link></filename> and
3332 <filename><link linkend='var-INITSCRIPT_PARAMS'>INITSCRIPT_PARAMS</link></filename>.
3333 See the variable links for details.
3334 </para>
3335</section>
3336
3337<section id='ref-classes-useradd'>
3338 <title><filename>useradd.bbclass</filename></title>
3339
3340 <para>
3341 The <filename>useradd</filename> class supports the addition of users
3342 or groups for usage by the package on the target.
3343 For example, if you have packages that contain system services that
3344 should be run under their own user or group, you can use this class to
3345 enable creation of the user or group.
3346 The <filename>meta-skeleton/recipes-skeleton/useradd/useradd-example.bb</filename>
3347 recipe in the <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
3348 provides a simple example that shows how to add three
3349 users and groups to two packages.
3350 See the <filename>useradd-example.bb</filename> recipe for more
3351 information on how to use this class.
3352 </para>
3353
3354 <para>
3355 The <filename>useradd</filename> class supports the
3356 <link linkend='var-USERADD_PACKAGES'><filename>USERADD_PACKAGES</filename></link>,
3357 <link linkend='var-USERADD_PARAM'><filename>USERADD_PARAM</filename></link>,
3358 <link linkend='var-GROUPADD_PARAM'><filename>GROUPADD_PARAM</filename></link>,
3359 and
3360 <link linkend='var-GROUPMEMS_PARAM'><filename>GROUPMEMS_PARAM</filename></link>
3361 variables.
3362 </para>
3363</section>
3364
3365<section id='ref-classes-useradd-staticids'>
3366 <title><filename>useradd-staticids.bbclass</filename></title>
3367
3368 <para>
3369 The <filename>useradd-staticids</filename> class supports the addition
3370 of users or groups that have static user identification
3371 (<filename>uid</filename>) and group identification
3372 (<filename>gid</filename>) values.
3373 </para>
3374
3375 <para>
3376 The default behavior of the OpenEmbedded build system for assigning
3377 <filename>uid</filename> and <filename>gid</filename> values when
3378 packages add users and groups during package install time is to
3379 add them dynamically.
3380 This works fine for programs that do not care what the values of the
3381 resulting users and groups become.
3382 In these cases, the order of the installation determines the final
3383 <filename>uid</filename> and <filename>gid</filename> values.
3384 However, if non-deterministic
3385 <filename>uid</filename> and <filename>gid</filename> values are a
3386 problem, you can override the default, dynamic application of these
3387 values by setting static values.
3388 When you set static values, the OpenEmbedded build system looks in
3389 <link linkend='var-BBPATH'><filename>BBPATH</filename></link> for
3390 <filename>files/passwd</filename> and <filename>files/group</filename>
3391 files for the values.
3392 </para>
3393
3394 <para>
3395 To use static <filename>uid</filename> and <filename>gid</filename>
3396 values, you need to set some variables.
3397 See the
3398 <link linkend='var-USERADDEXTENSION'><filename>USERADDEXTENSION</filename></link>,
3399 <link linkend='var-USERADD_UID_TABLES'><filename>USERADD_UID_TABLES</filename></link>,
3400 <link linkend='var-USERADD_GID_TABLES'><filename>USERADD_GID_TABLES</filename></link>,
3401 and
3402 <link linkend='var-USERADD_ERROR_DYNAMIC'><filename>USERADD_ERROR_DYNAMIC</filename></link>
3403 variables.
3404 You can also see the
3405 <link linkend='ref-classes-useradd'><filename>useradd</filename></link>
3406 class for additional information.
3407 </para>
3408
3409 <note><title>Notes</title>
3410 You do not use this class directly.
3411 You either enable or disable the class by setting the
3412 <filename>USERADDEXTENSION</filename> variable.
3413 If you enable or disable the class in a configured system,
3414 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
3415 might contain incorrect <filename>uid</filename> and
3416 <filename>gid</filename> values.
3417 Deleting the <filename>TMPDIR</filename> directory
3418 will correct this condition.
3419 </note>
3420</section>
3421
3422<section id='ref-classes-utility-tasks'>
3423 <title><filename>utility-tasks.bbclass</filename></title>
3424
3425 <para>
3426 The <filename>utility-tasks</filename> class provides support for
3427 various "utility" type tasks that are applicable to all recipes,
3428 such as
3429 <link linkend='ref-tasks-clean'><filename>do_clean</filename></link> and
3430 <link linkend='ref-tasks-listtasks'><filename>do_listtasks</filename></link>.
3431 </para>
3432
3433 <para>
3434 This class is enabled by default because it is inherited by
3435 the
3436 <link linkend='ref-classes-base'><filename>base</filename></link>
3437 class.
3438 </para>
3439</section>
3440
3441<section id='ref-classes-utils'>
3442 <title><filename>utils.bbclass</filename></title>
3443
3444 <para>
3445 The <filename>utils</filename> class provides some useful Python
3446 functions that are typically used in inline Python expressions
3447 (e.g. <filename>${@...}</filename>).
3448 One example use is for <filename>bb.utils.contains()</filename>.
3449 </para>
3450
3451 <para>
3452 This class is enabled by default because it is inherited by the
3453 <link linkend='ref-classes-base'><filename>base</filename></link>
3454 class.
3455 </para>
3456</section>
3457
3458<section id='ref-classes-vala'>
3459 <title><filename>vala.bbclass</filename></title>
3460
3461 <para>
3462 The <filename>vala</filename> class supports recipes that need to
3463 build software written using the Vala programming language.
3464 </para>
3465</section>
3466
3467<section id='ref-classes-waf'>
3468 <title><filename>waf.bbclass</filename></title>
3469
3470 <para>
3471 The <filename>waf</filename> class supports recipes that need to build
3472 software that uses the Waf build system.
3473 You can use the
3474 <link linkend='var-EXTRA_OECONF'><filename>EXTRA_OECONF</filename></link>
3475 variable to specify additional configuration options to be passed on
3476 the Waf command line.
3477 </para>
3478</section>
3479
3480<!-- Undocumented classes are:
3481 image-empty.bbclass (possibly being dropped)
3482 migrate_localcount.bbclass (still need a description)
3483-->
3484
3485
3486</chapter>
3487<!--
3488vim: expandtab tw=80 ts=4
3489-->
diff --git a/documentation/ref-manual/ref-features.xml b/documentation/ref-manual/ref-features.xml
new file mode 100644
index 0000000000..230cabd155
--- /dev/null
+++ b/documentation/ref-manual/ref-features.xml
@@ -0,0 +1,420 @@
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 your image, a reference on image features you can
11 select, and a reference on feature backfilling.
12 </para>
13
14 <para>
15 Features provide a mechanism for working out which packages
16 should be included in the generated images.
17 Distributions can select which features they want to support through the
18 <filename><link linkend='var-DISTRO_FEATURES'>DISTRO_FEATURES</link></filename>
19 variable, which is set or appended to in a distribution's configuration file such as
20 <filename>poky.conf</filename>,
21 <filename>poky-tiny.conf</filename>,
22 <filename>poky-lsb.conf</filename> and so forth.
23 Machine features are set in the
24 <filename><link linkend='var-MACHINE_FEATURES'>MACHINE_FEATURES</link></filename>
25 variable, which is set in the machine configuration file and
26 specifies the hardware features for a given machine.
27 </para>
28
29 <para>
30 These two variables combine to work out which kernel modules,
31 utilities, and other packages to include.
32 A given distribution can support a selected subset of features so some machine features might not
33 be included if the distribution itself does not support them.
34 </para>
35
36 <para>
37 One method you can use to determine which recipes are checking to see if a
38 particular feature is contained or not is to <filename>grep</filename> through
39 the <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
40 for the feature.
41 Here is an example that discovers the recipes whose build is potentially
42 changed based on a given feature:
43 <literallayout class='monospaced'>
44 $ cd poky
45 $ git grep 'contains.*MACHINE_FEATURES.*<replaceable>feature</replaceable>'
46 </literallayout>
47 </para>
48
49 <section id='ref-features-machine'>
50 <title>Machine Features</title>
51
52 <para>
53 The items below are features you can use with
54 <link linkend='var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></link>.
55 Features do not have a one-to-one correspondence to packages, and they can
56 go beyond simply controlling the installation of a package or packages.
57 Sometimes a feature can influence how certain recipes are built.
58 For example, a feature might determine whether a particular configure option
59 is specified within the
60 <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
61 task for a particular recipe.
62 </para>
63
64 <para>
65 This feature list only represents features as shipped with the Yocto Project metadata:
66 <itemizedlist>
67 <listitem><para><emphasis>acpi:</emphasis> Hardware has ACPI (x86/x86_64 only)
68 </para></listitem>
69 <listitem><para><emphasis>alsa:</emphasis> Hardware has ALSA audio drivers
70 </para></listitem>
71 <listitem><para><emphasis>apm:</emphasis> Hardware uses APM (or APM emulation)
72 </para></listitem>
73 <listitem><para><emphasis>bluetooth:</emphasis> Hardware has integrated BT
74 </para></listitem>
75 <listitem><para><emphasis>efi:</emphasis> Support for booting through EFI
76 </para></listitem>
77 <listitem><para><emphasis>ext2:</emphasis> Hardware HDD or Microdrive
78 </para></listitem>
79 <listitem><para><emphasis>irda:</emphasis> Hardware has IrDA support
80 </para></listitem>
81 <listitem><para><emphasis>keyboard:</emphasis> Hardware has a keyboard
82 </para></listitem>
83 <listitem><para><emphasis>pcbios:</emphasis> Support for booting through BIOS
84 </para></listitem>
85 <listitem><para><emphasis>pci:</emphasis> Hardware has a PCI bus
86 </para></listitem>
87 <listitem><para><emphasis>pcmcia:</emphasis> Hardware has PCMCIA or CompactFlash sockets
88 </para></listitem>
89 <listitem><para><emphasis>phone:</emphasis> Mobile phone (voice) support
90 </para></listitem>
91 <listitem><para><emphasis>qvga:</emphasis> Machine has a QVGA (320x240) display
92 </para></listitem>
93 <listitem><para><emphasis>rtc:</emphasis> Machine has a Real-Time Clock
94 </para></listitem>
95 <listitem><para><emphasis>screen:</emphasis> Hardware has a screen
96 </para></listitem>
97 <listitem><para><emphasis>serial:</emphasis> Hardware has serial support (usually RS232)
98 </para></listitem>
99 <listitem><para><emphasis>touchscreen:</emphasis> Hardware has a touchscreen
100 </para></listitem>
101 <listitem><para><emphasis>usbgadget:</emphasis> Hardware is USB gadget device capable
102 </para></listitem>
103 <listitem><para><emphasis>usbhost:</emphasis> Hardware is USB Host capable
104 </para></listitem>
105 <listitem><para><emphasis>vfat:</emphasis> FAT file system support
106 </para></listitem>
107 <listitem><para><emphasis>wifi:</emphasis> Hardware has integrated WiFi
108 </para></listitem>
109 </itemizedlist>
110 </para>
111 </section>
112
113 <section id='ref-features-distro'>
114 <title>Distro Features</title>
115
116 <para>
117 The items below are features you can use with
118 <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
119 to enable features across your distribution.
120 Features do not have a one-to-one correspondence to packages,
121 and they can go beyond simply controlling the installation of a
122 package or packages.
123 In most cases, the presence or absence of a feature translates to
124 the appropriate option supplied to the configure script during the
125 <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
126 task for the recipes that optionally
127 support the feature.
128 </para>
129
130 <para>
131 Some distro features are also machine features.
132 These select features make sense to be controlled both at
133 the machine and distribution configuration level.
134 See the
135 <ulink url='&YOCTO_DOCS_REF_URL;#var-COMBINED_FEATURES'><filename>COMBINED_FEATURES</filename></ulink>
136 variable for more information.
137 </para>
138
139 <para>
140 This list only represents features as shipped with the Yocto Project metadata:
141 <itemizedlist>
142 <listitem><para><emphasis>alsa:</emphasis> Include ALSA support
143 (OSS compatibility kernel modules installed if available).
144 </para></listitem>
145 <listitem><para><emphasis>bluetooth:</emphasis> Include
146 bluetooth support (integrated BT only).</para></listitem>
147 <listitem><para><emphasis>cramfs:</emphasis> Include CramFS
148 support.</para></listitem>
149 <listitem><para><emphasis>directfb:</emphasis>
150 Include DirectFB support.
151 </para></listitem>
152 <listitem><para><emphasis>ext2:</emphasis> Include tools for
153 supporting for devices with internal HDD/Microdrive for
154 storing files (instead of Flash only devices).
155 </para></listitem>
156 <listitem><para><emphasis>ipsec:</emphasis> Include IPSec
157 support.</para></listitem>
158 <listitem><para><emphasis>ipv6:</emphasis> Include IPv6 support.
159 </para></listitem>
160 <listitem><para><emphasis>irda:</emphasis> Include IrDA support.
161 </para></listitem>
162 <listitem><para><emphasis>keyboard:</emphasis> Include keyboard
163 support (e.g. keymaps will be loaded during boot).
164 </para></listitem>
165 <listitem><para><emphasis>nfs:</emphasis> Include NFS client
166 support (for mounting NFS exports on device).
167 </para></listitem>
168 <listitem><para><emphasis>opengl:</emphasis>
169 Include the Open Graphics Library, which is a
170 cross-language, multi-platform application programming
171 interface used for rendering two and three-dimensional
172 graphics.</para></listitem>
173 <listitem><para><emphasis>pci:</emphasis> Include PCI bus
174 support.</para></listitem>
175 <listitem><para><emphasis>pcmcia:</emphasis> Include
176 PCMCIA/CompactFlash support.</para></listitem>
177 <listitem><para><emphasis>ppp:</emphasis> Include PPP dialup
178 support.</para></listitem>
179 <listitem><para><emphasis>smbfs:</emphasis> Include SMB networks
180 client support (for mounting Samba/Microsoft Windows shares
181 on device).</para></listitem>
182 <listitem><para><emphasis>systemd:</emphasis> Include support
183 for this <filename>init</filename> manager, which is a full
184 replacement of for <filename>init</filename> with parallel
185 starting of services, reduced shell overhead, and other
186 features.
187 This <filename>init</filename> manager is used by many
188 distributions.</para></listitem>
189 <listitem><para><emphasis>usbgadget:</emphasis> Include USB
190 Gadget Device support (for USB networking/serial/storage).
191 </para></listitem>
192 <listitem><para><emphasis>usbhost:</emphasis> Include USB Host
193 support (allows to connect external keyboard, mouse,
194 storage, network etc).</para></listitem>
195 <listitem><para><emphasis>wayland:</emphasis> Include the
196 Wayland display server protocol and the library that
197 supports it.</para></listitem>
198 <listitem><para><emphasis>wifi:</emphasis> Include WiFi support
199 (integrated only).</para></listitem>
200 <listitem><para><emphasis>x11:</emphasis> Include the X server
201 and libraries.</para></listitem>
202 </itemizedlist>
203 </para>
204 </section>
205
206 <section id='ref-features-image'>
207 <title>Image Features</title>
208
209 <para>
210 The contents of images generated by the OpenEmbedded build system
211 can be controlled by the
212 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
213 and
214 <link linkend='var-EXTRA_IMAGE_FEATURES'><filename>EXTRA_IMAGE_FEATURES</filename></link>
215 variables that you typically configure in your image recipes.
216 Through these variables, you can add several different
217 predefined packages such as development utilities or packages with
218 debug information needed to investigate application problems or
219 profile applications.
220 </para>
221
222 <para>
223 The following image features are available for all images:
224 <itemizedlist>
225 <listitem><para><emphasis>dbg-pkgs:</emphasis>
226 Installs debug symbol packages for all packages installed
227 in a given image.
228 </para></listitem>
229 <listitem><para><emphasis>debug-tweaks:</emphasis>
230 Makes an image suitable for development (e.g.
231 allows root logins without passwords).
232 </para></listitem>
233 <listitem><para><emphasis>dev-pkgs:</emphasis>
234 Installs development packages (headers and extra library
235 links) for all packages installed in a given image.
236 </para></listitem>
237 <listitem><para><emphasis>doc-pkgs:</emphasis> Installs
238 documentation packages for all packages installed in a
239 given image.
240 </para></listitem>
241 <listitem><para><emphasis>package-management:</emphasis>
242 Installs package management tools and preserves the package
243 manager database.
244 </para></listitem>
245 <listitem><para><emphasis>ptest-pkgs:</emphasis>
246 Installs ptest packages for all ptest-enabled recipes.
247 </para></listitem>
248 <listitem><para><emphasis>read-only-rootfs:</emphasis>
249 Creates an image whose root filesystem is read-only.
250 See the
251 "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-read-only-root-filesystem'>Creating a Read-Only Root Filesystem</ulink>"
252 section in the Yocto Project Development Manual for more
253 information.
254 </para></listitem>
255 <listitem><para><emphasis>splash:</emphasis>
256 Enables showing a splash screen during boot.
257 By default, this screen is provided by
258 <filename>psplash</filename>, which does allow
259 customization.
260 If you prefer to use an alternative splash screen package,
261 you can do so by setting the <filename>SPLASH</filename>
262 variable to a different package name (or names) within the
263 image recipe or at the distro configuration level.
264 </para></listitem>
265 <listitem><para><emphasis>staticdev-pkgs:</emphasis>
266 Installs static development packages, which are
267 static libraries (i.e. <filename>*.a</filename> files), for
268 all packages installed in a given image.
269 </para></listitem>
270 </itemizedlist>
271 </para>
272
273 <para>
274 Some image features are available only when you inherit the
275 <link linkend='ref-classes-core-image'><filename>core-image</filename></link>
276 class.
277 The current list of these valid features is as follows:
278 <itemizedlist>
279 <listitem><para><emphasis>eclipse-debug:</emphasis> Provides
280 Eclipse remote debugging support.
281 </para></listitem>
282 <listitem><para><emphasis>hwcodecs:</emphasis> Installs
283 hardware acceleration codecs.
284 </para></listitem>
285 <listitem><para><emphasis>nfs-server:</emphasis>
286 Installs an NFS server.
287 </para></listitem>
288 <listitem><para><emphasis>qt4-pkgs:</emphasis>
289 Supports Qt4/X11 and demo applications.
290 </para></listitem>
291 <listitem><para><emphasis>ssh-server-dropbear:</emphasis>
292 Installs the Dropbear minimal SSH server.
293 </para></listitem>
294 <listitem><para><emphasis>ssh-server-openssh:</emphasis>
295 Installs the OpenSSH SSH server, which is more
296 full-featured than Dropbear.
297 Note that if both the OpenSSH SSH server and the Dropbear
298 minimal SSH server are present in
299 <filename>IMAGE_FEATURES</filename>, then OpenSSH will take
300 precedence and Dropbear will not be installed.
301 </para></listitem>
302 <listitem><para><emphasis>tools-debug:</emphasis>
303 Installs debugging tools such as
304 <filename>strace</filename> and <filename>gdb</filename>.
305 For information on GDB, see the
306 "<ulink url='&YOCTO_DOCS_DEV_URL;#platdev-gdb-remotedebug'>Debugging With the GNU Project Debugger (GDB) Remotely</ulink>"
307 section in the Yocto Project Development Manual.
308 For information on tracing and profiling, see the
309 <ulink url='&YOCTO_DOCS_PROF_URL;'>Yocto Project Profiling and Tracing Manual</ulink>.
310 </para></listitem>
311 <listitem><para><emphasis>tools-profile:</emphasis>
312 Installs profiling tools such as
313 <filename>oprofile</filename>, <filename>exmap</filename>,
314 and <filename>LTTng</filename>.
315 For general information on user-space tools, see the
316 "<ulink url='&YOCTO_DOCS_ADT_URL;#user-space-tools'>User-Space Tools</ulink>"
317 section in the Yocto Project Application Developer's
318 Guide.
319 </para></listitem>
320 <listitem><para><emphasis>tools-sdk:</emphasis>
321 Installs a full SDK that runs on the device.
322 </para></listitem>
323 <listitem><para><emphasis>tools-testapps:</emphasis>
324 Installs device testing tools (e.g. touchscreen debugging).
325 </para></listitem>
326 <listitem><para><emphasis>x11:</emphasis>
327 Installs the X server.
328 </para></listitem>
329 <listitem><para><emphasis>x11-base:</emphasis>
330 Installs the X server with a minimal environment.
331 </para></listitem>
332 <listitem><para><emphasis>x11-sato:</emphasis>
333 Installs the OpenedHand Sato environment.
334 </para></listitem>
335 </itemizedlist>
336 </para>
337
338 </section>
339
340 <section id='ref-features-backfill'>
341 <title>Feature Backfilling</title>
342
343 <para>
344 Sometimes it is necessary in the OpenEmbedded build system to extend
345 <link linkend='var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></link>
346 or <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
347 to control functionality that was previously enabled and not able
348 to be disabled.
349 For these cases, we need to add an
350 additional feature item to appear in one of these variables,
351 but we do not want to force developers who have existing values
352 of the variables in their configuration to add the new feature
353 in order to retain the same overall level of functionality.
354 Thus, the OpenEmbedded build system has a mechanism to
355 automatically "backfill" these added features into existing
356 distro or machine configurations.
357 You can see the list of features for which this is done by
358 finding the
359 <link linkend='var-DISTRO_FEATURES_BACKFILL'><filename>DISTRO_FEATURES_BACKFILL</filename></link>
360 and <link linkend='var-MACHINE_FEATURES_BACKFILL'><filename>MACHINE_FEATURES_BACKFILL</filename></link>
361 variables in the <filename>meta/conf/bitbake.conf</filename> file.
362 </para>
363
364 <para>
365 Because such features are backfilled by default into all
366 configurations as described in the previous paragraph, developers
367 who wish to disable the new features need to be able to selectively
368 prevent the backfilling from occurring.
369 They can do this by adding the undesired feature or features to the
370 <link linkend='var-DISTRO_FEATURES_BACKFILL_CONSIDERED'><filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename></link>
371 or <link linkend='var-MACHINE_FEATURES_BACKFILL_CONSIDERED'><filename>MACHINE_FEATURES_BACKFILL_CONSIDERED</filename></link>
372 variables for distro features and machine features respectively.
373 </para>
374
375 <para>
376 Here are two examples to help illustrate feature backfilling:
377 <itemizedlist>
378 <listitem><para><emphasis>The "pulseaudio" distro feature option</emphasis>:
379 Previously, PulseAudio support was enabled within the Qt and
380 GStreamer frameworks.
381 Because of this, the feature is backfilled and thus
382 enabled for all distros through the
383 <filename>DISTRO_FEATURES_BACKFILL</filename>
384 variable in the <filename>meta/conf/bitbake.conf</filename> file.
385 However, your distro needs to disable the feature.
386 You can disable the feature without affecting
387 other existing distro configurations that need PulseAudio support
388 by adding "pulseaudio" to
389 <filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename>
390 in your distro's <filename>.conf</filename> file.
391 Adding the feature to this variable when it also
392 exists in the <filename>DISTRO_FEATURES_BACKFILL</filename>
393 variable prevents the build system from adding the feature to
394 your configuration's <filename>DISTRO_FEATURES</filename>, effectively disabling
395 the feature for that particular distro.</para></listitem>
396 <listitem><para><emphasis>The "rtc" machine feature option</emphasis>:
397 Previously, real time clock (RTC) support was enabled for all
398 target devices.
399 Because of this, the feature is backfilled and thus enabled
400 for all machines through the <filename>MACHINE_FEATURES_BACKFILL</filename>
401 variable in the <filename>meta/conf/bitbake.conf</filename> file.
402 However, your target device does not have this capability.
403 You can disable RTC support for your device without
404 affecting other machines that need RTC support
405 by adding the feature to your machine's
406 <filename>MACHINE_FEATURES_BACKFILL_CONSIDERED</filename>
407 list in the machine's <filename>.conf</filename> file.
408 Adding the feature to this variable when it also
409 exists in the <filename>MACHINE_FEATURES_BACKFILL</filename>
410 variable prevents the build system from adding the feature to
411 your configuration's <filename>MACHINE_FEATURES</filename>, effectively
412 disabling RTC support for that particular machine.</para></listitem>
413 </itemizedlist>
414 </para>
415 </section>
416</chapter>
417
418<!--
419vim: expandtab tw=80 ts=4 spell spelllang=en_gb
420-->
diff --git a/documentation/ref-manual/ref-images.xml b/documentation/ref-manual/ref-images.xml
new file mode 100644
index 0000000000..d15ca5b93a
--- /dev/null
+++ b/documentation/ref-manual/ref-images.xml
@@ -0,0 +1,169 @@
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),
17 GNU Lesser General Public License Version 3 (LGPLv3), and the
18 GNU Affero General Public License Version 3 (AGPL-3.0) components
19 is only supported for minimal and base images.
20 Furthermore, if you are going to build an image using non-GPLv3 and
21 similarly licensed components, you must make the following changes in
22 the <filename>local.conf</filename> file before using the BitBake
23 command to build the minimal or base image:
24 <literallayout class='monospaced'>
25 1. Comment out the EXTRA_IMAGE_FEATURES line
26 2. Set INCOMPATIBLE_LICENSE = "GPL-3.0 LGPL-3.0 AGPL-3.0"
27 </literallayout>
28 </note>
29
30 <para>
31 From within the <filename>poky</filename> Git repository, you can use
32 the following command to display the list of directories within the
33 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
34 that containe image recipe files:
35 <literallayout class='monospaced'>
36 $ ls meta*/recipes*/images/*.bb
37 </literallayout>
38 </para>
39
40 <para>
41 Following is a list of supported recipes:
42 <itemizedlist>
43 <listitem><para><filename>build-appliance-image</filename>:
44 An example virtual machine that contains all the pieces required to
45 run builds using the build system as well as the build system itself.
46 You can boot and run the image using either the
47 <ulink url='http://www.vmware.com/products/player/overview.html'>VMware Player</ulink>
48 or <ulink url='http://www.vmware.com/products/workstation/overview.html'>VMware Workstation</ulink>.
49 For more information on this image, see the
50 <ulink url='&YOCTO_HOME_URL;/documentation/build-appliance'>Build Appliance</ulink> page on
51 the Yocto Project website.</para></listitem>
52 <listitem><para><filename>core-image-base</filename>:
53 A console-only image that fully supports the target device hardware.</para></listitem>
54 <listitem><para><filename>core-image-clutter</filename>:
55 An image with support for the Open GL-based toolkit Clutter, which enables development of
56 rich and animated graphical user interfaces.</para></listitem>
57 <listitem><para><filename>core-image-directfb</filename>:
58 An image that uses <filename>directfb</filename> instead of X11.
59 </para></listitem>
60 <listitem><para><filename>core-image-full-cmdline</filename>:
61 A console-only image with more full-featured Linux system
62 functionality installed.</para></listitem>
63 <listitem><para><filename>core-image-lsb</filename>:
64 An image that conforms to the Linux Standard Base (LSB)
65 specification.
66 This image requires a distribution configuration that
67 enables LSB compliance (e.g. <filename>poky-lsb</filename>).
68 If you build <filename>core-image-lsb</filename> without that
69 configuration, the image will not be LSB-compliant.
70 </para></listitem>
71 <listitem><para><filename>core-image-lsb-dev</filename>:
72 A <filename>core-image-lsb</filename> image that is suitable for development work
73 using the host.
74 The image includes headers and libraries you can use in a host development
75 environment.
76 This image requires a distribution configuration that
77 enables LSB compliance (e.g. <filename>poky-lsb</filename>).
78 If you build <filename>core-image-lsb-dev</filename> without that
79 configuration, the image will not be LSB-compliant.
80 </para></listitem>
81 <listitem><para><filename>core-image-lsb-sdk</filename>:
82 A <filename>core-image-lsb</filename> that includes everything in
83 meta-toolchain but also includes development headers and libraries
84 to form a complete standalone SDK.
85 This image requires a distribution configuration that
86 enables LSB compliance (e.g. <filename>poky-lsb</filename>).
87 If you build <filename>core-image-lsb-sdk</filename> without that
88 configuration, the image will not be LSB-compliant.
89 This image is suitable for development using the target.</para></listitem>
90 <listitem><para><filename>core-image-minimal</filename>:
91 A small image just capable of allowing a device to boot.</para></listitem>
92 <listitem><para><filename>core-image-minimal-dev</filename>:
93 A <filename>core-image-minimal</filename> image suitable for development work
94 using the host.
95 The image includes headers and libraries you can use in a host development
96 environment.
97 </para></listitem>
98 <listitem><para id='images-core-image-minimal-initramfs'><filename>core-image-minimal-initramfs</filename>:
99 A <filename>core-image-minimal</filename> image that has the Minimal RAM-based
100 Initial Root Filesystem (initramfs) as part of the kernel,
101 which allows the system to find the first “init” program more efficiently.
102 See the
103 <link linkend='var-PACKAGE_INSTALL'><filename>PACKAGE_INSTALL</filename></link>
104 variable for additional information helpful when working with
105 initramfs images.
106 </para></listitem>
107 <listitem><para><filename>core-image-minimal-mtdutils</filename>:
108 A <filename>core-image-minimal</filename> image that has support
109 for the Minimal MTD Utilities, which let the user interact with the
110 MTD subsystem in the kernel to perform operations on flash devices.
111 </para></listitem>
112 <listitem><para><filename>core-image-rt</filename>:
113 A <filename>core-image-minimal</filename> image plus a real-time test suite and
114 tools appropriate for real-time use.</para></listitem>
115 <listitem><para><filename>core-image-rt-sdk</filename>:
116 A <filename>core-image-rt</filename> image that includes everything in
117 <filename>meta-toolchain</filename>.
118 The image also includes development headers and libraries to form a complete
119 stand-alone SDK and is suitable for development using the target.
120 </para></listitem>
121 <listitem><para><filename>core-image-sato</filename>:
122 An image with Sato support, a mobile environment and visual style that works well
123 with mobile devices.
124 The image supports X11 with a Sato theme and applications such as
125 a terminal, editor, file manager, media player, and so forth.
126 </para></listitem>
127 <listitem><para><filename>core-image-sato-dev</filename>:
128 A <filename>core-image-sato</filename> image suitable for development
129 using the host.
130 The image includes libraries needed to build applications on the device itself,
131 testing and profiling tools, and debug symbols.
132 This image was formerly <filename>core-image-sdk</filename>.
133 </para></listitem>
134 <listitem><para><filename>core-image-sato-sdk</filename>:
135 A <filename>core-image-sato</filename> image that includes everything in meta-toolchain.
136 The image also includes development headers and libraries to form a complete standalone SDK
137 and is suitable for development using the target.</para></listitem>
138 <listitem><para><filename>core-image-testmaster</filename>:
139 A "master" image designed to be used for automated runtime testing.
140 Provides a "known good" image that is deployed to a separate
141 partition so that you can boot into it and use it to deploy a
142 second image to be tested.
143 You can find more information about runtime testing in the
144 "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
145 section in the Yocto Project Development Manual.
146 </para></listitem>
147 <listitem><para><filename>core-image-testmaster-initramfs</filename>:
148 A RAM-based Initial Root Filesystem (initramfs) image tailored for
149 use with the <filename>core-image-testmaster</filename> image.
150 </para></listitem>
151 <listitem><para><filename>core-image-weston</filename>:
152 A very basic Wayland image with a terminal.
153 This image provides the Wayland protocol libraries and the
154 reference Weston compositor.
155 For more information, see the
156 "<link linkend='wayland'>Wayland</link>" section.
157 </para></listitem>
158 <listitem><para><filename>core-image-x11</filename>:
159 A very basic X11 image with a terminal.
160 </para></listitem>
161 <listitem><para><filename>qt4e-demo-image</filename>:
162 An image that launches into the demo application for the embedded
163 (not based on X11) version of Qt.</para></listitem>
164 </itemizedlist>
165 </para>
166</chapter>
167<!--
168vim: expandtab tw=80 ts=4
169-->
diff --git a/documentation/ref-manual/ref-manual-customization.xsl b/documentation/ref-manual/ref-manual-customization.xsl
new file mode 100644
index 0000000000..1bee3bd5d3
--- /dev/null
+++ b/documentation/ref-manual/ref-manual-customization.xsl
@@ -0,0 +1,21 @@
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/1.76.1/xhtml/docbook.xsl" />
5
6 <xsl:include href="../template/permalinks.xsl"/>
7 <xsl:include href="../template/section.title.xsl"/>
8 <xsl:include href="../template/component.title.xsl"/>
9 <xsl:include href="../template/division.title.xsl"/>
10 <xsl:include href="../template/formal.object.heading.xsl"/>
11 <xsl:include href="../template/gloss-permalinks.xsl"/>
12 <xsl:include href="../template/qa-code-permalinks.xsl"/>
13
14 <xsl:param name="html.stylesheet" select="'ref-style.css'" />
15 <xsl:param name="chapter.autolabel" select="1" />
16 <xsl:param name="appendix.autolabel" select="A" />
17 <xsl:param name="section.autolabel" select="1" />
18 <xsl:param name="section.label.includes.component.label" select="1" />
19 <xsl:param name="generate.id.attributes" select="1" />
20
21</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..bf9f65fb5e
--- /dev/null
+++ b/documentation/ref-manual/ref-manual.xml
@@ -0,0 +1,160 @@
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 <revision>
86 <revnumber>1.7</revnumber>
87 <date>October 2014</date>
88 <revremark>Released with the Yocto Project 1.7 Release.</revremark>
89 </revision>
90 <revision>
91 <revnumber>1.7.1</revnumber>
92 <date>January 2015</date>
93 <revremark>Released with the Yocto Project 1.7.1 Release.</revremark>
94 </revision>
95 <revision>
96 <revnumber>1.7.2</revnumber>
97 <date>June 2015</date>
98 <revremark>Released with the Yocto Project 1.7.2 Release.</revremark>
99 </revision>
100 </revhistory>
101
102 <copyright>
103 <year>&COPYRIGHT_YEAR;</year>
104 <holder>Linux Foundation</holder>
105 </copyright>
106
107 <legalnotice>
108 <para>
109 Permission is granted to copy, distribute and/or modify this document under
110 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.
111 </para>
112 <note>
113 For the latest version of this manual associated with this
114 Yocto Project release, see the
115 <ulink url='&YOCTO_DOCS_REF_URL;'>Yocto Project Reference Manual</ulink>
116 from the Yocto Project website.
117 </note>
118 </legalnotice>
119
120 </bookinfo>
121
122 <xi:include href="introduction.xml"/>
123
124 <xi:include href="usingpoky.xml"/>
125
126 <xi:include href="closer-look.xml"/>
127
128 <xi:include href="technical-details.xml"/>
129
130 <xi:include href="migration.xml"/>
131
132 <xi:include href="ref-structure.xml"/>
133
134 <xi:include href="ref-classes.xml"/>
135
136 <xi:include href="ref-tasks.xml"/>
137
138 <xi:include href="ref-qa-checks.xml"/>
139
140 <xi:include href="ref-images.xml"/>
141
142 <xi:include href="ref-features.xml"/>
143
144 <xi:include href="ref-variables.xml"/>
145
146 <xi:include href="ref-varlocality.xml"/>
147
148 <xi:include href="faq.xml"/>
149
150 <xi:include href="resources.xml"/>
151
152<!-- <index id='index'>
153 <title>Index</title>
154 </index>
155-->
156
157</book>
158<!--
159vim: expandtab tw=80 ts=4
160-->
diff --git a/documentation/ref-manual/ref-qa-checks.xml b/documentation/ref-manual/ref-qa-checks.xml
new file mode 100644
index 0000000000..871cd294f6
--- /dev/null
+++ b/documentation/ref-manual/ref-qa-checks.xml
@@ -0,0 +1,1217 @@
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-qa-checks'>
6<title>QA Error and Warning Messages</title>
7
8<section id='qa-introduction'>
9 <title>Introduction</title>
10
11 <para>
12 When building a recipe, the OpenEmbedded build system performs
13 various QA checks on the output to ensure that common issues are
14 detected and reported.
15 Sometimes when you create a new recipe to build new software,
16 it will build with no problems.
17 When this is not the case, or when you have QA issues building any
18 software, it could take a little time to resolve them.
19 </para>
20
21 <para>
22 While it is tempting to ignore a QA message or even to
23 disable QA checks, it is best to try and resolve any
24 reported QA issues.
25 This chapter provides a list of the QA messages and brief explanations
26 of the issues you could encounter so that you can properly resolve
27 problems.
28 </para>
29
30 <para>
31 The next section provides a list of all QA error and warning
32 messages based on a default configuration.
33 Each entry provides the message or error form along with an
34 explanation.
35 <note>
36 <title>Notes</title>
37 <itemizedlist>
38 <listitem><para>
39 At the end of each message, the name of the associated
40 QA test (as listed in the
41 "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
42 section) appears within square brackets.
43 </para></listitem>
44 <listitem><para>
45 As mentioned, this list of error and warning messages is for
46 QA checks only.
47 The list does not cover all possible build errors or
48 warnings you could encounter.
49 </para></listitem>
50 <listitem><para>
51 Because some QA checks are disabled by default, this list
52 does not include all possible QA check errors and warnings.
53 </para></listitem>
54 </itemizedlist>
55 </note>
56 </para>
57</section>
58
59<section id='qa-errors-and-warnings'>
60 <title>Errors and Warnings</title>
61
62<!--
63This section uses the <para><code> construct to enable permalinks for the
64various QA issue and warning messages. The file templates/qa-code-permalinks.xsl
65is used to locate the construct and generate the permalink. This solution
66leverages the fact that right now this section in the ref-manual is the only
67place is all the YP docs that uses the <para><code> construct. If, in the
68future, that construct were to appear in the ref-manual, a generic permalink
69would be generated for the text between <code></code>. If a better solution
70can be found then it should be implemented. I can't find one at the moment.
71-->
72
73 <para>
74 <itemizedlist>
75 <listitem>
76 <para id='qa-issue-libexec'>
77 <code>
78 &lt;packagename&gt;: &lt;path&gt; is using libexec please relocate to &lt;libexecdir&gt; [libexec]
79 </code>
80 </para>
81
82 <para>
83 The specified package contains files in
84 <filename>/usr/libexec</filename>.
85 By default, <filename>libexecdir</filename> is set to
86 "${libdir}/${BPN}" rather than to "/usr/libexec".
87 Thus, installing to <filename>/usr/libexec</filename>
88 is likely not desirable.
89 </para>
90
91 <para>
92 &nbsp;
93 </para>
94 </listitem>
95 </itemizedlist>
96 </para>
97
98 <para>
99 <itemizedlist>
100 <listitem>
101 <para id='qa-issue-rpaths'>
102 <code>
103 package &lt;packagename&gt; contains bad RPATH &lt;rpath&gt; in file &lt;file&gt; [rpaths]
104 </code>
105 </para>
106
107 <para>
108 The specified binary produced by the recipe contains dynamic
109 library load paths (rpaths) that contain build system paths
110 such as
111 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>,
112 which are incorrect for the target and could potentially
113 be a security issue.
114 Check for bad <filename>-rpath</filename> options being
115 passed to the linker in your
116 <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
117 log.
118 Depending on the build system used by the software being
119 built, there might be a configure option to disable rpath
120 usage completely within the build of the software.
121 </para>
122
123 <para>
124 &nbsp;
125 </para>
126 </listitem>
127 </itemizedlist>
128 </para>
129
130 <para>
131 <itemizedlist>
132 <listitem>
133 <para id='qa-issue-useless-rpaths'>
134 <code>
135 &lt;packagename&gt;: &lt;file&gt; contains probably-redundant RPATH &lt;rpath&gt; [useless-rpaths]
136 </code>
137 </para>
138
139 <para>
140 The specified binary produced by the recipe contains dynamic
141 library load paths (rpaths) that on a standard system are
142 searched by default by the linker (e.g.
143 <filename>/lib</filename> and <filename>/usr/lib</filename>).
144 While these paths will not cause any breakage, they do waste
145 space and are unnecessary.
146 Depending on the build system used by the software being
147 built, there might be a configure option to disable rpath
148 usage completely within the build of the software.
149 </para>
150
151 <para>
152 &nbsp;
153 </para>
154 </listitem>
155 </itemizedlist>
156 </para>
157
158 <para>
159 <itemizedlist>
160 <listitem>
161 <para id='qa-issue-file-rdeps'>
162 <code>
163 &lt;packagename&gt; requires &lt;files&gt;, but no providers in its RDEPENDS [file-rdeps]
164 </code>
165 </para>
166
167 <para>
168 A file-level dependency has been identified from the
169 specified package on the specified files, but there is
170 no explicit corresponding entry in
171 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>.
172 If particular files are required at runtime then
173 <filename>RDEPENDS</filename> should be declared in the
174 recipe to ensure the packages providing them are built.
175 </para>
176
177 <para>
178 &nbsp;
179 </para>
180 </listitem>
181 </itemizedlist>
182 </para>
183
184 <para>
185 <itemizedlist>
186 <listitem>
187 <para id='qa-issue-build-deps'>
188 <code>
189 &lt;packagename1&gt; rdepends on &lt;packagename2&gt;, but it isn't a build dependency? [build-deps]
190 </code>
191 </para>
192
193 <para>
194 A runtime dependency exists between the two specified
195 packages, but there is nothing explicit within the recipe
196 to enable the OpenEmbedded build system to ensure that
197 dependency is satisfied.
198 This condition is usually triggered by an
199 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
200 value being added at the packaging stage rather than up
201 front, which is usually automatic based on the contents of
202 the package.
203 In most cases, you should change the recipe to add an
204 explicit <filename>RDEPENDS</filename> for the dependency.
205 </para>
206
207 <para>
208 &nbsp;
209 </para>
210 </listitem>
211 </itemizedlist>
212 </para>
213
214 <para>
215 <itemizedlist>
216 <listitem>
217 <para id='qa-issue-dev-so'>
218 <code>
219 non -dev/-dbg/-nativesdk package contains symlink .so: &lt;packagename&gt; path '&lt;path&gt;' [dev-so]
220 </code>
221 </para>
222
223 <para>
224 Symlink <filename>.so</filename> files are for development
225 only, and should therefore go into the
226 <filename>-dev</filename> package.
227 This situation might occur if you add
228 <filename>*.so*</filename> rather than
229 <filename>*.so.*</filename> to a non-dev package.
230 Change
231 <link linkend='var-FILES'><filename>FILES</filename></link>
232 (and possibly
233 <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>)
234 such that the specified <filename>.so</filename> file goes
235 into an appropriate <filename>-dev</filename> package.
236 </para>
237
238 <para>
239 &nbsp;
240 </para>
241 </listitem>
242 </itemizedlist>
243 </para>
244
245 <para>
246 <itemizedlist>
247 <listitem>
248 <para id='qa-issue-staticdev'>
249 <code>
250 non -staticdev package contains static .a library: &lt;packagename&gt; path '&lt;path&gt;' [staticdev]
251 </code>
252 </para>
253
254 <para>
255 Static <filename>.a</filename> library files should go into
256 a <filename>-staticdev</filename> package.
257 Change
258 <link linkend='var-FILES'><filename>FILES</filename></link>
259 (and possibly
260 <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>)
261 such that the specified <filename>.a</filename> file goes
262 into an appropriate <filename>-staticdev</filename> package.
263 </para>
264
265 <para>
266 &nbsp;
267 </para>
268 </listitem>
269 </itemizedlist>
270 </para>
271
272 <para>
273 <itemizedlist>
274 <listitem>
275 <para id='qa-issue-libdir'>
276 <code>
277 &lt;packagename&gt;: found library in wrong location [libdir]
278 </code>
279 </para>
280
281 <para>
282 The specified file may have been installed into an incorrect
283 (possibly hardcoded) installation path.
284 For example, this test will catch recipes that install
285 <filename>/lib/bar.so</filename> when
286 <filename>${base_libdir}</filename> is "lib32".
287 Another example is when recipes install
288 <filename>/usr/lib64/foo.so</filename> when
289 <filename>${libdir}</filename> is "/usr/lib".
290 False positives occasionally exist.
291 For these cases add "libdir" to
292 <link linkend='var-INSANE_SKIP'><filename>INSANE_SKIP</filename></link>
293 for the package.
294 </para>
295
296 <para>
297 &nbsp;
298 </para>
299 </listitem>
300 </itemizedlist>
301 </para>
302
303 <para>
304 <itemizedlist>
305 <listitem>
306 <para id='qa-issue-debug-files'>
307 <code>
308 non debug package contains .debug directory: &lt;packagename&gt; path &lt;path&gt; [debug-files]
309 </code>
310 </para>
311
312 <para>
313 The specified package contains a
314 <filename>.debug</filename> directory, which should not
315 appear in anything but the <filename>-dbg</filename>
316 package.
317 This situation might occur if you add a path which contains
318 a <filename>.debug</filename> directory and do not
319 explicitly add the <filename>.debug</filename> directory
320 to the <filename>-dbg</filename> package.
321 If this is the case, add the <filename>.debug</filename>
322 directory explicitly to
323 <filename>FILES_${PN}-dbg</filename>.
324 See
325 <link linkend='var-FILES'><filename>FILES</filename></link>
326 for additional information on <filename>FILES</filename>.
327 </para>
328
329 <para>
330 &nbsp;
331 </para>
332 </listitem>
333 </itemizedlist>
334 </para>
335
336 <para>
337 <itemizedlist>
338 <listitem>
339 <para id='qa-issue-arch'>
340 <code>
341 Architecture did not match (&lt;machine_arch&gt; to &lt;file_arch&gt;) on &lt;file&gt; [arch]
342 </code>
343 </para>
344
345 <para>
346 By default, the OpenEmbedded build system checks the
347 Executable and Linkable Format (ELF) type, bit size, and
348 endianness of any binaries to ensure they match the
349 target architecture.
350 This test fails if any binaries do not match the type since
351 there would be an incompatibility.
352 The test could indicate that the wrong compiler or compiler
353 options have been used.
354 Sometimes software, like bootloaders, might need to
355 bypass this check.
356 If the file you receive the error for is firmware
357 that is not intended to be executed within the target
358 operating system or is intended to run on a separate
359 processor within the device, you can add "arch" to
360 <link linkend='var-INSANE_SKIP'><filename>INSANE_SKIP</filename></link>
361 for the package.
362 Another option is to check the
363 <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
364 log and verify that the compiler options being used
365 are correct.
366 </para>
367
368 <para>
369 &nbsp;
370 </para>
371 </listitem>
372 </itemizedlist>
373 </para>
374
375 <para>
376 <itemizedlist>
377 <listitem>
378 <para id='qa-issue-arch-bit-size-no-match'>
379 <code>
380 Bit size did not match (&lt;machine_bits&gt; to &lt;file_bits&gt;) &lt;recipe&gt; on &lt;file&gt; [arch]
381 </code>
382 </para>
383
384 <para>
385 By default, the OpenEmbedded build system checks
386 the Executable and Linkable Format (ELF) type,
387 bit size, and endianness of any binaries to ensure
388 they match the target architecture.
389 This test fails if any binaries do not match the type since
390 there would be an incompatibility.
391 The test could indicate that the wrong compiler or compiler
392 options have been used.
393 Sometimes software, like bootloaders, might need to
394 bypass this check.
395 If the file you receive the error for is firmware that
396 is not intended to be executed within the target
397 operating system or is intended to run on a separate
398 processor within the device, you can add "arch" to
399 <link linkend='var-INSANE_SKIP'><filename>INSANE_SKIP</filename></link>
400 for the package.
401 Another option is to check the
402 <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
403 log and verify that the compiler options being used are
404 correct.
405 </para>
406
407 <para>
408 &nbsp;
409 </para>
410 </listitem>
411 </itemizedlist>
412 </para>
413
414 <para>
415 <itemizedlist>
416 <listitem>
417 <para id='qa-issue-arch-endianness-no-match'>
418 <code>
419 Endianness did not match (&lt;machine_endianness&gt; to &lt;file_endianness&gt;) on &lt;file&gt; [arch]
420 </code>
421 </para>
422
423 <para>
424 By default, the OpenEmbedded build system checks
425 the Executable and Linkable Format (ELF) type, bit
426 size, and endianness of any binaries to ensure they
427 match the target architecture.
428 This test fails if any binaries do not match the type since
429 there would be an incompatibility.
430 The test could indicate that the wrong compiler or compiler
431 options have been used.
432 Sometimes software, like bootloaders, might need to
433 bypass this check.
434 If the file you receive the error for is firmware
435 that is not intended to be executed within the target
436 operating system or is intended to run on a separate
437 processor within the device, you can add "arch" to
438 <link linkend='var-INSANE_SKIP'><filename>INSANE_SKIP</filename></link>
439 for the package.
440 Another option is to check the
441 <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
442 log and verify that the compiler options being used
443 are correct.
444 </para>
445
446 <para>
447 &nbsp;
448 </para>
449 </listitem>
450 </itemizedlist>
451 </para>
452
453 <para>
454 <itemizedlist>
455 <listitem>
456 <para id='qa-issue-textrel'>
457 <code>
458 ELF binary '&lt;file&gt;' has relocations in .text [textrel]
459 </code>
460 </para>
461
462 <para>
463 The specified ELF binary contains relocations in its
464 <filename>.text</filename> sections.
465 This situation can result in a performance impact
466 at runtime.
467 </para>
468
469 <para>
470 &nbsp;
471 </para>
472 </listitem>
473 </itemizedlist>
474 </para>
475
476 <para>
477 <itemizedlist>
478 <listitem>
479 <para id='qa-issue-ldflags'>
480 <code>
481 No GNU_HASH in the elf binary: '&lt;file&gt;' [ldflags]
482 </code>
483 </para>
484
485 <para>
486 This indicates that binaries produced when building the
487 recipe have not been linked with the
488 <link linkend='var-LDFLAGS'><filename>LDFLAGS</filename></link>
489 options provided by the build system.
490 Check to be sure that the <filename>LDFLAGS</filename>
491 variable is being passed to the linker command.
492 A common workaround for this situation is to pass in
493 <filename>LDFLAGS</filename> using
494 <link linkend='var-TARGET_CC_ARCH'><filename>TARGET_CC_ARCH</filename></link>
495 within the recipe as follows:
496 <literallayout class='monospaced'>
497 TARGET_CC_ARCH += "${LDFLAGS}"
498 </literallayout>
499 </para>
500
501 <para>
502 &nbsp;
503 </para>
504 </listitem>
505 </itemizedlist>
506 </para>
507
508 <para>
509 <itemizedlist>
510 <listitem>
511 <para id='qa-issue-xorg-driver-abi'>
512 <code>
513 Package &lt;packagename&gt; contains Xorg driver (&lt;driver&gt;) but no xorg-abi- dependencies [xorg-driver-abi]
514 </code>
515 </para>
516
517 <para>
518 The specified package contains an Xorg driver, but does not
519 have a corresponding ABI package dependency.
520 The xserver-xorg recipe provides driver ABI names.
521 All drivers should depend on the ABI versions that they have
522 been built against.
523 Driver recipes that include
524 <filename>xorg-driver-input.inc</filename> or
525 <filename>xorg-driver-video.inc</filename> will
526 automatically get these versions.
527 Consequently, you should only need to explicitly add
528 dependencies to binary driver recipes.
529 </para>
530
531 <para>
532 &nbsp;
533 </para>
534 </listitem>
535 </itemizedlist>
536 </para>
537
538 <para>
539 <itemizedlist>
540 <listitem>
541 <para id='qa-issue-infodir'>
542 <code>
543 The /usr/share/info/dir file is not meant to be shipped in a particular package. [infodir]
544 </code>
545 </para>
546
547 <para>
548 The <filename>/usr/share/info/dir</filename> should not be
549 packaged.
550 Add the following line to your
551 <link linkend='ref-tasks-install'><filename>do_install</filename></link>
552 task or to your <filename>do_install_append</filename>
553 within the recipe as follows:
554 <literallayout class='monospaced'>
555 rm ${D}${infodir}/dir
556 </literallayout>
557 </para>
558
559 <para>
560 &nbsp;
561 </para>
562 </listitem>
563 </itemizedlist>
564 </para>
565
566 <para>
567 <itemizedlist>
568 <listitem>
569 <para id='qa-issue-symlink-to-sysroot'>
570 <code>
571 Symlink &lt;path&gt; in &lt;packagename&gt; points to TMPDIR [symlink-to-sysroot]
572 </code>
573 </para>
574
575 <para>
576 The specified symlink points into
577 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
578 on the host.
579 Such symlinks will work on the host.
580 However, they are clearly invalid when running on
581 the target.
582 You should either correct the symlink to use a relative
583 path or remove the symlink.
584 </para>
585
586 <para>
587 &nbsp;
588 </para>
589 </listitem>
590 </itemizedlist>
591 </para>
592
593 <para>
594 <itemizedlist>
595 <listitem>
596 <para id='qa-issue-la'>
597 <code>
598 &lt;file&gt; failed sanity test (workdir) in path &lt;path&gt; [la]
599 </code>
600 </para>
601
602 <para>
603 The specified <filename>.la</filename> file contains
604 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
605 paths.
606 Any <filename>.la</filename> file containing these paths
607 is incorrect since <filename>libtool</filename> adds the
608 correct sysroot prefix when using the files automatically
609 itself.
610 </para>
611
612 <para>
613 &nbsp;
614 </para>
615 </listitem>
616 </itemizedlist>
617 </para>
618
619 <para>
620 <itemizedlist>
621 <listitem>
622 <para id='qa-issue-pkgconfig'>
623 <code>
624 &lt;file&gt; failed sanity test (tmpdir) in path &lt;path&gt; [pkgconfig]
625 </code>
626 </para>
627
628 <para>
629 The specified <filename>.pc</filename> file contains
630 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link><filename>/</filename><link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>
631 paths.
632 Any <filename>.pc</filename> file containing these paths is
633 incorrect since <filename>pkg-config</filename> itself adds
634 the correct sysroot prefix when the files are accessed.
635 </para>
636
637 <para>
638 &nbsp;
639 </para>
640 </listitem>
641 </itemizedlist>
642 </para>
643
644 <para>
645 <itemizedlist>
646 <listitem>
647 <para id='qa-issue-debug-deps'>
648 <code>
649 &lt;packagename&gt; rdepends on &lt;debug_packagename&gt; [debug-deps]
650 </code>
651 </para>
652
653 <para>
654 A dependency exists between the specified non-dbg package
655 (i.e. a package whose name does not end in
656 <filename>-dbg</filename>) and a package that is a
657 <filename>dbg</filename> package.
658 The <filename>dbg</filename> packages contain
659 debug symbols and are brought in using several
660 different methods:
661 <itemizedlist>
662 <listitem><para>
663 Using the <filename>dbg-pkgs</filename>
664 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
665 value.
666 </para></listitem>
667 <listitem><para>
668 Using
669 <link linkend='var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></link>.
670 </para></listitem>
671 <listitem><para>
672 As a dependency of another
673 <filename>dbg</filename> package that was brought
674 in using one of the above methods.
675 </para></listitem>
676 </itemizedlist>
677 The dependency might have been automatically added
678 because the <filename>dbg</filename> package erroneously
679 contains files that it should not contain (e.g. a
680 non-symlink <filename>.so</filename> file) or it might
681 have been added manually (e.g. by adding to
682 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>).
683 </para>
684
685 <para>
686 &nbsp;
687 </para>
688 </listitem>
689 </itemizedlist>
690 </para>
691
692 <para>
693 <itemizedlist>
694 <listitem>
695 <para id='qa-issue-dev-deps'>
696 <code>
697 &lt;packagename&gt; rdepends on &lt;dev_packagename&gt; [dev-deps]
698 </code>
699 </para>
700
701 <para>
702 A dependency exists between the specified non-dev package
703 (a package whose name does not end in
704 <filename>-dev</filename>) and a package that is a
705 <filename>dev</filename> package.
706 The <filename>dev</filename> packages contain development
707 headers and are usually brought in using several different
708 methods:
709 <itemizedlist>
710 <listitem><para>
711 Using the <filename>dev-pkgs</filename>
712 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
713 value.
714 </para></listitem>
715 <listitem><para>
716 Using
717 <link linkend='var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></link>.
718 </para></listitem>
719 <listitem><para>
720 As a dependency of another
721 <filename>dev</filename> package that was brought
722 in using one of the above methods.
723 </para></listitem>
724 </itemizedlist>
725 The dependency might have been automatically added (because
726 the <filename>dev</filename> package erroneously contains
727 files that it should not have (e.g. a non-symlink
728 <filename>.so</filename> file) or it might have been added
729 manually (e.g. by adding to
730 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>).
731 </para>
732
733 <para>
734 &nbsp;
735 </para>
736 </listitem>
737 </itemizedlist>
738 </para>
739
740 <para>
741 <itemizedlist>
742 <listitem>
743 <para id='qa-issue-dep-cmp'>
744 <code>
745 &lt;var&gt;_&lt;packagename&gt; is invalid: &lt;comparison&gt; (&lt;value&gt;) only comparisons &lt;, =, &gt;, &lt;=, and &gt;= are allowed [dep-cmp]
746 </code>
747 </para>
748
749 <para>
750 If you are adding a versioned dependency relationship to one
751 of the dependency variables
752 (<link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>,
753 <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>,
754 <link linkend='var-RSUGGESTS'><filename>RSUGGESTS</filename></link>,
755 <link linkend='var-RPROVIDES'><filename>RPROVIDES</filename></link>,
756 <link linkend='var-RREPLACES'><filename>RREPLACES</filename></link>,
757 or
758 <link linkend='var-RCONFLICTS'><filename>RCONFLICTS</filename></link>),
759 you must only use the named comparison operators.
760 Change the versioned dependency values you are adding
761 to match those listed in the message.
762 </para>
763
764 <para>
765 &nbsp;
766 </para>
767 </listitem>
768 </itemizedlist>
769 </para>
770
771 <para>
772 <itemizedlist>
773 <listitem>
774 <para id='qa-issue-compile-host-path'>
775 <code>
776 &lt;recipename&gt;: The compile log indicates that host include and/or library paths were used. Please check the log '&lt;logfile&gt;' for more information. [compile-host-path]
777 </code>
778 </para>
779
780 <para>
781 The log for the
782 <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
783 task indicates that paths on the host were searched
784 for files, which is not appropriate when cross-compiling.
785 Look for "is unsafe for cross-compilation" or "CROSS COMPILE
786 Badness" in the specified log file.
787 </para>
788
789 <para>
790 &nbsp;
791 </para>
792 </listitem>
793 </itemizedlist>
794 </para>
795
796 <para>
797 <itemizedlist>
798 <listitem>
799 <para id='qa-issue-install-host-path'>
800 <code>
801 &lt;recipename&gt;: The install log indicates that host include and/or library paths were used. Please check the log '&lt;logfile&gt;' for more information. [install-host-path]
802 </code>
803 </para>
804
805 <para>
806 The log for the
807 <link linkend='ref-tasks-install'><filename>do_install</filename></link>
808 task indicates that paths on the host were searched
809 for files, which is not appropriate when cross-compiling.
810 Look for "is unsafe for cross-compilation"
811 or "CROSS COMPILE Badness" in the specified log file.
812 </para>
813
814 <para>
815 &nbsp;
816 </para>
817 </listitem>
818 </itemizedlist>
819 </para>
820
821 <para>
822 <itemizedlist>
823 <listitem>
824 <para id='qa-issue-autoconf-log'>
825 <code>
826 This autoconf log indicates errors, it looked at host include and/or library paths while determining system capabilities. Rerun configure task after fixing this. The path was '&lt;path&gt;'
827 </code>
828 </para>
829
830 <para>
831 The log for the
832 <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
833 task indicates that paths on the host were searched
834 for files, which is not appropriate when cross-compiling.
835 Look for "is unsafe for cross-compilation" or
836 "CROSS COMPILE Badness" in the specified log file.
837 </para>
838
839 <para>
840 &nbsp;
841 </para>
842 </listitem>
843 </itemizedlist>
844 </para>
845
846 <para>
847 <itemizedlist>
848 <listitem>
849 <para id='qa-issue-pkgname'>
850 <code>
851 &lt;packagename&gt; doesn't match the [a-z0-9.+-]+ regex [pkgname]
852 </code>
853 </para>
854
855 <para>
856 The convention within the OpenEmbedded build system
857 (sometimes enforced by the package manager itself) is to
858 require that package names are all lower case
859 and to allow a restricted set of characters.
860 If your recipe name does not match this, or you add
861 packages to
862 <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>
863 that do not conform to the convention, then you
864 will receive this error.
865 Rename your recipe.
866 Or, if you have added a non-conforming package name to
867 <filename>PACKAGES</filename>, change the package name
868 appropriately.
869 </para>
870
871 <para>
872 &nbsp;
873 </para>
874 </listitem>
875 </itemizedlist>
876 </para>
877
878 <para>
879 <itemizedlist>
880 <listitem>
881 <para id='qa-issue-unknown-configure-option'>
882 <code>
883 &lt;recipe&gt;: configure was passed unrecognized options: &lt;options&gt; [unknown-configure-option]
884 </code>
885 </para>
886
887 <para>
888 The configure script is reporting that the specified
889 options are unrecognized.
890 This situation could be because the options
891 were previously valid but have been removed from the
892 configure script.
893 Or, there was a mistake when the options were added
894 and there is another option that should be used instead.
895 If you are unsure, consult the upstream build
896 documentation, the
897 <filename>./configure &dash;&dash;help</filename> output,
898 and the upstream change log or release notes.
899 Once you have worked out what the appropriate
900 change is, you can update
901 <link linkend='var-EXTRA_OECONF'><filename>EXTRA_OECONF</filename></link>
902 or the individual
903 <link linkend='var-PACKAGECONFIG'><filename>PACKAGECONFIG</filename></link>
904 option values accordingly.
905 </para>
906
907 <para>
908 &nbsp;
909 </para>
910 </listitem>
911 </itemizedlist>
912 </para>
913
914 <para>
915 <itemizedlist>
916 <listitem>
917 <para id='qa-issue-pn-overrides'>
918 <code>
919 Recipe &lt;recipefile&gt; has PN of "&lt;recipename&gt;" which is in OVERRIDES, this can result in unexpected behavior. [pn-overrides]
920 </code>
921 </para>
922
923 <para>
924 The specified recipe has a name
925 (<link linkend='var-PN'><filename>PN</filename></link>)
926 value that appears in
927 <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>.
928 If a recipe is named such that its <filename>PN</filename>
929 value matches something already in
930 <filename>OVERRIDES</filename> (e.g. <filename>PN</filename>
931 happens to be the same as
932 <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
933 or
934 <link linkend='var-DISTRO'><filename>DISTRO</filename></link>),
935 it can have unexpected consequences.
936 For example, assignments such as
937 <filename>FILES_${PN} = "xyz"</filename> effectively
938 turn into <filename>FILES = "xyz"</filename>.
939 Rename your recipe (or if <filename>PN</filename> is being
940 set explicitly, change the <filename>PN</filename> value) so
941 that the conflict does not occur.
942 See
943 <link linkend='var-FILES'><filename>FILES</filename></link>
944 for additional information.
945 </para>
946
947 <para>
948 &nbsp;
949 </para>
950 </listitem>
951 </itemizedlist>
952 </para>
953
954 <para>
955 <itemizedlist>
956 <listitem>
957 <para id='qa-issue-pkgvarcheck'>
958 <code>
959 &lt;recipefile&gt;: Variable &lt;variable&gt; is set as not being package specific, please fix this. [pkgvarcheck]
960 </code>
961 </para>
962
963 <para>
964 Certain variables
965 (<link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>,
966 <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>,
967 <link linkend='var-RSUGGESTS'><filename>RSUGGESTS</filename></link>,
968 <link linkend='var-RCONFLICTS'><filename>RCONFLICTS</filename></link>,
969 <link linkend='var-RPROVIDES'><filename>RPROVIDES</filename></link>,
970 <link linkend='var-RREPLACES'><filename>RREPLACES</filename></link>,
971 <link linkend='var-FILES'><filename>FILES</filename></link>,
972 <filename>pkg_preinst</filename>,
973 <filename>pkg_postinst</filename>,
974 <filename>pkg_prerm</filename>,
975 <filename>pkg_postrm</filename>, and
976 <link linkend='var-ALLOW_EMPTY'><filename>ALLOW_EMPTY</filename></link>)
977 should always be set specific to a package (i.e. they
978 should be set with a package name override such as
979 <filename>RDEPENDS_${PN} = "value"</filename> rather than
980 <filename>RDEPENDS = "value"</filename>).
981 If you receive this error, correct any assignments to these
982 variables within your recipe.
983 </para>
984
985 <para>
986 &nbsp;
987 </para>
988 </listitem>
989 </itemizedlist>
990 </para>
991
992 <para>
993 <itemizedlist>
994 <listitem>
995 <para id='qa-issue-already-stripped'>
996 <code>
997 File '&lt;file&gt;' from &lt;recipename&gt; was already stripped, this will prevent future debugging! [already-stripped]
998 </code>
999 </para>
1000
1001 <para>
1002 Produced binaries have already been stripped prior to the
1003 build system extracting debug symbols.
1004 It is common for upstream software projects to default to
1005 stripping debug symbols for output binaries.
1006 In order for debugging to work on the target using
1007 <filename>-dbg</filename> packages, this stripping must be
1008 disabled.
1009 </para>
1010
1011 <para>
1012 Depending on the build system used by the software being
1013 built, disabling this stripping could be as easy as
1014 specifying an additional configure option.
1015 If not, disabling stripping might involve patching
1016 the build scripts.
1017 In the latter case, look for references to "strip" or
1018 "STRIP", or the "-s" or "-S" command-line options being
1019 specified on the linker command line (possibly
1020 through the compiler command line if preceded with "-Wl,").
1021 <note>
1022 Disabling stripping here does not mean that the final
1023 packaged binaries will be unstripped.
1024 Once the OpenEmbedded build system splits out debug
1025 symbols to the <filename>-dbg</filename> package,
1026 it will then strip the symbols from the binaries.
1027 </note>
1028 </para>
1029
1030 <para>
1031 &nbsp;
1032 </para>
1033 </listitem>
1034 </itemizedlist>
1035 </para>
1036
1037 <para>
1038 <itemizedlist>
1039 <listitem>
1040 <para id='qa-issue-packages-list'>
1041 <code>
1042 &lt;packagename&gt; is listed in PACKAGES multiple times, this leads to packaging errors. [packages-list]
1043 </code>
1044 </para>
1045
1046 <para>
1047 Package names must appear only once in the
1048 <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>
1049 variable.
1050 You might receive this error if you are attempting to add a
1051 package to <filename>PACKAGES</filename> that is
1052 already in the variable's value.
1053 </para>
1054
1055 <para>
1056 &nbsp;
1057 </para>
1058 </listitem>
1059 </itemizedlist>
1060 </para>
1061
1062 <para>
1063 <itemizedlist>
1064 <listitem>
1065 <para id='qa-issue-files-invalid'>
1066 <code>
1067 FILES variable for package &lt;packagename&gt; contains '//' which is invalid. Attempting to fix this but you should correct the metadata. [files-invalid]
1068 </code>
1069 </para>
1070
1071 <para>
1072 The string "//" is invalid in a Unix path.
1073 Correct all occurrences where this string appears in a
1074 <link linkend='var-FILES'><filename>FILES</filename></link>
1075 variable so that there is only a single "/".
1076 </para>
1077
1078 <para>
1079 &nbsp;
1080 </para>
1081 </listitem>
1082 </itemizedlist>
1083 </para>
1084
1085 <para>
1086 <itemizedlist>
1087 <listitem>
1088 <para id='qa-issue-installed-vs-shipped'>
1089 <code>
1090 &lt;recipename&gt;: Files/directories were installed but not shipped [installed-vs-shipped]
1091 </code>
1092 </para>
1093
1094 <para>
1095 Files have been installed within the
1096 <link linkend='ref-tasks-install'><filename>do_install</filename></link>
1097 task but have not been included in any package by way of the
1098 <link linkend='var-FILES'><filename>FILES</filename></link>
1099 variable.
1100 Files that do not appear in any package cannot be present in
1101 an image later on in the build process.
1102 You need to do one of the following:
1103 <itemizedlist>
1104 <listitem><para>
1105 Add the files to <filename>FILES</filename> for the
1106 package you want them to appear in (e.g.
1107 <filename>FILES_${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}</filename> for the main
1108 package).
1109 </para></listitem>
1110 <listitem><para>
1111 Delete the files at the end of the
1112 <filename>do_install</filename> task if the files
1113 are not needed in any package.
1114 </para></listitem>
1115 </itemizedlist>
1116 </para>
1117
1118 <para>
1119 &nbsp;
1120 </para>
1121 </listitem>
1122 </itemizedlist>
1123 </para>
1124
1125 <para>
1126 <itemizedlist>
1127 <listitem>
1128 <para id='qa-issue-old-and-new-package-and-version-names'>
1129 <code>
1130 &lt;oldpackage&gt;-&lt;oldpkgversion&gt; was registered as shlib provider for &lt;library&gt;, changing it to &lt;newpackage&gt;-&lt;newpkgversion&gt; because it was built later
1131 </code>
1132 </para>
1133
1134 <para>
1135 This message means that both
1136 <filename>&lt;oldpackage&gt;</filename> and
1137 <filename>&lt;newpackage&gt;</filename> provide the specified
1138 shared library.
1139 You can expect this message when a recipe has been renamed.
1140 However, if that is not the case, the message might indicate
1141 that a private version of a library is being erroneously
1142 picked up as the provider for a common library.
1143 If that is the case, you should add the library's
1144 <filename>.so</filename> file name to
1145 <link linkend='var-PRIVATE_LIBS'><filename>PRIVATE_LIBS</filename></link>
1146 in the recipe that provides
1147 the private version of the library.
1148 </para>
1149 </listitem>
1150 </itemizedlist>
1151 </para>
1152
1153<!--
1154Here are some messages that might be documented in the future.
1155Right now we are not documenting them because the QA checks are not
1156enabled by default:
1157
1158 <para>
1159 <itemizedlist>
1160 <listitem><para>
1161 <literallayout class='monospaced'>
1162 Desktop file issue: &lt;error&gt; [desktop]
1163 </literallayout>
1164 NEED A DESCRIPTION AND SOLUTION
1165 </para></listitem>
1166 </itemizedlist>
1167 </para>
1168
1169 <para>
1170 <itemizedlist>
1171 <listitem><para>
1172 <literallayout class='monospaced'>
1173 &lt;packagename&gt;: &lt;file&gt;, installed in the base_prefix, requires a shared library under exec_prefix (&lt;exec_prefix&t;g) [unsafe-references-in-binaries]
1174 </literallayout>
1175 NEED A DESCRIPTION AND SOLUTION
1176 </para></listitem>
1177 </itemizedlist>
1178 </para>
1179
1180 <para>
1181 <itemizedlist>
1182 <listitem><para>
1183 <literallayout class='monospaced'>
1184 &lt;packagename&gt;: Found a reference to &lt;exec_prefix&gt;/ in &lt;path&gt; - Shell scripts in base_bindir and base_sbindir should not reference anything in exec_prefix [unsafe-references-in-scripts]
1185 </literallayout>
1186 NEED A DESCRIPTION AND SOLUTION
1187 </para></listitem>
1188 </itemizedlist>
1189 </para>
1190-->
1191</section>
1192
1193<section id='configuring-and-disabling-qa-checks'>
1194 <title>Configuring and Disabling QA Checks</title>
1195
1196 <para>
1197 You can configure the QA checks globally so that specific check
1198 failures either raise a warning or an error message, using the
1199 <link linkend='var-WARN_QA'><filename>WARN_QA</filename></link> and
1200 <link linkend='var-ERROR_QA'><filename>ERROR_QA</filename></link>
1201 variables, respectively.
1202 You can also disable checks within a particular recipe using
1203 <link linkend='var-INSANE_SKIP'><filename>INSANE_SKIP</filename></link>.
1204 For information on how to work with the QA checks, see the
1205 "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
1206 section.
1207 <note><title>Tip</title>
1208 Please keep in mind that the QA checks exist in order to
1209 detect real or potential problems in the packaged output.
1210 So exercise caution when disabling these checks.
1211 </note>
1212 </para>
1213</section>
1214</chapter>
1215<!--
1216vim: expandtab tw=80 ts=4
1217-->
diff --git a/documentation/ref-manual/ref-structure.xml b/documentation/ref-manual/ref-structure.xml
new file mode 100644
index 0000000000..e7ca7b334b
--- /dev/null
+++ b/documentation/ref-manual/ref-structure.xml
@@ -0,0 +1,1129 @@
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
67 <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
68 </para>
69 </section>
70
71 <section id='structure-core-build'>
72 <title><filename>build/</filename></title>
73
74 <para>
75 This directory contains user configuration files and the output
76 generated by the OpenEmbedded build system in its standard configuration where
77 the source tree is combined with the output.
78 The <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
79 is created initially when you <filename>source</filename>
80 the OpenEmbedded build environment setup script
81 (i.e.
82 <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
83 or
84 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>).
85 </para>
86
87 <para>
88 It is also possible to place output and configuration
89 files in a directory separate from the
90 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
91 by providing a directory name when you <filename>source</filename>
92 the setup script.
93 For information on separating output from your local
94 Source Directory files, see the
95 "<link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
96 and
97 "<link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>"
98 sections.
99 </para>
100 </section>
101
102 <section id='handbook'>
103 <title><filename>documentation/</filename></title>
104
105 <para>
106 This directory holds the source for the Yocto Project documentation
107 as well as templates and tools that allow you to generate PDF and HTML
108 versions of the manuals.
109 Each manual is contained in a sub-folder.
110 For example, the files for this manual reside in
111 the <filename>ref-manual/</filename> directory.
112 </para>
113 </section>
114
115 <section id='structure-core-meta'>
116 <title><filename>meta/</filename></title>
117
118 <para>
119 This directory contains the OpenEmbedded Core metadata.
120 The directory holds recipes, common classes, and machine
121 configuration for emulated targets (<filename>qemux86</filename>,
122 <filename>qemuarm</filename>, and so forth.)
123 </para>
124 </section>
125
126 <section id='structure-core-meta-yocto'>
127 <title><filename>meta-yocto/</filename></title>
128
129 <para>
130 This directory contains the configuration for the Poky
131 reference distribution.
132 </para>
133 </section>
134
135 <section id='structure-core-meta-yocto-bsp'>
136 <title><filename>meta-yocto-bsp/</filename></title>
137
138 <para>
139 This directory contains the Yocto Project reference
140 hardware Board Support Packages (BSPs).
141 For more information on BSPs, see the
142 <ulink url='&YOCTO_DOCS_BSP_URL;'>Yocto Project Board Support
143 Package (BSP) Developer's Guide</ulink>.
144 </para>
145 </section>
146
147 <section id='structure-meta-selftest'>
148 <title><filename>meta-selftest/</filename></title>
149
150 <para>
151 This directory adds additional recipes and append files
152 used by the OpenEmbedded selftests to verify the behavior
153 of the build system.
154 </para>
155
156 <para>
157 You do not have to add this layer to your
158 <filename>bblayers.conf</filename> file unless you want to run the
159 selftests.
160 </para>
161 </section>
162
163 <section id='structure-meta-skeleton'>
164 <title><filename>meta-skeleton/</filename></title>
165
166 <para>
167 This directory contains template recipes for BSP and kernel development.
168 </para>
169 </section>
170
171 <section id='structure-core-scripts'>
172 <title><filename>scripts/</filename></title>
173
174 <para>
175 This directory contains various integration scripts that implement
176 extra functionality in the Yocto Project environment (e.g. QEMU scripts).
177 The <link linkend="structure-core-script"><filename>&OE_INIT_FILE;</filename></link>
178 and
179 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>
180 scripts append this directory to the shell's
181 <filename>PATH</filename> environment variable.
182 </para>
183
184 <para>
185 The <filename>scripts</filename> directory has useful scripts that assist in contributing
186 back to the Yocto Project, such as <filename>create-pull-request</filename> and
187 <filename>send-pull-request</filename>.
188 </para>
189 </section>
190
191 <section id='structure-core-script'>
192 <title><filename>&OE_INIT_FILE;</filename></title>
193
194 <para>
195 This script is one of two scripts that set up the OpenEmbedded build
196 environment.
197 For information on the other script, see the
198 "<link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>"
199 section.
200 </para>
201
202 <para>
203 Running this script with the <filename>source</filename> command in
204 a shell makes changes to <filename>PATH</filename> and sets other
205 core BitBake variables based on the current working directory.
206 You need to run an environment setup script before running BitBake
207 commands.
208 The script uses other scripts within the
209 <filename>scripts</filename> directory to do the bulk of the work.
210 </para>
211
212 <para>
213 When you run this script, your Yocto Project environment is set
214 up, a
215 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
216 is created, your working directory becomes the Build Directory,
217 and you are presented with a list of common BitBake targets.
218 Here is an example:
219 <literallayout class='monospaced'>
220 $ source oe-init-build-env
221
222 ### Shell environment set up for builds. ###
223
224 You can now run 'bitbake &lt;target&gt;'
225
226 Common targets are:
227 core-image-minimal
228 core-image-sato
229 meta-toolchain
230 adt-installer
231 meta-ide-support
232
233 You can also run generated qemu images with a command like 'runqemu qemux86'
234 </literallayout>
235 The script gets its default list of common targets from the
236 <filename>conf-notes.txt</filename> file, which is found in the
237 <filename>meta-yocto</filename> directory within the
238 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
239 Should you have custom distributions, it is very easy to modify
240 this configuration file to include your targets for your
241 distribution.
242 See the
243 "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-custom-template-configuration-directory'>Creating a Custom Template Configuration Directory</ulink>"
244 section in the Yocto Project Development Manual for more
245 information.
246 </para>
247
248 <para>
249 By default, running this script without a
250 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
251 argument creates the <filename>build</filename> directory
252 in your current working directory.
253 If you provide a Build Directory argument when you
254 <filename>source</filename> the script, you direct the OpenEmbedded
255 build system to create a Build Directory of your choice.
256 For example, the following command creates a Build Directory named
257 <filename>mybuilds</filename> that is outside of the
258 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>:
259 <literallayout class='monospaced'>
260 $ source &OE_INIT_FILE; ~/mybuilds
261 </literallayout>
262 The OpenEmbedded build system uses the template configuration
263 files, which are found by default in the
264 <filename>meta-yocto/conf</filename> directory in the
265 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
266 See the
267 "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-custom-template-configuration-directory'>Creating a Custom Template Configuration Directory</ulink>"
268 section in the Yocto Project Development Manual for more
269 information.
270 <note>
271 The OpenEmbedded build system does not support file or directory names that
272 contain spaces.
273 If you attempt to run the <filename>&OE_INIT_FILE;</filename> script
274 from a Source Directory that contains spaces in either the filenames
275 or directory names, the script returns an error indicating no such
276 file or directory.
277 Be sure to use a Source Directory free of names containing spaces.
278 </note>
279 </para>
280 </section>
281
282 <section id='structure-memres-core-script'>
283 <title><filename>oe-init-build-env-memres</filename></title>
284
285 <para>
286 This script is one of two scripts that set up the OpenEmbedded
287 build environment.
288 Aside from setting up the environment, this script starts a
289 memory-resident BitBake server.
290 For information on the other setup script, see the
291 "<link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>"
292 section.
293 </para>
294
295 <para>
296 Memory-resident BitBake resides in memory until you specifically
297 remove it using the following BitBake command:
298 <literallayout class='monospaced'>
299 $ bitbake -m
300 </literallayout>
301 </para>
302
303 <para>
304 Running this script with the <filename>source</filename> command in
305 a shell makes changes to <filename>PATH</filename> and sets other
306 core BitBake variables based on the current working directory.
307 One of these variables is the
308 <link linkend='var-BBSERVER'><filename>BBSERVER</filename></link>
309 variable, which allows the OpenEmbedded build system to locate
310 the server that is running BitBake.
311 </para>
312
313 <para>
314 You need to run an environment setup script before using BitBake
315 commands.
316 Following is the script syntax:
317 <literallayout class='monospaced'>
318 $ source oe-init-build-env-memres <replaceable>port_number</replaceable> <replaceable>build_dir</replaceable>
319 </literallayout>
320 The script uses other scripts within the
321 <filename>scripts</filename> directory to do the bulk of the work.
322 </para>
323
324 <para>
325 If you do not provide a port number with the script, the
326 BitBake server at port "12345" is started.
327 </para>
328
329 <para>
330 When you run this script, your Yocto Project environment is set
331 up, a
332 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
333 is created, your working directory becomes the Build Directory,
334 and you are presented with a list of common BitBake targets.
335 Here is an example:
336 <literallayout class='monospaced'>
337 $ source oe-init-build-env-memres
338 No port specified, using dynamically selected port
339
340 ### Shell environment set up for builds. ###
341
342 You can now run 'bitbake &lt;target&gt;'
343
344 Common targets are:
345 core-image-minimal
346 core-image-sato
347 meta-toolchain
348 adt-installer
349 meta-ide-support
350
351 You can also run generated qemu images with a command like 'runqemu qemux86'
352 Bitbake server started on demand as needed, use bitbake -m to shut it down
353 </literallayout>
354 The script gets its default list of common targets from the
355 <filename>conf-notes.txt</filename> file, which is found in the
356 <filename>meta-yocto</filename> directory within the
357 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
358 Should you have custom distributions, it is very easy to modify
359 this configuration file to include your targets for your
360 distribution.
361 See the
362 "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-custom-template-configuration-directory'>Creating a Custom Template Configuration Directory</ulink>"
363 section in the Yocto Project Development Manual for more
364 information.
365 </para>
366
367 <para>
368 By default, running this script without a
369 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
370 argument creates a build directory named
371 <filename>build</filename>.
372 If you provide a Build Directory argument when you
373 <filename>source</filename> the script, the Build Directory is
374 created using that name.
375 For example, the following command starts the BitBake server using
376 the default port "12345" and creates a Build Directory named
377 <filename>mybuilds</filename> that is outside of the
378 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>:
379 <literallayout class='monospaced'>
380 $ source oe-init-build-env-memres ~/mybuilds
381 </literallayout>
382 The OpenEmbedded build system uses the template configuration
383 files, which are found by default in the
384 <filename>meta-yocto/conf</filename> directory in the
385 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
386 See the
387 "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-custom-template-configuration-directory'>Creating a Custom Template Configuration Directory</ulink>"
388 section in the Yocto Project Development Manual for more
389 information.
390 <note>
391 The OpenEmbedded build system does not support file or
392 directory names that contain spaces.
393 If you attempt to run the
394 <filename>oe-init-build-env-memres</filename> script
395 from a Source Directory that contains spaces in either the
396 filenames or directory names, the script returns an error
397 indicating no such file or directory.
398 Be sure to use a Source Directory free of names containing
399 spaces.
400 </note>
401 </para>
402 </section>
403
404 <section id='structure-basic-top-level'>
405 <title><filename>LICENSE, README, and README.hardware</filename></title>
406
407 <para>
408 These files are standard top-level files.
409 </para>
410 </section>
411</section>
412
413<section id='structure-build'>
414 <title>The Build Directory - <filename>build/</filename></title>
415
416 <para>
417 The OpenEmbedded build system creates the
418 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
419 when you run one of the build environment setup scripts (i.e.
420 <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
421 or
422 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>).
423 </para>
424
425 <para>
426 If you do not give the Build Directory a specific name when you run
427 a setup script, the name defaults to <filename>build</filename>.
428 </para>
429
430 <para>
431 The
432 <link linkend='var-TOPDIR'><filename>TOPDIR</filename></link> variable
433 points to the Build Directory.
434 </para>
435
436 <section id='structure-build-buildhistory'>
437 <title><filename>build/buildhistory</filename></title>
438
439 <para>
440 The OpenEmbedded build system creates this directory when you
441 enable the build history feature.
442 The directory tracks build information into image, packages, and
443 SDK subdirectories.
444 For information on the build history feature, see the
445 "<link linkend='maintaining-build-output-quality'>Maintaining Build Output Quality</link>"
446 section.
447 </para>
448 </section>
449
450 <section id='structure-build-conf-local.conf'>
451 <title><filename>build/conf/local.conf</filename></title>
452
453 <para>
454 This configuration file contains all the local user configurations
455 for your build environment.
456 The <filename>local.conf</filename> file contains documentation on
457 the various configuration options.
458 Any variable set here overrides any variable set elsewhere within
459 the environment unless that variable is hard-coded within a file
460 (e.g. by using '=' instead of '?=').
461 Some variables are hard-coded for various reasons but these
462 variables are relatively rare.
463 </para>
464
465 <para>
466 Edit this file to set the
467 <filename><link linkend='var-MACHINE'>MACHINE</link></filename>
468 for which you want to build, which package types you wish to use
469 (<link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>),
470 the location from which you want to access downloaded files
471 (<filename><link linkend='var-DL_DIR'>DL_DIR</link></filename>),
472 and how you want your host machine to use resources
473 (<link linkend='var-BB_NUMBER_THREADS'><filename>BB_NUMBER_THREADS</filename></link>
474 and
475 <link linkend='var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></link>).
476 </para>
477
478 <para>
479 If <filename>local.conf</filename> is not present when you
480 start the build, the OpenEmbedded build system creates it from
481 <filename>local.conf.sample</filename> when
482 you <filename>source</filename> the top-level build environment
483 setup script (i.e.
484 <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
485 or
486 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>).
487 </para>
488
489 <para>
490 The source <filename>local.conf.sample</filename> file used
491 depends on the <filename>$TEMPLATECONF</filename> script variable,
492 which defaults to <filename>meta-yocto/conf</filename>
493 when you are building from the Yocto Project development
494 environment and defaults to <filename>meta/conf</filename> when
495 you are building from the OpenEmbedded Core environment.
496 Because the script variable points to the source of the
497 <filename>local.conf.sample</filename> file, this implies that
498 you can configure your build environment from any layer by setting
499 the variable in the top-level build environment setup script as
500 follows:
501 <literallayout class='monospaced'>
502 TEMPLATECONF=<replaceable>your_layer</replaceable>/conf
503 </literallayout>
504 Once the build process gets the sample file, it uses
505 <filename>sed</filename> to substitute final
506 <filename>${</filename><link linkend='var-OEROOT'><filename>OEROOT</filename></link><filename>}</filename>
507 values for all <filename>##OEROOT##</filename> values.
508 <note>
509 You can see how the <filename>TEMPLATECONF</filename> variable
510 is used by looking at the
511 <filename>scripts/oe-setup-builddir</filename> script in the
512 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
513 You can find the Yocto Project version of the
514 <filename>local.conf.sample</filename> file in the
515 <filename>meta-yocto/conf</filename> directory.
516 </note>
517 </para>
518 </section>
519
520 <section id='structure-build-conf-bblayers.conf'>
521 <title><filename>build/conf/bblayers.conf</filename></title>
522
523 <para>
524 This configuration file defines
525 <ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>layers</ulink>,
526 which are directory trees, traversed (or walked) by BitBake.
527 The <filename>bblayers.conf</filename> file uses the
528 <link linkend='var-BBLAYERS'><filename>BBLAYERS</filename></link>
529 variable to list the layers BitBake tries to find, and uses the
530 <link linkend='var-BBLAYERS_NON_REMOVABLE'><filename>BBLAYERS_NON_REMOVABLE</filename></link>
531 variable to list layers that must not be removed.
532 </para>
533
534 <para>
535 If <filename>bblayers.conf</filename> is not present when you
536 start the build, the OpenEmbedded build system creates it from
537 <filename>bblayers.conf.sample</filename> when
538 you <filename>source</filename> the top-level build environment
539 setup script (i.e.
540 <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
541 or
542 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>).
543 </para>
544
545 <para>
546 The source <filename>bblayers.conf.sample</filename> file used
547 depends on the <filename>$TEMPLATECONF</filename> script variable,
548 which defaults to <filename>meta-yocto/conf</filename>
549 when you are building from the Yocto Project development
550 environment and defaults to <filename>meta/conf</filename> when
551 you are building from the OpenEmbedded Core environment.
552 Because the script variable points to the source of the
553 <filename>bblayers.conf.sample</filename> file, this implies that
554 you can base your build from any layer by setting the variable in
555 the top-level build environment setup script as follows:
556 <literallayout class='monospaced'>
557 TEMPLATECONF=<replaceable>your_layer</replaceable>/conf
558 </literallayout>
559 Once the build process gets the sample file, it uses
560 <filename>sed</filename> to substitute final
561 <filename>${</filename><link linkend='var-OEROOT'><filename>OEROOT</filename></link><filename>}</filename>
562 values for all <filename>##OEROOT##</filename> values.
563 <note>
564 You can see how the <filename>TEMPLATECONF</filename> variable
565 <filename>scripts/oe-setup-builddir</filename> script in the
566 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
567 You can find the Yocto Project version of the
568 <filename>bblayers.conf.sample</filename> file in the
569 <filename>meta-yocto/conf</filename> directory.
570 </note>
571 </para>
572 </section>
573
574 <section id='structure-build-conf-sanity_info'>
575 <title><filename>build/conf/sanity_info</filename></title>
576
577 <para>
578 This file indicates the state of the sanity checks and is created
579 during the build.
580 </para>
581 </section>
582
583 <section id='structure-build-downloads'>
584 <title><filename>build/downloads/</filename></title>
585
586 <para>
587 This directory contains downloaded upstream source tarballs.
588 You can reuse the directory for multiple builds or move
589 the directory to another location.
590 You can control the location of this directory through the
591 <filename><link linkend='var-DL_DIR'>DL_DIR</link></filename> variable.
592 </para>
593 </section>
594
595 <section id='structure-build-sstate-cache'>
596 <title><filename>build/sstate-cache/</filename></title>
597
598 <para>
599 This directory contains the shared state cache.
600 You can reuse the directory for multiple builds or move
601 the directory to another location.
602 You can control the location of this directory through the
603 <filename><link linkend='var-SSTATE_DIR'>SSTATE_DIR</link></filename> variable.
604 </para>
605 </section>
606
607 <section id='structure-build-tmp'>
608 <title><filename>build/tmp/</filename></title>
609
610 <para>
611 The OpenEmbedded build system creates and uses this directory
612 for all the build system's output.
613 The
614 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
615 variable points to this directory.
616 </para>
617
618 <para>
619 BitBake creates this directory if it does not exist.
620 As a last resort, to clean up a build and start it from scratch
621 (other than the downloads), you can remove everything in the
622 <filename>tmp</filename> directory or get rid of the
623 directory completely.
624 If you do, you should also completely remove the
625 <filename>build/sstate-cache</filename> directory.
626 </para>
627 </section>
628
629 <section id='structure-build-tmp-buildstats'>
630 <title><filename>build/tmp/buildstats/</filename></title>
631
632 <para>
633 This directory stores the build statistics.
634 </para>
635 </section>
636
637 <section id='structure-build-tmp-cache'>
638 <title><filename>build/tmp/cache/</filename></title>
639
640 <para>
641 When BitBake parses the metadata, it creates a cache file of the result that can
642 be used when subsequently running commands.
643 BitBake stores these results here on a per-machine basis.
644 </para>
645 </section>
646
647 <section id='structure-build-tmp-deploy'>
648 <title><filename>build/tmp/deploy/</filename></title>
649
650 <para>
651 This directory contains any "end result" output from the
652 OpenEmbedded build process.
653 The <link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link>
654 variable points to this directory.
655 For more detail on the contents of the <filename>deploy</filename>
656 directory, see the
657 "<link linkend='images-dev-environment'>Images</link>" and
658 "<link linkend='sdk-dev-environment'>Application Development SDK</link>"
659 sections.
660 </para>
661 </section>
662
663 <section id='structure-build-tmp-deploy-deb'>
664 <title><filename>build/tmp/deploy/deb/</filename></title>
665
666 <para>
667 This directory receives any <filename>.deb</filename> packages produced by
668 the build process.
669 The packages are sorted into feeds for different architecture types.
670 </para>
671 </section>
672
673 <section id='structure-build-tmp-deploy-rpm'>
674 <title><filename>build/tmp/deploy/rpm/</filename></title>
675
676 <para>
677 This directory receives any <filename>.rpm</filename> packages produced by
678 the build process.
679 The packages are sorted into feeds for different architecture types.
680 </para>
681 </section>
682
683 <section id='structure-build-tmp-deploy-ipk'>
684 <title><filename>build/tmp/deploy/ipk/</filename></title>
685
686 <para>
687 This directory receives <filename>.ipk</filename> packages produced by
688 the build process.
689 </para>
690 </section>
691
692 <section id='structure-build-tmp-deploy-licenses'>
693 <title><filename>build/tmp/deploy/licenses/</filename></title>
694
695 <para>
696 This directory receives package licensing information.
697 For example, the directory contains sub-directories for <filename>bash</filename>,
698 <filename>busybox</filename>, and <filename>glibc</filename> (among others) that in turn
699 contain appropriate <filename>COPYING</filename> license files with other licensing information.
700 For information on licensing, see the
701 "<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>"
702 section.
703 </para>
704 </section>
705
706 <section id='structure-build-tmp-deploy-images'>
707 <title><filename>build/tmp/deploy/images/</filename></title>
708
709 <para>
710 This directory receives complete filesystem images.
711 If you want to flash the resulting image from a build onto a device, look here for the image.
712 </para>
713
714 <para>
715 Be careful when deleting files in this directory.
716 You can safely delete old images from this directory (e.g.
717 <filename>core-image-*</filename>, <filename>hob-image-*</filename>,
718 etc.).
719 However, the kernel (<filename>*zImage*</filename>, <filename>*uImage*</filename>, etc.),
720 bootloader and other supplementary files might be deployed here prior to building an
721 image.
722 Because these files are not directly produced from the image, if you
723 delete them they will not be automatically re-created when you build the image again.
724 </para>
725
726 <para>
727 If you do accidentally delete files here, you will need to force them to be
728 re-created.
729 In order to do that, you will need to know the target that produced them.
730 For example, these commands rebuild and re-create the kernel files:
731 <literallayout class='monospaced'>
732 $ bitbake -c clean virtual/kernel
733 $ bitbake virtual/kernel
734 </literallayout>
735 </para>
736 </section>
737
738 <section id='structure-build-tmp-deploy-sdk'>
739 <title><filename>build/tmp/deploy/sdk/</filename></title>
740
741 <para>
742 The OpenEmbedded build system creates this directory to hold
743 toolchain installer scripts, which when executed, install the
744 sysroot that matches your target hardware.
745 You can find out more about these installers in the
746 "<ulink url='&YOCTO_DOCS_ADT_URL;#optionally-building-a-toolchain-installer'>Optionally Building a Toolchain Installer</ulink>"
747 section in the Yocto Project Application Developer's Guide.
748 </para>
749 </section>
750
751 <section id='structure-build-tmp-sstate-control'>
752 <title><filename>build/tmp/sstate-control/</filename></title>
753
754 <para>
755 The OpenEmbedded build system uses this directory for the
756 shared state manifest files.
757 The shared state code uses these files to record the files
758 installed by each sstate task so that the files can be removed
759 when cleaning the recipe or when a newer version is about to
760 be installed.
761 The build system also uses the manifests to detect and produce
762 a warning when files from one task are overwriting those from
763 another.
764 </para>
765 </section>
766
767 <section id='structure-build-tmp-sysroots'>
768 <title><filename>build/tmp/sysroots/</filename></title>
769
770 <para>
771 This directory contains shared header files and libraries as well as other shared
772 data.
773 Packages that need to share output with other packages do so within this directory.
774 The directory is subdivided by architecture so multiple builds can run within
775 the one Build Directory.
776 </para>
777 </section>
778
779 <section id='structure-build-tmp-stamps'>
780 <title><filename>build/tmp/stamps/</filename></title>
781
782 <para>
783 This directory holds information that BitBake uses for accounting purposes
784 to track what tasks have run and when they have run.
785 The directory is sub-divided by architecture, package name, and
786 version.
787 Following is an example:
788 <literallayout class='monospaced'>
789 stamps/all-poky-linux/distcc-config/1.0-r0.do_build-2fdd....2do
790 </literallayout>
791 Although the files in the directory are empty of data,
792 BitBake uses the filenames and timestamps for tracking purposes.
793 </para>
794 </section>
795
796 <section id='structure-build-tmp-log'>
797 <title><filename>build/tmp/log/</filename></title>
798
799 <para>
800 This directory contains general logs that are not otherwise placed using the
801 package's <filename><link linkend='var-WORKDIR'>WORKDIR</link></filename>.
802 Examples of logs are the output from the
803 <filename>do_check_pkg</filename> or
804 <filename>do_distro_check</filename> tasks.
805 Running a build does not necessarily mean this directory is created.
806 </para>
807 </section>
808
809 <section id='structure-build-tmp-work'>
810 <title><filename>build/tmp/work/</filename></title>
811
812 <para>
813 This directory contains architecture-specific work sub-directories
814 for packages built by BitBake.
815 All tasks execute from the appropriate work directory.
816 For example, the source for a particular package is unpacked,
817 patched, configured and compiled all within its own work directory.
818 Within the work directory, organization is based on the package group
819 and version for which the source is being compiled
820 as defined by the
821 <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>.
822 </para>
823
824 <para>
825 It is worth considering the structure of a typical work directory.
826 As an example, consider <filename>linux-yocto-kernel-3.0</filename>
827 on the machine <filename>qemux86</filename>
828 built within the Yocto Project.
829 For this package, a work directory of
830 <filename>tmp/work/qemux86-poky-linux/linux-yocto/3.0+git1+&lt;.....&gt;</filename>,
831 referred to as the
832 <filename><link linkend='var-WORKDIR'>WORKDIR</link></filename>, is created.
833 Within this directory, the source is unpacked to
834 <filename>linux-qemux86-standard-build</filename> and then patched by Quilt.
835 (See the
836 "<ulink url='&YOCTO_DOCS_DEV_URL;#using-a-quilt-workflow'>Using a Quilt Flow</ulink>"
837 section in the Yocto Project Development Manual for more information.)
838 Within the <filename>linux-qemux86-standard-build</filename> directory,
839 standard Quilt directories <filename>linux-3.0/patches</filename>
840 and <filename>linux-3.0/.pc</filename> are created,
841 and standard Quilt commands can be used.
842 </para>
843
844 <para>
845 There are other directories generated within <filename>WORKDIR</filename>.
846 The most important directory is <filename>WORKDIR/temp/</filename>,
847 which has log files for each task (<filename>log.do_*.pid</filename>)
848 and contains the scripts BitBake runs for each task
849 (<filename>run.do_*.pid</filename>).
850 The <filename>WORKDIR/image/</filename> directory is where "make
851 install" places its output that is then split into sub-packages
852 within <filename>WORKDIR/packages-split/</filename>.
853 </para>
854 </section>
855
856 <section id='structure-build-work-shared'>
857 <title><filename>build/tmp/work-shared/</filename></title>
858
859 <para>
860 For efficiency, the OpenEmbedded build system creates and uses
861 this directory to hold recipes that share a work directory with
862 other recipes.
863 In practice, this is only used for <filename>gcc</filename>
864 and its variants (e.g. <filename>gcc-cross</filename>,
865 <filename>libgcc</filename>, <filename>gcc-runtime</filename>,
866 and so forth).
867 </para>
868 </section>
869</section>
870
871<section id='structure-meta'>
872 <title>The Metadata - <filename>meta/</filename></title>
873
874 <para>
875 As mentioned previously,
876 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink> is the core
877 of the Yocto Project.
878 Metadata has several important subdivisions:
879 </para>
880
881 <section id='structure-meta-classes'>
882 <title><filename>meta/classes/</filename></title>
883
884 <para>
885 This directory contains the <filename>*.bbclass</filename> files.
886 Class files are used to abstract common code so it can be reused by multiple
887 packages.
888 Every package inherits the <filename>base.bbclass</filename> file.
889 Examples of other important classes are <filename>autotools.bbclass</filename>, which
890 in theory allows any Autotool-enabled package to work with the Yocto Project with minimal effort.
891 Another example is <filename>kernel.bbclass</filename> that contains common code and functions
892 for working with the Linux kernel.
893 Functions like image generation or packaging also have their specific class files
894 such as <filename>image.bbclass</filename>, <filename>rootfs_*.bbclass</filename> and
895 <filename>package*.bbclass</filename>.
896 </para>
897
898 <para>
899 For reference information on classes, see the
900 "<link linkend='ref-classes'>Classes</link>" chapter.
901 </para>
902 </section>
903
904 <section id='structure-meta-conf'>
905 <title><filename>meta/conf/</filename></title>
906
907 <para>
908 This directory contains the core set of configuration files that start from
909 <filename>bitbake.conf</filename> and from which all other configuration
910 files are included.
911 See the include statements at the end of the
912 <filename>bitbake.conf</filename> file and you will note that even
913 <filename>local.conf</filename> is loaded from there.
914 While <filename>bitbake.conf</filename> sets up the defaults, you can often override
915 these by using the (<filename>local.conf</filename>) file, machine file or
916 the distribution configuration file.
917 </para>
918 </section>
919
920 <section id='structure-meta-conf-machine'>
921 <title><filename>meta/conf/machine/</filename></title>
922
923 <para>
924 This directory contains all the machine configuration files.
925 If you set <filename>MACHINE = "qemux86"</filename>,
926 the OpenEmbedded build system looks for a <filename>qemux86.conf</filename> file in this
927 directory.
928 The <filename>include</filename> directory contains various data common to multiple machines.
929 If you want to add support for a new machine to the Yocto Project, look in this directory.
930 </para>
931 </section>
932
933 <section id='structure-meta-conf-distro'>
934 <title><filename>meta/conf/distro/</filename></title>
935
936 <para>
937 The contents of this directory controls any distribution-specific
938 configurations.
939 For the Yocto Project, the <filename>defaultsetup.conf</filename> is the main file here.
940 This directory includes the versions and the
941 <filename>SRCDATE</filename> definitions for applications that are configured here.
942 An example of an alternative configuration might be <filename>poky-bleeding.conf</filename>.
943 Although this file mainly inherits its configuration from Poky.
944 </para>
945 </section>
946
947 <section id='structure-meta-conf-machine-sdk'>
948 <title><filename>meta/conf/machine-sdk/</filename></title>
949
950 <para>
951 The OpenEmbedded build system searches this directory for
952 configuration files that correspond to the value of
953 <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>.
954 By default, 32-bit and 64-bit x86 files ship with the Yocto
955 Project that support some SDK hosts.
956 However, it is possible to extend that support to other SDK hosts
957 by adding additional configuration files in this subdirectory
958 within another layer.
959 </para>
960 </section>
961
962 <section id='structure-meta-files'>
963 <title><filename>meta/files/</filename></title>
964
965 <para>
966 This directory contains common license files and several text files
967 used by the build system.
968 The text files contain minimal device information and
969 lists of files and directories with known permissions.
970 </para>
971 </section>
972
973 <section id='structure-meta-lib'>
974 <title><filename>meta/lib/</filename></title>
975
976 <para>
977 This directory contains OpenEmbedded Python library code
978 used during the build process.
979 </para>
980 </section>
981
982 <section id='structure-meta-recipes-bsp'>
983 <title><filename>meta/recipes-bsp/</filename></title>
984
985 <para>
986 This directory contains anything linking to specific hardware or hardware
987 configuration information such as "u-boot" and "grub".
988 </para>
989 </section>
990
991 <section id='structure-meta-recipes-connectivity'>
992 <title><filename>meta/recipes-connectivity/</filename></title>
993
994 <para>
995 This directory contains libraries and applications related to communication with other devices.
996 </para>
997 </section>
998
999 <section id='structure-meta-recipes-core'>
1000 <title><filename>meta/recipes-core/</filename></title>
1001
1002 <para>
1003 This directory contains what is needed to build a basic working Linux image
1004 including commonly used dependencies.
1005 </para>
1006 </section>
1007
1008 <section id='structure-meta-recipes-devtools'>
1009 <title><filename>meta/recipes-devtools/</filename></title>
1010
1011 <para>
1012 This directory contains tools that are primarily used by the build system.
1013 The tools, however, can also be used on targets.
1014 </para>
1015 </section>
1016
1017 <section id='structure-meta-recipes-extended'>
1018 <title><filename>meta/recipes-extended/</filename></title>
1019
1020 <para>
1021 This directory contains non-essential applications that add features compared to the
1022 alternatives in core.
1023 You might need this directory for full tool functionality or for Linux Standard Base (LSB)
1024 compliance.
1025 </para>
1026 </section>
1027
1028 <section id='structure-meta-recipes-gnome'>
1029 <title><filename>meta/recipes-gnome/</filename></title>
1030
1031 <para>
1032 This directory contains all things related to the GTK+ application framework.
1033 </para>
1034 </section>
1035
1036 <section id='structure-meta-recipes-graphics'>
1037 <title><filename>meta/recipes-graphics/</filename></title>
1038
1039 <para>
1040 This directory contains X and other graphically related system libraries
1041 </para>
1042 </section>
1043
1044 <section id='structure-meta-recipes-kernel'>
1045 <title><filename>meta/recipes-kernel/</filename></title>
1046
1047 <para>
1048 This directory contains the kernel and generic applications and libraries that
1049 have strong kernel dependencies.
1050 </para>
1051 </section>
1052
1053 <section id='structure-meta-recipes-lsb4'>
1054 <title><filename>meta/recipes-lsb4/</filename></title>
1055
1056 <para>
1057 This directory contains recipes specifically added to support
1058 the Linux Standard Base (LSB) version 4.x.
1059 </para>
1060 </section>
1061
1062 <section id='structure-meta-recipes-multimedia'>
1063 <title><filename>meta/recipes-multimedia/</filename></title>
1064
1065 <para>
1066 This directory contains codecs and support utilities for audio, images and video.
1067 </para>
1068 </section>
1069
1070 <section id='structure-meta-recipes-qt'>
1071 <title><filename>meta/recipes-qt/</filename></title>
1072
1073 <para>
1074 This directory contains all things related to the Qt application framework.
1075 </para>
1076 </section>
1077
1078 <section id='structure-meta-recipes-rt'>
1079 <title><filename>meta/recipes-rt/</filename></title>
1080
1081 <para>
1082 This directory contains package and image recipes for using and testing
1083 the <filename>PREEMPT_RT</filename> kernel.
1084 </para>
1085 </section>
1086
1087 <section id='structure-meta-recipes-sato'>
1088 <title><filename>meta/recipes-sato/</filename></title>
1089
1090 <para>
1091 This directory contains the Sato demo/reference UI/UX and its associated applications
1092 and configuration data.
1093 </para>
1094 </section>
1095
1096 <section id='structure-meta-recipes-support'>
1097 <title><filename>meta/recipes-support/</filename></title>
1098
1099 <para>
1100 This directory contains recipes used by other recipes, but that are
1101 not directly included in images (i.e. dependencies of other
1102 recipes).
1103 </para>
1104 </section>
1105
1106 <section id='structure-meta-site'>
1107 <title><filename>meta/site/</filename></title>
1108
1109 <para>
1110 This directory contains a list of cached results for various architectures.
1111 Because certain "autoconf" test results cannot be determined when cross-compiling due to
1112 the tests not able to run on a live system, the information in this directory is
1113 passed to "autoconf" for the various architectures.
1114 </para>
1115 </section>
1116
1117 <section id='structure-meta-recipes-txt'>
1118 <title><filename>meta/recipes.txt</filename></title>
1119
1120 <para>
1121 This file is a description of the contents of <filename>recipes-*</filename>.
1122 </para>
1123 </section>
1124</section>
1125
1126</chapter>
1127<!--
1128vim: expandtab tw=80 ts=4
1129-->
diff --git a/documentation/ref-manual/ref-style.css b/documentation/ref-manual/ref-style.css
new file mode 100644
index 0000000000..e04b5006b4
--- /dev/null
+++ b/documentation/ref-manual/ref-style.css
@@ -0,0 +1,985 @@
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/* This style defines how the permalink character
317 appears by itself and when hovered over with
318 the mouse. */
319
320[alt='Permalink'] { color: #eee; }
321[alt='Permalink']:hover { color: black; }
322
323
324div.informalfigure,
325div.informalexample,
326div.informaltable,
327div.figure,
328div.table,
329div.example {
330 margin: 1em 0em;
331 padding: 1em;
332 page-break-inside: avoid;
333}
334
335
336div.informalfigure p.title b,
337div.informalexample p.title b,
338div.informaltable p.title b,
339div.figure p.title b,
340div.example p.title b,
341div.table p.title b{
342 padding-top: 0em;
343 margin-top: 0em;
344 font-size: 100%;
345 font-weight: normal;
346}
347
348.mediaobject .caption,
349.mediaobject .caption p {
350 text-align: center;
351 font-size: 80%;
352 padding-top: 0.5em;
353 padding-bottom: 0.5em;
354}
355
356.epigraph {
357 padding-left: 55%;
358 margin-bottom: 1em;
359}
360
361.epigraph p {
362 text-align: left;
363}
364
365.epigraph .quote {
366 font-style: italic;
367}
368.epigraph .attribution {
369 font-style: normal;
370 text-align: right;
371}
372
373span.application {
374 font-style: italic;
375}
376
377.programlisting {
378 font-family: monospace;
379 font-size: 80%;
380 white-space: pre;
381 margin: 1.33em 0em;
382 padding: 1.33em;
383}
384
385.tip,
386.warning,
387.caution,
388.note {
389 margin-top: 1em;
390 margin-bottom: 1em;
391
392}
393
394/* force full width of table within div */
395.tip table,
396.warning table,
397.caution table,
398.note table {
399 border: none;
400 width: 100%;
401}
402
403
404.tip table th,
405.warning table th,
406.caution table th,
407.note table th {
408 padding: 0.8em 0.0em 0.0em 0.0em;
409 margin : 0em 0em 0em 0em;
410}
411
412.tip p,
413.warning p,
414.caution p,
415.note p {
416 margin-top: 0.5em;
417 margin-bottom: 0.5em;
418 padding-right: 1em;
419 text-align: left;
420}
421
422.acronym {
423 text-transform: uppercase;
424}
425
426b.keycap,
427.keycap {
428 padding: 0.09em 0.3em;
429 margin: 0em;
430}
431
432.itemizedlist li {
433 clear: none;
434}
435
436.filename {
437 font-size: medium;
438 font-family: Courier, monospace;
439}
440
441
442div.navheader, div.heading{
443 position: absolute;
444 left: 0em;
445 top: 0em;
446 width: 100%;
447 background-color: #cdf;
448 width: 100%;
449}
450
451div.navfooter, div.footing{
452 position: fixed;
453 left: 0em;
454 bottom: 0em;
455 background-color: #eee;
456 width: 100%;
457}
458
459
460div.navheader td,
461div.navfooter td {
462 font-size: 66%;
463}
464
465div.navheader table th {
466 /*font-family: Georgia, Times, serif;*/
467 /*font-size: x-large;*/
468 font-size: 80%;
469}
470
471div.navheader table {
472 border-left: 0em;
473 border-right: 0em;
474 border-top: 0em;
475 width: 100%;
476}
477
478div.navfooter table {
479 border-left: 0em;
480 border-right: 0em;
481 border-bottom: 0em;
482 width: 100%;
483}
484
485div.navheader table td a,
486div.navfooter table td a {
487 color: #777;
488 text-decoration: none;
489}
490
491/* normal text in the footer */
492div.navfooter table td {
493 color: black;
494}
495
496div.navheader table td a:visited,
497div.navfooter table td a:visited {
498 color: #444;
499}
500
501
502/* links in header and footer */
503div.navheader table td a:hover,
504div.navfooter table td a:hover {
505 text-decoration: underline;
506 background-color: transparent;
507 color: #33a;
508}
509
510div.navheader hr,
511div.navfooter hr {
512 display: none;
513}
514
515
516.qandaset tr.question td p {
517 margin: 0em 0em 1em 0em;
518 padding: 0em 0em 0em 0em;
519}
520
521.qandaset tr.answer td p {
522 margin: 0em 0em 1em 0em;
523 padding: 0em 0em 0em 0em;
524}
525.answer td {
526 padding-bottom: 1.5em;
527}
528
529.emphasis {
530 font-weight: bold;
531}
532
533
534 /************* /
535 / decorations /
536/ *************/
537
538.titlepage {
539}
540
541.part .title {
542}
543
544.subtitle {
545 border: none;
546}
547
548/*
549h1 {
550 border: none;
551}
552
553h2 {
554 border-top: solid 0.2em;
555 border-bottom: solid 0.06em;
556}
557
558h3 {
559 border-top: 0em;
560 border-bottom: solid 0.06em;
561}
562
563h4 {
564 border: 0em;
565 border-bottom: solid 0.06em;
566}
567
568h5 {
569 border: 0em;
570}
571*/
572
573.programlisting {
574 border: solid 1px;
575}
576
577div.figure,
578div.table,
579div.informalfigure,
580div.informaltable,
581div.informalexample,
582div.example {
583 border: 1px solid;
584}
585
586
587
588.tip,
589.warning,
590.caution,
591.note {
592 border: 1px solid;
593}
594
595.tip table th,
596.warning table th,
597.caution table th,
598.note table th {
599 border-bottom: 1px solid;
600}
601
602.question td {
603 border-top: 1px solid black;
604}
605
606.answer {
607}
608
609
610b.keycap,
611.keycap {
612 border: 1px solid;
613}
614
615
616div.navheader, div.heading{
617 border-bottom: 1px solid;
618}
619
620
621div.navfooter, div.footing{
622 border-top: 1px solid;
623}
624
625 /********* /
626 / colors /
627/ *********/
628
629body {
630 color: #333;
631 background: white;
632}
633
634a {
635 background: transparent;
636}
637
638a:hover {
639 background-color: #dedede;
640}
641
642
643h1,
644h2,
645h3,
646h4,
647h5,
648h6,
649h7,
650h8 {
651 background-color: transparent;
652}
653
654hr {
655 border-color: #aaa;
656}
657
658
659.tip, .warning, .caution, .note {
660 border-color: #fff;
661}
662
663
664.tip table th,
665.warning table th,
666.caution table th,
667.note table th {
668 border-bottom-color: #fff;
669}
670
671
672.warning {
673 background-color: #f0f0f2;
674}
675
676.caution {
677 background-color: #f0f0f2;
678}
679
680.tip {
681 background-color: #f0f0f2;
682}
683
684.note {
685 background-color: #f0f0f2;
686}
687
688.glossary dl dt,
689.variablelist dl dt,
690.variablelist dl dt span.term {
691 color: #044;
692}
693
694div.figure,
695div.table,
696div.example,
697div.informalfigure,
698div.informaltable,
699div.informalexample {
700 border-color: #aaa;
701}
702
703pre.programlisting {
704 color: black;
705 background-color: #fff;
706 border-color: #aaa;
707 border-width: 2px;
708}
709
710.guimenu,
711.guilabel,
712.guimenuitem {
713 background-color: #eee;
714}
715
716
717b.keycap,
718.keycap {
719 background-color: #eee;
720 border-color: #999;
721}
722
723
724div.navheader {
725 border-color: black;
726}
727
728
729div.navfooter {
730 border-color: black;
731}
732
733
734 /*********** /
735 / graphics /
736/ ***********/
737
738/*
739body {
740 background-image: url("images/body_bg.jpg");
741 background-attachment: fixed;
742}
743
744.navheader,
745.note,
746.tip {
747 background-image: url("images/note_bg.jpg");
748 background-attachment: fixed;
749}
750
751.warning,
752.caution {
753 background-image: url("images/warning_bg.jpg");
754 background-attachment: fixed;
755}
756
757.figure,
758.informalfigure,
759.example,
760.informalexample,
761.table,
762.informaltable {
763 background-image: url("images/figure_bg.jpg");
764 background-attachment: fixed;
765}
766
767*/
768h1,
769h2,
770h3,
771h4,
772h5,
773h6,
774h7{
775}
776
777/*
778Example of how to stick an image as part of the title.
779
780div.article .titlepage .title
781{
782 background-image: url("figures/white-on-black.png");
783 background-position: center;
784 background-repeat: repeat-x;
785}
786*/
787
788div.preface .titlepage .title,
789div.colophon .title,
790div.chapter .titlepage .title,
791div.article .titlepage .title
792{
793}
794
795div.section div.section .titlepage .title,
796div.sect2 .titlepage .title {
797 background: none;
798}
799
800
801h1.title {
802 background-color: transparent;
803 background-image: url("figures/poky-title.png");
804 background-repeat: no-repeat;
805 height: 256px;
806 text-indent: -9000px;
807 overflow:hidden;
808}
809
810h2.subtitle {
811 background-color: transparent;
812 text-indent: -9000px;
813 overflow:hidden;
814 width: 0px;
815 display: none;
816}
817
818 /*************************************** /
819 / pippin.gimp.org specific alterations /
820/ ***************************************/
821
822/*
823div.heading, div.navheader {
824 color: #777;
825 font-size: 80%;
826 padding: 0;
827 margin: 0;
828 text-align: left;
829 position: absolute;
830 top: 0px;
831 left: 0px;
832 width: 100%;
833 height: 50px;
834 background: url('/gfx/heading_bg.png') transparent;
835 background-repeat: repeat-x;
836 background-attachment: fixed;
837 border: none;
838}
839
840div.heading a {
841 color: #444;
842}
843
844div.footing, div.navfooter {
845 border: none;
846 color: #ddd;
847 font-size: 80%;
848 text-align:right;
849
850 width: 100%;
851 padding-top: 10px;
852 position: absolute;
853 bottom: 0px;
854 left: 0px;
855
856 background: url('/gfx/footing_bg.png') transparent;
857}
858*/
859
860
861
862 /****************** /
863 / nasty ie tweaks /
864/ ******************/
865
866/*
867div.heading, div.navheader {
868 width:expression(document.body.clientWidth + "px");
869}
870
871div.footing, div.navfooter {
872 width:expression(document.body.clientWidth + "px");
873 margin-left:expression("-5em");
874}
875body {
876 padding:expression("4em 5em 0em 5em");
877}
878*/
879
880 /**************************************** /
881 / mozilla vendor specific css extensions /
882/ ****************************************/
883/*
884div.navfooter, div.footing{
885 -moz-opacity: 0.8em;
886}
887
888div.figure,
889div.table,
890div.informalfigure,
891div.informaltable,
892div.informalexample,
893div.example,
894.tip,
895.warning,
896.caution,
897.note {
898 -moz-border-radius: 0.5em;
899}
900
901b.keycap,
902.keycap {
903 -moz-border-radius: 0.3em;
904}
905*/
906
907table tr td table tr td {
908 display: none;
909}
910
911
912hr {
913 display: none;
914}
915
916table {
917 border: 0em;
918}
919
920 .photo {
921 float: right;
922 margin-left: 1.5em;
923 margin-bottom: 1.5em;
924 margin-top: 0em;
925 max-width: 17em;
926 border: 1px solid gray;
927 padding: 3px;
928 background: white;
929}
930 .seperator {
931 padding-top: 2em;
932 clear: both;
933 }
934
935 #validators {
936 margin-top: 5em;
937 text-align: right;
938 color: #777;
939 }
940 @media print {
941 body {
942 font-size: 8pt;
943 }
944 .noprint {
945 display: none;
946 }
947 }
948
949
950.tip,
951.note {
952 background: #f0f0f2;
953 color: #333;
954 padding: 20px;
955 margin: 20px;
956}
957
958.tip h3,
959.note h3 {
960 padding: 0em;
961 margin: 0em;
962 font-size: 2em;
963 font-weight: bold;
964 color: #333;
965}
966
967.tip a,
968.note a {
969 color: #333;
970 text-decoration: underline;
971}
972
973.footnote {
974 font-size: small;
975 color: #333;
976}
977
978/* Changes the announcement text */
979.tip h3,
980.warning h3,
981.caution h3,
982.note h3 {
983 font-size:large;
984 color: #00557D;
985}
diff --git a/documentation/ref-manual/ref-tasks.xml b/documentation/ref-manual/ref-tasks.xml
new file mode 100644
index 0000000000..f325f0e233
--- /dev/null
+++ b/documentation/ref-manual/ref-tasks.xml
@@ -0,0 +1,695 @@
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-tasks'>
6<title>Tasks</title>
7
8<para>
9 Tasks are units of execution for BitBake.
10 Recipes (<filename>.bb</filename> files) use tasks to complete
11 configuring, compiling, and packaging software.
12 This chapter provides a reference of the tasks defined in the
13 OpenEmbedded build system.
14</para>
15
16<section id='normal-recipe-build-tasks'>
17 <title>Normal Recipe Build Tasks</title>
18
19 <para>
20 The following sections describe normal tasks associated with building
21 a recipe.
22 </para>
23
24 <section id='ref-tasks-build'>
25 <title><filename>do_build</filename></title>
26
27 <para>
28 The default task for all recipes.
29 This task depends on all other normal tasks
30 required to build a recipe.
31 </para>
32 </section>
33
34 <section id='ref-tasks-compile'>
35 <title><filename>do_compile</filename></title>
36
37 <para>
38 Compiles the source in the compilation directory, which is pointed
39 to by the
40 <link linkend='var-B'><filename>B</filename></link> variable.
41 </para>
42 </section>
43
44 <section id='ref-tasks-compile_ptest_base'>
45 <title><filename>do_compile_ptest_base</filename></title>
46
47 <para>
48 Compiles the runtime test suite included in the software being
49 built.
50 </para>
51 </section>
52
53 <section id='ref-tasks-configure'>
54 <title><filename>do_configure</filename></title>
55
56 <para>
57 Configures the source by enabling and disabling any build-time and
58 configuration options for the software being built.
59 </para>
60 </section>
61
62 <section id='ref-tasks-configure_ptest_base'>
63 <title><filename>do_configure_ptest_base</filename></title>
64
65 <para>
66 Configures the runtime test suite included in the software being
67 built.
68 </para>
69 </section>
70
71 <section id='ref-tasks-deploy'>
72 <title><filename>do_deploy</filename></title>
73
74 <para>
75 Writes output files that are to be deployed to the deploy
76 directory, which is defined by the
77 <link linkend='var-DEPLOYDIR'><filename>DEPLOYDIR</filename></link>
78 variable.
79 </para>
80
81 <para>
82 The <filename>do_deploy</filename> task is a
83 shared state (sstate) task, which means that the task can
84 be accelerated through sstate use.
85 Realize also that if the task is re-executed, any previous output
86 is removed (i.e. "cleaned").
87 </para>
88 </section>
89
90 <section id='ref-tasks-fetch'>
91 <title><filename>do_fetch</filename></title>
92
93 <para>
94 Fetches the source code.
95 This task uses the
96 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
97 variable and the argument's prefix to determine the correct
98 fetcher module.
99 </para>
100 </section>
101
102 <section id='ref-tasks-install'>
103 <title><filename>do_install</filename></title>
104
105 <para>
106 Copies files from the compilation directory, which is defined by
107 the
108 <link linkend='var-B'><filename>B</filename></link> variable,
109 to a holding area defined by the
110 <link linkend='var-D'><filename>D</filename></link> variable.
111 </para>
112 </section>
113
114 <section id='ref-tasks-install_ptest_base'>
115 <title><filename>do_install_ptest_base</filename></title>
116
117 <para>
118 Copies the runtime test suite files from the compilation directory
119 to a holding area.
120 </para>
121 </section>
122
123 <section id='ref-tasks-package'>
124 <title><filename>do_package</filename></title>
125
126 <para>
127 Analyzes the content of the holding area and splits it into subsets
128 based on available packages and files.
129 </para>
130 </section>
131
132 <section id='ref-tasks-package_qa'>
133 <title><filename>do_package_qa</filename></title>
134
135 <para>
136 Runs QA checks on packaged files.
137 For more information on these checks, see the
138 <link linkend='ref-classes-insane'><filename>insane</filename></link>
139 class.
140 </para>
141 </section>
142
143 <section id='ref-tasks-package_write_deb'>
144 <title><filename>do_package_write_deb</filename></title>
145
146 <para>
147 Creates the actual DEB packages and places them in the
148 <link linkend='package-feeds-dev-environment'>Package Feeds</link>
149 area.
150 </para>
151 </section>
152
153 <section id='ref-tasks-package_write_ipk'>
154 <title><filename>do_package_write_ipk</filename></title>
155
156 <para>
157 Creates the actual IPK packages and places them in the
158 <link linkend='package-feeds-dev-environment'>Package Feeds</link>
159 area.
160 </para>
161 </section>
162
163 <section id='ref-tasks-package_write_rpm'>
164 <title><filename>do_package_write_rpm</filename></title>
165
166 <para>
167 Creates the actual RPM packages and places them in the
168 <link linkend='package-feeds-dev-environment'>Package Feeds</link>
169 area.
170 </para>
171 </section>
172
173 <section id='ref-tasks-package_write_tar'>
174 <title><filename>do_package_write_tar</filename></title>
175
176 <para>
177 Creates tar archives for packages and places them in the
178 <link linkend='package-feeds-dev-environment'>Package Feeds</link>
179 area.
180 </para>
181 </section>
182
183 <section id='ref-tasks-packagedata'>
184 <title><filename>do_packagedata</filename></title>
185
186 <para>
187 Creates package metadata used by the build system to generate the
188 final packages.
189 </para>
190 </section>
191
192 <section id='ref-tasks-patch'>
193 <title><filename>do_patch</filename></title>
194
195 <para>
196 Locates patch files and applies them to the source code.
197 See the
198 "<link linkend='patching-dev-environment'>Patching</link>"
199 section for more information.
200 </para>
201 </section>
202
203 <section id='ref-tasks-populate_lic'>
204 <title><filename>do_populate_lic</filename></title>
205
206 <para>
207 Writes license information for the recipe that is collected later
208 when the image is constructed.
209 </para>
210 </section>
211
212 <section id='ref-tasks-populate_sdk'>
213 <title><filename>do_populate_sdk</filename></title>
214
215 <para>
216 Creates the file and directory structure for an installable SDK.
217 See the
218 "<link linkend='sdk-generation-dev-environment'>SDK Generation</link>"
219 section for more information.
220 </para>
221 </section>
222
223 <section id='ref-tasks-populate_sysroot'>
224 <title><filename>do_populate_sysroot</filename></title>
225
226 <para>
227 Copies a subset of files installed by the
228 <link linkend='ref-tasks-install'><filename>do_install</filename></link>
229 task into the sysroot in order to make them available to other
230 recipes.
231 </para>
232
233 <para>
234 The <filename>do_populate_sysroot</filename> task is a
235 shared state (sstate) task, which means that the task can
236 be accelerated through sstate use.
237 Realize also that if the task is re-executed, any previous output
238 is removed (i.e. "cleaned").
239 </para>
240 </section>
241
242 <section id='ref-tasks-rm_work'>
243 <title><filename>do_rm_work</filename></title>
244
245 <para>
246 Removes work files after the OpenEmbedded build system has
247 finished with them.
248 You can learn more by looking at the
249 "<link linkend='ref-classes-rm-work'><filename>rm_work.bbclass</filename></link>"
250 section.
251 </para>
252 </section>
253
254 <section id='ref-tasks-rm_work_all'>
255 <title><filename>do_rm_work_all</filename></title>
256
257 <para>
258 Top-level task for removing work files after the build system has
259 finished with them.
260 </para>
261 </section>
262
263 <section id='ref-tasks-unpack'>
264 <title><filename>do_unpack</filename></title>
265
266 <para>
267 Unpacks the source code into a working directory pointed to
268 by
269 <filename>${</filename><link linkend='var-WORKDIR'><filename>WORKDIR</filename></link><filename>}</filename>.
270 The
271 <link linkend='var-S'><filename>S</filename></link> variable also
272 plays a role in where unpacked source files ultimately reside.
273 For more information on how source files are unpacked, see the
274 "<link linkend='source-fetching-dev-environment'>Source Fetching</link>"
275 section and the <filename>WORKDIR</filename> and
276 <filename>S</filename> variable descriptions.
277 </para>
278 </section>
279</section>
280
281<section id='manually-called-tasks'>
282 <title>Manually Called Tasks</title>
283
284 <para>
285 These tasks are typically manually triggered (e.g. by using the
286 <filename>bitbake -c</filename> command-line option):
287 </para>
288
289 <section id='ref-tasks-checkuri'>
290 <title><filename>do_checkuri</filename></title>
291
292 <para>
293 Validates the
294 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
295 value.
296 </para>
297 </section>
298
299 <section id='ref-tasks-checkuriall'>
300 <title><filename>do_checkuriall</filename></title>
301
302 <para>
303 Validates the
304 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
305 value for all recipes required to build a target.
306 </para>
307 </section>
308
309 <section id='ref-tasks-clean'>
310 <title><filename>do_clean</filename></title>
311
312 <para>
313 Removes all output files for a target from the
314 <link linkend='ref-tasks-unpack'><filename>do_unpack</filename></link>
315 task forward (i.e.
316 <link linkend='ref-tasks-patch'><filename>do_unpack</filename></link>,
317 <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>,
318 <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>,
319 <link linkend='ref-tasks-install'><filename>do_install</filename></link>,
320 and
321 <link linkend='ref-tasks-package'><filename>do_package</filename></link>).
322 </para>
323
324 <para>
325 You can run this task using BitBake as follows:
326 <literallayout class='monospaced'>
327 $ bitbake -c clean <replaceable>recipe</replaceable>
328 </literallayout>
329 </para>
330
331 <para>
332 Running this task does not remove the
333 <link linkend='shared-state-cache'>sstate</link>) cache
334 files.
335 Consequently, if no changes have been made and the recipe is
336 rebuilt after cleaning, output files are simply restored from the
337 sstate cache.
338 If you want to remove the sstate cache files for the recipe,
339 you need to use the
340 <link linkend='ref-tasks-cleansstate'><filename>do_cleansstate</filename></link>
341 task instead (i.e. <filename>bitbake -c cleansstate</filename> <replaceable>recipe</replaceable>).
342 </para>
343 </section>
344
345 <section id='ref-tasks-cleanall'>
346 <title><filename>do_cleanall</filename></title>
347
348 <para>
349 Removes all output files, shared state
350 (<link linkend='shared-state-cache'>sstate</link>) cache, and
351 downloaded source files for a target (i.e. the contents of
352 <link linkend='var-DL_DIR'><filename>DL_DIR</filename></link>).
353 Essentially, the <filename>do_cleanall</filename> task is
354 identical to the
355 <link linkend='ref-tasks-cleansstate'><filename>do_cleansstate</filename></link>
356 task with the added removal of downloaded source files.
357 </para>
358
359 <para>
360 You can run this task using BitBake as follows:
361 <literallayout class='monospaced'>
362 $ bitbake -c cleanall <replaceable>recipe</replaceable>
363 </literallayout>
364 </para>
365
366 <para>
367 Typically, you would not normally use the
368 <filename>cleanall</filename> task.
369 Do so only if you want to start fresh with the
370 <link linkend='ref-tasks-fetch'><filename>do_fetch</filename></link>
371 task.
372 </para>
373 </section>
374
375 <section id='ref-tasks-cleansstate'>
376 <title><filename>do_cleansstate</filename></title>
377
378 <para>
379 Removes all output files and shared state
380 (<link linkend='shared-state-cache'>sstate</link>)
381 cache for a target.
382 Essentially, the <filename>do_cleansstate</filename> task is
383 identical to the
384 <link linkend='ref-tasks-clean'><filename>do_clean</filename></link>
385 task with the added removal of shared state
386 (<link linkend='shared-state-cache'>sstate</link>) cache.
387 </para>
388
389 <para>
390 You can run this task using BitBake as follows:
391 <literallayout class='monospaced'>
392 $ bitbake -c cleansstate <replaceable>recipe</replaceable>
393 </literallayout>
394 </para>
395
396 <para>
397 When you run the <filename>do_cleansstate</filename> task,
398 the OpenEmbedded build system no longer uses any
399 sstate.
400 Consequently, building the recipe from scratch is guaranteed.
401 <note>
402 The <filename>do_cleansstate</filename> task cannot remove
403 sstate from a remote sstate mirror.
404 If you need to build a target from scratch using remote
405 mirrors, use the "-f" option as follows:
406 <literallayout class='monospaced'>
407 $ bitbake -f -c do_cleansstate <replaceable>target</replaceable>
408 </literallayout>
409 </note>
410 </para>
411 </section>
412
413 <section id='ref-tasks-devshell'>
414 <title><filename>do_devshell</filename></title>
415
416 <para>
417 Starts a shell whose environment is set up for
418 development, debugging, or both.
419 See the
420 "<ulink url='&YOCTO_DOCS_DEV_URL;#platdev-appdev-devshell'>Using a Development Shell</ulink>"
421 section in the Yocto Project Development Manual for more
422 information about using <filename>devshell</filename>.
423 </para>
424 </section>
425
426 <section id='ref-tasks-fetchall'>
427 <title><filename>do_fetchall</filename></title>
428
429 <para>
430 Fetches all remote sources required to build a target.
431 </para>
432 </section>
433
434 <section id='ref-tasks-listtasks'>
435 <title><filename>do_listtasks</filename></title>
436
437 <para>
438 Lists all defined tasks for a target.
439 </para>
440 </section>
441
442 <section id='ref-tasks-package_index'>
443 <title><filename>do_package_index</filename></title>
444
445 <para>
446 Creates or updates the index in the
447 <link linkend='package-feeds-dev-environment'>Package Feeds</link>
448 area.
449 <note>
450 This task is not triggered with the
451 <filename>bitbake -c</filename> command-line option as
452 are the other tasks in this section.
453 Because this task is specifically for the
454 <filename>package-index</filename> recipe,
455 you run it using
456 <filename>bitbake package-index</filename>.
457 </note>
458 </para>
459 </section>
460</section>
461
462<section id='image-related-tasks'>
463 <title>Image-Related Tasks</title>
464
465 <para>
466 The following tasks are applicable to image recipes.
467 </para>
468
469 <section id='ref-tasks-bootimg'>
470 <title><filename>do_bootimg</filename></title>
471
472 <para>
473 Creates a bootable live image.
474 See the
475 <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
476 variable for additional information on live image types.
477 </para>
478 </section>
479
480 <section id='ref-tasks-bundle_initramfs'>
481 <title><filename>do_bundle_initramfs</filename></title>
482
483 <para>
484 Combines an initial RAM disk (initramfs) image and kernel
485 together to form a single image.
486 The
487 <link linkend='var-CONFIG_INITRAMFS_SOURCE'><filename>CONFIG_INITRAMFS_SOURCE</filename></link>
488 variable has some more information about these types of images.
489 </para>
490 </section>
491
492 <section id='ref-tasks-rootfs'>
493 <title><filename>do_rootfs</filename></title>
494
495 <para>
496 Creates the root filesystem (file and directory structure) for an
497 image.
498 See the
499 "<link linkend='image-generation-dev-environment'>Image Generation</link>"
500 section for more information on how the root filesystem is created.
501 </para>
502 </section>
503
504 <section id='ref-tasks-testimage'>
505 <title><filename>do_testimage</filename></title>
506
507 <para>
508 Boots an image and performs runtime tests within the image.
509 For information on automatically testing images, see the
510 "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
511 section in the Yocto Project Development Manual.
512 </para>
513 </section>
514
515 <section id='ref-tasks-testimage_auto'>
516 <title><filename>do_testimage_auto</filename></title>
517
518 <para>
519 Boots an image and performs runtime tests within the image
520 immediately after it has been built.
521 This task is enabled when you set
522 <link linkend='var-TEST_IMAGE'><filename>TEST_IMAGE</filename></link>
523 equal to "1".
524 </para>
525
526 <para>
527 For information on automatically testing images, see the
528 "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
529 section in the Yocto Project Development Manual.
530 </para>
531 </section>
532
533 <section id='ref-tasks-vmdkimg'>
534 <title><filename>do_vmdkimg</filename></title>
535
536 <para>
537 Creates a <filename>.vmdk</filename> image for use with
538 <ulink url='http://www.vmware.com/'>VMware</ulink>
539 and compatible virtual machine hosts.
540 </para>
541 </section>
542</section>
543
544<section id='kernel-related-tasks'>
545 <title>Kernel-Related Tasks</title>
546
547 <para>
548 The following tasks are applicable to kernel recipes.
549 Some of these tasks (e.g. the
550 <link linkend='ref-tasks-menuconfig'><filename>do_menuconfig</filename></link>
551 task) are also applicable to recipes that use
552 Linux kernel style configuration such as the BusyBox recipe.
553 </para>
554
555 <section id='ref-tasks-compile_kernelmodules'>
556 <title><filename>do_compile_kernelmodules</filename></title>
557
558 <para>
559 Compiles loadable modules for the Linux kernel.
560 </para>
561 </section>
562
563 <section id='ref-tasks-diffconfig'>
564 <title><filename>do_diffconfig</filename></title>
565
566 <para>
567 Compares the old and new config files after running the
568 <link linkend='ref-tasks-menuconfig'><filename>do_menuconfig</filename></link>
569 task for the kernel.
570 </para>
571 </section>
572
573 <section id='ref-tasks-kernel_checkout'>
574 <title><filename>do_kernel_checkout</filename></title>
575
576 <para>
577 Checks out source/meta branches for a linux-yocto style kernel.
578 </para>
579 </section>
580
581 <section id='ref-tasks-kernel_configcheck'>
582 <title><filename>do_kernel_configcheck</filename></title>
583
584 <para>
585 Validates the kernel configuration for a linux-yocto style kernel.
586 </para>
587 </section>
588
589 <section id='ref-tasks-kernel_configme'>
590 <title><filename>do_kernel_configme</filename></title>
591
592 <para>
593 Assembles the kernel configuration for a linux-yocto style kernel.
594 </para>
595 </section>
596
597 <section id='ref-tasks-kernel_link_vmlinux'>
598 <title><filename>do_kernel_link_vmlinux</filename></title>
599
600 <para>
601 Creates a symbolic link in
602 <filename>arch/$arch/boot</filename> for vmlinux kernel
603 images.
604 </para>
605 </section>
606
607 <section id='ref-tasks-menuconfig'>
608 <title><filename>do_menuconfig</filename></title>
609
610 <para>
611 Runs <filename>make menuconfig</filename> for the kernel.
612 For information on <filename>menuconfig</filename>, see the
613 "<ulink url='&YOCTO_DOCS_DEV_URL;#using-menuconfig'>Using&nbsp;&nbsp;<filename>menuconfig</filename></ulink>"
614 section in the Yocto Project Development Manual.
615 </para>
616 </section>
617
618 <section id='ref-tasks-savedefconfig'>
619 <title><filename>do_savedefconfig</filename></title>
620
621 <para>
622 Creates a minimal Linux kernel configuration file.
623 </para>
624 </section>
625
626 <section id='ref-tasks-sizecheck'>
627 <title><filename>do_sizecheck</filename></title>
628
629 <para>
630 Checks the size of the kernel image against
631 <filename>KERNEL_IMAGE_MAXSIZE</filename> when set.
632 </para>
633 </section>
634
635 <section id='ref-tasks-strip'>
636 <title><filename>do_strip</filename></title>
637
638 <para>
639 Strips unneeded sections out of the Linux kernel image.
640 </para>
641 </section>
642
643 <section id='ref-tasks-uboot_mkimage'>
644 <title><filename>do_uboot_mkimage</filename></title>
645
646 <para>
647 Creates a uImage file from the kernel for the U-Boot bootloader.
648 </para>
649 </section>
650
651 <section id='ref-tasks-validate_branches'>
652 <title><filename>do_validate_branches</filename></title>
653
654 <para>
655 Ensures that the source, metadata (or both) branches are on the
656 locations specified by their
657 <link linkend='var-SRCREV'><filename>SRCREV</filename></link>
658 values for a linux-yocto style kernel.
659 </para>
660 </section>
661</section>
662
663<section id='miscellaneous-tasks'>
664 <title>Miscellaneous Tasks</title>
665
666 <para>
667 The following sections describe miscellaneous tasks.
668 </para>
669
670 <section id='ref-tasks-generate_qt_config_file'>
671 <title><filename>do_generate_qt_config_file</filename></title>
672
673 <para>
674 Writes a <filename>qt.conf</filename> configuration
675 file used for building a Qt-based application.
676 </para>
677 </section>
678
679 <section id='ref-tasks-spdx'>
680 <title><filename>do_spdx</filename></title>
681
682 <para>
683 A build stage that takes the source code and scans it on a remote
684 FOSSOLOGY server in order to produce an SPDX document.
685 This task applies only to the
686 <link linkend='ref-classes-spdx'><filename>spdx</filename></link>
687 class.
688 </para>
689 </section>
690</section>
691
692</chapter>
693<!--
694vim: expandtab tw=80 ts=4
695-->
diff --git a/documentation/ref-manual/ref-variables.xml b/documentation/ref-manual/ref-variables.xml
new file mode 100644
index 0000000000..576c91f29a
--- /dev/null
+++ b/documentation/ref-manual/ref-variables.xml
@@ -0,0 +1,10284 @@
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-ABIEXTENSION'>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-EFI_PROVIDER'>E</link>
24 <link linkend='var-FEATURE_PACKAGES'>F</link>
25 <link linkend='var-GLIBC_GENERATE_LOCALES'>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-ABIEXTENSION'><glossterm>ABIEXTENSION</glossterm>
50 <glossdef>
51 <para>
52 Extension to the Application Binary Interface (ABI)
53 field of the GNU canonical architecture name
54 (e.g. "eabi").
55 </para>
56
57 <para>
58 ABI extensions are set in the machine include files.
59 For example, the
60 <filename>meta/conf/machine/include/arm/arch-arm.inc</filename>
61 file sets the following extension:
62 <literallayout class='monospaced'>
63 ABIEXTENSION = "eabi"
64 </literallayout>
65 </para>
66 </glossdef>
67 </glossentry>
68
69 <glossentry id='var-ALLOW_EMPTY'><glossterm>ALLOW_EMPTY</glossterm>
70 <glossdef>
71 <para>
72 Specifies if an output package should still be produced if it is empty.
73 By default, BitBake does not produce empty packages.
74 This default behavior can cause issues when there is an
75 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link> or
76 some other hard runtime requirement on the existence of the package.
77 </para>
78
79 <para>
80 Like all package-controlling variables, you must always use them in
81 conjunction with a package name override, as in:
82 <literallayout class='monospaced'>
83 ALLOW_EMPTY_${PN} = "1"
84 ALLOW_EMPTY_${PN}-dev = "1"
85 ALLOW_EMPTY_${PN}-staticdev = "1"
86 </literallayout>
87 </para>
88 </glossdef>
89 </glossentry>
90
91 <glossentry id='var-ALTERNATIVE'><glossterm>ALTERNATIVE</glossterm>
92 <glossdef>
93 <para>
94 Lists commands in a package that need an alternative
95 binary naming scheme.
96 Sometimes the same command is provided in multiple packages.
97 When this occurs, the OpenEmbedded build system needs to
98 use the alternatives system to create a different binary
99 naming scheme so the commands can co-exist.
100 </para>
101
102 <para>
103 To use the variable, list out the package's commands
104 that also exist as part of another package.
105 For example, if the <filename>busybox</filename> package
106 has four commands that also exist as part of another
107 package, you identify them as follows:
108 <literallayout class='monospaced'>
109 ALTERNATIVE_busybox = "sh sed test bracket"
110 </literallayout>
111 For more information on the alternatives system, see the
112 "<link linkend='ref-classes-update-alternatives'><filename>update-alternatives.bbclass</filename></link>"
113 section.
114 </para>
115 </glossdef>
116 </glossentry>
117
118 <glossentry id='var-ALTERNATIVE_LINK_NAME'><glossterm>ALTERNATIVE_LINK_NAME</glossterm>
119 <glossdef>
120 <para>
121 Used by the alternatives system to map duplicated commands
122 to actual locations.
123 For example, if the <filename>bracket</filename> command
124 provided by the <filename>busybox</filename> package is
125 duplicated through another package, you must use the
126 <filename>ALTERNATIVE_LINK_NAME</filename> variable to
127 specify the actual location:
128 <literallayout class='monospaced'>
129 ALTERNATIVE_LINK_NAME[bracket] = "/usr/bin/["
130 </literallayout>
131 In this example, the binary for the
132 <filename>bracket</filename> command (i.e.
133 <filename>[</filename>) from the
134 <filename>busybox</filename> package resides in
135 <filename>/usr/bin/</filename>.
136 <note>
137 If <filename>ALTERNATIVE_LINK_NAME</filename> is not
138 defined, it defaults to
139 <filename>${bindir}/<replaceable>name</replaceable></filename>.
140 </note>
141 </para>
142
143 <para>
144 For more information on the alternatives system, see the
145 "<link linkend='ref-classes-update-alternatives'><filename>update-alternatives.bbclass</filename></link>"
146 section.
147 </para>
148 </glossdef>
149 </glossentry>
150
151 <glossentry id='var-ALTERNATIVE_PRIORITY'><glossterm>ALTERNATIVE_PRIORITY</glossterm>
152 <glossdef>
153 <para>
154 Used by the alternatives system to create default
155 priorities for duplicated commands.
156 You can use the variable to create a single default
157 regardless of the command name or package, a default for
158 specific duplicated commands regardless of the package, or
159 a default for specific commands tied to particular packages.
160 Here are the available syntax forms:
161 <literallayout class='monospaced'>
162 ALTERNATIVE_PRIORITY = "<replaceable>priority</replaceable>"
163 ALTERNATIVE_PRIORITY[<replaceable>name</replaceable>] = "<replaceable>priority</replaceable>"
164 ALTERNATIVE_PRIORITY_<replaceable>pkg</replaceable>[<replaceable>name</replaceable>] = "<replaceable>priority</replaceable>"
165 </literallayout>
166 </para>
167
168 <para>
169 For more information on the alternatives system, see the
170 "<link linkend='ref-classes-update-alternatives'><filename>update-alternatives.bbclass</filename></link>"
171 section.
172 </para>
173 </glossdef>
174 </glossentry>
175
176 <glossentry id='var-ALTERNATIVE_TARGET'><glossterm>ALTERNATIVE_TARGET</glossterm>
177 <glossdef>
178 <para>
179 Used by the alternatives system to create default link
180 locations for duplicated commands.
181 You can use the variable to create a single default
182 location for all duplicated commands regardless of the
183 command name or package, a default for
184 specific duplicated commands regardless of the package, or
185 a default for specific commands tied to particular packages.
186 Here are the available syntax forms:
187 <literallayout class='monospaced'>
188 ALTERNATIVE_TARGET = "<replaceable>target</replaceable>"
189 ALTERNATIVE_TARGET[<replaceable>name</replaceable>] = "<replaceable>target</replaceable>"
190 ALTERNATIVE_TARGET_<replaceable>pkg</replaceable>[<replaceable>name</replaceable>] = "<replaceable>target</replaceable>"
191 </literallayout>
192 <note>
193 <para>
194 If <filename>ALTERNATIVE_TARGET</filename> is not
195 defined, it inherits the value from the
196 <link linkend='var-ALTERNATIVE_LINK_NAME'><filename>ALTERNATIVE_LINK_NAME</filename></link>
197 variable.
198 </para>
199
200 <para>
201 If <filename>ALTERNATIVE_LINK_NAME</filename> and
202 <filename>ALTERNATIVE_TARGET</filename> are the
203 same, the target for
204 <filename>ALTERNATIVE_TARGET</filename>
205 has "<filename>.{BPN}</filename>" appended to it.
206 </para>
207
208 <para>
209 Finally, if the file referenced has not been
210 renamed, the alternatives system will rename it to
211 avoid the need to rename alternative files in the
212 <link linkend='ref-tasks-install'><filename>do_install</filename></link>
213 task while
214 retaining support for the command if necessary.
215 </para>
216 </note>
217 </para>
218
219 <para>
220 For more information on the alternatives system, see the
221 "<link linkend='ref-classes-update-alternatives'><filename>update-alternatives.bbclass</filename></link>"
222 section.
223 </para>
224 </glossdef>
225 </glossentry>
226
227 <glossentry id='var-APPEND'><glossterm>APPEND</glossterm>
228 <glossdef>
229 <para>
230 An override list of append strings for each
231 <link linkend='var-LABELS'><filename>LABEL</filename></link>.
232 </para>
233
234 <para>
235 See the
236 <link linkend='ref-classes-grub-efi'><filename>grub-efi</filename></link>
237 class for more information on how this variable is used.
238 </para>
239 </glossdef>
240 </glossentry>
241
242 <glossentry id='var-ASSUME_PROVIDED'><glossterm>ASSUME_PROVIDED</glossterm>
243 <glossdef>
244 <para>
245 Lists recipe names
246 (<link linkend='var-PN'><filename>PN</filename></link>
247 values) BitBake does not attempt to build.
248 Instead, BitBake assumes these recipes have already been
249 built.
250 </para>
251
252 <para>
253 In OpenEmbedded Core, <filename>ASSUME_PROVIDED</filename>
254 mostly specifies native tools that should not be built.
255 An example is <filename>git-native</filename>, which when
256 specified, allows for the Git binary from the host to be
257 used rather than building <filename>git-native</filename>.
258 </para>
259 </glossdef>
260 </glossentry>
261
262 <glossentry id='var-AUTHOR'><glossterm>AUTHOR</glossterm>
263 <glossdef>
264 <para>The email address used to contact the original author
265 or authors in order to send patches and forward bugs.</para>
266 </glossdef>
267 </glossentry>
268
269 <glossentry id='var-AUTO_SYSLINUXMENU'><glossterm>AUTO_SYSLINUXMENU</glossterm>
270 <glossdef>
271 <para>
272 Enables creating an automatic menu.
273 You must set this in your recipe.
274 The
275 <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
276 class checks this variable.
277 </para>
278 </glossdef>
279 </glossentry>
280
281 <glossentry id='var-AUTOREV'><glossterm>AUTOREV</glossterm>
282 <glossdef>
283 <para>When <filename><link linkend='var-SRCREV'>SRCREV</link></filename>
284 is set to the value of this variable, it specifies to use the latest
285 source revision in the repository.
286 Here is an example:
287 <literallayout class='monospaced'>
288 SRCREV = "${AUTOREV}"
289 </literallayout>
290 </para>
291 </glossdef>
292 </glossentry>
293
294 <glossentry id='var-AVAILTUNES'><glossterm>AVAILTUNES</glossterm>
295 <glossdef>
296 <para>
297 The list of defined CPU and Application Binary Interface
298 (ABI) tunings (i.e. "tunes") available for use by the
299 OpenEmbedded build system.
300 </para>
301
302 <para>
303 The list simply presents the tunes that are available.
304 Not all tunes may be compatible with a particular
305 machine configuration, or with each other in a
306 <ulink url='&YOCTO_DOCS_DEV_URL;#combining-multiple-versions-library-files-into-one-image'>Multilib</ulink>
307 configuration.
308 </para>
309
310 <para>
311 To add a tune to the list, be sure to append it with
312 spaces using the "+=" BitBake operator.
313 Do not simply replace the list by using the "=" operator.
314 See the
315 "<ulink url='&YOCTO_DOCS_BB_URL;#basic-syntax'>Basic Syntax</ulink>"
316 section in the BitBake User Manual for more information.
317 </para>
318 </glossdef>
319 </glossentry>
320
321
322 </glossdiv>
323
324 <glossdiv id='var-glossary-b'><title>B</title>
325
326 <glossentry id='var-B'><glossterm>B</glossterm>
327 <glossdef>
328 <para>
329 The directory within the
330 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
331 in which the OpenEmbedded build system places generated
332 objects during a recipe's build process.
333 By default, this directory is the same as the <link linkend='var-S'><filename>S</filename></link>
334 directory, which is defined as:
335 <literallayout class='monospaced'>
336 S = "${WORKDIR}/${BP}/"
337 </literallayout>
338 You can separate the (<filename>S</filename>) directory
339 and the directory pointed to by the <filename>B</filename>
340 variable.
341 Most Autotools-based recipes support separating these
342 directories.
343 The build system defaults to using separate directories for
344 <filename>gcc</filename> and some kernel recipes.
345 </para>
346 </glossdef>
347 </glossentry>
348
349 <glossentry id='var-BAD_RECOMMENDATIONS'><glossterm>BAD_RECOMMENDATIONS</glossterm>
350 <glossdef>
351 <para>
352 Lists "recommended-only" packages to not install.
353 Recommended-only packages are packages installed only
354 through the
355 <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>
356 variable.
357 You can prevent any of these "recommended" packages from
358 being installed by listing them with the
359 <filename>BAD_RECOMMENDATIONS</filename> variable:
360 <literallayout class='monospaced'>
361 BAD_RECOMMENDATIONS = "<replaceable>package_name</replaceable> <replaceable>package_name</replaceable> <replaceable>package_name</replaceable> ..."
362 </literallayout>
363 You can set this variable globally in your
364 <filename>local.conf</filename> file or you can attach it to
365 a specific image recipe by using the recipe name override:
366 <literallayout class='monospaced'>
367 BAD_RECOMMENDATIONS_pn-<replaceable>target_image</replaceable> = "<replaceable>package_name</replaceable>"
368 </literallayout>
369 </para>
370
371 <para>
372 It is important to realize that if you choose to not install
373 packages using this variable and some other packages are
374 dependent on them (i.e. listed in a recipe's
375 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
376 variable), the OpenEmbedded build system ignores your
377 request and will install the packages to avoid dependency
378 errors.
379 </para>
380
381 <para>
382 Support for this variable exists only when using the
383 IPK and RPM packaging backend.
384 Support does not exist for DEB.
385 </para>
386
387 <para>
388 See the
389 <link linkend='var-NO_RECOMMENDATIONS'><filename>NO_RECOMMENDATIONS</filename></link>
390 and the
391 <link linkend='var-PACKAGE_EXCLUDE'><filename>PACKAGE_EXCLUDE</filename></link>
392 variables for related information.
393 </para>
394 </glossdef>
395 </glossentry>
396
397 <glossentry id='var-BASE_LIB'><glossterm>BASE_LIB</glossterm>
398 <glossdef>
399 <para>
400 The library directory name for the CPU or Application
401 Binary Interface (ABI) tune.
402 The <filename>BASE_LIB</filename> applies only in the
403 Multilib context.
404 See the
405 "<ulink url='&YOCTO_DOCS_DEV_URL;#combining-multiple-versions-library-files-into-one-image'>Combining Multiple Versions of Library Files into One Image</ulink>"
406 section in the Yocto Project Development Manual for
407 information on Multilib.
408 </para>
409
410 <para>
411 The <filename>BASE_LIB</filename> variable is defined in
412 the machine include files in the
413 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
414 If Multilib is not being used, the value defaults to "lib".
415 </para>
416 </glossdef>
417 </glossentry>
418
419 <glossentry id='var-BB_DANGLINGAPPENDS_WARNONLY'><glossterm>BB_DANGLINGAPPENDS_WARNONLY</glossterm>
420 <glossdef>
421 <para>
422 Defines how BitBake handles situations where an append
423 file (<filename>.bbappend</filename>) has no
424 corresponding recipe file (<filename>.bb</filename>).
425 This condition often occurs when layers get out of sync
426 (e.g. <filename>oe-core</filename> bumps a
427 recipe version and the old recipe no longer exists and the
428 other layer has not been updated to the new version
429 of the recipe yet).
430 </para>
431
432 <para>
433 The default fatal behavior is safest because it is
434 the sane reaction given something is out of sync.
435 It is important to realize when your changes are no longer
436 being applied.
437 </para>
438
439 <para>
440 You can change the default behavior by setting this
441 variable to "1", "yes", or "true"
442 in your <filename>local.conf</filename> file, which is
443 located in the
444 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>:
445 Here is an example:
446 <literallayout class='monospaced'>
447 BB_DANGLINGAPPENDS_WARNONLY = "1"
448 </literallayout>
449 </para>
450 </glossdef>
451 </glossentry>
452
453 <glossentry id='var-BB_DISKMON_DIRS'><glossterm>BB_DISKMON_DIRS</glossterm>
454 <glossdef>
455 <para>
456 Monitors disk space and available inodes during the build
457 and allows you to control the build based on these
458 parameters.
459 </para>
460
461 <para>
462 Disk space monitoring is disabled by default.
463 To enable monitoring, add the <filename>BB_DISKMON_DIRS</filename>
464 variable to your <filename>conf/local.conf</filename> file found in the
465 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
466 Use the following form:
467 <literallayout class='monospaced'>
468 BB_DISKMON_DIRS = "<replaceable>action</replaceable>,<replaceable>dir</replaceable>,<replaceable>threshold</replaceable> [...]"
469
470 where:
471
472 <replaceable>action</replaceable> is:
473 ABORT: Immediately abort the build when
474 a threshold is broken.
475 STOPTASKS: Stop the build after the currently
476 executing tasks have finished when
477 a threshold is broken.
478 WARN: Issue a warning but continue the
479 build when a threshold is broken.
480 Subsequent warnings are issued as
481 defined by the
482 <link linkend='var-BB_DISKMON_WARNINTERVAL'>BB_DISKMON_WARNINTERVAL</link> variable,
483 which must be defined in the
484 conf/local.conf file.
485
486 <replaceable>dir</replaceable> is:
487 Any directory you choose. You can specify one or
488 more directories to monitor by separating the
489 groupings with a space. If two directories are
490 on the same device, only the first directory
491 is monitored.
492
493 <replaceable>threshold</replaceable> is:
494 Either the minimum available disk space,
495 the minimum number of free inodes, or
496 both. You must specify at least one. To
497 omit one or the other, simply omit the value.
498 Specify the threshold using G, M, K for Gbytes,
499 Mbytes, and Kbytes, respectively. If you do
500 not specify G, M, or K, Kbytes is assumed by
501 default. Do not use GB, MB, or KB.
502 </literallayout>
503 </para>
504
505 <para>
506 Here are some examples:
507 <literallayout class='monospaced'>
508 BB_DISKMON_DIRS = "ABORT,${TMPDIR},1G,100K WARN,${SSTATE_DIR},1G,100K"
509 BB_DISKMON_DIRS = "STOPTASKS,${TMPDIR},1G"
510 BB_DISKMON_DIRS = "ABORT,${TMPDIR},,100K"
511 </literallayout>
512 The first example works only if you also provide
513 the <link linkend='var-BB_DISKMON_WARNINTERVAL'><filename>BB_DISKMON_WARNINTERVAL</filename></link> variable
514 in the <filename>conf/local.conf</filename>.
515 This example causes the build system to immediately
516 abort when either the disk space in <filename>${TMPDIR}</filename> drops
517 below 1 Gbyte or the available free inodes drops below
518 100 Kbytes.
519 Because two directories are provided with the variable, the
520 build system also issue a
521 warning when the disk space in the
522 <filename>${SSTATE_DIR}</filename> directory drops
523 below 1 Gbyte or the number of free inodes drops
524 below 100 Kbytes.
525 Subsequent warnings are issued during intervals as
526 defined by the <filename>BB_DISKMON_WARNINTERVAL</filename>
527 variable.
528 </para>
529
530 <para>
531 The second example stops the build after all currently
532 executing tasks complete when the minimum disk space
533 in the <filename>${<link linkend='var-TMPDIR'>TMPDIR</link>}</filename>
534 directory drops below 1 Gbyte.
535 No disk monitoring occurs for the free inodes in this case.
536 </para>
537
538 <para>
539 The final example immediately aborts the build when the
540 number of free inodes in the <filename>${TMPDIR}</filename> directory
541 drops below 100 Kbytes.
542 No disk space monitoring for the directory itself occurs
543 in this case.
544 </para>
545 </glossdef>
546 </glossentry>
547
548 <glossentry id='var-BB_DISKMON_WARNINTERVAL'><glossterm>BB_DISKMON_WARNINTERVAL</glossterm>
549 <glossdef>
550 <para>
551 Defines the disk space and free inode warning intervals.
552 To set these intervals, define the variable in your
553 <filename>conf/local.conf</filename> file in the
554 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
555 </para>
556
557 <para>
558 If you are going to use the
559 <filename>BB_DISKMON_WARNINTERVAL</filename> variable, you must
560 also use the
561 <link linkend='var-BB_DISKMON_DIRS'><filename>BB_DISKMON_DIRS</filename></link> variable
562 and define its action as "WARN".
563 During the build, subsequent warnings are issued each time
564 disk space or number of free inodes further reduces by
565 the respective interval.
566 </para>
567
568 <para>
569 If you do not provide a <filename>BB_DISKMON_WARNINTERVAL</filename>
570 variable and you do use <filename>BB_DISKMON_DIRS</filename> with
571 the "WARN" action, the disk monitoring interval defaults to
572 the following:
573 <literallayout class='monospaced'>
574 BB_DISKMON_WARNINTERVAL = "50M,5K"
575 </literallayout>
576 </para>
577
578 <para>
579 When specifying the variable in your configuration file,
580 use the following form:
581 <literallayout class='monospaced'>
582 BB_DISKMON_WARNINTERVAL = "<replaceable>disk_space_interval</replaceable>,<replaceable>disk_inode_interval</replaceable>"
583
584 where:
585
586 <replaceable>disk_space_interval</replaceable> is:
587 An interval of memory expressed in either
588 G, M, or K for Gbytes, Mbytes, or Kbytes,
589 respectively. You cannot use GB, MB, or KB.
590
591 <replaceable>disk_inode_interval</replaceable> is:
592 An interval of free inodes expressed in either
593 G, M, or K for Gbytes, Mbytes, or Kbytes,
594 respectively. You cannot use GB, MB, or KB.
595 </literallayout>
596 </para>
597
598 <para>
599 Here is an example:
600 <literallayout class='monospaced'>
601 BB_DISKMON_DIRS = "WARN,${SSTATE_DIR},1G,100K"
602 BB_DISKMON_WARNINTERVAL = "50M,5K"
603 </literallayout>
604 These variables cause the OpenEmbedded build system to
605 issue subsequent warnings each time the available
606 disk space further reduces by 50 Mbytes or the number
607 of free inodes further reduces by 5 Kbytes in the
608 <filename>${SSTATE_DIR}</filename> directory.
609 Subsequent warnings based on the interval occur each time
610 a respective interval is reached beyond the initial warning
611 (i.e. 1 Gbytes and 100 Kbytes).
612 </para>
613 </glossdef>
614 </glossentry>
615
616 <glossentry id='var-BB_GENERATE_MIRROR_TARBALLS'><glossterm>BB_GENERATE_MIRROR_TARBALLS</glossterm>
617 <glossdef>
618 <para>
619 Causes tarballs of the Git repositories, including the
620 Git metadata, to be placed in the
621 <link linkend='var-DL_DIR'><filename>DL_DIR</filename></link>
622 directory.
623 </para>
624
625 <para>
626 For performance reasons, creating and placing tarballs of
627 the Git repositories is not the default action by the
628 OpenEmbedded build system.
629 <literallayout class='monospaced'>
630 BB_GENERATE_MIRROR_TARBALLS = "1"
631 </literallayout>
632 Set this variable in your <filename>local.conf</filename>
633 file in the
634 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
635 </para>
636 </glossdef>
637 </glossentry>
638
639 <glossentry id='var-BB_NUMBER_THREADS'><glossterm>BB_NUMBER_THREADS</glossterm>
640 <glossdef>
641 <para>
642 The maximum number of tasks BitBake should run in parallel
643 at any one time.
644 If your host development system supports multiple cores,
645 a good rule of thumb is to set this variable to twice the
646 number of cores.
647 </para>
648
649 <para>
650 The default value for <filename>BB_NUMBER_THREADS</filename>
651 is equal to the number of cores your build system has.
652 </para>
653 </glossdef>
654 </glossentry>
655
656 <glossentry id='var-BBCLASSEXTEND'><glossterm>BBCLASSEXTEND</glossterm>
657 <glossdef>
658 <para>
659 Allows you to extend a recipe so that it builds variants of the software.
660 Common variants for recipes exist such as "natives" like <filename>quilt-native</filename>,
661 which is a copy of Quilt built to run on the build system;
662 "crosses" such as <filename>gcc-cross</filename>,
663 which is a compiler built to run on the build machine but produces binaries
664 that run on the target <link linkend='var-MACHINE'><filename>MACHINE</filename></link>;
665 "nativesdk", which targets the SDK machine instead of <filename>MACHINE</filename>;
666 and "mulitlibs" in the form "<filename>multilib:</filename><replaceable>multilib_name</replaceable>".
667 </para>
668
669 <para>
670 To build a different variant of the recipe with a minimal amount of code, it usually
671 is as simple as adding the following to your recipe:
672 <literallayout class='monospaced'>
673 BBCLASSEXTEND =+ "native nativesdk"
674 BBCLASSEXTEND =+ "multilib:<replaceable>multilib_name</replaceable>"
675 </literallayout>
676 </para>
677 </glossdef>
678 </glossentry>
679
680 <glossentry id='var-BBFILE_COLLECTIONS'><glossterm>BBFILE_COLLECTIONS</glossterm>
681 <glossdef>
682 <para>Lists the names of configured layers.
683 These names are used to find the other <filename>BBFILE_*</filename>
684 variables.
685 Typically, each layer will append its name to this variable in its
686 <filename>conf/layer.conf</filename> file.
687 </para>
688 </glossdef>
689 </glossentry>
690
691 <glossentry id='var-BBFILE_PATTERN'><glossterm>BBFILE_PATTERN</glossterm>
692 <glossdef>
693 <para>Variable that expands to match files from
694 <link linkend='var-BBFILES'><filename>BBFILES</filename></link>
695 in a particular layer.
696 This variable is used in the <filename>conf/layer.conf</filename> file and must
697 be suffixed with the name of the specific layer (e.g.
698 <filename>BBFILE_PATTERN_emenlow</filename>).</para>
699 </glossdef>
700 </glossentry>
701
702 <glossentry id='var-BBFILE_PRIORITY'><glossterm>BBFILE_PRIORITY</glossterm>
703 <glossdef>
704 <para>Assigns the priority for recipe files in each layer.</para>
705 <para>This variable is useful in situations where the same recipe appears in
706 more than one layer.
707 Setting this variable allows you to prioritize a
708 layer against other layers that contain the same recipe - effectively
709 letting you control the precedence for the multiple layers.
710 The precedence established through this variable stands regardless of a
711 recipe's version
712 (<link linkend='var-PV'><filename>PV</filename></link> variable).
713 For example, a layer that has a recipe with a higher <filename>PV</filename> value but for
714 which the <filename>BBFILE_PRIORITY</filename> is set to have a lower precedence still has a
715 lower precedence.</para>
716 <para>A larger value for the <filename>BBFILE_PRIORITY</filename> variable results in a higher
717 precedence.
718 For example, the value 6 has a higher precedence than the value 5.
719 If not specified, the <filename>BBFILE_PRIORITY</filename> variable is set based on layer
720 dependencies (see the
721 <filename><link linkend='var-LAYERDEPENDS'>LAYERDEPENDS</link></filename> variable for
722 more information.
723 The default priority, if unspecified
724 for a layer with no dependencies, is the lowest defined priority + 1
725 (or 1 if no priorities are defined).</para>
726 <tip>
727 You can use the command <filename>bitbake-layers show-layers</filename> to list
728 all configured layers along with their priorities.
729 </tip>
730 </glossdef>
731 </glossentry>
732
733 <glossentry id='var-BBFILES'><glossterm>BBFILES</glossterm>
734 <glossdef>
735 <para>List of recipe files used by BitBake to build software.</para>
736 </glossdef>
737 </glossentry>
738
739 <glossentry id='var-BBINCLUDELOGS'><glossterm>BBINCLUDELOGS</glossterm>
740 <glossdef>
741 <para>Variable that controls how BitBake displays logs on build failure.</para>
742 </glossdef>
743 </glossentry>
744
745 <glossentry id='var-BBLAYERS'><glossterm>BBLAYERS</glossterm>
746 <glossdef>
747 <para>Lists the layers to enable during the build.
748 This variable is defined in the <filename>bblayers.conf</filename> configuration
749 file in the <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
750 Here is an example:
751 <literallayout class='monospaced'>
752 BBLAYERS = " \
753 /home/scottrif/poky/meta \
754 /home/scottrif/poky/meta-yocto \
755 /home/scottrif/poky/meta-yocto-bsp \
756 /home/scottrif/poky/meta-mykernel \
757 "
758
759 BBLAYERS_NON_REMOVABLE ?= " \
760 /home/scottrif/poky/meta \
761 /home/scottrif/poky/meta-yocto \
762 "
763 </literallayout>
764 This example enables four layers, one of which is a custom, user-defined layer
765 named <filename>meta-mykernel</filename>.
766 </para>
767 </glossdef>
768 </glossentry>
769
770 <glossentry id='var-BBLAYERS_NON_REMOVABLE'><glossterm>BBLAYERS_NON_REMOVABLE</glossterm>
771 <glossdef>
772 <para>Lists core layers that cannot be removed from the
773 <filename>bblayers.conf</filename> file during a build
774 using the
775 <ulink url='https://www.yoctoproject.org/tools-resources/projects/hob'>Hob</ulink>.
776 <note>
777 When building an image outside of Hob, this variable
778 is ignored.
779 </note>
780 In order for BitBake to build your image using Hob, your
781 <filename>bblayers.conf</filename> file must include the
782 <filename>meta</filename> and <filename>meta-yocto</filename>
783 core layers.
784 Here is an example that shows these two layers listed in
785 the <filename>BBLAYERS_NON_REMOVABLE</filename> statement:
786 <literallayout class='monospaced'>
787 BBLAYERS = " \
788 /home/scottrif/poky/meta \
789 /home/scottrif/poky/meta-yocto \
790 /home/scottrif/poky/meta-yocto-bsp \
791 /home/scottrif/poky/meta-mykernel \
792 "
793
794 BBLAYERS_NON_REMOVABLE ?= " \
795 /home/scottrif/poky/meta \
796 /home/scottrif/poky/meta-yocto \
797 "
798 </literallayout>
799 </para>
800 </glossdef>
801 </glossentry>
802
803 <glossentry id='var-BBMASK'><glossterm>BBMASK</glossterm>
804 <glossdef>
805 <para>
806 Prevents BitBake from processing recipes and recipe
807 append files.
808 Use the <filename>BBMASK</filename> variable from within the
809 <filename>conf/local.conf</filename> file found
810 in the
811 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
812 </para>
813
814 <para>
815 You can use the <filename>BBMASK</filename> variable
816 to "hide" these <filename>.bb</filename> and
817 <filename>.bbappend</filename> files.
818 BitBake ignores any recipe or recipe append files that
819 match the expression.
820 It is as if BitBake does not see them at all.
821 Consequently, matching files are not parsed or otherwise
822 used by BitBake.</para>
823 <para>
824 The value you provide is passed to Python's regular
825 expression compiler.
826 The expression is compared against the full paths to
827 the files.
828 For complete syntax information, see Python's
829 documentation at
830 <ulink url='http://docs.python.org/release/2.3/lib/re-syntax.html'></ulink>.
831 </para>
832
833 <para>
834 The following example uses a complete regular expression
835 to tell BitBake to ignore all recipe and recipe append
836 files in the <filename>meta-ti/recipes-misc/</filename>
837 directory:
838 <literallayout class='monospaced'>
839 BBMASK = "meta-ti/recipes-misc/"
840 </literallayout>
841 If you want to mask out multiple directories or recipes,
842 use the vertical bar to separate the regular expression
843 fragments.
844 This next example masks out multiple directories and
845 individual recipes:
846 <literallayout class='monospaced'>
847 BBMASK = "meta-ti/recipes-misc/|meta-ti/recipes-ti/packagegroup/"
848 BBMASK .= "|.*meta-oe/recipes-support/"
849 BBMASK .= "|.*openldap"
850 BBMASK .= "|.*opencv"
851 BBMASK .= "|.*lzma"
852 </literallayout>
853 Notice how the vertical bar is used to append the fragments.
854 <note>
855 When specifying a directory name, use the trailing
856 slash character to ensure you match just that directory
857 name.
858 </note>
859 </para>
860 </glossdef>
861 </glossentry>
862
863 <glossentry id='var-BBPATH'><glossterm>BBPATH</glossterm>
864 <glossdef>
865 <para>
866 Used by BitBake to locate
867 <filename>.bbclass</filename> and configuration files.
868 This variable is analogous to the
869 <filename>PATH</filename> variable.
870 <note>
871 If you run BitBake from a directory outside of the
872 <ulink url='&YOCTO_DOCS_DEV_URL;build-directory'>Build Directory</ulink>,
873 you must be sure to set
874 <filename>BBPATH</filename> to point to the
875 Build Directory.
876 Set the variable as you would any environment variable
877 and then run BitBake:
878 <literallayout class='monospaced'>
879 $ BBPATH = "<replaceable>build_directory</replaceable>"
880 $ export BBPATH
881 $ bitbake <replaceable>target</replaceable>
882 </literallayout>
883 </note>
884 </para>
885 </glossdef>
886 </glossentry>
887
888 <glossentry id='var-BBSERVER'><glossterm>BBSERVER</glossterm>
889 <glossdef>
890 <para>
891 Points to the server that runs memory-resident BitBake.
892 This variable is set by the
893 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>
894 setup script and should not be hand-edited.
895 The variable is only used when you employ memory-resident
896 BitBake.
897 The setup script exports the value as follows:
898 <literallayout class='monospaced'>
899 export BBSERVER=localhost:$port
900 </literallayout>
901 For more information on how the
902 <filename>BBSERVER</filename> is used, see the
903 <filename>oe-init-build-env-memres</filename> script, which
904 is located in the
905 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
906 </para>
907 </glossdef>
908 </glossentry>
909
910 <glossentry id='var-BINCONFIG'><glossterm>BINCONFIG</glossterm>
911 <glossdef>
912 <para>
913 When inheriting the
914 <link linkend='ref-classes-binconfig-disabled'><filename>binconfig-disabled</filename></link>
915 class, this variable specifies binary configuration
916 scripts to disable in favor of using
917 <filename>pkg-config</filename> to query the information.
918 The <filename>binconfig-disabled</filename> class will
919 modify the specified scripts to return an error so that
920 calls to them can be easily found and replaced.
921 </para>
922
923 <para>
924 To add multiple scripts, separate them by spaces.
925 Here is an example from the <filename>libpng</filename>
926 recipe:
927 <literallayout class='monospaced'>
928 BINCONFIG = "${bindir}/libpng-config ${bindir}/libpng16-config"
929 </literallayout>
930 </para>
931 </glossdef>
932 </glossentry>
933
934 <glossentry id='var-BINCONFIG_GLOB'><glossterm>BINCONFIG_GLOB</glossterm>
935 <glossdef>
936 <para>
937 When inheriting the
938 <link linkend='ref-classes-binconfig'><filename>binconfig</filename></link>
939 class, this variable specifies a wildcard for
940 configuration scripts that need editing.
941 The scripts are edited to correct any paths that have been
942 set up during compilation so that they are correct for
943 use when installed into the sysroot and called by the
944 build processes of other recipes.
945 </para>
946
947 <para>
948 For more information on how this variable works, see
949 <filename>meta/classes/binconfig.bbclass</filename> in the
950 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
951 You can also find general information on the class in the
952 "<link linkend='ref-classes-binconfig'><filename>binconfig.bbclass</filename></link>"
953 section.
954 </para>
955 </glossdef>
956 </glossentry>
957
958 <glossentry id='var-BP'><glossterm>BP</glossterm>
959 <glossdef>
960 <para>The base recipe name and version but without any special
961 recipe name suffix (i.e. <filename>-native</filename>, <filename>lib64-</filename>,
962 and so forth).
963 <filename>BP</filename> is comprised of the following:
964 <literallayout class="monospaced">
965 ${BPN}-${PV}
966 </literallayout></para>
967 </glossdef>
968 </glossentry>
969
970 <glossentry id='var-BPN'><glossterm>BPN</glossterm>
971 <glossdef>
972 <para>The bare name of the recipe.
973 This variable is a version of the <link linkend='var-PN'><filename>PN</filename></link> variable
974 but removes common suffixes such as "-native" and "-cross" as well
975 as removes common prefixes such as multilib's "lib64-" and "lib32-".
976 The exact list of suffixes removed is specified by the
977 <link linkend='var-SPECIAL_PKGSUFFIX'><filename>SPECIAL_PKGSUFFIX</filename></link> variable.
978 The exact list of prefixes removed is specified by the
979 <link linkend='var-MLPREFIX'><filename>MLPREFIX</filename></link> variable.
980 Prefixes are removed for <filename>multilib</filename>
981 and <filename>nativesdk</filename> cases.</para>
982 </glossdef>
983 </glossentry>
984
985 <glossentry id='var-BUGTRACKER'><glossterm>BUGTRACKER</glossterm>
986 <glossdef>
987 <para>
988 Specifies a URL for an upstream bug tracking website for
989 a recipe.
990 The OpenEmbedded build system does not use this variable.
991 Rather, the variable is a useful pointer in case a bug
992 in the software being built needs to be manually reported.
993 </para>
994 </glossdef>
995 </glossentry>
996
997 <glossentry id='var-BUILD_CFLAGS'><glossterm>BUILD_CFLAGS</glossterm>
998 <glossdef>
999 <para>
1000 Specifies the flags to pass to the C compiler when building
1001 for the build host.
1002 When building in the <filename>-native</filename> context,
1003 <link linkend='var-CFLAGS'><filename>CFLAGS</filename></link>
1004 is set to the value of this variable by default.
1005 </para>
1006 </glossdef>
1007 </glossentry>
1008
1009 <glossentry id='var-BUILD_CPPFLAGS'><glossterm>BUILD_CPPFLAGS</glossterm>
1010 <glossdef>
1011 <para>
1012 Specifies the flags to pass to the C pre-processor
1013 (i.e. to both the C and the C++ compilers) when building
1014 for the build host.
1015 When building in the <filename>native</filename> context,
1016 <link linkend='var-CPPFLAGS'><filename>CPPFLAGS</filename></link>
1017 is set to the value of this variable by default.
1018 </para>
1019 </glossdef>
1020 </glossentry>
1021
1022 <glossentry id='var-BUILD_CXXFLAGS'><glossterm>BUILD_CXXFLAGS</glossterm>
1023 <glossdef>
1024 <para>
1025 Specifies the flags to pass to the C++ compiler when
1026 building for the build host.
1027 When building in the <filename>native</filename> context,
1028 <link linkend='var-CXXFLAGS'><filename>CXXFLAGS</filename></link>
1029 is set to the value of this variable by default.
1030 </para>
1031 </glossdef>
1032 </glossentry>
1033
1034 <glossentry id='var-BUILD_LDFLAGS'><glossterm>BUILD_LDFLAGS</glossterm>
1035 <glossdef>
1036 <para>
1037 Specifies the flags to pass to the linker when building
1038 for the build host.
1039 When building in the <filename>-native</filename> context,
1040 <link linkend='var-LDFLAGS'><filename>LDFLAGS</filename></link>
1041 is set to the value of this variable by default.
1042 </para>
1043 </glossdef>
1044 </glossentry>
1045
1046 <glossentry id='var-BUILD_OPTIMIZATION'><glossterm>BUILD_OPTIMIZATION</glossterm>
1047 <glossdef>
1048 <para>
1049 Specifies the optimization flags passed to the C compiler
1050 when building for the build host or the SDK.
1051 The flags are passed through the
1052 <link linkend='var-BUILD_CFLAGS'><filename>BUILD_CFLAGS</filename></link>
1053 and
1054 <link linkend='var-BUILDSDK_CFLAGS'><filename>BUILDSDK_CFLAGS</filename></link>
1055 default values.
1056 </para>
1057
1058 <para>
1059 The default value of the
1060 <filename>BUILD_OPTIMIZATION</filename> variable is
1061 "-O2 -pipe".
1062 </para>
1063 </glossdef>
1064 </glossentry>
1065
1066 <glossentry id='var-BUILDDIR'><glossterm>BUILDDIR</glossterm>
1067 <glossdef>
1068 <para>
1069 Points to the location of the
1070 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
1071 You can define this directory indirectly through the
1072 <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
1073 and
1074 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>
1075 scripts by passing in a Build Directory path when you run
1076 the scripts.
1077 If you run the scripts and do not provide a Build Directory
1078 path, the <filename>BUILDDIR</filename> defaults to
1079 <filename>build</filename> in the current directory.
1080 </para>
1081 </glossdef>
1082 </glossentry>
1083
1084 <glossentry id='var-BUILDHISTORY_COMMIT'><glossterm>BUILDHISTORY_COMMIT</glossterm>
1085 <glossdef>
1086 <para>
1087 When inheriting the
1088 <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
1089 class, this variable specifies whether or not to commit the
1090 build history output in a local Git repository.
1091 If set to "1", this local repository will be maintained
1092 automatically by the
1093 <filename>buildhistory</filename>
1094 class and a commit will be created on every
1095 build for changes to each top-level subdirectory of the
1096 build history output (images, packages, and sdk).
1097 If you want to track changes to build history over
1098 time, you should set this value to "1".
1099 </para>
1100
1101 <para>
1102 By default, the <filename>buildhistory</filename> class
1103 does not commit the build history output in a local
1104 Git repository:
1105 <literallayout class='monospaced'>
1106 BUILDHISTORY_COMMIT ?= "0"
1107 </literallayout>
1108 </para>
1109 </glossdef>
1110 </glossentry>
1111
1112 <glossentry id='var-BUILDHISTORY_COMMIT_AUTHOR'><glossterm>BUILDHISTORY_COMMIT_AUTHOR</glossterm>
1113 <glossdef>
1114 <para>
1115 When inheriting the
1116 <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
1117 class, this variable specifies the author to use for each
1118 Git commit.
1119 In order for the <filename>BUILDHISTORY_COMMIT_AUTHOR</filename>
1120 variable to work, the
1121 <link linkend='var-BUILDHISTORY_COMMIT'><filename>BUILDHISTORY_COMMIT</filename></link>
1122 variable must be set to "1".
1123 </para>
1124
1125 <para>
1126 Git requires that the value you provide for the
1127 <filename>BUILDHISTORY_COMMIT_AUTHOR</filename> variable
1128 takes the form of "name &lt;email@host&gt;".
1129 Providing an email address or host that is not valid does
1130 not produce an error.
1131 </para>
1132
1133 <para>
1134 By default, the <filename>buildhistory</filename> class
1135 sets the variable as follows:
1136 <literallayout class='monospaced'>
1137 BUILDHISTORY_COMMIT_AUTHOR ?= "buildhistory &lt;buildhistory@${DISTRO}&gt;"
1138 </literallayout>
1139 </para>
1140 </glossdef>
1141 </glossentry>
1142
1143 <glossentry id='var-BUILDHISTORY_DIR'><glossterm>BUILDHISTORY_DIR</glossterm>
1144 <glossdef>
1145 <para>
1146 When inheriting the
1147 <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
1148 class, this variable specifies the directory in which
1149 build history information is kept.
1150 For more information on how the variable works, see the
1151 <filename>buildhistory.class</filename>.
1152 </para>
1153
1154 <para>
1155 By default, the <filename>buildhistory</filename> class
1156 sets the directory as follows:
1157 <literallayout class='monospaced'>
1158 BUILDHISTORY_DIR ?= "${TOPDIR}/buildhistory"
1159 </literallayout>
1160 </para>
1161 </glossdef>
1162 </glossentry>
1163
1164 <glossentry id='var-BUILDHISTORY_FEATURES'><glossterm>BUILDHISTORY_FEATURES</glossterm>
1165 <glossdef>
1166 <para>
1167 When inheriting the
1168 <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
1169 class, this variable specifies the build history features
1170 to be enabled.
1171 For more information on how build history works, see the
1172 "<link linkend='maintaining-build-output-quality'>Maintaining Build Output Quality</link>"
1173 section.
1174 </para>
1175
1176 <para>
1177 You can specify three features in the form of a
1178 space-separated list:
1179 <itemizedlist>
1180 <listitem><para><emphasis>image:</emphasis>
1181 Analysis of the contents of images, which
1182 includes the list of installed packages among other
1183 things.
1184 </para></listitem>
1185 <listitem><para><emphasis>package:</emphasis>
1186 Analysis of the contents of individual packages.
1187 </para></listitem>
1188 <listitem><para><emphasis>sdk:</emphasis>
1189 Analysis of the contents of the software
1190 development kit (SDK).
1191 </para></listitem>
1192 </itemizedlist>
1193 </para>
1194
1195 <para>
1196 By default, the <filename>buildhistory</filename> class
1197 enables all three features:
1198 <literallayout class='monospaced'>
1199 BUILDHISTORY_FEATURES ?= "image package sdk"
1200 </literallayout>
1201 </para>
1202 </glossdef>
1203 </glossentry>
1204
1205 <glossentry id='var-BUILDHISTORY_IMAGE_FILES'><glossterm>BUILDHISTORY_IMAGE_FILES</glossterm>
1206 <glossdef>
1207 <para>
1208 When inheriting the
1209 <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
1210 class, this variable specifies a list of paths to files
1211 copied from the
1212 image contents into the build history directory under
1213 an "image-files" directory in the directory for
1214 the image, so that you can track the contents of each file.
1215 The default is to copy <filename>/etc/passwd</filename>
1216 and <filename>/etc/group</filename>, which allows you to
1217 monitor for changes in user and group entries.
1218 You can modify the list to include any file.
1219 Specifying an invalid path does not produce an error.
1220 Consequently, you can include files that might
1221 not always be present.
1222 </para>
1223
1224 <para>
1225 By default, the <filename>buildhistory</filename> class
1226 provides paths to the following files:
1227 <literallayout class='monospaced'>
1228 BUILDHISTORY_IMAGE_FILES ?= "/etc/passwd /etc/group"
1229 </literallayout>
1230 </para>
1231 </glossdef>
1232 </glossentry>
1233
1234 <glossentry id='var-BUILDHISTORY_PUSH_REPO'><glossterm>BUILDHISTORY_PUSH_REPO</glossterm>
1235 <glossdef>
1236 <para>
1237 When inheriting the
1238 <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
1239 class, this variable optionally specifies a remote
1240 repository to which build history pushes Git changes.
1241 In order for <filename>BUILDHISTORY_PUSH_REPO</filename>
1242 to work,
1243 <link linkend='var-BUILDHISTORY_COMMIT'><filename>BUILDHISTORY_COMMIT</filename></link>
1244 must be set to "1".
1245 </para>
1246
1247 <para>
1248 The repository should correspond to a remote
1249 address that specifies a repository as understood by
1250 Git, or alternatively to a remote name that you have
1251 set up manually using <filename>git remote</filename>
1252 within the local repository.
1253 </para>
1254
1255 <para>
1256 By default, the <filename>buildhistory</filename> class
1257 sets the variable as follows:
1258 <literallayout class='monospaced'>
1259 BUILDHISTORY_PUSH_REPO ?= ""
1260 </literallayout>
1261 </para>
1262 </glossdef>
1263 </glossentry>
1264
1265 <glossentry id='var-BUILDSDK_CFLAGS'><glossterm>BUILDSDK_CFLAGS</glossterm>
1266 <glossdef>
1267 <para>
1268 Specifies the flags to pass to the C compiler when building
1269 for the SDK.
1270 When building in the <filename>nativesdk</filename>
1271 context,
1272 <link linkend='var-CFLAGS'><filename>CFLAGS</filename></link>
1273 is set to the value of this variable by default.
1274 </para>
1275 </glossdef>
1276 </glossentry>
1277
1278 <glossentry id='var-BUILDSDK_CPPFLAGS'><glossterm>BUILDSDK_CPPFLAGS</glossterm>
1279 <glossdef>
1280 <para>
1281 Specifies the flags to pass to the C pre-processor
1282 (i.e. to both the C and the C++ compilers) when building
1283 for the SDK.
1284 When building in the <filename>nativesdk</filename>
1285 context,
1286 <link linkend='var-CPPFLAGS'><filename>CPPFLAGS</filename></link>
1287 is set to the value of this variable by default.
1288 </para>
1289 </glossdef>
1290 </glossentry>
1291
1292 <glossentry id='var-BUILDSDK_CXXFLAGS'><glossterm>BUILDSDK_CXXFLAGS</glossterm>
1293 <glossdef>
1294 <para>
1295 Specifies the flags to pass to the C++ compiler when
1296 building for the SDK.
1297 When building in the <filename>nativesdk</filename>
1298 context,
1299 <link linkend='var-CXXFLAGS'><filename>CXXFLAGS</filename></link>
1300 is set to the value of this variable by default.
1301 </para>
1302 </glossdef>
1303 </glossentry>
1304
1305 <glossentry id='var-BUILDSDK_LDFLAGS'><glossterm>BUILDSDK_LDFLAGS</glossterm>
1306 <glossdef>
1307 <para>
1308 Specifies the flags to pass to the linker when building
1309 for the SDK.
1310 When building in the <filename>nativesdk-</filename>
1311 context,
1312 <link linkend='var-LDFLAGS'><filename>LDFLAGS</filename></link>
1313 is set to the value of this variable by default.
1314 </para>
1315 </glossdef>
1316 </glossentry>
1317
1318 <glossentry id='var-BUILDSTATS_BASE'><glossterm>BUILDSTATS_BASE</glossterm>
1319 <glossdef>
1320 <para>
1321 Points to the location of the directory that holds build
1322 statistics when you use and enable the
1323 <link linkend='ref-classes-buildstats'><filename>buildstats</filename></link>
1324 class.
1325 The <filename>BUILDSTATS_BASE</filename> directory defaults
1326 to
1327 <filename>${</filename><link linkend='var-TMPDIR'><filename>TMPDIR</filename></link><filename>}/buildstats/</filename>.
1328 </para>
1329 </glossdef>
1330 </glossentry>
1331
1332 <glossentry id='var-BUSYBOX_SPLIT_SUID'><glossterm>BUSYBOX_SPLIT_SUID</glossterm>
1333 <glossdef>
1334 <para>
1335 For the BusyBox recipe, specifies whether to split the
1336 output executable file into two parts: one for features
1337 that require <filename>setuid root</filename>, and one for
1338 the remaining features (i.e. those that do not require
1339 <filename>setuid root</filename>).
1340 </para>
1341
1342 <para>
1343 The <filename>BUSYBOX_SPLIT_SUID</filename> variable
1344 defaults to "1", which results in a single output
1345 executable file.
1346 Set the variable to "0" to split the output file.
1347 </para>
1348 </glossdef>
1349 </glossentry>
1350
1351 </glossdiv>
1352
1353 <glossdiv id='var-glossary-c'><title>C</title>
1354
1355 <glossentry id='var-CFLAGS'><glossterm>CFLAGS</glossterm>
1356 <glossdef>
1357 <para>
1358 Specifies the flags to pass to the C compiler.
1359 This variable is exported to an environment
1360 variable and thus made visible to the software being
1361 built during the compilation step.
1362 </para>
1363
1364 <para>
1365 Default initialization for <filename>CFLAGS</filename>
1366 varies depending on what is being built:
1367 <itemizedlist>
1368 <listitem><para>
1369 <link linkend='var-TARGET_CFLAGS'><filename>TARGET_CFLAGS</filename></link>
1370 when building for the target
1371 </para></listitem>
1372 <listitem><para>
1373 <link linkend='var-BUILD_CFLAGS'><filename>BUILD_CFLAGS</filename></link>
1374 when building for the build host (i.e.
1375 <filename>-native</filename>)
1376 </para></listitem>
1377 <listitem><para>
1378 <link linkend='var-BUILDSDK_CFLAGS'><filename>BUILDSDK_CFLAGS</filename></link>
1379 when building for an SDK (i.e.
1380 <filename>nativesdk-</filename>)
1381 </para></listitem>
1382 </itemizedlist>
1383 </para>
1384 </glossdef>
1385 </glossentry>
1386
1387 <glossentry id='var-CLASSOVERRIDE'><glossterm>CLASSOVERRIDE</glossterm>
1388 <glossdef>
1389 <para>
1390 An internal variable specifying the special class override
1391 that should currently apply (e.g. "class-target",
1392 "class-native", and so forth).
1393 The classes that use this variable set it to
1394 appropriate values.
1395 </para>
1396
1397 <para>
1398 You do not normally directly interact with this variable.
1399 The value for the <filename>CLASSOVERRIDE</filename>
1400 variable goes into
1401 <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>
1402 and then can be used as an override.
1403 Here is an example where "python-native" is added to
1404 <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>
1405 only when building for the native case:
1406 <literallayout class='monospaced'>
1407 DEPENDS_append_class-native = " python-native"
1408 </literallayout>
1409 </para>
1410 </glossdef>
1411 </glossentry>
1412
1413 <glossentry id='var-COMBINED_FEATURES'><glossterm>COMBINED_FEATURES</glossterm>
1414 <glossdef>
1415 <para>
1416 Provides a list of hardware features that are enabled in
1417 both
1418 <link linkend='var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></link>
1419 and
1420 <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.
1421 This select list of features contains features that make
1422 sense to be controlled both at the machine and distribution
1423 configuration level.
1424 For example, the "bluetooth" feature requires hardware
1425 support but should also be optional at the distribution
1426 level, in case the hardware supports Bluetooth but you
1427 do not ever intend to use it.
1428 </para>
1429
1430 <para>
1431 For more information, see the
1432 <link linkend='var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></link>
1433 and <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
1434 variables.
1435 </para>
1436 </glossdef>
1437 </glossentry>
1438
1439 <glossentry id='var-COMMON_LICENSE_DIR'><glossterm>COMMON_LICENSE_DIR</glossterm>
1440 <glossdef>
1441 <para>
1442 Points to <filename>meta/files/common-licenses</filename>
1443 in the
1444 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>,
1445 which is where generic license files reside.
1446 </para>
1447 </glossdef>
1448 </glossentry>
1449
1450 <glossentry id='var-COMPATIBLE_HOST'><glossterm>COMPATIBLE_HOST</glossterm>
1451 <glossdef>
1452 <para>A regular expression that resolves to one or more hosts
1453 (when the recipe is native) or one or more targets (when
1454 the recipe is non-native) with which a recipe is compatible.
1455 The regular expression is matched against
1456 <link linkend="var-HOST_SYS"><filename>HOST_SYS</filename></link>.
1457 You can use the variable to stop recipes from being built
1458 for classes of systems with which the recipes are not
1459 compatible.
1460 Stopping these builds is particularly useful with kernels.
1461 The variable also helps to increase parsing speed
1462 since the build system skips parsing recipes not
1463 compatible with the current system.</para>
1464 </glossdef>
1465 </glossentry>
1466
1467 <glossentry id='var-COMPATIBLE_MACHINE'><glossterm>COMPATIBLE_MACHINE</glossterm>
1468 <glossdef>
1469 <para>A regular expression that resolves to one or more
1470 target machines with which a recipe is compatible.
1471 The regular expression is matched against
1472 <link linkend="var-MACHINEOVERRIDES"><filename>MACHINEOVERRIDES</filename></link>.
1473 You can use the variable to stop recipes from being built
1474 for machines with which the recipes are not compatible.
1475 Stopping these builds is particularly useful with kernels.
1476 The variable also helps to increase parsing speed
1477 since the build system skips parsing recipes not
1478 compatible with the current machine.</para>
1479 </glossdef>
1480 </glossentry>
1481
1482 <glossentry id='var-COMPLEMENTARY_GLOB'><glossterm>COMPLEMENTARY_GLOB</glossterm>
1483 <glossdef>
1484 <para>
1485 Defines wildcards to match when installing a list of
1486 complementary packages for all the packages explicitly
1487 (or implicitly) installed in an image.
1488 The resulting list of complementary packages is associated
1489 with an item that can be added to
1490 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>.
1491 An example usage of this is the "dev-pkgs" item that when
1492 added to <filename>IMAGE_FEATURES</filename> will
1493 install -dev packages (containing headers and other
1494 development files) for every package in the image.
1495 </para>
1496
1497 <para>
1498 To add a new feature item pointing to a wildcard, use a
1499 variable flag to specify the feature item name and
1500 use the value to specify the wildcard.
1501 Here is an example:
1502 <literallayout class='monospaced'>
1503 COMPLEMENTARY_GLOB[dev-pkgs] = '*-dev'
1504 </literallayout>
1505 </para>
1506 </glossdef>
1507 </glossentry>
1508
1509 <glossentry id='var-CONFFILES'><glossterm>CONFFILES</glossterm>
1510 <glossdef>
1511 <para>
1512 Identifies editable or configurable files that are part of a package.
1513 If the Package Management System (PMS) is being used to update
1514 packages on the target system, it is possible that
1515 configuration files you have changed after the original installation
1516 and that you now want to remain unchanged are overwritten.
1517 In other words, editable files might exist in the package that you do not
1518 want reset as part of the package update process.
1519 You can use the <filename>CONFFILES</filename> variable to list the files in the
1520 package that you wish to prevent the PMS from overwriting during this update process.
1521 </para>
1522
1523 <para>
1524 To use the <filename>CONFFILES</filename> variable, provide a package name
1525 override that identifies the resulting package.
1526 Then, provide a space-separated list of files.
1527 Here is an example:
1528 <literallayout class='monospaced'>
1529 CONFFILES_${PN} += "${sysconfdir}/file1 \
1530 ${sysconfdir}/file2 ${sysconfdir}/file3"
1531 </literallayout>
1532 </para>
1533
1534 <para>
1535 A relationship exists between the <filename>CONFFILES</filename> and
1536 <filename><link linkend='var-FILES'>FILES</link></filename> variables.
1537 The files listed within <filename>CONFFILES</filename> must be a subset of
1538 the files listed within <filename>FILES</filename>.
1539 Because the configuration files you provide with <filename>CONFFILES</filename>
1540 are simply being identified so that the PMS will not overwrite them,
1541 it makes sense that
1542 the files must already be included as part of the package through the
1543 <filename>FILES</filename> variable.
1544 </para>
1545
1546 <note>
1547 When specifying paths as part of the <filename>CONFFILES</filename> variable,
1548 it is good practice to use appropriate path variables.
1549 For example, <filename>${sysconfdir}</filename> rather than
1550 <filename>/etc</filename> or <filename>${bindir}</filename> rather
1551 than <filename>/usr/bin</filename>.
1552 You can find a list of these variables at the top of the
1553 <filename>meta/conf/bitbake.conf</filename> file in the
1554 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
1555 </note>
1556 </glossdef>
1557 </glossentry>
1558
1559 <glossentry id='var-CONFIG_INITRAMFS_SOURCE'><glossterm>CONFIG_INITRAMFS_SOURCE</glossterm>
1560 <glossdef>
1561 <para>
1562 Identifies the initial RAM disk (initramfs) source files.
1563 The OpenEmbedded build system receives and uses
1564 this kernel Kconfig variable as an environment variable.
1565 By default, the variable is set to null ("").
1566 </para>
1567
1568 <para>
1569 The <filename>CONFIG_INITRAMFS_SOURCE</filename> can be
1570 either a single cpio archive with a
1571 <filename>.cpio</filename> suffix or a
1572 space-separated list of directories and files for building
1573 the initramfs image.
1574 A cpio archive should contain a filesystem archive
1575 to be used as an initramfs image.
1576 Directories should contain a filesystem layout to be
1577 included in the initramfs image.
1578 Files should contain entries according to the format
1579 described by the
1580 <filename>usr/gen_init_cpio</filename> program in the
1581 kernel tree.
1582 </para>
1583
1584 <para>
1585 If you specify multiple directories and files, the
1586 initramfs image will be the aggregate of all of them.
1587 </para>
1588 </glossdef>
1589 </glossentry>
1590
1591 <glossentry id='var-CONFIG_SITE'><glossterm>CONFIG_SITE</glossterm>
1592 <glossdef>
1593 <para>
1594 A list of files that contains <filename>autoconf</filename> test results relevant
1595 to the current build.
1596 This variable is used by the Autotools utilities when running
1597 <filename>configure</filename>.
1598 </para>
1599 </glossdef>
1600 </glossentry>
1601
1602 <glossentry id='var-CONFLICT_DISTRO_FEATURES'><glossterm>CONFLICT_DISTRO_FEATURES</glossterm>
1603 <glossdef>
1604 <para>
1605 When inheriting the
1606 <link linkend='ref-classes-distro_features_check'><filename>distro_features_check</filename></link>
1607 class, this
1608 variable identifies distribution features that would
1609 be in conflict should the recipe
1610 be built.
1611 In other words, if the
1612 <filename>CONFLICT_DISTRO_FEATURES</filename> variable
1613 lists a feature that also appears in
1614 <filename>DISTRO_FEATURES</filename> within the
1615 current configuration, an error occurs and the
1616 build stops.
1617 </para>
1618 </glossdef>
1619 </glossentry>
1620
1621 <glossentry id='var-COPY_LIC_DIRS'><glossterm>COPY_LIC_DIRS</glossterm>
1622 <glossdef>
1623 <para>
1624 If set to "1" along with the
1625 <link linkend='var-COPY_LIC_MANIFEST'><filename>COPY_LIC_MANIFEST</filename></link>
1626 variable, the OpenEmbedded build system copies
1627 into the image the license files, which are located in
1628 <filename>/usr/share/common-licenses</filename>,
1629 for each package.
1630 The license files are placed
1631 in directories within the image itself.
1632 </para>
1633 </glossdef>
1634 </glossentry>
1635
1636 <glossentry id='var-COPY_LIC_MANIFEST'><glossterm>COPY_LIC_MANIFEST</glossterm>
1637 <glossdef>
1638 <para>
1639 If set to "1", the OpenEmbedded build system copies
1640 the license manifest for the image to
1641 <filename>/usr/share/common-licenses/license.manifest</filename>
1642 within the image itself.
1643 </para>
1644 </glossdef>
1645 </glossentry>
1646
1647 <glossentry id='var-CORE_IMAGE_EXTRA_INSTALL'><glossterm>CORE_IMAGE_EXTRA_INSTALL</glossterm>
1648 <glossdef>
1649 <para>
1650 Specifies the list of packages to be added to the image.
1651 You should only set this variable in the
1652 <filename>local.conf</filename> configuration file found
1653 in the
1654 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
1655 </para>
1656
1657 <para>
1658 This variable replaces <filename>POKY_EXTRA_INSTALL</filename>, which is no longer supported.
1659 </para>
1660 </glossdef>
1661 </glossentry>
1662
1663 <glossentry id='var-COREBASE'><glossterm>COREBASE</glossterm>
1664 <glossdef>
1665 <para>
1666 Specifies the parent directory of the OpenEmbedded
1667 Core Metadata layer (i.e. <filename>meta</filename>).
1668 </para>
1669
1670 <para>
1671 It is an important distinction that
1672 <filename>COREBASE</filename> points to the parent of this
1673 layer and not the layer itself.
1674 Consider an example where you have cloned the Poky Git
1675 repository and retained the <filename>poky</filename>
1676 name for your local copy of the repository.
1677 In this case, <filename>COREBASE</filename> points to
1678 the <filename>poky</filename> folder because it is the
1679 parent directory of the <filename>poky/meta</filename>
1680 layer.
1681 </para>
1682 </glossdef>
1683 </glossentry>
1684
1685 <glossentry id='var-CPPFLAGS'><glossterm>CPPFLAGS</glossterm>
1686 <glossdef>
1687 <para>
1688 Specifies the flags to pass to the C pre-processor
1689 (i.e. to both the C and the C++ compilers).
1690 This variable is exported to an environment
1691 variable and thus made visible to the software being
1692 built during the compilation step.
1693 </para>
1694
1695 <para>
1696 Default initialization for <filename>CPPFLAGS</filename>
1697 varies depending on what is being built:
1698 <itemizedlist>
1699 <listitem><para>
1700 <link linkend='var-TARGET_CPPFLAGS'><filename>TARGET_CPPFLAGS</filename></link>
1701 when building for the target
1702 </para></listitem>
1703 <listitem><para>
1704 <link linkend='var-BUILD_CPPFLAGS'><filename>BUILD_CPPFLAGS</filename></link>
1705 when building for the build host (i.e.
1706 <filename>-native</filename>)
1707 </para></listitem>
1708 <listitem><para>
1709 <link linkend='var-BUILDSDK_CPPFLAGS'><filename>BUILDSDK_CPPFLAGS</filename></link>
1710 when building for an SDK (i.e.
1711 <filename>nativesdk-</filename>)
1712 </para></listitem>
1713 </itemizedlist>
1714 </para>
1715 </glossdef>
1716 </glossentry>
1717
1718 <glossentry id='var-CXXFLAGS'><glossterm>CXXFLAGS</glossterm>
1719 <glossdef>
1720 <para>
1721 Specifies the flags to pass to the C++ compiler.
1722 This variable is exported to an environment
1723 variable and thus made visible to the software being
1724 built during the compilation step.
1725 </para>
1726
1727 <para>
1728 Default initialization for <filename>CXXFLAGS</filename>
1729 varies depending on what is being built:
1730 <itemizedlist>
1731 <listitem><para>
1732 <link linkend='var-TARGET_CXXFLAGS'><filename>TARGET_CXXFLAGS</filename></link>
1733 when building for the target
1734 </para></listitem>
1735 <listitem><para>
1736 <link linkend='var-BUILD_CXXFLAGS'><filename>BUILD_CXXFLAGS</filename></link>
1737 when building for the build host (i.e.
1738 <filename>-native</filename>)
1739 </para></listitem>
1740 <listitem><para>
1741 <link linkend='var-BUILDSDK_CXXFLAGS'><filename>BUILDSDK_CXXFLAGS</filename></link>
1742 when building for an SDK (i.e.
1743 <filename>nativesdk</filename>)
1744 </para></listitem>
1745 </itemizedlist>
1746 </para>
1747 </glossdef>
1748 </glossentry>
1749
1750 </glossdiv>
1751
1752 <glossdiv id='var-glossary-d'><title>D</title>
1753
1754 <glossentry id='var-D'><glossterm>D</glossterm>
1755 <glossdef>
1756 <para>
1757 The destination directory.
1758 The location in the <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
1759 where components are installed by the
1760 <link linkend='ref-tasks-install'><filename>do_install</filename></link>
1761 task.
1762 This location defaults to:
1763 <literallayout class='monospaced'>
1764 ${WORKDIR}/image
1765 </literallayout>
1766 </para>
1767 </glossdef>
1768 </glossentry>
1769
1770 <glossentry id='var-DATETIME'><glossterm>DATETIME</glossterm>
1771 <glossdef>
1772 <para>
1773 The date and time on which the current build started.
1774 The format is suitable for timestamps.
1775 </para>
1776 </glossdef>
1777 </glossentry>
1778
1779 <glossentry id='var-DEBUG_BUILD'><glossterm>DEBUG_BUILD</glossterm>
1780 <glossdef>
1781 <para>
1782 Specifies to build packages with debugging information.
1783 This influences the value of the
1784 <filename><link linkend='var-SELECTED_OPTIMIZATION'>SELECTED_OPTIMIZATION</link></filename>
1785 variable.
1786 </para>
1787 </glossdef>
1788 </glossentry>
1789
1790 <glossentry id='var-DEBUG_OPTIMIZATION'><glossterm>DEBUG_OPTIMIZATION</glossterm>
1791 <glossdef>
1792 <para>
1793 The options to pass in
1794 <filename><link linkend='var-TARGET_CFLAGS'>TARGET_CFLAGS</link></filename>
1795 and <filename><link linkend='var-CFLAGS'>CFLAGS</link></filename> when compiling
1796 a system for debugging.
1797 This variable defaults to "-O -fno-omit-frame-pointer ${DEBUG_FLAGS} -pipe".
1798 </para>
1799 </glossdef>
1800 </glossentry>
1801
1802 <glossentry id='var-DEFAULT_PREFERENCE'><glossterm>DEFAULT_PREFERENCE</glossterm>
1803 <glossdef>
1804 <para>
1805 Specifies a weak bias for recipe selection priority.
1806 </para>
1807 <para>
1808 The most common usage of this is variable is to set
1809 it to "-1" within a recipe for a development version of a
1810 piece of software.
1811 Using the variable in this way causes the stable version
1812 of the recipe to build by default in the absence of
1813 <filename><link linkend='var-PREFERRED_VERSION'>PREFERRED_VERSION</link></filename>
1814 being used to build the development version.
1815 </para>
1816 <note>
1817 The bias provided by <filename>DEFAULT_PREFERENCE</filename>
1818 is weak and is overridden by
1819 <filename><link linkend='var-BBFILE_PRIORITY'>BBFILE_PRIORITY</link></filename>
1820 if that variable is different between two layers
1821 that contain different versions of the same recipe.
1822 </note>
1823 </glossdef>
1824 </glossentry>
1825
1826 <glossentry id='var-DEFAULTTUNE'><glossterm>DEFAULTTUNE</glossterm>
1827 <glossdef>
1828 <para>
1829 The default CPU and Application Binary Interface (ABI)
1830 tunings (i.e. the "tune") used by the OpenEmbedded build
1831 system.
1832 The <filename>DEFAULTTUNE</filename> helps define
1833 <link linkend='var-TUNE_FEATURES'><filename>TUNE_FEATURES</filename></link>.
1834 </para>
1835
1836 <para>
1837 The default tune is either implicitly or explicitly set
1838 by the machine
1839 (<link linkend='var-MACHINE'><filename>MACHINE</filename></link>).
1840 However, you can override the setting using available tunes
1841 as defined with
1842 <link linkend='var-AVAILTUNES'><filename>AVAILTUNES</filename></link>.
1843 </para>
1844 </glossdef>
1845 </glossentry>
1846
1847 <glossentry id='var-DEPENDS'><glossterm>DEPENDS</glossterm>
1848 <glossdef>
1849 <para>
1850 Lists a recipe's build-time dependencies
1851 (i.e. other recipe files).
1852 The system ensures that all the dependencies listed
1853 have been built and have their contents in the appropriate
1854 sysroots before the recipe's configure task is executed.
1855 </para>
1856
1857 <para>
1858 Consider this simple example for two recipes named "a" and
1859 "b" that produce similarly named packages.
1860 In this example, the <filename>DEPENDS</filename>
1861 statement appears in the "a" recipe:
1862 <literallayout class='monospaced'>
1863 DEPENDS = "b"
1864 </literallayout>
1865 Here, the dependency is such that the
1866 <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
1867 task for recipe "a" depends on the
1868 <link linkend='ref-tasks-populate_sysroot'><filename>do_populate_sysroot</filename></link>
1869 task of recipe "b".
1870 This means anything that recipe "b" puts into sysroot
1871 is available when recipe "a" is configuring itself.
1872 </para>
1873
1874 <para>
1875 For information on runtime dependencies, see the
1876 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
1877 variable.
1878 </para>
1879 </glossdef>
1880 </glossentry>
1881
1882 <glossentry id='var-DEPLOY_DIR'><glossterm>DEPLOY_DIR</glossterm>
1883 <glossdef>
1884 <para>
1885 Points to the general area that the OpenEmbedded build
1886 system uses to place images, packages, SDKs and other output
1887 files that are ready to be used outside of the build system.
1888 By default, this directory resides within the
1889 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
1890 as <filename>${TMPDIR}/deploy</filename>.
1891 </para>
1892
1893 <para>
1894 For more information on the structure of the Build
1895 Directory, see
1896 "<link linkend='structure-build'>The Build Directory - <filename>build/</filename></link>"
1897 section.
1898 For more detail on the contents of the
1899 <filename>deploy</filename> directory, see the
1900 "<link linkend='images-dev-environment'>Images</link>" and
1901 "<link linkend='sdk-dev-environment'>Application Development SDK</link>"
1902 sections.
1903 </para>
1904 </glossdef>
1905 </glossentry>
1906
1907 <glossentry id='var-DEPLOY_DIR_IMAGE'><glossterm>DEPLOY_DIR_IMAGE</glossterm>
1908 <glossdef>
1909 <para>
1910 Points to the area that the OpenEmbedded build system uses
1911 to place images and other associated output files that are
1912 ready to be deployed onto the target machine.
1913 The directory is machine-specific as it contains the
1914 <filename>${MACHINE}</filename> name.
1915 By default, this directory resides within the
1916 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
1917 as <filename>${DEPLOY_DIR}/images/${MACHINE}/</filename>.
1918 </para>
1919
1920 <para>
1921 For more information on the structure of the Build
1922 Directory, see
1923 "<link linkend='structure-build'>The Build Directory - <filename>build/</filename></link>"
1924 section.
1925 For more detail on the contents of the
1926 <filename>deploy</filename> directory, see the
1927 "<link linkend='images-dev-environment'>Images</link>" and
1928 "<link linkend='sdk-dev-environment'>Application Development SDK</link>"
1929 sections.
1930 </para>
1931 </glossdef>
1932 </glossentry>
1933
1934 <glossentry id='var-DEPLOYDIR'><glossterm>DEPLOYDIR</glossterm>
1935 <glossdef>
1936 <para>
1937 When inheriting the
1938 <link linkend='ref-classes-deploy'><filename>deploy</filename></link>
1939 class, the <filename>DEPLOYDIR</filename> points to a
1940 temporary work area for deployed files that is set in the
1941 <filename>deploy</filename> class as follows:
1942 <literallayout class='monospaced'>
1943 DEPLOYDIR = "${WORKDIR}/deploy-${<link linkend='var-PN'><filename>PN</filename></link>}"
1944 </literallayout>
1945 Recipes inheriting the <filename>deploy</filename> class
1946 should copy files to be deployed into
1947 <filename>DEPLOYDIR</filename>, and the class will take
1948 care of copying them into
1949 <link linkend='var-DEPLOY_DIR_IMAGE'><filename>DEPLOY_DIR_IMAGE</filename></link>
1950 afterwards.
1951 </para>
1952 </glossdef>
1953 </glossentry>
1954
1955 <glossentry id='var-DESCRIPTION'><glossterm>DESCRIPTION</glossterm>
1956 <glossdef>
1957 <para>The package description used by package managers.
1958 If not set, <filename>DESCRIPTION</filename> takes
1959 the value of the
1960 <link linkend='var-SUMMARY'><filename>SUMMARY</filename></link>
1961 variable.
1962 </para>
1963 </glossdef>
1964 </glossentry>
1965
1966 <glossentry id='var-DISK_SIGNATURE'><glossterm>DISK_SIGNATURE</glossterm>
1967 <glossdef>
1968 <para>
1969 A 32-bit MBR disk signature used by
1970 <filename>directdisk</filename> images.
1971 </para>
1972
1973 <para>
1974 By default, the signature is set to an automatically
1975 generated random value that allows the OpenEmbedded
1976 build system to create a boot loader.
1977 You can override the signature in the image recipe
1978 by setting <filename>DISK_SIGNATURE</filename> to an
1979 8-digit hex string.
1980 You might want to override
1981 <filename>DISK_SIGNATURE</filename> if you want the disk
1982 signature to remain constant between image builds.
1983 </para>
1984
1985 <para>
1986 When using Linux 3.8 or later, you can use
1987 <filename>DISK_SIGNATURE</filename> to specify the root
1988 by UUID to allow the kernel to locate the root device
1989 even if the device name changes due to differences in
1990 hardware configuration.
1991 By default, <filename>SYSLINUX_ROOT</filename> is set
1992 as follows:
1993 <literallayout class='monospaced'>
1994 SYSLINUX_ROOT = "root=/dev/sda2"
1995 </literallayout>
1996 However, you can change this to locate the root device
1997 using the disk signature instead:
1998 <literallayout class='monospaced'>
1999 SYSLINUX_ROOT = "root=PARTUUID=${DISK_SIGNATURE}-02"
2000 </literallayout>
2001 </para>
2002
2003 <para>
2004 As previously mentioned, it is possible to set the
2005 <filename>DISK_SIGNATURE</filename> variable in your
2006 <filename>local.conf</filename> file to a fixed
2007 value if you do not want <filename>syslinux.cfg</filename>
2008 changing for each build.
2009 You might find this useful when you want to upgrade the
2010 root filesystem on a device without having to recreate or
2011 modify the master boot record.
2012 </para>
2013 </glossdef>
2014 </glossentry>
2015
2016 <glossentry id='var-DISTRO'><glossterm>DISTRO</glossterm>
2017 <glossdef>
2018 <para>
2019 The short name of the distribution.
2020 This variable corresponds to a distribution
2021 configuration file whose root name is the same as the
2022 variable's argument and whose filename extension is
2023 <filename>.conf</filename>.
2024 For example, the distribution configuration file for the
2025 Poky distribution is named <filename>poky.conf</filename>
2026 and resides in the
2027 <filename>meta-yocto/conf/distro</filename> directory of
2028 the
2029 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
2030 </para>
2031
2032 <para>
2033 Within that <filename>poky.conf</filename> file, the
2034 <filename>DISTRO</filename> variable is set as follows:
2035 <literallayout class='monospaced'>
2036 DISTRO = "poky"
2037 </literallayout>
2038 </para>
2039
2040 <para>
2041 Distribution configuration files are located in a
2042 <filename>conf/distro</filename> directory within the
2043 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
2044 that contains the distribution configuration.
2045 The value for <filename>DISTRO</filename> must not contain
2046 spaces, and is typically all lower-case.
2047 <note>
2048 If the <filename>DISTRO</filename> variable is blank, a set
2049 of default configurations are used, which are specified
2050 within
2051 <filename>meta/conf/distro/defaultsetup.conf</filename>
2052 also in the Source Directory.
2053 </note>
2054 </para>
2055 </glossdef>
2056 </glossentry>
2057
2058 <glossentry id='var-DISTRO_EXTRA_RDEPENDS'><glossterm>DISTRO_EXTRA_RDEPENDS</glossterm>
2059 <glossdef>
2060 <para>
2061 Specifies a list of distro-specific packages to add to all images.
2062 This variable takes affect through
2063 <filename>packagegroup-base</filename> so the
2064 variable only really applies to the more full-featured
2065 images that include <filename>packagegroup-base</filename>.
2066 You can use this variable to keep distro policy out of
2067 generic images.
2068 As with all other distro variables, you set this variable
2069 in the distro <filename>.conf</filename> file.
2070 </para>
2071 </glossdef>
2072 </glossentry>
2073
2074 <glossentry id='var-DISTRO_EXTRA_RRECOMMENDS'><glossterm>DISTRO_EXTRA_RRECOMMENDS</glossterm>
2075 <glossdef>
2076 <para>
2077 Specifies a list of distro-specific packages to add to all images
2078 if the packages exist.
2079 The packages might not exist or be empty (e.g. kernel modules).
2080 The list of packages are automatically installed but you can
2081 remove them.
2082 </para>
2083 </glossdef>
2084 </glossentry>
2085
2086 <glossentry id='var-DISTRO_FEATURES'><glossterm>DISTRO_FEATURES</glossterm>
2087 <glossdef>
2088 <para>
2089 The software support you want in your distribution for
2090 various features.
2091 You define your distribution features in the distribution
2092 configuration file.
2093 </para>
2094
2095 <para>
2096 In most cases, the presence or absence of a feature in
2097 <filename>DISTRO_FEATURES</filename> is translated to the
2098 appropriate option supplied to the configure script
2099 during the
2100 <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
2101 task for recipes that optionally support the feature.
2102 For example, specifying "x11" in
2103 <filename>DISTRO_FEATURES</filename>, causes
2104 every piece of software built for the target that can
2105 optionally support X11 to have its X11 support enabled.
2106 </para>
2107
2108 <para>
2109 Two more examples are Bluetooth and NFS support.
2110 For a more complete list of features that ships with the
2111 Yocto Project and that you can provide with this variable,
2112 see the
2113 "<link linkend='ref-features-distro'>Distro Features</link>"
2114 section.
2115 </para>
2116 </glossdef>
2117 </glossentry>
2118
2119 <glossentry id='var-DISTRO_FEATURES_BACKFILL'><glossterm>DISTRO_FEATURES_BACKFILL</glossterm>
2120 <glossdef>
2121 <para>Features to be added to
2122 <filename><link linkend='var-DISTRO_FEATURES'>DISTRO_FEATURES</link></filename>
2123 if not also present in
2124 <filename><link linkend='var-DISTRO_FEATURES_BACKFILL_CONSIDERED'>DISTRO_FEATURES_BACKFILL_CONSIDERED</link></filename>.
2125 </para>
2126
2127 <para>
2128 This variable is set in the <filename>meta/conf/bitbake.conf</filename> file.
2129 It is not intended to be user-configurable.
2130 It is best to just reference the variable to see which distro features are
2131 being backfilled for all distro configurations.
2132 See the <link linkend='ref-features-backfill'>Feature backfilling</link> section for
2133 more information.
2134 </para>
2135 </glossdef>
2136 </glossentry>
2137
2138 <glossentry id='var-DISTRO_FEATURES_BACKFILL_CONSIDERED'><glossterm>DISTRO_FEATURES_BACKFILL_CONSIDERED</glossterm>
2139 <glossdef>
2140 <para>Features from
2141 <filename><link linkend='var-DISTRO_FEATURES_BACKFILL'>DISTRO_FEATURES_BACKFILL</link></filename>
2142 that should not be backfilled (i.e. added to
2143 <filename><link linkend='var-DISTRO_FEATURES'>DISTRO_FEATURES</link></filename>)
2144 during the build.
2145 See the "<link linkend='ref-features-backfill'>Feature Backfilling</link>" section for
2146 more information.
2147 </para>
2148 </glossdef>
2149 </glossentry>
2150
2151 <glossentry id='var-DISTRO_NAME'><glossterm>DISTRO_NAME</glossterm>
2152 <glossdef>
2153 <para>The long name of the distribution.</para>
2154 </glossdef>
2155 </glossentry>
2156
2157 <glossentry id='var-DISTRO_PN_ALIAS'><glossterm>DISTRO_PN_ALIAS</glossterm>
2158 <glossdef>
2159 <para>Alias names used for the recipe in various Linux distributions.</para>
2160 <para>See the
2161 "<ulink url='&YOCTO_DOCS_DEV_URL;#usingpoky-configuring-DISTRO_PN_ALIAS'>Handling
2162 a Package Name Alias</ulink>" section in the Yocto Project Development
2163 Manual for more information.</para>
2164 </glossdef>
2165 </glossentry>
2166
2167 <glossentry id='var-DISTRO_VERSION'><glossterm>DISTRO_VERSION</glossterm>
2168 <glossdef>
2169 <para>The version of the distribution.</para>
2170 </glossdef>
2171 </glossentry>
2172
2173 <glossentry id='var-DISTROOVERRIDES'><glossterm>DISTROOVERRIDES</glossterm>
2174 <glossdef>
2175 <para>
2176 This variable lists overrides specific to the current
2177 distribution.
2178 By default, the variable list includes the value of the
2179 <filename><link linkend='var-DISTRO'>DISTRO</link></filename>
2180 variable.
2181 You can extend the variable to apply any variable overrides
2182 you want as part of the distribution and are not
2183 already in <filename>OVERRIDES</filename> through
2184 some other means.
2185 </para>
2186 </glossdef>
2187 </glossentry>
2188
2189 <glossentry id='var-DL_DIR'><glossterm>DL_DIR</glossterm>
2190 <glossdef>
2191 <para>
2192 The central download directory used by the build process to
2193 store downloads.
2194 By default, <filename>DL_DIR</filename> gets files
2195 suitable for mirroring for everything except Git
2196 repositories.
2197 If you want tarballs of Git repositories, use the
2198 <link linkend='var-BB_GENERATE_MIRROR_TARBALLS'><filename>BB_GENERATE_MIRROR_TARBALLS</filename></link>
2199 variable.
2200 </para>
2201
2202 <para>
2203 You can set this directory by defining the
2204 <filename>DL_DIR</filename> variable in the
2205 <filename>conf/local.conf</filename> file.
2206 This directory is self-maintaining and you should not have
2207 to touch it.
2208 By default, the directory is <filename>downloads</filename>
2209 in the
2210 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
2211 <literallayout class='monospaced'>
2212 #DL_DIR ?= "${TOPDIR}/downloads"
2213 </literallayout>
2214 To specify a different download directory, simply remove
2215 the comment from the line and provide your directory.
2216 </para>
2217
2218 <para>
2219 During a first build, the system downloads many different
2220 source code tarballs from various upstream projects.
2221 Downloading can take a while, particularly if your network
2222 connection is slow.
2223 Tarballs are all stored in the directory defined by
2224 <filename>DL_DIR</filename> and the build system looks there
2225 first to find source tarballs.
2226 <note>
2227 When wiping and rebuilding, you can preserve this
2228 directory to speed up this part of subsequent
2229 builds.
2230 </note>
2231 </para>
2232
2233 <para>
2234 You can safely share this directory between multiple builds
2235 on the same development machine.
2236 For additional information on how the build process gets
2237 source files when working behind a firewall or proxy server,
2238 see this specific question in the
2239 "<link linkend='how-does-the-yocto-project-obtain-source-code-and-will-it-work-behind-my-firewall-or-proxy-server'>FAQ</link>"
2240 chapter.
2241 </para>
2242 </glossdef>
2243 </glossentry>
2244
2245 <glossentry id='var-DOC_COMPRESS'><glossterm>DOC_COMPRESS</glossterm>
2246 <glossdef>
2247 <para>
2248 When inheriting the
2249 <link linkend='ref-classes-compress_doc'><filename>compress_doc</filename></link>
2250 class, this variable sets the compression policy used when
2251 the OpenEmbedded build system compresses man pages and info
2252 pages.
2253 By default, the compression method used is gz (gzip).
2254 Other policies available are xz and bz2.
2255 </para>
2256
2257 <para>
2258 For information on policies and on how to use this
2259 variable, see the comments in the
2260 <filename>meta/classes/compress_doc.bbclass</filename> file.
2261 </para>
2262 </glossdef>
2263 </glossentry>
2264
2265 </glossdiv>
2266
2267 <glossdiv id='var-glossary-e'><title>E</title>
2268
2269 <glossentry id='var-EFI_PROVIDER'><glossterm>EFI_PROVIDER</glossterm>
2270 <glossdef>
2271 <para>
2272 When building bootable images (i.e. where
2273 <filename>hddimg</filename> or <filename>vmdk</filename>
2274 is in
2275 <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>),
2276 The <filename>EFI_PROVIDER</filename> variable specifies
2277 the EFI bootloader to use.
2278 The default is "grub-efi", but "gummiboot" can be used
2279 instead.
2280 </para>
2281
2282 <para>
2283 See the
2284 <link linkend='ref-classes-gummiboot'><filename>gummiboot</filename></link>
2285 class for more information.
2286 </para>
2287 </glossdef>
2288 </glossentry>
2289
2290 <glossentry id='var-ENABLE_BINARY_LOCALE_GENERATION'><glossterm>ENABLE_BINARY_LOCALE_GENERATION</glossterm>
2291 <glossdef>
2292 <para>Variable that controls which locales for
2293 <filename>glibc</filename> are generated during the
2294 build (useful if the target device has 64Mbytes
2295 of RAM or less).</para>
2296 </glossdef>
2297 </glossentry>
2298
2299 <glossentry id='var-ERROR_QA'><glossterm>ERROR_QA</glossterm>
2300 <glossdef>
2301 <para>
2302 Specifies the quality assurance checks whose failures are
2303 reported as errors by the OpenEmbedded build system.
2304 You set this variable in your distribution configuration
2305 file.
2306 For a list of the checks you can control with this variable,
2307 see the
2308 "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
2309 section.
2310 </para>
2311 </glossdef>
2312 </glossentry>
2313
2314 <glossentry id='var-ERR_REPORT_DIR'><glossterm>ERR_REPORT_DIR</glossterm>
2315 <glossdef>
2316 <para>
2317 When used with the
2318 <link linkend='ref-classes-report-error'><filename>report-error</filename></link>
2319 class, specifies the path used for storing the debug files
2320 created by the
2321 <ulink url='&YOCTO_DOCS_DEV_URL;#using-the-error-reporting-tool'>error reporting tool</ulink>,
2322 which allows you to submit build errors you encounter to a
2323 central database.
2324 By default, the value of this variable is
2325 <filename>${</filename><link linkend='var-LOG_DIR'><filename>LOG_DIR</filename></link><filename>}/error-report</filename>.
2326 </para>
2327
2328 <para>
2329 You can set <filename>ERR_REPORT_DIR</filename> to the path
2330 you want the error reporting tool to store the debug files
2331 as follows in your <filename>local.conf</filename> file:
2332 <literallayout class='monospaced'>
2333 ERR_REPORT_DIR = "<replaceable>path</replaceable>"
2334 </literallayout>
2335 </para>
2336 </glossdef>
2337 </glossentry>
2338
2339 <glossentry id='var-EXCLUDE_FROM_WORLD'><glossterm>EXCLUDE_FROM_WORLD</glossterm>
2340 <glossdef>
2341 <para>
2342 Directs BitBake to exclude a recipe from world builds (i.e.
2343 <filename>bitbake world</filename>).
2344 During world builds, BitBake locates, parses and builds all
2345 recipes found in every layer exposed in the
2346 <filename>bblayers.conf</filename> configuration file.
2347 </para>
2348
2349 <para>
2350 To exclude a recipe from a world build using this variable,
2351 set the variable to "1" in the recipe.
2352 </para>
2353
2354 <note>
2355 Recipes added to <filename>EXCLUDE_FROM_WORLD</filename>
2356 may still be built during a world build in order to satisfy
2357 dependencies of other recipes.
2358 Adding a recipe to <filename>EXCLUDE_FROM_WORLD</filename>
2359 only ensures that the recipe is not explicitly added
2360 to the list of build targets in a world build.
2361 </note>
2362 </glossdef>
2363 </glossentry>
2364
2365 <glossentry id='var-EXTENDPE'><glossterm>EXTENDPE</glossterm>
2366 <glossdef>
2367 <para>
2368 Used with file and pathnames to create a prefix for a recipe's
2369 version based on the recipe's
2370 <link linkend='var-PE'><filename>PE</filename></link> value.
2371 If <filename>PE</filename> is set and greater than zero for a recipe,
2372 <filename>EXTENDPE</filename> becomes that value (e.g if
2373 <filename>PE</filename> is equal to "1" then <filename>EXTENDPE</filename>
2374 becomes "1_").
2375 If a recipe's <filename>PE</filename> is not set (the default) or is equal to
2376 zero, <filename>EXTENDPE</filename> becomes "".</para>
2377 <para>See the <link linkend='var-STAMP'><filename>STAMP</filename></link>
2378 variable for an example.
2379 </para>
2380 </glossdef>
2381 </glossentry>
2382
2383 <glossentry id='var-EXTENDPKGV'><glossterm>EXTENDPKGV</glossterm>
2384 <glossdef>
2385 <para>
2386 The full package version specification as it appears on the
2387 final packages produced by a recipe.
2388 The variable's value is normally used to fix a runtime
2389 dependency to the exact same version of another package
2390 in the same recipe:
2391 <literallayout class='monospaced'>
2392 RDEPENDS_${PN}-additional-module = "${PN} (= ${EXTENDPKGV})"
2393 </literallayout>
2394 </para>
2395
2396 <para>
2397 The dependency relationships are intended to force the
2398 package manager to upgrade these types of packages in
2399 lock-step.
2400 </para>
2401 </glossdef>
2402 </glossentry>
2403
2404 <glossentry id='var-EXTERNALSRC'><glossterm>EXTERNALSRC</glossterm>
2405 <glossdef>
2406 <para>
2407 When inheriting the
2408 <link linkend='ref-classes-externalsrc'><filename>externalsrc</filename></link>
2409 class, this variable points to the source tree, which is
2410 outside of the OpenEmbedded build system.
2411 When set, this variable sets the
2412 <link linkend='var-S'><filename>S</filename></link>
2413 variable, which is what the OpenEmbedded build system uses
2414 to locate unpacked recipe source code.
2415 </para>
2416
2417 <para>
2418 For more information on
2419 <filename>externalsrc.bbclass</filename>, see the
2420 "<link linkend='ref-classes-externalsrc'><filename>externalsrc.bbclass</filename></link>"
2421 section.
2422 You can also find information on how to use this variable
2423 in the
2424 "<ulink url='&YOCTO_DOCS_DEV_URL;#building-software-from-an-external-source'>Building Software from an External Source</ulink>"
2425 section in the Yocto Project Development Manual.
2426 </para>
2427 </glossdef>
2428 </glossentry>
2429
2430 <glossentry id='var-EXTERNALSRC_BUILD'><glossterm>EXTERNALSRC_BUILD</glossterm>
2431 <glossdef>
2432 <para>
2433 When inheriting the
2434 <link linkend='ref-classes-externalsrc'><filename>externalsrc</filename></link>
2435 class, this variable points to the directory in which the
2436 recipe's source code is built, which is outside of the
2437 OpenEmbedded build system.
2438 When set, this variable sets the
2439 <link linkend='var-B'><filename>B</filename></link>
2440 variable, which is what the OpenEmbedded build system uses
2441 to locate the Build Directory.
2442 </para>
2443
2444 <para>
2445 For more information on
2446 <filename>externalsrc.bbclass</filename>, see the
2447 "<link linkend='ref-classes-externalsrc'><filename>externalsrc.bbclass</filename></link>"
2448 section.
2449 You can also find information on how to use this variable
2450 in the
2451 "<ulink url='&YOCTO_DOCS_DEV_URL;#building-software-from-an-external-source'>Building Software from an External Source</ulink>"
2452 section in the Yocto Project Development Manual.
2453 </para>
2454 </glossdef>
2455 </glossentry>
2456
2457 <glossentry id='var-EXTRA_IMAGE_FEATURES'><glossterm>EXTRA_IMAGE_FEATURES</glossterm>
2458 <glossdef>
2459 <para>
2460 The list of additional features to include in an image.
2461 Typically, you configure this variable in your
2462 <filename>local.conf</filename> file, which is found in the
2463 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
2464 Although you can use this variable from within a recipe,
2465 best practices dictate that you do not.
2466 <note>
2467 To enable primary features from within the image
2468 recipe, use the
2469 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
2470 variable.
2471 </note>
2472 </para>
2473
2474 <para>
2475 Here are some examples of features you can add:
2476 <literallayout class='monospaced'>
2477"dbg-pkgs" - Adds -dbg packages for all installed packages
2478 including symbol information for debugging and
2479 profiling.
2480
2481"debug-tweaks" - Makes an image suitable for development.
2482 For example, ssh root access has a blank
2483 password. You should remove this feature
2484 before you produce a production image.
2485
2486"dev-pkgs" - Adds -dev packages for all installed packages.
2487 This is useful if you want to develop against
2488 the libraries in the image.
2489
2490"read-only-rootfs" - Creates an image whose root
2491 filesystem is read-only. See the
2492 "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-read-only-root-filesystem'>Creating a Read-Only Root Filesystem</ulink>"
2493 section in the Yocto Project
2494 Development Manual for more
2495 information
2496
2497"tools-debug" - Adds debugging tools such as gdb and
2498 strace.
2499
2500"tools-profile" - Adds profiling tools such as oprofile,
2501 exmap, lttng and valgrind (x86 only).
2502
2503"tools-sdk" - Adds development tools such as gcc, make,
2504 pkgconfig and so forth.
2505
2506"tools-testapps" - Adds useful testing tools such as
2507 ts_print, aplay, arecord and so
2508 forth.
2509
2510 </literallayout>
2511 </para>
2512
2513 <para>
2514 For a complete list of image features that ships with the
2515 Yocto Project, see the
2516 "<link linkend="ref-features-image">Image Features</link>"
2517 section.
2518 </para>
2519
2520 <para>
2521 For an example that shows how to customize your image by
2522 using this variable, see the
2523 "<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>"
2524 section in the Yocto Project Development Manual.
2525 </para>
2526 </glossdef>
2527 </glossentry>
2528
2529 <glossentry id='var-EXTRA_IMAGECMD'><glossterm>EXTRA_IMAGECMD</glossterm>
2530 <glossdef>
2531 <para>
2532 Specifies additional options for the image
2533 creation command that has been specified in
2534 <link linkend='var-IMAGE_CMD'><filename>IMAGE_CMD</filename></link>.
2535 When setting this variable, you should
2536 use an override for the associated type.
2537 Here is an example:
2538 <literallayout class='monospaced'>
2539 EXTRA_IMAGECMD_ext3 ?= "-i 4096"
2540 </literallayout>
2541 </para>
2542 </glossdef>
2543 </glossentry>
2544
2545 <glossentry id='var-EXTRA_IMAGEDEPENDS'><glossterm>EXTRA_IMAGEDEPENDS</glossterm>
2546 <glossdef>
2547 <para>A list of recipes to build that do not provide packages
2548 for installing into the root filesystem.
2549 </para>
2550 <para>Sometimes a recipe is required to build the final image but is not
2551 needed in the root filesystem.
2552 You can use the <filename>EXTRA_IMAGEDEPENDS</filename> variable to
2553 list these recipes and thus specify the dependencies.
2554 A typical example is a required bootloader in a machine configuration.
2555 </para>
2556 <note>
2557 To add packages to the root filesystem, see the various
2558 <filename>*<link linkend='var-RDEPENDS'>RDEPENDS</link></filename>
2559 and <filename>*<link linkend='var-RRECOMMENDS'>RRECOMMENDS</link></filename>
2560 variables.
2561 </note>
2562 </glossdef>
2563 </glossentry>
2564
2565 <glossentry id='var-EXTRA_OECMAKE'><glossterm>EXTRA_OECMAKE</glossterm>
2566 <glossdef>
2567 <para>Additional <filename>cmake</filename> options.</para>
2568 </glossdef>
2569 </glossentry>
2570
2571 <glossentry id='var-EXTRA_OECONF'><glossterm>EXTRA_OECONF</glossterm>
2572 <glossdef>
2573 <para>Additional <filename>configure</filename> script options.</para>
2574 </glossdef>
2575 </glossentry>
2576
2577 <glossentry id='var-EXTRA_OEMAKE'><glossterm>EXTRA_OEMAKE</glossterm>
2578 <glossdef>
2579 <para>Additional GNU <filename>make</filename> options.</para>
2580 </glossdef>
2581 </glossentry>
2582
2583 <glossentry id='var-EXTRA_OESCONS'><glossterm>EXTRA_OESCONS</glossterm>
2584 <glossdef>
2585 <para>
2586 When inheriting the
2587 <link linkend='ref-classes-scons'><filename>scons</filename></link>
2588 class, this variable specifies additional configuration
2589 options you want to pass to the
2590 <filename>scons</filename> command line.
2591 </para>
2592 </glossdef>
2593 </glossentry>
2594
2595 <glossentry id='var-EXTRA_QMAKEVARS_POST'><glossterm>EXTRA_QMAKEVARS_POST</glossterm>
2596 <glossdef>
2597 <para>
2598 Configuration variables or options you want to pass to
2599 <filename>qmake</filename>.
2600 Use this variable when the arguments need to be after the
2601 <filename>.pro</filename> file list on the command line.
2602 </para>
2603
2604 <para>
2605 This variable is used with recipes that inherit the
2606 <link linkend='ref-classes-qmake*'><filename>qmake_base</filename></link>
2607 class or other classes that inherit
2608 <filename>qmake_base</filename>.
2609 </para>
2610 </glossdef>
2611 </glossentry>
2612
2613 <glossentry id='var-EXTRA_QMAKEVARS_PRE'><glossterm>EXTRA_QMAKEVARS_PRE</glossterm>
2614 <glossdef>
2615 <para>
2616 Configuration variables or options you want to pass to
2617 <filename>qmake</filename>.
2618 Use this variable when the arguments need to be before the
2619 <filename>.pro</filename> file list on the command line.
2620 </para>
2621
2622 <para>
2623 This variable is used with recipes that inherit the
2624 <link linkend='ref-classes-qmake*'><filename>qmake_base</filename></link>
2625 class or other classes that inherit
2626 <filename>qmake_base</filename>.
2627 </para>
2628 </glossdef>
2629 </glossentry>
2630
2631 <glossentry id='var-EXTRA_USERS_PARAMS'><glossterm>EXTRA_USERS_PARAMS</glossterm>
2632 <glossdef>
2633 <para>
2634 When inheriting the
2635 <link linkend='ref-classes-extrausers'><filename>extrausers</filename></link>
2636 class, this variable provides image level user and group
2637 operations.
2638 This is a more global method of providing user and group
2639 configuration as compared to using the
2640 <link linkend='ref-classes-useradd'><filename>useradd</filename></link>
2641 class, which ties user and group configurations to a
2642 specific recipe.
2643 </para>
2644
2645 <para>
2646 The set list of commands you can configure using the
2647 <filename>EXTRA_USERS_PARAMS</filename> is shown in the
2648 <filename>extrausers</filename> class.
2649 These commands map to the normal Unix commands of the same
2650 names:
2651 <literallayout class='monospaced'>
2652 # EXTRA_USERS_PARAMS = "\
2653 # useradd -p '' tester; \
2654 # groupadd developers; \
2655 # userdel nobody; \
2656 # groupdel -g video; \
2657 # groupmod -g 1020 developers; \
2658 # usermod -s /bin/sh tester; \
2659 # "
2660 </literallayout>
2661 </para>
2662 </glossdef>
2663 </glossentry>
2664
2665 </glossdiv>
2666
2667 <glossdiv id='var-glossary-f'><title>F</title>
2668
2669 <glossentry id='var-FEATURE_PACKAGES'><glossterm>FEATURE_PACKAGES</glossterm>
2670 <glossdef>
2671 <para>
2672 Defines one or more packages to include in an image when
2673 a specific item is included in
2674 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>.
2675 When setting the value, <filename>FEATURE_PACKAGES</filename>
2676 should have the name of the feature item as an override.
2677 Here is an example:
2678 <literallayout class='monospaced'>
2679 FEATURE_PACKAGES_widget = "<replaceable>package1</replaceable> <replaceable>package2</replaceable>"
2680 </literallayout>
2681 In this example, if "widget" were added to
2682 <filename>IMAGE_FEATURES</filename>, <replaceable>package1</replaceable> and
2683 <replaceable>package2</replaceable> would be included in the image.
2684 <note>
2685 Packages installed by features defined through
2686 <filename>FEATURE_PACKAGES</filename> are often package
2687 groups.
2688 While similarly named, you should not confuse the
2689 <filename>FEATURE_PACKAGES</filename> variable with
2690 package groups, which are discussed elsewhere in the
2691 documentation.
2692 </note>
2693 </para>
2694 </glossdef>
2695 </glossentry>
2696
2697 <glossentry id='var-FEED_DEPLOYDIR_BASE_URI'><glossterm>FEED_DEPLOYDIR_BASE_URI</glossterm>
2698 <glossdef>
2699 <para>
2700 Points to the base URL of the server and location within
2701 the document-root that provides the metadata and
2702 packages required by OPKG to support runtime package
2703 management of IPK packages.
2704 You set this variable in your
2705 <filename>local.conf</filename> file.
2706 </para>
2707
2708 <para>
2709 Consider the following example:
2710 <literallayout class='monospaced'>
2711 FEED_DEPLOYDIR_BASE_URI = "http://192.168.7.1/BOARD-dir"
2712 </literallayout>
2713 This example assumes you are serving your packages over
2714 HTTP and your databases are located in a directory
2715 named <filename>BOARD-dir</filename>, which is underneath
2716 your HTTP server's document-root.
2717 In this case, the OpenEmbedded build system generates a set
2718 of configuration files for you in your target that work
2719 with the feed.
2720 </para>
2721 </glossdef>
2722 </glossentry>
2723
2724 <glossentry id='var-FILES'><glossterm>FILES</glossterm>
2725 <glossdef>
2726 <para>
2727 The list of directories or files that are placed in packages.
2728 </para>
2729
2730 <para>
2731 To use the <filename>FILES</filename> variable, provide a
2732 package name override that identifies the resulting package.
2733 Then, provide a space-separated list of files or paths
2734 that identify the files you want included as part of the
2735 resulting package.
2736 Here is an example:
2737 <literallayout class='monospaced'>
2738 FILES_${PN} += "${bindir}/mydir1/ ${bindir}/mydir2/myfile"
2739 </literallayout>
2740 </para>
2741
2742 <note>
2743 When specifying paths as part of the
2744 <filename>FILES</filename> variable, it is good practice
2745 to use appropriate path variables.
2746 For example, use <filename>${sysconfdir}</filename> rather
2747 than <filename>/etc</filename>, or
2748 <filename>${bindir}</filename> rather than
2749 <filename>/usr/bin</filename>.
2750 You can find a list of these variables at the top of the
2751 <filename>meta/conf/bitbake.conf</filename> file in the
2752 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
2753 </note>
2754
2755 <para>
2756 If some of the files you provide with the
2757 <filename>FILES</filename> variable are editable and you
2758 know they should not be overwritten during the package
2759 update process by the Package Management System (PMS), you
2760 can identify these files so that the PMS will not
2761 overwrite them.
2762 See the
2763 <link linkend='var-CONFFILES'><filename>CONFFILES</filename></link>
2764 variable for information on how to identify these files to
2765 the PMS.
2766 </para>
2767
2768 </glossdef>
2769 </glossentry>
2770
2771 <glossentry id='var-FILESEXTRAPATHS'><glossterm>FILESEXTRAPATHS</glossterm>
2772 <glossdef>
2773 <para>
2774 Extends the search path the OpenEmbedded build system uses
2775 when looking for files and patches as it processes recipes
2776 and append files.
2777 The default directories BitBake uses when it processes
2778 recipes are initially defined by the
2779 <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>
2780 variable.
2781 You can extend <filename>FILESPATH</filename> variable
2782 by using <filename>FILESEXTRAPATHS</filename>.
2783 </para>
2784
2785 <para>
2786 Best practices dictate that you accomplish this by using
2787 <filename>FILESEXTRAPATHS</filename> from within a
2788 <filename>.bbappend</filename> file and that you prepend
2789 paths as follows:
2790 <literallayout class='monospaced'>
2791 FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
2792 </literallayout>
2793 In the above example, the build system first looks for files
2794 in a directory that has the same name as the corresponding
2795 append file.
2796 <note>
2797 <para>When extending <filename>FILESEXTRAPATHS</filename>,
2798 be sure to use the immediate expansion
2799 (<filename>:=</filename>) operator.
2800 Immediate expansion makes sure that BitBake evaluates
2801 <link linkend='var-THISDIR'><filename>THISDIR</filename></link>
2802 at the time the directive is encountered rather than at
2803 some later time when expansion might result in a
2804 directory that does not contain the files you need.
2805 </para>
2806 <para>Also, include the trailing separating colon
2807 character if you are prepending.
2808 The trailing colon character is necessary because you
2809 are directing BitBake to extend the path by prepending
2810 directories to the search path.</para>
2811 </note>
2812 Here is another common use:
2813 <literallayout class='monospaced'>
2814 FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
2815 </literallayout>
2816 In this example, the build system extends the
2817 <filename>FILESPATH</filename> variable to include a
2818 directory named <filename>files</filename> that is in the
2819 same directory as the corresponding append file.
2820 </para>
2821
2822 <para>
2823 Here is a final example that specifically adds three paths:
2824 <literallayout class='monospaced'>
2825 FILESEXTRAPATHS_prepend := "path_1:path_2:path_3:"
2826 </literallayout>
2827 </para>
2828
2829 <para>
2830 By prepending paths in <filename>.bbappend</filename>
2831 files, you allow multiple append files that reside in
2832 different layers but are used for the same recipe to
2833 correctly extend the path.
2834 </para>
2835 </glossdef>
2836 </glossentry>
2837
2838 <glossentry id='var-FILESOVERRIDES'><glossterm>FILESOVERRIDES</glossterm>
2839 <glossdef>
2840 <para>
2841 A subset of <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>
2842 used by the OpenEmbedded build system for creating
2843 <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>.
2844 You can find more information on how overrides are handled
2845 in the
2846 <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake Manual</ulink>.
2847 </para>
2848
2849 <para>
2850 By default, the <filename>FILESOVERRIDES</filename>
2851 variable is defined as:
2852 <literallayout class='monospaced'>
2853 FILESOVERRIDES = "${TRANSLATED_TARGET_ARCH}:${MACHINEOVERRIDES}:${DISTROOVERRIDES}"
2854 </literallayout>
2855
2856 <note>
2857 Do not hand-edit the <filename>FILESOVERRIDES</filename>
2858 variable.
2859 The values match up with expected overrides and are
2860 used in an expected manner by the build system.
2861 </note>
2862 </para>
2863 </glossdef>
2864 </glossentry>
2865
2866 <glossentry id='var-FILESPATH'><glossterm>FILESPATH</glossterm>
2867 <glossdef>
2868 <para>
2869 The default set of directories the OpenEmbedded build system
2870 uses when searching for patches and files.
2871 During the build process, BitBake searches each directory in
2872 <filename>FILESPATH</filename> in the specified order when
2873 looking for files and patches specified by each
2874 <filename>file://</filename> URI in a recipe.
2875 </para>
2876
2877 <para>
2878 The default value for the <filename>FILESPATH</filename>
2879 variable is defined in the <filename>base.bbclass</filename>
2880 class found in <filename>meta/classes</filename> in the
2881 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>:
2882 <literallayout class='monospaced'>
2883 FILESPATH = "${@base_set_filespath(["${FILE_DIRNAME}/${BP}", \
2884 "${FILE_DIRNAME}/${BPN}", "${FILE_DIRNAME}/files"], d)}"
2885 </literallayout>
2886 <note>
2887 Do not hand-edit the <filename>FILESPATH</filename>
2888 variable.
2889 If you want the build system to look in directories
2890 other than the defaults, extend the
2891 <filename>FILESPATH</filename> variable by using the
2892 <link linkend='var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></link>
2893 variable.
2894 </note>
2895 Be aware that the default <filename>FILESPATH</filename>
2896 directories do not map to directories in custom layers
2897 where append files (<filename>.bbappend</filename>)
2898 are used.
2899 If you want the build system to find patches or files
2900 that reside with your append files, you need to extend
2901 the <filename>FILESPATH</filename> variable by using
2902 the
2903 <link linkend='var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></link>
2904 variable.
2905 </para>
2906 </glossdef>
2907 </glossentry>
2908
2909 <glossentry id='var-FILESYSTEM_PERMS_TABLES'><glossterm>FILESYSTEM_PERMS_TABLES</glossterm>
2910 <glossdef>
2911 <para>Allows you to define your own file permissions settings table as part of
2912 your configuration for the packaging process.
2913 For example, suppose you need a consistent set of custom permissions for
2914 a set of groups and users across an entire work project.
2915 It is best to do this in the packages themselves but this is not always
2916 possible.
2917 </para>
2918 <para>
2919 By default, the OpenEmbedded build system uses the <filename>fs-perms.txt</filename>, which
2920 is located in the <filename>meta/files</filename> folder in the
2921 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
2922 If you create your own file permissions setting table, you should place it in your
2923 layer or the distro's layer.
2924 </para>
2925 <para>
2926 You define the <filename>FILESYSTEM_PERMS_TABLES</filename> variable in the
2927 <filename>conf/local.conf</filename> file, which is found in the
2928 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>, to
2929 point to your custom <filename>fs-perms.txt</filename>.
2930 You can specify more than a single file permissions setting table.
2931 The paths you specify to these files must be defined within the
2932 <link linkend='var-BBPATH'><filename>BBPATH</filename></link> variable.
2933 </para>
2934 <para>
2935 For guidance on how to create your own file permissions settings table file,
2936 examine the existing <filename>fs-perms.txt</filename>.
2937 </para>
2938 </glossdef>
2939 </glossentry>
2940
2941 <glossentry id='var-FONT_PACKAGES'><glossterm>FONT_PACKAGES</glossterm>
2942 <glossdef>
2943 <para>
2944 When inheriting the
2945 <link linkend='ref-classes-fontcache'><filename>fontcache</filename></link>
2946 class, this variable identifies packages containing font
2947 files that need to be cached by Fontconfig.
2948 By default, the <filename>fontcache</filename> class assumes
2949 that fonts are in the recipe's main package
2950 (i.e. <filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}</filename>).
2951 Use this variable if fonts you need are in a package
2952 other than that main package.
2953 </para>
2954 </glossdef>
2955 </glossentry>
2956
2957 <glossentry id='var-FULL_OPTIMIZATION'><glossterm>FULL_OPTIMIZATION</glossterm>
2958 <glossdef>
2959 <para>
2960 The options to pass in
2961 <filename><link linkend='var-TARGET_CFLAGS'>TARGET_CFLAGS</link></filename>
2962 and <filename><link linkend='var-CFLAGS'>CFLAGS</link></filename>
2963 when compiling an optimized system.
2964 This variable defaults to
2965 "-O2 -pipe ${DEBUG_FLAGS}".
2966 </para>
2967 </glossdef>
2968 </glossentry>
2969 </glossdiv>
2970
2971 <glossdiv id='var-glossary-g'><title>G</title>
2972
2973 <glossentry id='var-GLIBC_GENERATE_LOCALES'><glossterm>GLIBC_GENERATE_LOCALES</glossterm>
2974 <glossdef>
2975 <para>
2976 Specifies the list of GLIBC locales to generate should you
2977 not wish generate all LIBC locals, which can be time
2978 consuming.
2979 <note>
2980 If you specifically remove the locale
2981 <filename>en_US.UTF-8</filename>, you must set
2982 <link linkend='var-IMAGE_LINGUAS'><filename>IMAGE_LINGUAS</filename></link>
2983 appropriately.
2984 </note>
2985 You can set <filename>GLIBC_GENERATE_LOCALES</filename>
2986 in your <filename>local.conf</filename> file.
2987 By default, all locales are generated.
2988 <literallayout class='monospaced'>
2989 GLIBC_GENERATE_LOCALES = "en_GB.UTF-8 en_US.UTF-8"
2990 </literallayout>
2991 </para>
2992 </glossdef>
2993 </glossentry>
2994
2995 <glossentry id='var-GROUPADD_PARAM'><glossterm>GROUPADD_PARAM</glossterm>
2996 <glossdef>
2997 <para>
2998 When inheriting the
2999 <link linkend='ref-classes-useradd'><filename>useradd</filename></link>
3000 class, this variable
3001 specifies for a package what parameters should be passed
3002 to the <filename>groupadd</filename> command
3003 if you wish to add a group to the system when the package
3004 is installed.
3005 </para>
3006
3007 <para>
3008 Here is an example from the <filename>dbus</filename>
3009 recipe:
3010 <literallayout class='monospaced'>
3011 GROUPADD_PARAM_${PN} = "-r netdev"
3012 </literallayout>
3013 For information on the standard Linux shell command
3014 <filename>groupadd</filename>, see
3015 <ulink url='http://linux.die.net/man/8/groupadd'></ulink>.
3016 </para>
3017 </glossdef>
3018 </glossentry>
3019
3020 <glossentry id='var-GROUPMEMS_PARAM'><glossterm>GROUPMEMS_PARAM</glossterm>
3021 <glossdef>
3022 <para>
3023 When inheriting the
3024 <link linkend='ref-classes-useradd'><filename>useradd</filename></link>
3025 class, this variable
3026 specifies for a package what parameters should be passed
3027 to the <filename>groupmems</filename> command
3028 if you wish to modify the members of a group when the
3029 package is installed.
3030 </para>
3031
3032 <para>
3033 For information on the standard Linux shell command
3034 <filename>groupmems</filename>, see
3035 <ulink url='http://linux.die.net/man/8/groupmems'></ulink>.
3036 </para>
3037 </glossdef>
3038 </glossentry>
3039
3040 <glossentry id='var-GRUB_GFXSERIAL'><glossterm>GRUB_GFXSERIAL</glossterm>
3041 <glossdef>
3042 <para>
3043 Configures the GNU GRand Unified Bootloader (GRUB) to have
3044 graphics and serial in the boot menu.
3045 Set this variable to "1" in your
3046 <filename>local.conf</filename> or distribution
3047 configuration file to enable graphics and serial
3048 in the menu.
3049 </para>
3050
3051 <para>
3052 See the
3053 <link linkend='ref-classes-grub-efi'><filename>grub-efi</filename></link>
3054 class for more information on how this variable is used.
3055 </para>
3056 </glossdef>
3057 </glossentry>
3058
3059 <glossentry id='var-GRUB_OPTS'><glossterm>GRUB_OPTS</glossterm>
3060 <glossdef>
3061 <para>
3062 Additional options to add to the GNU GRand Unified
3063 Bootloader (GRUB) configuration.
3064 Use a semi-colon character (<filename>;</filename>) to
3065 separate multiple options.
3066 </para>
3067
3068 <para>
3069 The <filename>GRUB_OPTS</filename> variable is optional.
3070 See the
3071 <link linkend='ref-classes-grub-efi'><filename>grub-efi</filename></link>
3072 class for more information on how this variable is used.
3073 </para>
3074 </glossdef>
3075 </glossentry>
3076
3077 <glossentry id='var-GRUB_TIMEOUT'><glossterm>GRUB_TIMEOUT</glossterm>
3078 <glossdef>
3079 <para>
3080 Specifies the timeout before executing the default
3081 <filename>LABEL</filename> in the GNU GRand Unified
3082 Bootloader (GRUB).
3083 </para>
3084
3085 <para>
3086 The <filename>GRUB_TIMEOUT</filename> variable is optional.
3087 See the
3088 <link linkend='ref-classes-grub-efi'><filename>grub-efi</filename></link>
3089 class for more information on how this variable is used.
3090 </para>
3091 </glossdef>
3092 </glossentry>
3093
3094 <glossentry id='var-GTKIMMODULES_PACKAGES'><glossterm>GTKIMMODULES_PACKAGES</glossterm>
3095 <glossdef>
3096 <para>
3097 When inheriting the
3098 <link linkend='ref-classes-gtk-immodules-cache'><filename>gtk-immodules-cache</filename></link>
3099 class, this variable specifies the packages that contain the
3100 GTK+ input method modules being installed when the modules
3101 are in packages other than the main package.
3102 </para>
3103 </glossdef>
3104 </glossentry>
3105
3106 <glossentry id='var-GUMMIBOOT_CFG'><glossterm>GUMMIBOOT_CFG</glossterm>
3107 <glossdef>
3108 <para>
3109 When
3110 <link linkend='var-EFI_PROVIDER'><filename>EFI_PROVIDER</filename></link>
3111 is set to "gummiboot", the
3112 <filename>GUMMIBOOT_CFG</filename> variable specifies the
3113 configuration file that should be used.
3114 By default, the
3115 <link linkend='ref-classes-gummiboot'><filename>gummiboot</filename></link>
3116 class sets the <filename>GUMMIBOOT_CFG</filename> as
3117 follows:
3118 <literallayout class='monospaced'>
3119 GUMMIBOOT_CFG ?= "${<link linkend='var-S'>S</link>}/loader.conf"
3120 </literallayout>
3121 </para>
3122
3123 <para>
3124 For information on Gummiboot, see the
3125 <ulink url='http://freedesktop.org/wiki/Software/gummiboot/'>Gummiboot documentation</ulink>.
3126 </para>
3127 </glossdef>
3128 </glossentry>
3129
3130 <glossentry id='var-GUMMIBOOT_ENTRIES'><glossterm>GUMMIBOOT_ENTRIES</glossterm>
3131 <glossdef>
3132 <para>
3133 When
3134 <link linkend='var-EFI_PROVIDER'><filename>EFI_PROVIDER</filename></link>
3135 is set to "gummiboot", the
3136 <filename>GUMMIBOOT_ENTRIES</filename> variable specifies
3137 a list of entry files
3138 (<filename>*.conf</filename>) to be installed
3139 containing one boot entry per file.
3140 By default, the
3141 <link linkend='ref-classes-gummiboot'><filename>gummiboot</filename></link>
3142 class sets the <filename>GUMMIBOOT_ENTRIES</filename> as
3143 follows:
3144 <literallayout class='monospaced'>
3145 GUMMIBOOT_ENTRIES ?= ""
3146 </literallayout>
3147 </para>
3148
3149 <para>
3150 For information on Gummiboot, see the
3151 <ulink url='http://freedesktop.org/wiki/Software/gummiboot/'>Gummiboot documentation</ulink>.
3152 </para>
3153 </glossdef>
3154 </glossentry>
3155
3156 <glossentry id='var-GUMMIBOOT_TIMEOUT'><glossterm>GUMMIBOOT_TIMEOUT</glossterm>
3157 <glossdef>
3158 <para>
3159 When
3160 <link linkend='var-EFI_PROVIDER'><filename>EFI_PROVIDER</filename></link>
3161 is set to "gummiboot", the
3162 <filename>GUMMIBOOT_TIMEOUT</filename> variable specifies
3163 the boot menu timeout in seconds.
3164 By default, the
3165 <link linkend='ref-classes-gummiboot'><filename>gummiboot</filename></link>
3166 class sets the <filename>GUMMIBOOT_TIMEOUT</filename> as
3167 follows:
3168 <literallayout class='monospaced'>
3169 GUMMIBOOT_TIMEOUT ?= "10"
3170 </literallayout>
3171 </para>
3172
3173 <para>
3174 For information on Gummiboot, see the
3175 <ulink url='http://freedesktop.org/wiki/Software/gummiboot/'>Gummiboot documentation</ulink>.
3176 </para>
3177 </glossdef>
3178 </glossentry>
3179
3180 </glossdiv>
3181
3182 <glossdiv id='var-glossary-h'><title>H</title>
3183
3184 <glossentry id='var-HOMEPAGE'><glossterm>HOMEPAGE</glossterm>
3185 <glossdef>
3186 <para>Website where more information about the software the recipe is building
3187 can be found.</para>
3188 </glossdef>
3189 </glossentry>
3190
3191 <glossentry id='var-HOST_CC_ARCH'><glossterm>HOST_CC_ARCH</glossterm>
3192 <glossdef>
3193 <para>
3194 Specifies architecture-specific compiler flags that are
3195 passed to the C compiler.
3196 </para>
3197
3198 <para>
3199 Default initialization for <filename>HOST_CC_ARCH</filename>
3200 varies depending on what is being built:
3201 <itemizedlist>
3202 <listitem><para>
3203 <link linkend='var-TARGET_CC_ARCH'><filename>TARGET_CC_ARCH</filename></link>
3204 when building for the target
3205 </para></listitem>
3206 <listitem><para>
3207 <filename>BUILD_CC_ARCH</filename>
3208 when building for the build host (i.e.
3209 <filename>native</filename>)
3210 </para></listitem>
3211 <listitem><para>
3212 <filename>BUILDSDK_CC_ARCH</filename>
3213 when building for an SDK (i.e.
3214 <filename>nativesdk</filename>)
3215 </para></listitem>
3216 </itemizedlist>
3217 </para>
3218 </glossdef>
3219 </glossentry>
3220
3221 <glossentry id='var-HOST_SYS'><glossterm>HOST_SYS</glossterm>
3222 <glossdef>
3223 <para>
3224 Specifies the system, including the architecture and the
3225 operating system, for with the build is occurring
3226 in the context of the current
3227 recipe.
3228 The OpenEmbedded build system automatically sets this
3229 variable.
3230 You do not need to set the variable yourself.
3231 </para>
3232
3233 <para>
3234 Here are two examples:
3235 <itemizedlist>
3236 <listitem><para>Given a native recipe on a 32-bit
3237 x86 machine running Linux, the value is
3238 "i686-linux".
3239 </para></listitem>
3240 <listitem><para>Given a recipe being built for a
3241 little-endian MIPS target running Linux,
3242 the value might be "mipsel-linux".
3243 </para></listitem>
3244 </itemizedlist>
3245 </para>
3246 </glossdef>
3247 </glossentry>
3248
3249 </glossdiv>
3250
3251 <glossdiv id='var-glossary-i'><title>I</title>
3252
3253 <glossentry id='var-ICECC_DISABLED'><glossterm>ICECC_DISABLED</glossterm>
3254 <glossdef>
3255 <para>
3256 Disables or enables the <filename>icecc</filename>
3257 (Icecream) function.
3258 For more information on this function and best practices
3259 for using this variable, see the
3260 "<link linkend='ref-classes-icecc'><filename>icecc.bbclass</filename></link>"
3261 section.
3262 </para>
3263
3264 <para>
3265 Setting this variable to "1" in your
3266 <filename>local.conf</filename> disables the function:
3267 <literallayout class='monospaced'>
3268 ICECC_DISABLED ??= "1"
3269 </literallayout>
3270 To enable the function, set the variable as follows:
3271 <literallayout class='monospaced'>
3272 ICECC_DISABLED = ""
3273 </literallayout>
3274 </para>
3275 </glossdef>
3276 </glossentry>
3277
3278 <glossentry id='var-ICECC_ENV_EXEC'><glossterm>ICECC_ENV_EXEC</glossterm>
3279 <glossdef>
3280 <para>
3281 Points to the <filename>icecc-create-env</filename> script
3282 that you provide.
3283 This variable is used by the
3284 <link linkend='ref-classes-icecc'><filename>icecc</filename></link>
3285 class.
3286 You set this variable in your
3287 <filename>local.conf</filename> file.
3288 </para>
3289
3290 <para>
3291 If you do not point to a script that you provide, the
3292 OpenEmbedded build system uses the default script provided
3293 by the <filename>icecc-create-env.bb</filename> recipe,
3294 which is a modified version and not the one that comes with
3295 <filename>icecc</filename>.
3296 </para>
3297 </glossdef>
3298 </glossentry>
3299
3300 <glossentry id='var-ICECC_PARALLEL_MAKE'><glossterm>ICECC_PARALLEL_MAKE</glossterm>
3301 <glossdef>
3302 <para>
3303 Extra options passed to the <filename>make</filename>
3304 command during the
3305 <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
3306 task that specify parallel compilation.
3307 This variable usually takes the form of
3308 <filename>-j 4</filename>, where the number
3309 represents the maximum number of parallel threads
3310 <filename>make</filename> can run.
3311 <note>
3312 The options passed affect builds on all enabled
3313 machines on the network, which are machines running the
3314 <filename>iceccd</filename> daemon.
3315 </note>
3316 </para>
3317
3318 <para>
3319 If your enabled machines support multiple cores,
3320 coming up with the maximum number of parallel threads
3321 that gives you the best performance could take some
3322 experimentation since machine speed, network lag,
3323 available memory, and existing machine loads can all
3324 affect build time.
3325 Consequently, unlike the
3326 <link linkend='var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></link>
3327 variable, there is no rule-of-thumb for setting
3328 <filename>ICECC_PARALLEL_MAKE</filename> to achieve
3329 optimal performance.
3330 </para>
3331
3332 <para>
3333 If you do not set <filename>ICECC_PARALLEL_MAKE</filename>,
3334 the build system does not use it (i.e. the system does
3335 not detect and assign the number of cores as is done with
3336 <filename>PARALLEL_MAKE</filename>).
3337 </para>
3338 </glossdef>
3339 </glossentry>
3340
3341 <glossentry id='var-ICECC_PATH'><glossterm>ICECC_PATH</glossterm>
3342 <glossdef>
3343 <para>
3344 The location of the <filename>icecc</filename> binary.
3345 You can set this variable in your
3346 <filename>local.conf</filename> file.
3347 If your <filename>local.conf</filename> file does not define
3348 this variable, the
3349 <link linkend='ref-classes-icecc'><filename>icecc</filename></link>
3350 class attempts to define it by locating
3351 <filename>icecc</filename> using <filename>which</filename>.
3352 </para>
3353 </glossdef>
3354 </glossentry>
3355
3356 <glossentry id='var-ICECC_USER_CLASS_BL'><glossterm>ICECC_USER_CLASS_BL</glossterm>
3357 <glossdef>
3358 <para>
3359 Identifies user classes that you do not want the
3360 Icecream distributed compile support to consider.
3361 This variable is used by the
3362 <link linkend='ref-classes-icecc'><filename>icecc</filename></link>
3363 class.
3364 You set this variable in your
3365 <filename>local.conf</filename> file.
3366 </para>
3367
3368 <para>
3369 When you list classes using this variable, you are
3370 "blacklisting" them from distributed compilation across
3371 remote hosts.
3372 Any classes you list will be distributed and compiled
3373 locally.
3374 </para>
3375 </glossdef>
3376 </glossentry>
3377
3378 <glossentry id='var-ICECC_USER_PACKAGE_BL'><glossterm>ICECC_USER_PACKAGE_BL</glossterm>
3379 <glossdef>
3380 <para>
3381 Identifies user recipes that you do not want the
3382 Icecream distributed compile support to consider.
3383 This variable is used by the
3384 <link linkend='ref-classes-icecc'><filename>icecc</filename></link>
3385 class.
3386 You set this variable in your
3387 <filename>local.conf</filename> file.
3388 </para>
3389
3390 <para>
3391 When you list packages using this variable, you are
3392 "blacklisting" them from distributed compilation across
3393 remote hosts.
3394 Any packages you list will be distributed and compiled
3395 locally.
3396 </para>
3397 </glossdef>
3398 </glossentry>
3399
3400 <glossentry id='var-ICECC_USER_PACKAGE_WL'><glossterm>ICECC_USER_PACKAGE_WL</glossterm>
3401 <glossdef>
3402 <para>
3403 Identifies user recipes that use an empty
3404 <link linkend='var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></link>
3405 variable that you want to force remote distributed
3406 compilation on using the Icecream distributed compile
3407 support.
3408 This variable is used by the
3409 <link linkend='ref-classes-icecc'><filename>icecc</filename></link>
3410 class.
3411 You set this variable in your
3412 <filename>local.conf</filename> file.
3413 </para>
3414 </glossdef>
3415 </glossentry>
3416
3417 <glossentry id='var-IMAGE_BASENAME'><glossterm>IMAGE_BASENAME</glossterm>
3418 <glossdef>
3419 <para>
3420 The base name of image output files.
3421 This variable defaults to the recipe name
3422 (<filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}</filename>).
3423 </para>
3424 </glossdef>
3425 </glossentry>
3426
3427 <glossentry id='var-IMAGE_BOOT_FILES'><glossterm>IMAGE_BOOT_FILES</glossterm>
3428 <glossdef>
3429 <para>
3430 A space-separated list of files installed into the
3431 boot partition when preparing an image.
3432 By default, the files are installed under the same name as
3433 the source files.
3434 To change the installed name, separate it from the
3435 original name with a semi-colon (;).
3436 Source files need to be located in
3437 <link linkend='var-DEPLOY_DIR_IMAGE'><filename>DEPLOY_DIR_IMAGE</filename></link>.
3438 Here are two examples:
3439
3440 <literallayout class="monospaced">
3441 IMAGE_BOOT_FILES = "u-boot.img uImage;kernel"
3442 IMAGE_BOOT_FILES = "u-boot.${UBOOT_SUFFIX} ${KERNEL_IMAGETYPE}"
3443 </literallayout></para>
3444 </glossdef>
3445 </glossentry>
3446
3447 <glossentry id='var-IMAGE_CLASSES'><glossterm>IMAGE_CLASSES</glossterm>
3448 <glossdef>
3449 <para>
3450 A list of classes that all images should inherit.
3451 You typically use this variable to specify the list of
3452 classes that register the different types of images
3453 the OpenEmbedded build system creates.
3454 </para>
3455
3456 <para>
3457 The default value for <filename>IMAGE_CLASSES</filename> is
3458 <filename>image_types</filename>.
3459 You can set this variable in your
3460 <filename>local.conf</filename> or in a distribution
3461 configuration file.
3462 </para>
3463
3464 <para>
3465 For more information, see
3466 <filename>meta/classes/image_types.bbclass</filename> in the
3467 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
3468 </para>
3469 </glossdef>
3470 </glossentry>
3471
3472 <glossentry id='var-IMAGE_CMD'><glossterm>IMAGE_CMD</glossterm>
3473 <glossdef>
3474 <para>
3475 Specifies the command to create the image file for a
3476 specific image type, which corresponds to the value set
3477 set in
3478 <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>,
3479 (e.g. <filename>ext3</filename>,
3480 <filename>btrfs</filename>, and so forth).
3481 When setting this variable, you should use
3482 an override for the associated type.
3483 Here is an example:
3484 <literallayout class='monospaced'>
3485 IMAGE_CMD_jffs2 = "mkfs.jffs2 --root=${IMAGE_ROOTFS} \
3486 --faketime --output=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 \
3487 ${EXTRA_IMAGECMD}"
3488 </literallayout>
3489 You typically do not need to set this variable unless
3490 you are adding support for a new image type.
3491 For more examples on how to set this variable, see the
3492 <link linkend='ref-classes-image_types'><filename>image_types</filename></link>
3493 class file, which is
3494 <filename>meta/classes/image_types.bbclass</filename>.
3495 </para>
3496 </glossdef>
3497 </glossentry>
3498
3499 <glossentry id='var-IMAGE_DEVICE_TABLES'><glossterm>IMAGE_DEVICE_TABLES</glossterm>
3500 <glossdef>
3501 <para>
3502 Specifies one or more files that contain custom device
3503 tables that are passed to the
3504 <filename>makedevs</filename> command as part of creating
3505 an image.
3506 These files list basic device nodes that should be
3507 created under <filename>/dev</filename> within the image.
3508 If <filename>IMAGE_DEVICE_TABLES</filename> is not set,
3509 <filename>files/device_table-minimal.txt</filename> is
3510 used, which is located by
3511 <link linkend='var-BBPATH'><filename>BBPATH</filename></link>.
3512 For details on how you should write device table files,
3513 see <filename>meta/files/device_table-minimal.txt</filename>
3514 as an example.
3515 </para>
3516 </glossdef>
3517 </glossentry>
3518
3519 <glossentry id='var-IMAGE_FEATURES'><glossterm>IMAGE_FEATURES</glossterm>
3520 <glossdef>
3521 <para>
3522 The primary list of features to include in an image.
3523 Typically, you configure this variable in an image recipe.
3524 Although you can use this variable from your
3525 <filename>local.conf</filename> file, which is found in the
3526 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>,
3527 best practices dictate that you do not.
3528 <note>
3529 To enable extra features from outside the image recipe,
3530 use the
3531 <filename><link linkend='var-EXTRA_IMAGE_FEATURES'>EXTRA_IMAGE_FEATURES</link></filename> variable.
3532 </note>
3533 For a list of image features that ships with the Yocto
3534 Project, see the
3535 "<link linkend="ref-features-image">Image Features</link>"
3536 section.
3537 </para>
3538
3539 <para>
3540 For an example that shows how to customize your image by
3541 using this variable, see the
3542 "<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>"
3543 section in the Yocto Project Development Manual.
3544 </para>
3545 </glossdef>
3546 </glossentry>
3547
3548 <glossentry id='var-IMAGE_FSTYPES'><glossterm>IMAGE_FSTYPES</glossterm>
3549 <glossdef>
3550 <para>
3551 Specifies the formats the OpenEmbedded build system uses
3552 during the build when creating the root filesystem.
3553 For example, setting <filename>IMAGE_FSTYPES</filename>
3554 as follows causes the build system to create root
3555 filesystems using two formats: <filename>.ext3</filename>
3556 and <filename>.tar.bz2</filename>:
3557 <literallayout class='monospaced'>
3558 IMAGE_FSTYPES = "ext3 tar.bz2"
3559 </literallayout>
3560 For the complete list of supported image formats from which
3561 you can choose, see
3562 <link linkend='var-IMAGE_TYPES'><filename>IMAGE_TYPES</filename></link>.
3563 </para>
3564
3565 <note>
3566 If you add "live" to <filename>IMAGE_FSTYPES</filename>
3567 inside an image recipe, be sure that you do so prior to the
3568 "inherit image" line of the recipe or the live image will
3569 not build.
3570 </note>
3571
3572 <note>
3573 Due to the way this variable is processed, it is not
3574 possible to update its contents using
3575 <filename>_append</filename> or
3576 <filename>_prepend</filename>. To add one or more
3577 additional options to this variable the
3578 <filename>+=</filename> operator must be used.
3579 </note>
3580 </glossdef>
3581 </glossentry>
3582
3583 <glossentry id='var-IMAGE_INSTALL'><glossterm>IMAGE_INSTALL</glossterm>
3584 <glossdef>
3585 <para>
3586 Specifies the packages to install into an image.
3587 The <filename>IMAGE_INSTALL</filename> variable is a
3588 mechanism for an image recipe and you should use it
3589 with care to avoid ordering issues.
3590 <note>
3591 When working with an
3592 <link linkend='images-core-image-minimal-initramfs'><filename>core-image-minimal-initramfs</filename></link>
3593 image, do not use the <filename>IMAGE_INSTALL</filename>
3594 variable to specify packages for installation.
3595 Instead, use the
3596 <link linkend='var-PACKAGE_INSTALL'><filename>PACKAGE_INSTALL</filename></link>
3597 variable, which allows the initial RAM disk (initramfs)
3598 recipe to use a fixed set of packages and not be
3599 affected by <filename>IMAGE_INSTALL</filename>.
3600 </note>
3601 </para>
3602
3603 <para>
3604 Image recipes set <filename>IMAGE_INSTALL</filename>
3605 to specify the packages to install into an image through
3606 <filename>image.bbclass</filename>.
3607 Additionally, "helper" classes exist, such as
3608 <filename>core-image.bbclass</filename>, that can take
3609 <filename><link linkend='var-IMAGE_FEATURES'>IMAGE_FEATURES</link></filename>
3610 lists and turn these into auto-generated entries in
3611 <filename>IMAGE_INSTALL</filename> in addition to its
3612 default contents.
3613 </para>
3614
3615 <para>
3616 Using <filename>IMAGE_INSTALL</filename> with the
3617 <filename>+=</filename> operator from the
3618 <filename>/conf/local.conf</filename> file or from within
3619 an image recipe is not recommended as it can cause ordering
3620 issues.
3621 Since <filename>core-image.bbclass</filename> sets
3622 <filename>IMAGE_INSTALL</filename> to a default value using
3623 the <filename>?=</filename> operator, using a
3624 <filename>+=</filename> operation against
3625 <filename>IMAGE_INSTALL</filename> will result in
3626 unexpected behavior when used in
3627 <filename>conf/local.conf</filename>.
3628 Furthermore, the same operation from within an image
3629 recipe may or may not succeed depending on the specific
3630 situation.
3631 In both these cases, the behavior is contrary to how most
3632 users expect the <filename>+=</filename> operator to work.
3633 </para>
3634
3635 <para>
3636 When you use this variable, it is best to use it as follows:
3637 <literallayout class='monospaced'>
3638 IMAGE_INSTALL_append = " <replaceable>package-name</replaceable>"
3639 </literallayout>
3640 Be sure to include the space between the quotation character
3641 and the start of the package name or names.
3642 </para>
3643 </glossdef>
3644 </glossentry>
3645
3646 <glossentry id='var-IMAGE_LINGUAS'><glossterm>IMAGE_LINGUAS</glossterm>
3647 <glossdef>
3648 <para>
3649 Specifies the list of locales to install into the image
3650 during the root filesystem construction process.
3651 The OpenEmbedded build system automatically splits locale
3652 files, which are used for localization, into separate
3653 packages.
3654 Setting the <filename>IMAGE_LINGUAS</filename> variable
3655 ensures that any locale packages that correspond to packages
3656 already selected for installation into the image are also
3657 installed.
3658 Here is an example:
3659 <literallayout class='monospaced'>
3660 IMAGE_LINGUAS = "pt-br de-de"
3661 </literallayout>
3662 In this example, the build system ensures any Brazilian
3663 Portuguese and German locale files that correspond to
3664 packages in the image are installed (i.e.
3665 <filename>*-locale-pt-br</filename>
3666 and <filename>*-locale-de-de</filename> as well as
3667 <filename>*-locale-pt</filename>
3668 and <filename>*-locale-de</filename>, since some software
3669 packages only provide locale files by language and not by
3670 country-specific language).
3671 </para>
3672
3673 <para>
3674 See the
3675 <link linkend='var-GLIBC_GENERATE_LOCALES'><filename>GLIBC_GENERATE_LOCALES</filename></link>
3676 variable for information on generating GLIBC locales.
3677 </para>
3678 </glossdef>
3679 </glossentry>
3680
3681 <glossentry id='var-IMAGE_MANIFEST'><glossterm>IMAGE_MANIFEST</glossterm>
3682 <glossdef>
3683 <para>
3684 The manifest file for the image.
3685 This file lists all the installed packages that make up
3686 the image.
3687 The file contains package information on a line-per-package
3688 basis as follows:
3689 <literallayout class='monospaced'>
3690 <replaceable>packagename</replaceable> <replaceable>packagearch</replaceable> <replaceable>version</replaceable>
3691 </literallayout>
3692 </para>
3693
3694 <para>
3695 The
3696 <link linkend='ref-classes-image'><filename>image</filename></link>
3697 class defines the manifest file as follows:
3698 <literallayout class='monospaced'>
3699 IMAGE_MANIFEST = "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.manifest"
3700 </literallayout>
3701 The location is derived using the
3702 <link linkend='var-DEPLOY_DIR_IMAGE'><filename>DEPLOY_DIR_IMAGE</filename></link>
3703 and
3704 <link linkend='var-IMAGE_NAME'><filename>IMAGE_NAME</filename></link>
3705 variables.
3706 You can find information on how the image
3707 is created in the
3708 "<link linkend='image-generation-dev-environment'>Image Generation</link>"
3709 section.
3710 </para>
3711 </glossdef>
3712 </glossentry>
3713
3714 <glossentry id='var-IMAGE_NAME'><glossterm>IMAGE_NAME</glossterm>
3715 <glossdef>
3716 <para>
3717 The name of the output image files minus the extension.
3718 This variable is derived using the
3719 <link linkend='var-IMAGE_BASENAME'><filename>IMAGE_BASENAME</filename></link>,
3720 <link linkend='var-MACHINE'><filename>MACHINE</filename></link>,
3721 and
3722 <link linkend='var-DATETIME'><filename>DATETIME</filename></link>
3723 variables:
3724 <literallayout class='monospaced'>
3725 IMAGE_NAME = "${IMAGE_BASENAME}-${MACHINE}-${DATETIME}"
3726 </literallayout>
3727 </para>
3728 </glossdef>
3729 </glossentry>
3730
3731 <glossentry id='var-IMAGE_OVERHEAD_FACTOR'><glossterm>IMAGE_OVERHEAD_FACTOR</glossterm>
3732 <glossdef>
3733 <para>
3734 Defines a multiplier that the build system applies to the initial image
3735 size for cases when the multiplier times the returned disk usage value
3736 for the image is greater than the sum of
3737 <filename><link linkend='var-IMAGE_ROOTFS_SIZE'>IMAGE_ROOTFS_SIZE</link></filename>
3738 and
3739 <filename><link linkend='var-IMAGE_ROOTFS_EXTRA_SPACE'>IMAGE_ROOTFS_EXTRA_SPACE</link></filename>.
3740 The result of the multiplier applied to the initial image size creates
3741 free disk space in the image as overhead.
3742 By default, the build process uses a multiplier of 1.3 for this variable.
3743 This default value results in 30% free disk space added to the image when this
3744 method is used to determine the final generated image size.
3745 You should be aware that post install scripts and the package management
3746 system uses disk space inside this overhead area.
3747 Consequently, the multiplier does not produce an image with
3748 all the theoretical free disk space.
3749 See <filename><link linkend='var-IMAGE_ROOTFS_SIZE'>IMAGE_ROOTFS_SIZE</link></filename>
3750 for information on how the build system determines the overall image size.
3751 </para>
3752
3753 <para>
3754 The default 30% free disk space typically gives the image enough room to boot
3755 and allows for basic post installs while still leaving a small amount of
3756 free disk space.
3757 If 30% free space is inadequate, you can increase the default value.
3758 For example, the following setting gives you 50% free space added to the image:
3759 <literallayout class='monospaced'>
3760 IMAGE_OVERHEAD_FACTOR = "1.5"
3761 </literallayout>
3762 </para>
3763
3764 <para>
3765 Alternatively, you can ensure a specific amount of free disk space is added
3766 to the image by using the
3767 <filename><link linkend='var-IMAGE_ROOTFS_EXTRA_SPACE'>IMAGE_ROOTFS_EXTRA_SPACE</link></filename>
3768 variable.
3769 </para>
3770 </glossdef>
3771 </glossentry>
3772
3773 <glossentry id='var-IMAGE_PKGTYPE'><glossterm>IMAGE_PKGTYPE</glossterm>
3774 <glossdef>
3775 <para>
3776 Defines the package type (DEB, RPM, IPK, or TAR) used
3777 by the OpenEmbedded build system.
3778 The variable is defined appropriately by the
3779 <link linkend='ref-classes-package_deb'><filename>package_deb</filename></link>,
3780 <link linkend='ref-classes-package_rpm'><filename>package_rpm</filename></link>,
3781 <link linkend='ref-classes-package_ipk'><filename>package_ipk</filename></link>,
3782 or
3783 <link linkend='ref-classes-package_tar'><filename>package_tar</filename></link>
3784 class.
3785 </para>
3786
3787 <para>
3788 The
3789 <link linkend='ref-classes-populate-sdk-*'><filename>package_sdk_base</filename></link>
3790 and
3791 <link linkend='ref-classes-image'><filename>image</filename></link>
3792 classes use the <filename>IMAGE_PKGTYPE</filename> for
3793 packaging up images and SDKs.
3794 </para>
3795
3796 <para>
3797 You should not set the <filename>IMAGE_PKGTYPE</filename>
3798 manually.
3799 Rather, the variable is set indirectly through the
3800 appropriate
3801 <link linkend='ref-classes-package'><filename>package_*</filename></link>
3802 class using the
3803 <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
3804 variable.
3805 The OpenEmbedded build system uses the first package type
3806 (e.g. DEB, RPM, or IPK) that appears with the variable
3807 <note>
3808 Files using the <filename>.tar</filename> format are
3809 never used as a substitute packaging format for DEB,
3810 RPM, and IPK formatted files for your image or SDK.
3811 </note>
3812 </para>
3813 </glossdef>
3814 </glossentry>
3815
3816 <glossentry id='var-IMAGE_POSTPROCESS_COMMAND'><glossterm>IMAGE_POSTPROCESS_COMMAND</glossterm>
3817 <glossdef>
3818 <para>
3819 Added by classes to run post processing commands once the
3820 OpenEmbedded build system has created the image.
3821 You can specify shell commands separated by semicolons:
3822 <literallayout class='monospaced'>
3823 IMAGE_POSTPROCESS_COMMAND += "<replaceable>shell_command</replaceable>; ... "
3824 </literallayout>
3825 If you need to pass the path to the root filesystem within
3826 the command, you can use
3827 <filename>${IMAGE_ROOTFS}</filename>, which points to
3828 the root filesystem image.
3829 </para>
3830 </glossdef>
3831 </glossentry>
3832
3833 <glossentry id='var-IMAGE_ROOTFS'><glossterm>IMAGE_ROOTFS</glossterm>
3834 <glossdef>
3835 <para>
3836 The location of the root filesystem while it is under
3837 construction (i.e. during the
3838 <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link>
3839 task).
3840 This variable is not configurable.
3841 Do not change it.
3842 </para>
3843 </glossdef>
3844 </glossentry>
3845
3846 <glossentry id='var-IMAGE_ROOTFS_ALIGNMENT'><glossterm>IMAGE_ROOTFS_ALIGNMENT</glossterm>
3847 <glossdef>
3848 <para>
3849 Specifies the alignment for the output image file in
3850 Kbytes.
3851 If the size of the image is not a multiple of
3852 this value, then the size is rounded up to the nearest
3853 multiple of the value.
3854 The default value is "1".
3855 See
3856 <link linkend='var-IMAGE_ROOTFS_SIZE'><filename>IMAGE_ROOTFS_SIZE</filename></link>
3857 for additional information.
3858 </para>
3859 </glossdef>
3860 </glossentry>
3861
3862 <glossentry id='var-IMAGE_ROOTFS_EXTRA_SPACE'><glossterm>IMAGE_ROOTFS_EXTRA_SPACE</glossterm>
3863 <glossdef>
3864 <para>
3865 Defines additional free disk space created in the image in Kbytes.
3866 By default, this variable is set to "0".
3867 This free disk space is added to the image after the build system determines
3868 the image size as described in
3869 <filename><link linkend='var-IMAGE_ROOTFS_SIZE'>IMAGE_ROOTFS_SIZE</link></filename>.
3870 </para>
3871
3872 <para>
3873 This variable is particularly useful when you want to ensure that a
3874 specific amount of free disk space is available on a device after an image
3875 is installed and running.
3876 For example, to be sure 5 Gbytes of free disk space is available, set the
3877 variable as follows:
3878 <literallayout class='monospaced'>
3879 IMAGE_ROOTFS_EXTRA_SPACE = "5242880"
3880 </literallayout>
3881 </para>
3882
3883 <para>
3884 For example, the Yocto Project Build Appliance specifically requests 40 Gbytes
3885 of extra space with the line:
3886 <literallayout class='monospaced'>
3887 IMAGE_ROOTFS_EXTRA_SPACE = "41943040"
3888 </literallayout>
3889 </para>
3890 </glossdef>
3891 </glossentry>
3892
3893 <glossentry id='var-IMAGE_ROOTFS_SIZE'><glossterm>IMAGE_ROOTFS_SIZE</glossterm>
3894 <glossdef>
3895 <para>
3896 Defines the size in Kbytes for the generated image.
3897 The OpenEmbedded build system determines the final size for the generated
3898 image using an algorithm that takes into account the initial disk space used
3899 for the generated image, a requested size for the image, and requested
3900 additional free disk space to be added to the image.
3901 Programatically, the build system determines the final size of the
3902 generated image as follows:
3903 <literallayout class='monospaced'>
3904 if (image-du * overhead) &lt; rootfs-size:
3905 internal-rootfs-size = rootfs-size + xspace
3906 else:
3907 internal-rootfs-size = (image-du * overhead) + xspace
3908
3909 where:
3910
3911 image-du = Returned value of the du command on
3912 the image.
3913
3914 overhead = IMAGE_OVERHEAD_FACTOR
3915
3916 rootfs-size = IMAGE_ROOTFS_SIZE
3917
3918 internal-rootfs-size = Initial root filesystem
3919 size before any modifications.
3920
3921 xspace = IMAGE_ROOTFS_EXTRA_SPACE
3922 </literallayout>
3923 See the <link linkend='var-IMAGE_OVERHEAD_FACTOR'><filename>IMAGE_OVERHEAD_FACTOR</filename></link>
3924 and <link linkend='var-IMAGE_ROOTFS_EXTRA_SPACE'><filename>IMAGE_ROOTFS_EXTRA_SPACE</filename></link>
3925 variables for related information.
3926<!-- In the above example, <filename>overhead</filename> is defined by the
3927 <filename><link linkend='var-IMAGE_OVERHEAD_FACTOR'>IMAGE_OVERHEAD_FACTOR</link></filename>
3928 variable, <filename>xspace</filename> is defined by the
3929 <filename><link linkend='var-IMAGE_ROOTFS_EXTRA_SPACE'>IMAGE_ROOTFS_EXTRA_SPACE</link></filename>
3930 variable, and <filename>du</filename> is the results of the disk usage command
3931 on the initially generated image. -->
3932 </para>
3933 </glossdef>
3934 </glossentry>
3935
3936 <glossentry id='var-IMAGE_TYPEDEP'><glossterm>IMAGE_TYPEDEP</glossterm>
3937 <glossdef>
3938 <para>
3939 Specifies a dependency from one image type on another.
3940 Here is an example from the
3941 <link linkend='ref-classes-image-live'><filename>image-live</filename></link>
3942 class:
3943 <literallayout class='monospaced'>
3944 IMAGE_TYPEDEP_live = "ext3"
3945 </literallayout>
3946 In the previous example, the variable ensures that when
3947 "live" is listed with the
3948 <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
3949 variable, the OpenEmbedded build system produces an
3950 <filename>ext3</filename> image first since one of the
3951 components of the live
3952 image is an <filename>ext3</filename>
3953 formatted partition containing the root
3954 filesystem.
3955 </para>
3956 </glossdef>
3957 </glossentry>
3958
3959 <glossentry id='var-IMAGE_TYPES'><glossterm>IMAGE_TYPES</glossterm>
3960 <glossdef>
3961 <para>
3962 Specifies the complete list of supported image types
3963 by default:
3964 <literallayout class='monospaced'>
3965 jffs2
3966 jffs2.sum
3967 cramfs
3968 ext2
3969 ext2.gz
3970 ext2.bz2
3971 ext3
3972 ext3.gz
3973 ext2.lzma
3974 btrfs
3975 live
3976 squashfs
3977 squashfs-xz
3978 ubi
3979 ubifs
3980 tar
3981 tar.gz
3982 tar.bz2
3983 tar.xz
3984 cpio
3985 cpio.gz
3986 cpio.xz
3987 cpio.lzma
3988 vmdk
3989 elf
3990 </literallayout>
3991 For more information about these types of images, see
3992 <filename>meta/classes/image_types*.bbclass</filename>
3993 in the
3994 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
3995 </para>
3996 </glossdef>
3997 </glossentry>
3998
3999 <glossentry id='var-INC_PR'><glossterm>INC_PR</glossterm>
4000 <glossdef>
4001 <para>Helps define the recipe revision for recipes that share
4002 a common <filename>include</filename> file.
4003 You can think of this variable as part of the recipe revision
4004 as set from within an include file.</para>
4005 <para>Suppose, for example, you have a set of recipes that
4006 are used across several projects.
4007 And, within each of those recipes the revision
4008 (its <link linkend='var-PR'><filename>PR</filename></link>
4009 value) is set accordingly.
4010 In this case, when the revision of those recipes changes,
4011 the burden is on you to find all those recipes and
4012 be sure that they get changed to reflect the updated
4013 version of the recipe.
4014 In this scenario, it can get complicated when recipes
4015 that are used in many places and provide common functionality
4016 are upgraded to a new revision.</para>
4017 <para>A more efficient way of dealing with this situation is
4018 to set the <filename>INC_PR</filename> variable inside
4019 the <filename>include</filename> files that the recipes
4020 share and then expand the <filename>INC_PR</filename>
4021 variable within the recipes to help
4022 define the recipe revision.
4023 </para>
4024 <para>
4025 The following provides an example that shows how to use
4026 the <filename>INC_PR</filename> variable
4027 given a common <filename>include</filename> file that
4028 defines the variable.
4029 Once the variable is defined in the
4030 <filename>include</filename> file, you can use the
4031 variable to set the <filename>PR</filename> values in
4032 each recipe.
4033 You will notice that when you set a recipe's
4034 <filename>PR</filename> you can provide more granular
4035 revisioning by appending values to the
4036 <filename>INC_PR</filename> variable:
4037 <literallayout class='monospaced'>
4038recipes-graphics/xorg-font/xorg-font-common.inc:INC_PR = "r2"
4039recipes-graphics/xorg-font/encodings_1.0.4.bb:PR = "${INC_PR}.1"
4040recipes-graphics/xorg-font/font-util_1.3.0.bb:PR = "${INC_PR}.0"
4041recipes-graphics/xorg-font/font-alias_1.0.3.bb:PR = "${INC_PR}.3"
4042 </literallayout>
4043 The first line of the example establishes the baseline
4044 revision to be used for all recipes that use the
4045 <filename>include</filename> file.
4046 The remaining lines in the example are from individual
4047 recipes and show how the <filename>PR</filename> value
4048 is set.</para>
4049 </glossdef>
4050 </glossentry>
4051
4052 <glossentry id='var-INCOMPATIBLE_LICENSE'><glossterm>INCOMPATIBLE_LICENSE</glossterm>
4053 <glossdef>
4054 <para>
4055 Specifies a space-separated list of license names
4056 (as they would appear in
4057 <link linkend='var-LICENSE'><filename>LICENSE</filename></link>)
4058 that should be excluded from the build.
4059 Recipes that provide no alternatives to listed incompatible
4060 licenses are not built.
4061 Packages that are individually licensed with the specified
4062 incompatible licenses will be deleted.
4063 </para>
4064
4065 <note>
4066 This functionality is only regularly tested using
4067 the following setting:
4068 <literallayout class='monospaced'>
4069 INCOMPATIBLE_LICENSE = "GPL-3.0 LGPL-3.0 AGPL-3.0"
4070 </literallayout>
4071 Although you can use other settings, you might be required
4072 to remove dependencies on or provide alternatives to
4073 components that are required to produce a functional system
4074 image.
4075 </note>
4076 </glossdef>
4077 </glossentry>
4078
4079 <glossentry id='var-INHIBIT_DEFAULT_DEPS'><glossterm>INHIBIT_DEFAULT_DEPS</glossterm>
4080 <glossdef>
4081 <para>
4082 Prevents the default dependencies, namely the C compiler
4083 and standard C library (libc), from being added to
4084 <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>.
4085 This variable is usually used within recipes that do not
4086 require any compilation using the C compiler.
4087 </para>
4088
4089 <para>
4090 Set the variable to "1" to prevent the default dependencies
4091 from being added.
4092 </para>
4093 </glossdef>
4094 </glossentry>
4095
4096 <glossentry id='var-INHIBIT_PACKAGE_DEBUG_SPLIT'><glossterm>INHIBIT_PACKAGE_DEBUG_SPLIT</glossterm>
4097 <glossdef>
4098
4099 <para>
4100 Prevents the OpenEmbedded build system from splitting
4101 out debug information during packaging.
4102 By default, the build system splits out debugging
4103 information during the
4104 <link linkend='ref-tasks-package'><filename>do_package</filename></link>
4105 task.
4106 For more information on how debug information is split out,
4107 see the
4108 <link linkend='var-PACKAGE_DEBUG_SPLIT_STYLE'><filename>PACKAGE_DEBUG_SPLIT_STYLE</filename></link>
4109 variable.
4110 </para>
4111
4112 <para>
4113 To prevent the build system from splitting out
4114 debug information during packaging, set the
4115 <filename>INHIBIT_PACKAGE_DEBUG_SPLIT</filename> variable
4116 as follows:
4117 <literallayout class='monospaced'>
4118 INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
4119 </literallayout>
4120 </para>
4121 </glossdef>
4122 </glossentry>
4123
4124 <glossentry id='var-INHIBIT_PACKAGE_STRIP'><glossterm>INHIBIT_PACKAGE_STRIP</glossterm>
4125 <glossdef>
4126 <para>
4127 If set to "1", causes the build to not strip binaries in resulting packages.
4128 </para>
4129 </glossdef>
4130 </glossentry>
4131
4132 <glossentry id='var-INHERIT'><glossterm>INHERIT</glossterm>
4133 <glossdef>
4134 <para>
4135 Causes the named class to be inherited at
4136 this point during parsing.
4137 The variable is only valid in configuration files.
4138 </para>
4139 </glossdef>
4140 </glossentry>
4141
4142 <glossentry id='var-INHERIT_DISTRO'><glossterm>INHERIT_DISTRO</glossterm>
4143 <glossdef>
4144 <para>
4145 Lists classes that will be inherited at the
4146 distribution level.
4147 It is unlikely that you want to edit this variable.
4148 </para>
4149
4150 <para>
4151 The default value of the variable is set as follows in the
4152 <filename>meta/conf/distro/defaultsetup.conf</filename>
4153 file:
4154 <literallayout class='monospaced'>
4155 INHERIT_DISTRO ?= "debian devshell sstate license"
4156 </literallayout>
4157 </para>
4158 </glossdef>
4159 </glossentry>
4160
4161 <glossentry id='var-INITRAMFS_FSTYPES'><glossterm>INITRAMFS_FSTYPES</glossterm>
4162 <glossdef>
4163 <para>
4164 Defines the format for the output image of an initial
4165 RAM disk (initramfs), which is used during boot.
4166 Supported formats are the same as those supported by the
4167 <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
4168 variable.
4169 </para>
4170 </glossdef>
4171 </glossentry>
4172
4173 <glossentry id='var-INITRAMFS_IMAGE'><glossterm>INITRAMFS_IMAGE</glossterm>
4174 <glossdef>
4175 <para>
4176 Causes the OpenEmbedded build system to build an additional
4177 recipe as a dependency to your root filesystem recipe
4178 (e.g. <filename>core-image-sato</filename>).
4179 The additional recipe is used to create an initial RAM disk
4180 (initramfs) that might be needed during the initial boot of
4181 the target system to accomplish such things as loading
4182 kernel modules prior to mounting the root file system.
4183 </para>
4184
4185 <para>
4186 When you set the variable, specify the name of the
4187 initramfs you want created.
4188 The following example, which is set in the
4189 <filename>local.conf</filename> configuration file, causes
4190 a separate recipe to be created that results in an
4191 initramfs image named
4192 <filename>core-image-sato-initramfs.bb</filename> to be
4193 created:
4194 <literallayout class='monospaced'>
4195 INITRAMFS_IMAGE = "core-image-minimal-initramfs"
4196 </literallayout>
4197 By default, the
4198 <link linkend='ref-classes-kernel'><filename>kernel</filename></link>
4199 class sets this variable to a null string as follows:
4200 <literallayout class='monospaced'>
4201 INITRAMFS_IMAGE = ""
4202 </literallayout>
4203 </para>
4204
4205 <para>
4206 See the
4207 <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/poky/tree/meta-yocto/conf/local.conf.sample.extended'><filename>local.conf.sample.extended</filename></ulink>
4208 file for additional information.
4209 You can also reference the
4210 <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/poky/tree/meta/classes/kernel.bbclass'><filename>kernel.bbclass</filename></ulink>
4211 file to see how the variable is used.
4212 </para>
4213 </glossdef>
4214 </glossentry>
4215
4216 <glossentry id='var-INITRAMFS_IMAGE_BUNDLE'><glossterm>INITRAMFS_IMAGE_BUNDLE</glossterm>
4217 <glossdef>
4218 <para>
4219 Controls whether or not the image recipe specified by
4220 <link linkend='var-INITRAMFS_IMAGE'><filename>INITRAMFS_IMAGE</filename></link>
4221 is run through an extra pass during kernel compilation
4222 in order to build a single binary that contains both the
4223 kernel image and the initial RAM disk (initramfs).
4224 Using an extra compilation pass ensures that when a kernel
4225 attempts to use an initramfs, it does not encounter
4226 circular dependencies should the initramfs include kernel
4227 modules.
4228 </para>
4229
4230 <para>
4231 The combined binary is deposited into the
4232 <filename>tmp/deploy</filename> directory, which is part
4233 of the
4234 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
4235 </para>
4236
4237 <para>
4238 Setting the variable to "1" in a configuration file causes
4239 the OpenEmbedded build system to make the extra pass during
4240 kernel compilation:
4241 <literallayout class='monospaced'>
4242 INITRAMFS_IMAGE_BUNDLE = "1"
4243 </literallayout>
4244 By default, the
4245 <link linkend='ref-classes-kernel'><filename>kernel</filename></link>
4246 class sets this variable to a null string as follows:
4247 <literallayout class='monospaced'>
4248 INITRAMFS_IMAGE_BUNDLE = ""
4249 </literallayout>
4250 <note>
4251 You must set the
4252 <filename>INITRAMFS_IMAGE_BUNDLE</filename> variable in
4253 a configuration file.
4254 You cannot set the variable in a recipe file.
4255 </note>
4256 See the
4257 <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/poky/tree/meta-yocto/conf/local.conf.sample.extended'><filename>local.conf.sample.extended</filename></ulink>
4258 file for additional information.
4259 </para>
4260 </glossdef>
4261 </glossentry>
4262
4263 <glossentry id='var-INITRD'><glossterm>INITRD</glossterm>
4264 <glossdef>
4265 <para>
4266 Indicates list of filesystem images to concatenate and use
4267 as an initial RAM disk (<filename>initrd</filename>).
4268 </para>
4269
4270 <para>
4271 The <filename>INITRD</filename> variable is an optional
4272 variable used with the
4273 <link linkend='ref-classes-bootimg'><filename>bootimg</filename></link>
4274 class.
4275 </para>
4276 </glossdef>
4277 </glossentry>
4278
4279 <glossentry id='var-INITRD_IMAGE'><glossterm>INITRD_IMAGE</glossterm>
4280 <glossdef>
4281 <para>
4282 When building a "live" bootable image (i.e. when
4283 <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
4284 contains "live"), <filename>INITRD_IMAGE</filename>
4285 specifies the image recipe that should be built
4286 to provide the initial RAM disk image.
4287 The default value is "core-image-minimal-initramfs".
4288 </para>
4289
4290 <para>
4291 See the
4292 <link linkend='ref-classes-image-live'><filename>image-live</filename></link>
4293 class for more information.
4294 </para>
4295 </glossdef>
4296 </glossentry>
4297
4298 <glossentry id='var-INITSCRIPT_NAME'><glossterm>INITSCRIPT_NAME</glossterm>
4299 <glossdef>
4300 <para>
4301 The filename of the initialization script as installed to
4302 <filename>${sysconfdir}/init.d</filename>.
4303 </para>
4304 <para>
4305 This variable is used in recipes when using <filename>update-rc.d.bbclass</filename>.
4306 The variable is mandatory.
4307 </para>
4308 </glossdef>
4309 </glossentry>
4310
4311 <glossentry id='var-INITSCRIPT_PACKAGES'><glossterm>INITSCRIPT_PACKAGES</glossterm>
4312 <glossdef>
4313 <para>
4314 A list of the packages that contain initscripts.
4315 If multiple packages are specified, you need to append the package name
4316 to the other <filename>INITSCRIPT_*</filename> as an override.</para>
4317 <para>
4318 This variable is used in recipes when using <filename>update-rc.d.bbclass</filename>.
4319 The variable is optional and defaults to the
4320 <link linkend='var-PN'><filename>PN</filename></link> variable.
4321 </para>
4322 </glossdef>
4323 </glossentry>
4324
4325 <glossentry id='var-INITSCRIPT_PARAMS'><glossterm>INITSCRIPT_PARAMS</glossterm>
4326 <glossdef>
4327 <para>
4328 Specifies the options to pass to <filename>update-rc.d</filename>.
4329 Here is an example:
4330 <literallayout class='monospaced'>
4331 INITSCRIPT_PARAMS = "start 99 5 2 . stop 20 0 1 6 ."
4332 </literallayout>
4333 In this example, the script has a runlevel of 99,
4334 starts the script in initlevels 2 and 5, and
4335 stops the script in levels 0, 1 and 6.
4336 </para>
4337 <para>
4338 The variable's default value is "defaults", which is
4339 set in the
4340 <link linkend='ref-classes-update-rc.d'><filename>update-rc.d</filename></link>
4341 class.
4342 </para>
4343 <para>
4344 The value in
4345 <filename>INITSCRIPT_PARAMS</filename> is passed through
4346 to the <filename>update-rc.d</filename> command.
4347 For more information on valid parameters, please see the
4348 <filename>update-rc.d</filename> manual page at
4349 <ulink url='http://www.tin.org/bin/man.cgi?section=8&amp;topic=update-rc.d'></ulink>.
4350 </para>
4351 </glossdef>
4352 </glossentry>
4353
4354 <glossentry id='var-INSANE_SKIP'><glossterm>INSANE_SKIP</glossterm>
4355 <glossdef>
4356 <para>
4357 Specifies the QA checks to skip for a specific package
4358 within a recipe.
4359 For example, to skip the check for symbolic link
4360 <filename>.so</filename> files in the main package of a
4361 recipe, add the following to the recipe.
4362 The package name override must be used, which in this
4363 example is <filename>${PN}</filename>:
4364 <literallayout class='monospaced'>
4365 INSANE_SKIP_${PN} += "dev-so"
4366 </literallayout>
4367 </para>
4368 <para>
4369 See the "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
4370 section for a list of the valid QA checks you can
4371 specify using this variable.
4372 </para>
4373 </glossdef>
4374 </glossentry>
4375
4376 <glossentry id='var-IPK_FEED_URIS'><glossterm>IPK_FEED_URIS</glossterm>
4377 <glossdef>
4378 <para>
4379 When the IPK backend is in use and package management
4380 is enabled on the target, you can use this variable to
4381 set up <filename>opkg</filename> in the target image
4382 to point to package feeds on a nominated server.
4383 Once the feed is established, you can perform
4384 installations or upgrades using the package manager
4385 at runtime.
4386 </para>
4387 </glossdef>
4388 </glossentry>
4389
4390<!--
4391 <glossentry id='var-INTERCEPT_DIR'><glossterm>INTERCEPT_DIR</glossterm>
4392 <glossdef>
4393 <para>
4394 An environment variable that defines the directory where
4395 post installation hooks are installed for the
4396 post install environment.
4397 This variable is fixed as follows:
4398 <literallayout class='monospaced'>
4399 ${WORKDIR}/intercept_scripts
4400 </literallayout>
4401 </para>
4402
4403 <para>
4404 After installation of a target's root filesystem,
4405 post installation scripts, which are essentially bash scripts,
4406 are all executed just a single time.
4407 Limiting execution of these scripts minimizes installation
4408 time that would be lengthened due to certain packages
4409 triggering redundant operations.
4410 For example, consider the installation of font packages
4411 as a common example.
4412 Without limiting the execution of post installation scripts,
4413 all font directories would be rescanned to create the
4414 cache after each individual font package was installed.
4415 </para>
4416
4417 <para>
4418 Do not edit the <filename>INTERCEPT_DIR</filename>
4419 variable.
4420 </para>
4421 </glossdef>
4422 </glossentry>
4423-->
4424
4425 </glossdiv>
4426
4427<!-- <glossdiv id='var-glossary-j'><title>J</title>-->
4428<!-- </glossdiv>-->
4429
4430 <glossdiv id='var-glossary-k'><title>K</title>
4431
4432 <glossentry id='var-KARCH'><glossterm>KARCH</glossterm>
4433 <glossdef>
4434 <para>
4435 Defines the kernel architecture used when assembling
4436 the configuration.
4437 Architectures supported for this release are:
4438 <literallayout class='monospaced'>
4439 powerpc
4440 i386
4441 x86_64
4442 arm
4443 qemu
4444 mips
4445 </literallayout>
4446 </para>
4447
4448 <para>
4449 You define the <filename>KARCH</filename> variable in the
4450 <ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#bsp-descriptions'>BSP Descriptions</ulink>.
4451 </para>
4452 </glossdef>
4453 </glossentry>
4454
4455 <glossentry id='var-KBRANCH'><glossterm>KBRANCH</glossterm>
4456 <glossdef>
4457 <para>
4458 A regular expression used by the build process to explicitly
4459 identify the kernel branch that is validated, patched
4460 and configured during a build.
4461 The <filename>KBRANCH</filename> variable is optional.
4462 You can use it to trigger checks to ensure the exact kernel
4463 branch you want is being used by the build process.
4464 </para>
4465
4466 <para>
4467 Values for this variable are set in the kernel's recipe
4468 file and the kernel's append file.
4469 For example, if you are using the Yocto Project kernel that
4470 is based on the Linux 3.10 kernel, the kernel recipe file
4471 is the
4472 <filename>meta/recipes-kernel/linux/linux-yocto_3.10.bb</filename>
4473 file.
4474 Following is the default value for <filename>KBRANCH</filename>
4475 and the default override for the architectures the Yocto
4476 Project supports:
4477 <literallayout class='monospaced'>
4478 KBRANCH_DEFAULT = "standard/base"
4479 KBRANCH = "${KBRANCH_DEFAULT}"
4480 </literallayout>
4481 This branch exists in the <filename>linux-yocto-3.10</filename>
4482 kernel Git repository
4483 <ulink url='&YOCTO_GIT_URL;/cgit.cgi/linux-yocto-3.10/refs/heads'></ulink>.
4484 </para>
4485
4486 <para>
4487 This variable is also used from the kernel's append file
4488 to identify the kernel branch specific to a particular
4489 machine or target hardware.
4490 The kernel's append file is located in the BSP layer for
4491 a given machine.
4492 For example, the kernel append file for the Crown Bay BSP is in the
4493 <filename>meta-intel</filename> Git repository and is named
4494 <filename>meta-crownbay/recipes-kernel/linux/linux-yocto_3.10.bbappend</filename>.
4495 Here are the related statements from the append file:
4496 <literallayout class='monospaced'>
4497 COMPATIBLE_MACHINE_crownbay = "crownbay"
4498 KMACHINE_crownbay = "crownbay"
4499 KBRANCH_crownbay = "standard/crownbay"
4500 KERNEL_FEATURES_append_crownbay = " features/drm-emgd/drm-emgd-1.18 cfg/vesafb"
4501
4502 COMPATIBLE_MACHINE_crownbay-noemgd = "crownbay-noemgd"
4503 KMACHINE_crownbay-noemgd = "crownbay"
4504 KBRANCH_crownbay-noemgd = "standard/crownbay"
4505 KERNEL_FEATURES_append_crownbay-noemgd = " cfg/vesafb"
4506 </literallayout>
4507 The <filename>KBRANCH_*</filename> statements identify
4508 the kernel branch to use when building for the Crown
4509 Bay BSP.
4510 In this case there are two identical statements: one
4511 for each type of Crown Bay machine.
4512 </para>
4513 </glossdef>
4514 </glossentry>
4515
4516 <glossentry id='var-KBRANCH_DEFAULT'><glossterm>KBRANCH_DEFAULT</glossterm>
4517 <glossdef>
4518 <para>
4519 Defines the Linux kernel source repository's default
4520 branch used to build the Linux kernel.
4521 The <filename>KBRANCH_DEFAULT</filename> value is
4522 the default value for
4523 <link linkend='var-KBRANCH'><filename>KBRANCH</filename></link>.
4524 Unless you specify otherwise,
4525 <filename>KBRANCH_DEFAULT</filename> initializes to
4526 "master".
4527 </para>
4528 </glossdef>
4529 </glossentry>
4530
4531 <glossentry id='var-KERNEL_EXTRA_ARGS'><glossterm>KERNEL_EXTRA_ARGS</glossterm>
4532 <glossdef>
4533 <para>
4534 Specifies additional <filename>make</filename>
4535 command-line arguments the OpenEmbedded build system
4536 passes on when compiling the kernel.
4537 </para>
4538 </glossdef>
4539 </glossentry>
4540
4541 <glossentry id='var-KERNEL_FEATURES'><glossterm>KERNEL_FEATURES</glossterm>
4542 <glossdef>
4543 <para>Includes additional metadata from the Yocto Project kernel Git repository.
4544 In the OpenEmbedded build system, the default Board Support Packages (BSPs)
4545 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
4546 is provided through
4547 the <link linkend='var-KMACHINE'><filename>KMACHINE</filename></link>
4548 and <link linkend='var-KBRANCH'><filename>KBRANCH</filename></link> variables.
4549 You can use the <filename>KERNEL_FEATURES</filename> variable to further
4550 add metadata for all BSPs.</para>
4551 <para>The metadata you add through this variable includes config fragments and
4552 features descriptions,
4553 which usually includes patches as well as config fragments.
4554 You typically override the <filename>KERNEL_FEATURES</filename> variable
4555 for a specific machine.
4556 In this way, you can provide validated, but optional, sets of kernel
4557 configurations and features.</para>
4558 <para>For example, the following adds <filename>netfilter</filename> to all
4559 the Yocto Project kernels and adds sound support to the <filename>qemux86</filename>
4560 machine:
4561 <literallayout class='monospaced'>
4562 # Add netfilter to all linux-yocto kernels
4563 KERNEL_FEATURES="features/netfilter"
4564
4565 # Add sound support to the qemux86 machine
4566 KERNEL_FEATURES_append_qemux86=" cfg/sound"
4567 </literallayout></para>
4568 </glossdef>
4569 </glossentry>
4570
4571 <glossentry id='var-KERNEL_IMAGE_BASE_NAME'><glossterm>KERNEL_IMAGE_BASE_NAME</glossterm>
4572 <glossdef>
4573 <para>
4574 The base name of the kernel image.
4575 This variable is set in the
4576 <link linkend='ref-classes-kernel'>kernel</link> class
4577 as follows:
4578 <literallayout class='monospaced'>
4579 KERNEL_IMAGE_BASE_NAME ?= "${KERNEL_IMAGETYPE}-${PKGE}-${PKGV}-${PKGR}-${MACHINE}-${DATETIME}"
4580 </literallayout>
4581 See the
4582 <link linkend='var-KERNEL_IMAGETYPE'><filename>KERNEL_IMAGETYPE</filename></link>,
4583 <link linkend='var-PKGE'><filename>PKGE</filename></link>,
4584 <link linkend='var-PKGV'><filename>PKGV</filename></link>,
4585 <link linkend='var-PKGR'><filename>PKGR</filename></link>,
4586 <link linkend='var-MACHINE'><filename>MACHINE</filename></link>,
4587 and
4588 <link linkend='var-DATETIME'><filename>DATETIME</filename></link>
4589 variables for additional information.
4590 </para>
4591 </glossdef>
4592 </glossentry>
4593
4594 <glossentry id='var-KERNEL_IMAGETYPE'><glossterm>KERNEL_IMAGETYPE</glossterm>
4595 <glossdef>
4596 <para>The type of kernel to build for a device, usually set by the
4597 machine configuration files and defaults to "zImage".
4598 This variable is used
4599 when building the kernel and is passed to <filename>make</filename> as the target to
4600 build.</para>
4601 </glossdef>
4602 </glossentry>
4603
4604 <glossentry id='var-KERNEL_MODULE_AUTOLOAD'><glossterm>KERNEL_MODULE_AUTOLOAD</glossterm>
4605 <glossdef>
4606 <para>
4607 Lists kernel modules that need to be auto-loaded during
4608 boot.
4609 <note>
4610 This variable replaces the deprecated
4611 <link linkend='var-module_autoload'><filename>module_autoload</filename></link>
4612 variable.
4613 </note>
4614 </para>
4615
4616 <para>
4617 You can use the <filename>KERNEL_MODULE_AUTOLOAD</filename>
4618 variable anywhere that it can be
4619 recognized by the kernel recipe or by an out-of-tree kernel
4620 module recipe (e.g. a machine configuration file, a
4621 distribution configuration file, an append file for the
4622 recipe, or the recipe itself).
4623 </para>
4624
4625 <para>
4626 Specify it as follows:
4627 <literallayout class='monospaced'>
4628 KERNEL_MODULE_AUTOLOAD += "<replaceable>module_name1</replaceable> <replaceable>module_name2</replaceable> <replaceable>module_name3</replaceable>"
4629 </literallayout>
4630 </para>
4631
4632 <para>
4633 Including <filename>KERNEL_MODULE_AUTOLOAD</filename> causes
4634 the OpenEmbedded build system to populate the
4635 <filename>/etc/modules-load.d/modname.conf</filename>
4636 file with the list of modules to be auto-loaded on boot.
4637 The modules appear one-per-line in the file.
4638 Here is an example of the most common use case:
4639 <literallayout class='monospaced'>
4640 KERNEL_MODULE_AUTOLOAD += "<replaceable>module_name</replaceable>"
4641 </literallayout>
4642 </para>
4643
4644 <para>
4645 For information on how to populate the
4646 <filename>modname.conf</filename> file with
4647 <filename>modprobe.d</filename> syntax lines, see the
4648 <link linkend='var-KERNEL_MODULE_PROBECONF'><filename>KERNEL_MODULE_PROBECONF</filename></link>
4649 variable.
4650 </para>
4651 </glossdef>
4652 </glossentry>
4653
4654 <glossentry id='var-KERNEL_MODULE_PROBECONF'><glossterm>KERNEL_MODULE_PROBECONF</glossterm>
4655 <glossdef>
4656 <para>
4657 Provides a list of modules for which the OpenEmbedded
4658 build system expects to find
4659 <filename>module_conf_</filename><replaceable>modname</replaceable>
4660 values that specify configuration for each of the modules.
4661 For information on how to provide those module
4662 configurations, see the
4663 <link linkend='var-module_conf'><filename>module_conf_*</filename></link>
4664 variable.
4665 </para>
4666 </glossdef>
4667 </glossentry>
4668
4669 <glossentry id='var-KERNEL_PATH'><glossterm>KERNEL_PATH</glossterm>
4670 <glossdef>
4671 <para>
4672 The location of the kernel sources.
4673 This variable is set to the value of the
4674 <link linkend='var-STAGING_KERNEL_DIR'><filename>STAGING_KERNEL_DIR</filename></link>
4675 within the
4676 <link linkend='ref-classes-module'><filename>module</filename></link>
4677 class.
4678 For information on how this variable is used, see the
4679 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#incorporating-out-of-tree-modules'>Incorporating Out-of-Tree Modules</ulink>"
4680 section.
4681 </para>
4682
4683 <para>
4684 To help maximize compatibility with out-of-tree drivers
4685 used to build modules, the OpenEmbedded build system also
4686 recognizes and uses the
4687 <link linkend='var-KERNEL_SRC'><filename>KERNEL_SRC</filename></link>
4688 variable, which is identical to the
4689 <filename>KERNEL_PATH</filename> variable.
4690 Both variables are common variables used by external
4691 Makefiles to point to the kernel source directory.
4692 </para>
4693 </glossdef>
4694 </glossentry>
4695
4696 <glossentry id='var-KERNEL_SRC'><glossterm>KERNEL_SRC</glossterm>
4697 <glossdef>
4698 <para>
4699 The location of the kernel sources.
4700 This variable is set to the value of the
4701 <link linkend='var-STAGING_KERNEL_DIR'><filename>STAGING_KERNEL_DIR</filename></link>
4702 within the
4703 <link linkend='ref-classes-module'><filename>module</filename></link>
4704 class.
4705 For information on how this variable is used, see the
4706 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#incorporating-out-of-tree-modules'>Incorporating Out-of-Tree Modules</ulink>"
4707 section.
4708 </para>
4709
4710 <para>
4711 To help maximize compatibility with out-of-tree drivers
4712 used to build modules, the OpenEmbedded build system also
4713 recognizes and uses the
4714 <link linkend='var-KERNEL_PATH'><filename>KERNEL_PATH</filename></link>
4715 variable, which is identical to the
4716 <filename>KERNEL_SRC</filename> variable.
4717 Both variables are common variables used by external
4718 Makefiles to point to the kernel source directory.
4719 </para>
4720 </glossdef>
4721 </glossentry>
4722
4723 <glossentry id='var-KFEATURE_DESCRIPTION'><glossterm>KFEATURE_DESCRIPTION</glossterm>
4724 <glossdef>
4725 <para>
4726 Provides a short description of a configuration fragment.
4727 You use this variable in the <filename>.scc</filename>
4728 file that describes a configuration fragment file.
4729 Here is the variable used in a file named
4730 <filename>smp.scc</filename> to describe SMP being
4731 enabled:
4732 <literallayout class='monospaced'>
4733 define KFEATURE_DESCRIPTION "Enable SMP"
4734 </literallayout>
4735 </para>
4736 </glossdef>
4737 </glossentry>
4738
4739 <glossentry id='var-KMACHINE'><glossterm>KMACHINE</glossterm>
4740 <glossdef>
4741 <para>
4742 The machine as known by the kernel.
4743 Sometimes the machine name used by the kernel does not match the machine name
4744 used by the OpenEmbedded build system.
4745 For example, the machine name that the OpenEmbedded build system understands as
4746 <filename>qemuarm</filename> goes by a different name in the Linux Yocto kernel.
4747 The kernel understands that machine as <filename>arm_versatile926ejs</filename>.
4748 For cases like these, the <filename>KMACHINE</filename> variable maps the
4749 kernel machine name to the OpenEmbedded build system machine name.
4750 </para>
4751
4752 <para>
4753 Kernel machine names are initially defined in the
4754 Yocto Linux Kernel's <filename>meta</filename> branch.
4755 From the <filename>meta</filename> branch, look in
4756 the <filename>meta/cfg/kernel-cache/bsp/&lt;bsp_name&gt;/&lt;bsp-name&gt;-&lt;kernel-type&gt;.scc</filename> file.
4757 For example, from the <filename>meta</filename> branch in the
4758 <filename>linux-yocto-3.0</filename> kernel, the
4759 <filename>meta/cfg/kernel-cache/bsp/cedartrail/cedartrail-standard.scc</filename> file
4760 has the following:
4761 <literallayout class='monospaced'>
4762 define KMACHINE cedartrail
4763 define KTYPE standard
4764 define KARCH i386
4765
4766 include ktypes/standard
4767 branch cedartrail
4768
4769 include cedartrail.scc
4770 </literallayout>
4771 You can see that the kernel understands the machine name for
4772 the Cedar Trail Board Support Package (BSP) as
4773 <filename>cedartrail</filename>.
4774 </para>
4775
4776 <para>
4777 If you look in the Cedar Trail BSP layer in the
4778 <filename>meta-intel</filename>
4779 <ulink url='&YOCTO_DOCS_DEV_URL;#source-repositories'>Source Repositories</ulink>
4780 at <filename>meta-cedartrail/recipes-kernel/linux/linux-yocto_3.0.bbappend</filename>,
4781 you will find the following statements among others:
4782 <literallayout class='monospaced'>
4783 COMPATIBLE_MACHINE_cedartrail = "cedartrail"
4784 KMACHINE_cedartrail = "cedartrail"
4785 KBRANCH_cedartrail = "yocto/standard/cedartrail"
4786 KERNEL_FEATURES_append_cedartrail += "bsp/cedartrail/cedartrail-pvr-merge.scc"
4787 KERNEL_FEATURES_append_cedartrail += "cfg/efi-ext.scc"
4788
4789 COMPATIBLE_MACHINE_cedartrail-nopvr = "cedartrail"
4790 KMACHINE_cedartrail-nopvr = "cedartrail"
4791 KBRANCH_cedartrail-nopvr = "yocto/standard/cedartrail"
4792 KERNEL_FEATURES_append_cedartrail-nopvr += " cfg/smp.scc"
4793 </literallayout>
4794 The <filename>KMACHINE</filename> statements in the kernel's append file make sure that
4795 the OpenEmbedded build system and the Yocto Linux kernel understand the same machine
4796 names.
4797 </para>
4798
4799 <para>
4800 This append file uses two <filename>KMACHINE</filename> statements.
4801 The first is not really necessary but does ensure that the machine known to the
4802 OpenEmbedded build system as <filename>cedartrail</filename> maps to the machine
4803 in the kernel also known as <filename>cedartrail</filename>:
4804 <literallayout class='monospaced'>
4805 KMACHINE_cedartrail = "cedartrail"
4806 </literallayout>
4807 </para>
4808
4809 <para>
4810 The second statement is a good example of why the <filename>KMACHINE</filename> variable
4811 is needed.
4812 In this example, the OpenEmbedded build system uses the <filename>cedartrail-nopvr</filename>
4813 machine name to refer to the Cedar Trail BSP that does not support the proprietary
4814 PowerVR driver.
4815 The kernel, however, uses the machine name <filename>cedartrail</filename>.
4816 Thus, the append file must map the <filename>cedartrail-nopvr</filename> machine name to
4817 the kernel's <filename>cedartrail</filename> name:
4818 <literallayout class='monospaced'>
4819 KMACHINE_cedartrail-nopvr = "cedartrail"
4820 </literallayout>
4821 </para>
4822
4823 <para>
4824 BSPs that ship with the Yocto Project release provide all mappings between the Yocto
4825 Project kernel machine names and the OpenEmbedded machine names.
4826 Be sure to use the <filename>KMACHINE</filename> if you create a BSP and the machine
4827 name you use is different than that used in the kernel.
4828 </para>
4829 </glossdef>
4830 </glossentry>
4831
4832 <glossentry id='var-KTYPE'><glossterm>KTYPE</glossterm>
4833 <glossdef>
4834 <para>
4835 Defines the kernel type to be used in assembling the
4836 configuration.
4837 The linux-yocto recipes define "standard", "tiny",
4838 and "preempt-rt" kernel types.
4839 See the
4840 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#kernel-types'>Kernel Types</ulink>"
4841 section in the Yocto Project Linux Kernel Development
4842 Manual for more information on kernel types.
4843 </para>
4844
4845 <para>
4846 You define the <filename>KTYPE</filename> variable in the
4847 <ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#bsp-descriptions'>BSP Descriptions</ulink>.
4848 The value you use must match the value used for the
4849 <link linkend='var-LINUX_KERNEL_TYPE'><filename>LINUX_KERNEL_TYPE</filename></link>
4850 value used by the kernel recipe.
4851 </para>
4852 </glossdef>
4853 </glossentry>
4854 </glossdiv>
4855
4856 <glossdiv id='var-glossary-l'><title>L</title>
4857
4858 <glossentry id='var-LABELS'><glossterm>LABELS</glossterm>
4859 <glossdef>
4860 <para>
4861 Provides a list of targets for automatic configuration.
4862 </para>
4863
4864 <para>
4865 See the
4866 <link linkend='ref-classes-grub-efi'><filename>grub-efi</filename></link>
4867 class for more information on how this variable is used.
4868 </para>
4869 </glossdef>
4870 </glossentry>
4871
4872 <glossentry id='var-LAYERDEPENDS'><glossterm>LAYERDEPENDS</glossterm>
4873 <glossdef>
4874 <para>Lists the layers that this recipe depends upon, separated by spaces.
4875 Optionally, you can specify a specific layer version for a dependency
4876 by adding it to the end of the layer name with a colon, (e.g. "anotherlayer:3"
4877 to be compared against
4878 <link linkend='var-LAYERVERSION'><filename>LAYERVERSION</filename></link><filename>_anotherlayer</filename>
4879 in this case).
4880 An error will be produced if any dependency is missing or
4881 the version numbers do not match exactly (if specified).
4882 This variable is used in the <filename>conf/layer.conf</filename> file
4883 and must be suffixed with the name of the specific layer (e.g.
4884 <filename>LAYERDEPENDS_mylayer</filename>).</para>
4885 </glossdef>
4886 </glossentry>
4887
4888 <glossentry id='var-LAYERDIR'><glossterm>LAYERDIR</glossterm>
4889 <glossdef>
4890 <para>When used inside the <filename>layer.conf</filename> configuration
4891 file, this variable provides the path of the current layer.
4892 This variable is not available outside of <filename>layer.conf</filename>
4893 and references are expanded immediately when parsing of the file completes.</para>
4894 </glossdef>
4895 </glossentry>
4896
4897 <glossentry id='var-LAYERVERSION'><glossterm>LAYERVERSION</glossterm>
4898 <glossdef>
4899 <para>Optionally specifies the version of a layer as a single number.
4900 You can use this within
4901 <link linkend='var-LAYERDEPENDS'><filename>LAYERDEPENDS</filename></link>
4902 for another layer in order to depend on a specific version
4903 of the layer.
4904 This variable is used in the <filename>conf/layer.conf</filename> file
4905 and must be suffixed with the name of the specific layer (e.g.
4906 <filename>LAYERVERSION_mylayer</filename>).</para>
4907 </glossdef>
4908 </glossentry>
4909
4910 <glossentry id='var-LDFLAGS'><glossterm>LDFLAGS</glossterm>
4911 <glossdef>
4912 <para>
4913 Specifies the flags to pass to the linker.
4914 This variable is exported to an environment
4915 variable and thus made visible to the software being
4916 built during the compilation step.
4917 </para>
4918
4919 <para>
4920 Default initialization for <filename>LDFLAGS</filename>
4921 varies depending on what is being built:
4922 <itemizedlist>
4923 <listitem><para>
4924 <link linkend='var-TARGET_LDFLAGS'><filename>TARGET_LDFLAGS</filename></link>
4925 when building for the target
4926 </para></listitem>
4927 <listitem><para>
4928 <link linkend='var-BUILD_LDFLAGS'><filename>BUILD_LDFLAGS</filename></link>
4929 when building for the build host (i.e.
4930 <filename>-native</filename>)
4931 </para></listitem>
4932 <listitem><para>
4933 <link linkend='var-BUILDSDK_LDFLAGS'><filename>BUILDSDK_LDFLAGS</filename></link>
4934 when building for an SDK (i.e.
4935 <filename>nativesdk-</filename>)
4936 </para></listitem>
4937 </itemizedlist>
4938 </para>
4939 </glossdef>
4940 </glossentry>
4941
4942 <glossentry id='var-LEAD_SONAME'><glossterm>LEAD_SONAME</glossterm>
4943 <glossdef>
4944 <para>
4945 Specifies the lead (or primary) compiled library file
4946 (<filename>.so</filename>) that the
4947 <link linkend='ref-classes-debian'><filename>debian</filename></link>
4948 class applies its naming policy to given a recipe that
4949 packages multiple libraries.
4950 </para>
4951
4952 <para>
4953 This variable works in conjunction with the
4954 <filename>debian</filename> class.
4955 </para>
4956 </glossdef>
4957 </glossentry>
4958
4959 <glossentry id='var-LIC_FILES_CHKSUM'><glossterm>LIC_FILES_CHKSUM</glossterm>
4960 <glossdef>
4961 <para>Checksums of the license text in the recipe source code.</para>
4962 <para>This variable tracks changes in license text of the source
4963 code files.
4964 If the license text is changed, it will trigger a build
4965 failure, which gives the developer an opportunity to review any
4966 license change.</para>
4967 <para>
4968 This variable must be defined for all recipes (unless
4969 <link linkend='var-LICENSE'><filename>LICENSE</filename></link>
4970 is set to "CLOSED").</para>
4971 <para>For more information, see the
4972 "<link linkend='usingpoky-configuring-LIC_FILES_CHKSUM'>
4973 Tracking License Changes</link>" section.</para>
4974 </glossdef>
4975 </glossentry>
4976
4977 <glossentry id='var-LICENSE'><glossterm>LICENSE</glossterm>
4978 <glossdef>
4979 <para>
4980 The list of source licenses for the recipe.
4981 Follow these rules:
4982 <itemizedlist>
4983 <listitem><para>Do not use spaces within individual
4984 license names.</para></listitem>
4985 <listitem><para>Separate license names using
4986 | (pipe) when there is a choice between licenses.
4987 </para></listitem>
4988 <listitem><para>Separate license names using
4989 &amp; (ampersand) when multiple licenses exist
4990 that cover different parts of the source.
4991 </para></listitem>
4992 <listitem><para>You can use spaces between license
4993 names.</para></listitem>
4994 <listitem><para>For standard licenses, use the names
4995 of the files in
4996 <filename>meta/files/common-licenses/</filename>
4997 or the
4998 <link linkend='var-SPDXLICENSEMAP'><filename>SPDXLICENSEMAP</filename></link>
4999 flag names defined in
5000 <filename>meta/conf/licenses.conf</filename>.
5001 </para></listitem>
5002 </itemizedlist>
5003 </para>
5004
5005 <para>
5006 Here are some examples:
5007 <literallayout class='monospaced'>
5008 LICENSE = "LGPLv2.1 | GPLv3"
5009 LICENSE = "MPL-1 &amp; LGPLv2.1"
5010 LICENSE = "GPLv2+"
5011 </literallayout>
5012 The first example is from the recipes for Qt, which the user
5013 may choose to distribute under either the LGPL version
5014 2.1 or GPL version 3.
5015 The second example is from Cairo where two licenses cover
5016 different parts of the source code.
5017 The final example is from <filename>sysstat</filename>,
5018 which presents a single license.
5019 </para>
5020
5021 <para>
5022 You can also specify licenses on a per-package basis to
5023 handle situations where components of the output have
5024 different licenses.
5025 For example, a piece of software whose code is
5026 licensed under GPLv2 but has accompanying documentation
5027 licensed under the GNU Free Documentation License 1.2 could
5028 be specified as follows:
5029 <literallayout class='monospaced'>
5030 LICENSE = "GFDL-1.2 &amp; GPLv2"
5031 LICENSE_${PN} = "GPLv2"
5032 LICENSE_${PN}-doc = "GFDL-1.2"
5033 </literallayout>
5034 </para>
5035 </glossdef>
5036 </glossentry>
5037
5038 <glossentry id='var-LICENSE_FLAGS'><glossterm>LICENSE_FLAGS</glossterm>
5039 <glossdef>
5040 <para>
5041 Specifies additional flags for a recipe you must
5042 whitelist through
5043 <link linkend='var-LICENSE_FLAGS_WHITELIST'><filename>LICENSE_FLAGS_WHITELIST</filename></link>
5044 in order to allow the recipe to be built.
5045 When providing multiple flags, separate them with
5046 spaces.
5047 </para>
5048
5049 <para>
5050 This value is independent of
5051 <link linkend='var-LICENSE'><filename>LICENSE</filename></link>
5052 and is typically used to mark recipes that might
5053 require additional licenses in order to be used in a
5054 commercial product.
5055 For more information, see the
5056 "<link linkend='enabling-commercially-licensed-recipes'>Enabling Commercially Licensed Recipes</link>"
5057 section.
5058 </para>
5059 </glossdef>
5060 </glossentry>
5061
5062 <glossentry id='var-LICENSE_FLAGS_WHITELIST'><glossterm>LICENSE_FLAGS_WHITELIST</glossterm>
5063 <glossdef>
5064 <para>
5065 Lists license flags that when specified in
5066 <link linkend='var-LICENSE_FLAGS'><filename>LICENSE_FLAGS</filename></link>
5067 within a recipe should not prevent that recipe from being
5068 built.
5069 This practice is otherwise known as "whitelisting"
5070 license flags.
5071 For more information, see the
5072 <link linkend='enabling-commercially-licensed-recipes'>Enabling Commercially Licensed Recipes</link>"
5073 section.
5074 </para>
5075 </glossdef>
5076 </glossentry>
5077
5078 <glossentry id='var-LICENSE_PATH'><glossterm>LICENSE_PATH</glossterm>
5079 <glossdef>
5080 <para>Path to additional licenses used during the build.
5081 By default, the OpenEmbedded build system uses <filename>COMMON_LICENSE_DIR</filename>
5082 to define the directory that holds common license text used during the build.
5083 The <filename>LICENSE_PATH</filename> variable allows you to extend that
5084 location to other areas that have additional licenses:
5085 <literallayout class='monospaced'>
5086 LICENSE_PATH += "<replaceable>path-to-additional-common-licenses</replaceable>"
5087 </literallayout></para>
5088 </glossdef>
5089 </glossentry>
5090
5091 <glossentry id='var-LINUX_KERNEL_TYPE'><glossterm>LINUX_KERNEL_TYPE</glossterm>
5092 <glossdef>
5093 <para>
5094 Defines the kernel type to be used in assembling the
5095 configuration.
5096 The linux-yocto recipes define "standard", "tiny", and
5097 "preempt-rt" kernel types.
5098 See the
5099 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#kernel-types'>Kernel Types</ulink>"
5100 section in the Yocto Project Linux Kernel Development
5101 Manual for more information on kernel types.
5102 </para>
5103
5104 <para>
5105 If you do not specify a
5106 <filename>LINUX_KERNEL_TYPE</filename>, it defaults to
5107 "standard".
5108 Together with
5109 <link linkend='var-KMACHINE'><filename>KMACHINE</filename></link>,
5110 the <filename>LINUX_KERNEL_TYPE</filename> variable
5111 defines the search
5112 arguments used by the kernel tools to find the appropriate
5113 description within the kernel
5114 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
5115 with which to build out the sources and configuration.
5116 </para>
5117 </glossdef>
5118 </glossentry>
5119
5120 <glossentry id='var-LINUX_VERSION'><glossterm>LINUX_VERSION</glossterm>
5121 <glossdef>
5122 <para>The Linux version from <filename>kernel.org</filename>
5123 on which the Linux kernel image being built using the
5124 OpenEmbedded build system is based.
5125 You define this variable in the kernel recipe.
5126 For example, the <filename>linux-yocto-3.4.bb</filename>
5127 kernel recipe found in
5128 <filename>meta/recipes-kernel/linux</filename>
5129 defines the variables as follows:
5130 <literallayout class='monospaced'>
5131 LINUX_VERSION ?= "3.4.24"
5132 </literallayout>
5133 The <filename>LINUX_VERSION</filename> variable is used to
5134 define <link linkend='var-PV'><filename>PV</filename></link>
5135 for the recipe:
5136 <literallayout class='monospaced'>
5137 PV = "${LINUX_VERSION}+git${SRCPV}"
5138 </literallayout></para>
5139 </glossdef>
5140 </glossentry>
5141
5142 <glossentry id='var-LINUX_VERSION_EXTENSION'><glossterm>LINUX_VERSION_EXTENSION</glossterm>
5143 <glossdef>
5144 <para>A string extension compiled into the version
5145 string of the Linux kernel built with the OpenEmbedded
5146 build system.
5147 You define this variable in the kernel recipe.
5148 For example, the linux-yocto kernel recipes all define
5149 the variable as follows:
5150 <literallayout class='monospaced'>
5151 LINUX_VERSION_EXTENSION ?= "-yocto-${<link linkend='var-LINUX_KERNEL_TYPE'>LINUX_KERNEL_TYPE</link>}"
5152 </literallayout>
5153 Defining this variable essentially sets the
5154 Linux kernel configuration item
5155 <filename>CONFIG_LOCALVERSION</filename>, which is visible
5156 through the <filename>uname</filename> command.
5157 Here is an example that shows the extension assuming it
5158 was set as previously shown:
5159 <literallayout class='monospaced'>
5160 $ uname -r
5161 3.7.0-rc8-custom
5162 </literallayout>
5163 </para>
5164 </glossdef>
5165 </glossentry>
5166
5167 <glossentry id='var-LOG_DIR'><glossterm>LOG_DIR</glossterm>
5168 <glossdef>
5169 <para>
5170 Specifies the directory to which the OpenEmbedded build
5171 system writes overall log files.
5172 The default directory is <filename>${TMPDIR}/log</filename>.
5173 </para>
5174 <para>
5175 For the directory containing logs specific to each task,
5176 see the <link linkend='var-T'><filename>T</filename></link>
5177 variable.
5178 </para>
5179 </glossdef>
5180 </glossentry>
5181
5182 </glossdiv>
5183
5184 <glossdiv id='var-glossary-m'><title>M</title>
5185
5186 <glossentry id='var-MACHINE'><glossterm>MACHINE</glossterm>
5187 <glossdef>
5188 <para>
5189 Specifies the target device for which the image is built.
5190 You define <filename>MACHINE</filename> in the
5191 <filename>local.conf</filename> file found in the
5192 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
5193 By default, <filename>MACHINE</filename> is set to
5194 "qemux86", which is an x86-based architecture machine to
5195 be emulated using QEMU:
5196 <literallayout class='monospaced'>
5197 MACHINE ?= "qemux86"
5198 </literallayout>
5199 The variable corresponds to a machine configuration file of the
5200 same name, through which machine-specific configurations are set.
5201 Thus, when <filename>MACHINE</filename> is set to "qemux86" there
5202 exists the corresponding <filename>qemux86.conf</filename> machine
5203 configuration file, which can be found in the
5204 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
5205 in <filename>meta/conf/machine</filename>.
5206 </para>
5207
5208 <para>
5209 The list of machines supported by the Yocto Project as
5210 shipped include the following:
5211 <literallayout class='monospaced'>
5212 MACHINE ?= "qemuarm"
5213 MACHINE ?= "qemumips"
5214 MACHINE ?= "qemuppc"
5215 MACHINE ?= "qemux86"
5216 MACHINE ?= "qemux86-64"
5217 MACHINE ?= "genericx86"
5218 MACHINE ?= "genericx86-64"
5219 MACHINE ?= "beaglebone"
5220 MACHINE ?= "mpc8315e-rdb"
5221 MACHINE ?= "edgerouter"
5222 </literallayout>
5223 The last five are Yocto Project reference hardware boards, which
5224 are provided in the <filename>meta-yocto-bsp</filename> layer.
5225 <note>Adding additional Board Support Package (BSP) layers
5226 to your configuration adds new possible settings for
5227 <filename>MACHINE</filename>.
5228 </note>
5229 </para>
5230 </glossdef>
5231 </glossentry>
5232
5233 <glossentry id='var-MACHINE_ARCH'><glossterm>MACHINE_ARCH</glossterm>
5234 <glossdef>
5235 <para>
5236 Specifies the name of the machine-specific architecture.
5237 This variable is set automatically from
5238 <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
5239 or
5240 <link linkend='var-TUNE_PKGARCH'><filename>TUNE_PKGARCH</filename></link>.
5241 You should not hand-edit the
5242 <filename>MACHINE_ARCH</filename> variable.
5243 </para>
5244 </glossdef>
5245 </glossentry>
5246
5247 <glossentry id='var-MACHINE_ESSENTIAL_EXTRA_RDEPENDS'><glossterm>MACHINE_ESSENTIAL_EXTRA_RDEPENDS</glossterm>
5248 <glossdef>
5249 <para>
5250 A list of required machine-specific packages to install as part of
5251 the image being built.
5252 The build process depends on these packages being present.
5253 Furthermore, because this is a "machine essential" variable, the list of
5254 packages are essential for the machine to boot.
5255 The impact of this variable affects images based on
5256 <filename>packagegroup-core-boot</filename>,
5257 including the <filename>core-image-minimal</filename> image.
5258 </para>
5259 <para>
5260 This variable is similar to the
5261 <filename><link linkend='var-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS'>MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS</link></filename>
5262 variable with the exception that the image being built has a build
5263 dependency on the variable's list of packages.
5264 In other words, the image will not build if a file in this list is not found.
5265 </para>
5266 <para>
5267 As an example, suppose the machine for which you are building requires
5268 <filename>example-init</filename> to be run during boot to initialize the hardware.
5269 In this case, you would use the following in the machine's
5270 <filename>.conf</filename> configuration file:
5271 <literallayout class='monospaced'>
5272 MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "example-init"
5273 </literallayout>
5274 </para>
5275 </glossdef>
5276 </glossentry>
5277
5278 <glossentry id='var-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS'><glossterm>MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS</glossterm>
5279 <glossdef>
5280 <para>
5281 A list of recommended machine-specific packages to install as part of
5282 the image being built.
5283 The build process does not depend on these packages being present.
5284 However, because this is a "machine essential" variable, the list of
5285 packages are essential for the machine to boot.
5286 The impact of this variable affects images based on
5287 <filename>packagegroup-core-boot</filename>,
5288 including the <filename>core-image-minimal</filename> image.
5289 </para>
5290 <para>
5291 This variable is similar to the
5292 <filename><link linkend='var-MACHINE_ESSENTIAL_EXTRA_RDEPENDS'>MACHINE_ESSENTIAL_EXTRA_RDEPENDS</link></filename>
5293 variable with the exception that the image being built does not have a build
5294 dependency on the variable's list of packages.
5295 In other words, the image will still build if a package in this list is not found.
5296 Typically, this variable is used to handle essential kernel modules, whose
5297 functionality may be selected to be built into the kernel rather than as a module,
5298 in which case a package will not be produced.
5299 </para>
5300 <para>
5301 Consider an example where you have a custom kernel where a specific touchscreen
5302 driver is required for the machine to be usable.
5303 However, the driver can be built as a module or
5304 into the kernel depending on the kernel configuration.
5305 If the driver is built as a module, you want it to be installed.
5306 But, when the driver is built into the kernel, you still want the
5307 build to succeed.
5308 This variable sets up a "recommends" relationship so that in the latter case,
5309 the build will not fail due to the missing package.
5310 To accomplish this, assuming the package for the module was called
5311 <filename>kernel-module-ab123</filename>, you would use the
5312 following in the machine's <filename>.conf</filename> configuration
5313 file:
5314 <literallayout class='monospaced'>
5315 MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "kernel-module-ab123"
5316 </literallayout>
5317 </para>
5318 <para>
5319 Some examples of these machine essentials are flash, screen, keyboard, mouse,
5320 or touchscreen drivers (depending on the machine).
5321 </para>
5322 </glossdef>
5323 </glossentry>
5324
5325 <glossentry id='var-MACHINE_EXTRA_RDEPENDS'><glossterm>MACHINE_EXTRA_RDEPENDS</glossterm>
5326 <glossdef>
5327 <para>
5328 A list of machine-specific packages to install as part of the
5329 image being built that are not essential for the machine to boot.
5330 However, the build process for more fully-featured images
5331 depends on the packages being present.
5332 </para>
5333 <para>
5334 This variable affects all images based on
5335 <filename>packagegroup-base</filename>, which does not include the
5336 <filename>core-image-minimal</filename> or <filename>core-image-full-cmdline</filename>
5337 images.
5338 </para>
5339 <para>
5340 The variable is similar to the
5341 <filename><link linkend='var-MACHINE_EXTRA_RRECOMMENDS'>MACHINE_EXTRA_RRECOMMENDS</link></filename>
5342 variable with the exception that the image being built has a build
5343 dependency on the variable's list of packages.
5344 In other words, the image will not build if a file in this list is not found.
5345 </para>
5346 <para>
5347 An example is a machine that has WiFi capability but is not
5348 essential for the machine to boot the image.
5349 However, if you are building a more fully-featured image, you want to enable
5350 the WiFi.
5351 The package containing the firmware for the WiFi hardware is always
5352 expected to exist, so it is acceptable for the build process to depend upon
5353 finding the package.
5354 In this case, assuming the package for the firmware was called
5355 <filename>wifidriver-firmware</filename>, you would use the following in the
5356 <filename>.conf</filename> file for the machine:
5357 <literallayout class='monospaced'>
5358 MACHINE_EXTRA_RDEPENDS += "wifidriver-firmware"
5359 </literallayout>
5360 </para>
5361 </glossdef>
5362 </glossentry>
5363
5364 <glossentry id='var-MACHINE_EXTRA_RRECOMMENDS'><glossterm>MACHINE_EXTRA_RRECOMMENDS</glossterm>
5365 <glossdef>
5366 <para>
5367 A list of machine-specific packages to install as part of the
5368 image being built that are not essential for booting the machine.
5369 The image being built has no build dependency on this list of packages.
5370 </para>
5371 <para>
5372 This variable affects only images based on
5373 <filename>packagegroup-base</filename>, which does not include the
5374 <filename>core-image-minimal</filename> or <filename>core-image-full-cmdline</filename>
5375 images.
5376 </para>
5377 <para>
5378 This variable is similar to the
5379 <filename><link linkend='var-MACHINE_EXTRA_RDEPENDS'>MACHINE_EXTRA_RDEPENDS</link></filename>
5380 variable with the exception that the image being built does not have a build
5381 dependency on the variable's list of packages.
5382 In other words, the image will build if a file in this list is not found.
5383 </para>
5384 <para>
5385 An example is a machine that has WiFi capability but is not essential
5386 For the machine to boot the image.
5387 However, if you are building a more fully-featured image, you want to enable
5388 WiFi.
5389 In this case, the package containing the WiFi kernel module will not be produced
5390 if the WiFi driver is built into the kernel, in which case you still want the
5391 build to succeed instead of failing as a result of the package not being found.
5392 To accomplish this, assuming the package for the module was called
5393 <filename>kernel-module-examplewifi</filename>, you would use the
5394 following in the <filename>.conf</filename> file for the machine:
5395 <literallayout class='monospaced'>
5396 MACHINE_EXTRA_RRECOMMENDS += "kernel-module-examplewifi"
5397 </literallayout>
5398 </para>
5399 </glossdef>
5400 </glossentry>
5401
5402 <glossentry id='var-MACHINE_FEATURES'><glossterm>MACHINE_FEATURES</glossterm>
5403 <glossdef>
5404 <para>
5405 Specifies the list of hardware features the
5406 <link linkend='var-MACHINE'><filename>MACHINE</filename></link> is capable
5407 of supporting.
5408 For related information on enabling features, see the
5409 <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>,
5410 <link linkend='var-COMBINED_FEATURES'><filename>COMBINED_FEATURES</filename></link>,
5411 and
5412 <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
5413 variables.
5414 </para>
5415
5416 <para>
5417 For a list of hardware features supported by the Yocto
5418 Project as shipped, see the
5419 "<link linkend='ref-features-machine'>Machine Features</link>"
5420 section.
5421 </para>
5422 </glossdef>
5423 </glossentry>
5424
5425 <glossentry id='var-MACHINE_FEATURES_BACKFILL'><glossterm>MACHINE_FEATURES_BACKFILL</glossterm>
5426 <glossdef>
5427 <para>Features to be added to
5428 <filename><link linkend='var-MACHINE_FEATURES'>MACHINE_FEATURES</link></filename>
5429 if not also present in
5430 <filename><link linkend='var-MACHINE_FEATURES_BACKFILL_CONSIDERED'>MACHINE_FEATURES_BACKFILL_CONSIDERED</link></filename>.
5431 </para>
5432
5433 <para>
5434 This variable is set in the <filename>meta/conf/bitbake.conf</filename> file.
5435 It is not intended to be user-configurable.
5436 It is best to just reference the variable to see which machine features are
5437 being backfilled for all machine configurations.
5438 See the "<link linkend='ref-features-backfill'>Feature backfilling</link>" section for
5439 more information.
5440 </para>
5441 </glossdef>
5442 </glossentry>
5443
5444 <glossentry id='var-MACHINE_FEATURES_BACKFILL_CONSIDERED'><glossterm>MACHINE_FEATURES_BACKFILL_CONSIDERED</glossterm>
5445 <glossdef>
5446 <para>Features from
5447 <filename><link linkend='var-MACHINE_FEATURES_BACKFILL'>MACHINE_FEATURES_BACKFILL</link></filename>
5448 that should not be backfilled (i.e. added to
5449 <filename><link linkend='var-MACHINE_FEATURES'>MACHINE_FEATURES</link></filename>)
5450 during the build.
5451 See the "<link linkend='ref-features-backfill'>Feature backfilling</link>" section for
5452 more information.
5453 </para>
5454 </glossdef>
5455 </glossentry>
5456
5457 <glossentry id='var-MACHINEOVERRIDES'><glossterm>MACHINEOVERRIDES</glossterm>
5458 <glossdef>
5459 <para>
5460 Lists overrides specific to the current machine.
5461 By default, this list includes the value
5462 of <filename><link linkend='var-MACHINE'>MACHINE</link></filename>.
5463 You can extend the list to apply variable overrides for
5464 classes of machines.
5465 For example, all QEMU emulated machines (e.g. qemuarm,
5466 qemux86, and so forth) include a common file named
5467 <filename>meta/conf/machine/include/qemu.inc</filename>
5468 that prepends <filename>MACHINEOVERRIDES</filename> with
5469 the following variable override:
5470 <literallayout class='monospaced'>
5471 MACHINEOVERRIDES =. "qemuall:"
5472 </literallayout>
5473 Applying an override like <filename>qemuall</filename>
5474 affects all QEMU emulated machines elsewhere.
5475 Here is an example from the
5476 <filename>connman-conf</filename> recipe:
5477 <literallayout class='monospaced'>
5478 SRC_URI_append_qemuall = "file://wired.config \
5479 file://wired-setup \
5480 "
5481 </literallayout>
5482 </para>
5483 </glossdef>
5484 </glossentry>
5485
5486 <glossentry id='var-MAINTAINER'><glossterm>MAINTAINER</glossterm>
5487 <glossdef>
5488 <para>The email address of the distribution maintainer.</para>
5489 </glossdef>
5490 </glossentry>
5491
5492 <glossentry id='var-MIRRORS'><glossterm>MIRRORS</glossterm>
5493 <glossdef>
5494 <para>
5495 Specifies additional paths from which the OpenEmbedded
5496 build system gets source code.
5497 When the build system searches for source code, it first
5498 tries the local download directory.
5499 If that location fails, the build system tries locations
5500 defined by
5501 <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>,
5502 the upstream source, and then locations specified by
5503 <filename>MIRRORS</filename> in that order.
5504 </para>
5505
5506 <para>
5507 Assuming your distribution
5508 (<link linkend='var-DISTRO'><filename>DISTRO</filename></link>)
5509 is "poky", the default value for
5510 <filename>MIRRORS</filename> is defined in the
5511 <filename>conf/distro/poky.conf</filename> file in the
5512 <filename>meta-yocto</filename> Git repository.
5513 </para>
5514 </glossdef>
5515 </glossentry>
5516
5517 <glossentry id='var-MLPREFIX'><glossterm>MLPREFIX</glossterm>
5518 <glossdef>
5519 <para>
5520 Specifies a prefix has been added to
5521 <link linkend='var-PN'><filename>PN</filename></link> to create a special version
5522 of a recipe or package, such as a Multilib version.
5523 The variable is used in places where the prefix needs to be
5524 added to or removed from a the name (e.g. the
5525 <link linkend='var-BPN'><filename>BPN</filename></link> variable).
5526 <filename>MLPREFIX</filename> gets set when a prefix has been
5527 added to <filename>PN</filename>.
5528 </para>
5529 </glossdef>
5530 </glossentry>
5531
5532 <glossentry id='var-module_autoload'><glossterm>module_autoload</glossterm>
5533 <glossdef>
5534 <para>
5535 This variable has been replaced by the
5536 <filename>KERNEL_MODULE_AUTOLOAD</filename> variable.
5537 You should replace all occurrences of
5538 <filename>module_autoload</filename> with additions to
5539 <filename>KERNEL_MODULE_AUTOLOAD</filename>, for example:
5540 <literallayout class='monospaced'>
5541 module_autoload_rfcomm = "rfcomm"
5542 </literallayout>
5543 should now be replaced with:
5544 <literallayout class='monospaced'>
5545 KERNEL_MODULE_AUTOLOAD += "rfcomm"
5546 </literallayout>
5547 See the
5548 <link linkend='var-KERNEL_MODULE_AUTOLOAD'><filename>KERNEL_MODULE_AUTOLOAD</filename></link>
5549 variable for more information.
5550 </para>
5551 </glossdef>
5552 </glossentry>
5553
5554 <glossentry id='var-module_conf'><glossterm>module_conf</glossterm>
5555 <glossdef>
5556 <para>
5557 Specifies
5558 <ulink url='http://linux.die.net/man/5/modprobe.d'><filename>modprobe.d</filename></ulink>
5559 syntax lines for inclusion in the
5560 <filename>/etc/modprobe.d/modname.conf</filename> file.
5561 </para>
5562
5563 <para>
5564 You can use this variable anywhere that it can be
5565 recognized by the kernel recipe or out-of-tree kernel
5566 module recipe (e.g. a machine configuration file, a
5567 distribution configuration file, an append file for the
5568 recipe, or the recipe itself).
5569 If you use this variable, you must also be sure to list
5570 the module name in the
5571 <link linkend='var-KERNEL_MODULE_AUTOLOAD'><filename>KERNEL_MODULE_AUTOLOAD</filename></link>
5572 variable.
5573 </para>
5574
5575 <para>
5576 Here is the general syntax:
5577 <literallayout class='monospaced'>
5578 module_conf_<replaceable>module_name</replaceable> = "<replaceable>modprobe.d-syntax</replaceable>"
5579 </literallayout>
5580 You must use the kernel module name override.
5581 </para>
5582
5583 <para>
5584 Run <filename>man modprobe.d</filename> in the shell to
5585 find out more information on the exact syntax
5586 you want to provide with <filename>module_conf</filename>.
5587 </para>
5588
5589 <para>
5590 Including <filename>module_conf</filename> causes the
5591 OpenEmbedded build system to populate the
5592 <filename>/etc/modprobe.d/modname.conf</filename>
5593 file with <filename>modprobe.d</filename> syntax lines.
5594 Here is an example that adds the options
5595 <filename>arg1</filename> and <filename>arg2</filename>
5596 to a module named <filename>mymodule</filename>:
5597 <literallayout class='monospaced'>
5598 module_conf_mymodule = "options mymodule arg1=val1 arg2=val2"
5599 </literallayout>
5600 </para>
5601
5602 <para>
5603 For information on how to specify kernel modules to
5604 auto-load on boot, see the
5605 <link linkend='var-KERNEL_MODULE_AUTOLOAD'><filename>KERNEL_MODULE_AUTOLOAD</filename></link>
5606 variable.
5607 </para>
5608 </glossdef>
5609 </glossentry>
5610
5611 <glossentry id='var-MODULE_IMAGE_BASE_NAME'><glossterm>MODULE_IMAGE_BASE_NAME</glossterm>
5612 <glossdef>
5613 <para>
5614 The base name of the kernel modules tarball.
5615 This variable is set in the
5616 <link linkend='ref-classes-kernel'>kernel</link> class
5617 as follows:
5618 <literallayout class='monospaced'>
5619 MODULE_IMAGE_BASE_NAME ?= "modules-${PKGE}-${PKGV}-${PKGR}-${MACHINE}-${DATETIME}"
5620 </literallayout>
5621 See the
5622 <link linkend='var-PKGE'><filename>PKGE</filename></link>,
5623 <link linkend='var-PKGV'><filename>PKGV</filename></link>,
5624 <link linkend='var-PKGR'><filename>PKGR</filename></link>,
5625 <link linkend='var-MACHINE'><filename>MACHINE</filename></link>,
5626 and
5627 <link linkend='var-DATETIME'><filename>DATETIME</filename></link>
5628 variables for additional information.
5629 </para>
5630 </glossdef>
5631 </glossentry>
5632
5633 <glossentry id='var-MODULE_TARBALL_DEPLOY'><glossterm>MODULE_TARBALL_DEPLOY</glossterm>
5634 <glossdef>
5635 <para>
5636 Controls creation of the <filename>modules-*.tgz</filename>
5637 file.
5638 Set this variable to "0" to disable creation of this
5639 file, which contains all of the kernel modules resulting
5640 from a kernel build.
5641 </para>
5642 </glossdef>
5643 </glossentry>
5644
5645 <glossentry id='var-MULTIMACH_TARGET_SYS'><glossterm>MULTIMACH_TARGET_SYS</glossterm>
5646 <glossdef>
5647 <para>
5648 Separates files for different machines such that you can build
5649 for multiple target machines using the same output directories.
5650 See the <link linkend='var-STAMP'><filename>STAMP</filename></link> variable
5651 for an example.
5652 </para>
5653 </glossdef>
5654 </glossentry>
5655
5656 </glossdiv>
5657
5658 <glossdiv id='var-glossary-n'><title>N</title>
5659
5660 <glossentry id='var-NATIVELSBSTRING'><glossterm>NATIVELSBSTRING</glossterm>
5661 <glossdef>
5662 <para>
5663 A string identifying the host distribution.
5664 Strings consist of the host distributor ID
5665 followed by the release, as reported by the
5666 <filename>lsb_release</filename> tool
5667 or as read from <filename>/etc/lsb-release</filename>.
5668 For example, when running a build on Ubuntu 12.10, the value
5669 is "Ubuntu-12.10".
5670 If this information is unable to be determined, the value
5671 resolves to "Unknown".
5672 </para>
5673 <para>
5674 This variable is used by default to isolate native shared
5675 state packages for different distributions (e.g. to avoid
5676 problems with <filename>glibc</filename> version
5677 incompatibilities).
5678 Additionally, the variable is checked against
5679 <link linkend='var-SANITY_TESTED_DISTROS'><filename>SANITY_TESTED_DISTROS</filename></link>
5680 if that variable is set.
5681 </para>
5682 </glossdef>
5683 </glossentry>
5684
5685 <glossentry id='var-NO_RECOMMENDATIONS'><glossterm>NO_RECOMMENDATIONS</glossterm>
5686 <glossdef>
5687 <para>
5688 Prevents installation of all "recommended-only" packages.
5689 Recommended-only packages are packages installed only
5690 through the
5691 <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>
5692 variable).
5693 Setting the <filename>NO_RECOMMENDATIONS</filename> variable
5694 to "1" turns this feature on:
5695 <literallayout class='monospaced'>
5696 NO_RECOMMENDATIONS = "1"
5697 </literallayout>
5698 You can set this variable globally in your
5699 <filename>local.conf</filename> file or you can attach it to
5700 a specific image recipe by using the recipe name override:
5701 <literallayout class='monospaced'>
5702 NO_RECOMMENDATIONS_pn-<replaceable>target_image</replaceable> = "<replaceable>package_name</replaceable>"
5703 </literallayout>
5704 </para>
5705
5706 <para>
5707 It is important to realize that if you choose to not install
5708 packages using this variable and some other packages are
5709 dependent on them (i.e. listed in a recipe's
5710 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
5711 variable), the OpenEmbedded build system ignores your
5712 request and will install the packages to avoid dependency
5713 errors.
5714 <note>
5715 Some recommended packages might be required for certain
5716 system functionality, such as kernel modules.
5717 It is up to you to add packages with the
5718 <link linkend='var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></link>
5719 variable.
5720 </note>
5721 </para>
5722
5723 <para>
5724 Support for this variable exists only when using the
5725 IPK and RPM packaging backend.
5726 Support does not exist for DEB.
5727 </para>
5728
5729 <para>
5730 See the
5731 <link linkend='var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></link>
5732 and the
5733 <link linkend='var-PACKAGE_EXCLUDE'><filename>PACKAGE_EXCLUDE</filename></link>
5734 variables for related information.
5735 </para>
5736 </glossdef>
5737 </glossentry>
5738
5739 <glossentry id='var-NOHDD'><glossterm>NOHDD</glossterm>
5740 <glossdef>
5741 <para>
5742 Causes the OpenEmbedded build system to skip building the
5743 <filename>.hddimg</filename> image.
5744 The <filename>NOHDD</filename> variable is used with the
5745 <link linkend='ref-classes-bootimg'><filename>bootimg</filename></link>
5746 class.
5747 Set the variable to "1" to prevent the
5748 <filename>.hddimg</filename> image from being built.
5749 </para>
5750 </glossdef>
5751 </glossentry>
5752
5753 <glossentry id='var-NOISO'><glossterm>NOISO</glossterm>
5754 <glossdef>
5755 <para>
5756 Causes the OpenEmbedded build system to skip building the
5757 ISO image.
5758 The <filename>NOISO</filename> variable is used with the
5759 <link linkend='ref-classes-bootimg'><filename>bootimg</filename></link>
5760 class.
5761 Set the variable to "1" to prevent the ISO image from
5762 being built.
5763 To enable building an ISO image, set the variable to "0".
5764 </para>
5765 </glossdef>
5766 </glossentry>
5767
5768 </glossdiv>
5769
5770 <glossdiv id='var-glossary-o'><title>O</title>
5771
5772 <glossentry id='var-OE_BINCONFIG_EXTRA_MANGLE'><glossterm>OE_BINCONFIG_EXTRA_MANGLE</glossterm>
5773 <glossdef>
5774 <para>
5775 When inheriting the
5776 <link linkend='ref-classes-binconfig'><filename>binconfig</filename></link>
5777 class, this variable
5778 specifies additional arguments passed to the "sed" command.
5779 The sed command alters any paths in configuration scripts
5780 that have been set up during compilation.
5781 Inheriting this class results in all paths in these scripts
5782 being changed to point into the
5783 <filename>sysroots/</filename> directory so that all builds
5784 that use the script will use the correct directories
5785 for the cross compiling layout.
5786 </para>
5787
5788 <para>
5789 See the <filename>meta/classes/binconfig.bbclass</filename>
5790 in the
5791 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
5792 for details on how this class applies these additional
5793 sed command arguments.
5794 For general information on the
5795 <filename>binconfig.bbclass</filename> class, see the
5796 "<link linkend='ref-classes-binconfig'>Binary Configuration Scripts - <filename>binconfig.bbclass</filename></link>"
5797 section.
5798 </para>
5799 </glossdef>
5800 </glossentry>
5801
5802 <glossentry id='var-OE_IMPORTS'><glossterm>OE_IMPORTS</glossterm>
5803 <glossdef>
5804 <para>
5805 An internal variable used to tell the OpenEmbedded build
5806 system what Python modules to import for every Python
5807 function run by the system.
5808 </para>
5809
5810 <note>
5811 Do not set this variable.
5812 It is for internal use only.
5813 </note>
5814 </glossdef>
5815 </glossentry>
5816
5817 <glossentry id='var-OE_TERMINAL'><glossterm>OE_TERMINAL</glossterm>
5818 <glossdef>
5819 <para>
5820 Controls how the OpenEmbedded build system spawns
5821 interactive terminals on the host development system
5822 (e.g. using the BitBake command with the
5823 <filename>-c devshell</filename> command-line option).
5824 For more information, see the
5825 "<ulink url='&YOCTO_DOCS_DEV_URL;#platdev-appdev-devshell'>Using a Development Shell</ulink>" section
5826 in the Yocto Project Development Manual.
5827 </para>
5828
5829 <para>
5830 You can use the following values for the
5831 <filename>OE_TERMINAL</filename> variable:
5832 <literallayout class='monospaced'>
5833 auto
5834 gnome
5835 xfce
5836 rxvt
5837 screen
5838 konsole
5839 none
5840 </literallayout>
5841 <note>Konsole support only works for KDE 3.x.
5842 Also, "auto" is the default behavior for
5843 <filename>OE_TERMINAL</filename></note>
5844 </para>
5845 </glossdef>
5846 </glossentry>
5847
5848 <glossentry id='var-OEROOT'><glossterm>OEROOT</glossterm>
5849 <glossdef>
5850 <para>
5851 The directory from which the top-level build environment
5852 setup script is sourced.
5853 The Yocto Project makes two top-level build environment
5854 setup scripts available:
5855 <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
5856 and
5857 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>.
5858 When you run one of these scripts, the
5859 <filename>OEROOT</filename> variable resolves to the
5860 directory that contains the script.
5861 </para>
5862
5863 <para>
5864 For additional information on how this variable is used,
5865 see the initialization scripts.
5866 </para>
5867 </glossdef>
5868 </glossentry>
5869
5870 <glossentry id='var-OLDEST_KERNEL'><glossterm>OLDEST_KERNEL</glossterm>
5871 <glossdef>
5872 <para>
5873 Declares the oldest version of the Linux kernel that the
5874 produced binaries must support.
5875 This variable is passed into the build of the Embedded
5876 GNU C Library (<filename>glibc</filename>).
5877 </para>
5878
5879 <para>
5880 The default for this variable comes from the
5881 <filename>meta/conf/bitbake.conf</filename> configuration
5882 file.
5883 You can override this default by setting the variable
5884 in a custom distribution configuration file.
5885 </para>
5886 </glossdef>
5887 </glossentry>
5888
5889 <glossentry id='var-OVERRIDES'><glossterm>OVERRIDES</glossterm>
5890 <glossdef>
5891 <para>
5892 BitBake uses <filename>OVERRIDES</filename> to control
5893 what variables are overridden after BitBake parses
5894 recipes and configuration files.
5895 You can find more information on how overrides are handled
5896 in the
5897 "<ulink url='&YOCTO_DOCS_BB_URL;#conditional-syntax-overrides'>Conditional Syntax (Overrides)</ulink>"
5898 section of the BitBake User Manual.
5899 </para>
5900 </glossdef>
5901 </glossentry>
5902 </glossdiv>
5903
5904 <glossdiv id='var-glossary-p'><title>P</title>
5905
5906 <glossentry id='var-P'><glossterm>P</glossterm>
5907 <glossdef>
5908 <para>The recipe name and version.
5909 <filename>P</filename> is comprised of the following:
5910 <literallayout class='monospaced'>
5911 ${PN}-${PV}
5912 </literallayout></para>
5913 </glossdef>
5914 </glossentry>
5915
5916 <glossentry id='var-PACKAGE_ARCH'><glossterm>PACKAGE_ARCH</glossterm>
5917 <glossdef>
5918 <para>
5919 The architecture of the resulting package or packages.
5920 </para>
5921
5922 <para>
5923 By default, the value of this variable is set to
5924 <link linkend='var-TUNE_PKGARCH'><filename>TUNE_PKGARCH</filename></link>
5925 when building for the target,
5926 <filename>BUILD_ARCH</filename> when building for the
5927 build host and "${SDK_ARCH}-${SDKPKGSUFFIX}" when building
5928 for the SDK.
5929 However, if your recipe's output packages are built
5930 specific to the target machine rather than general for
5931 the architecture of the machine, you should set
5932 <filename>PACKAGE_ARCH</filename> to the value of
5933 <link linkend='var-MACHINE_ARCH'><filename>MACHINE_ARCH</filename></link>
5934 in the recipe as follows:
5935 <literallayout class='monospaced'>
5936 PACKAGE_ARCH = "${MACHINE_ARCH}"
5937 </literallayout>
5938 </para>
5939 </glossdef>
5940 </glossentry>
5941
5942 <glossentry id='var-PACKAGE_ARCHS'><glossterm>PACKAGE_ARCHS</glossterm>
5943 <glossdef>
5944 <para>
5945 Specifies a list of architectures compatible with
5946 the target machine.
5947 This variable is set automatically and should not
5948 normally be hand-edited.
5949 Entries are separated using spaces and listed in order
5950 of priority.
5951 The default value for
5952 <filename>PACKAGE_ARCHS</filename> is "all any noarch
5953 ${PACKAGE_EXTRA_ARCHS} ${MACHINE_ARCH}".
5954 </para>
5955 </glossdef>
5956 </glossentry>
5957
5958
5959
5960 <glossentry id='var-PACKAGE_BEFORE_PN'><glossterm>PACKAGE_BEFORE_PN</glossterm>
5961 <glossdef>
5962 <para>Enables easily adding packages to
5963 <filename><link linkend='var-PACKAGES'>PACKAGES</link></filename>
5964 before <filename>${<link linkend='var-PN'>PN</link>}</filename>
5965 so that those added packages can pick up files that would normally be
5966 included in the default package.</para>
5967 </glossdef>
5968 </glossentry>
5969
5970 <glossentry id='var-PACKAGE_CLASSES'><glossterm>PACKAGE_CLASSES</glossterm>
5971 <glossdef>
5972 <para>
5973 This variable, which is set in the
5974 <filename>local.conf</filename> configuration file found in
5975 the <filename>conf</filename> folder of the
5976 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>,
5977 specifies the package manager the OpenEmbedded build system
5978 uses when packaging data.
5979 </para>
5980
5981 <para>
5982 You can provide one or more of the following arguments for
5983 the variable:
5984 <literallayout class='monospaced'>
5985 PACKAGE_CLASSES ?= "package_rpm package_deb package_ipk package_tar"
5986 </literallayout>
5987 The build system uses only the first argument in the list
5988 as the package manager when creating your image or SDK.
5989 However, packages will be created using any additional
5990 packaging classes you specify.
5991 For example, if you use the following in your
5992 <filename>local.conf</filename> file:
5993 <literallayout class='monospaced'>
5994 PACKAGE_CLASSES ?= "package_ipk package_tar"
5995 </literallayout>
5996 The OpenEmbedded build system uses the IPK package manager
5997 to create your image or SDK as well as generating
5998 TAR packages.
5999 </para>
6000
6001 <para>
6002 You cannot specify the
6003 <link linkend='ref-classes-package_tar'><filename>package_tar</filename></link>
6004 class first in the list.
6005 Files using the <filename>.tar</filename> format cannot
6006 be used as a substitute packaging format
6007 for DEB, RPM, and IPK formatted files for your image or SDK.
6008 </para>
6009
6010 <para>
6011 For information on packaging and build performance effects
6012 as a result of the package manager in use, see the
6013 "<link linkend='ref-classes-package'><filename>package.bbclass</filename></link>"
6014 section.
6015 </para>
6016 </glossdef>
6017 </glossentry>
6018
6019 <glossentry id='var-PACKAGE_DEBUG_SPLIT_STYLE'><glossterm>PACKAGE_DEBUG_SPLIT_STYLE</glossterm>
6020 <glossdef>
6021
6022 <para>
6023 Determines how to split up the binary and debug information
6024 when creating <filename>*-dbg</filename> packages to be
6025 used with the GNU Project Debugger (GDB).
6026 </para>
6027
6028 <para>
6029 With the
6030 <filename>PACKAGE_DEBUG_SPLIT_STYLE</filename> variable,
6031 you can control where debug information, which can include
6032 or exclude source files, is stored:
6033 <itemizedlist>
6034 <listitem><para>
6035 ".debug": Debug symbol files are placed next
6036 to the binary in a <filename>.debug</filename>
6037 directory on the target.
6038 For example, if a binary is installed into
6039 <filename>/bin</filename>, the corresponding debug
6040 symbol files are installed in
6041 <filename>/bin/.debug</filename>.
6042 Source files are placed in
6043 <filename>/usr/src/debug</filename>.
6044 This is the default behavior.
6045 </para></listitem>
6046 <listitem><para>
6047 "debug-file-directory": Debug symbol files are
6048 placed under <filename>/usr/lib/debug</filename>
6049 on the target, and separated by the path from where
6050 the binary is installed.
6051 For example, if a binary is installed in
6052 <filename>/bin</filename>, the corresponding debug
6053 symbols are installed in
6054 <filename>/usr/lib/debug/bin</filename>.
6055 Source files are placed in
6056 <filename>/usr/src/debug</filename>.
6057 </para></listitem>
6058 <listitem><para>
6059 "debug-without-src": The same behavior as
6060 ".debug" previously described with the exception
6061 that no source files are installed.
6062 </para></listitem>.
6063 </itemizedlist>
6064 </para>
6065
6066 <para>
6067 You can find out more about debugging using GDB by reading
6068 the
6069 "<ulink url='&YOCTO_DOCS_DEV_URL;#platdev-gdb-remotedebug'>Debugging With the GNU Project Debugger (GDB) Remotely</ulink>"
6070 section in the Yocto Project Development Manual.
6071 </para>
6072 </glossdef>
6073 </glossentry>
6074
6075 <glossentry id='var-PACKAGE_EXCLUDE'><glossterm>PACKAGE_EXCLUDE</glossterm>
6076 <glossdef>
6077 <para>
6078 Lists packages that should not be installed into an image.
6079 For example:
6080 <literallayout class='monospaced'>
6081 PACKAGE_EXCLUDE = "<replaceable>package_name</replaceable> <replaceable>package_name</replaceable> <replaceable>package_name</replaceable> ..."
6082 </literallayout>
6083 You can set this variable globally in your
6084 <filename>local.conf</filename> file or you can attach it to
6085 a specific image recipe by using the recipe name override:
6086 <literallayout class='monospaced'>
6087 PACKAGE_EXCLUDE_pn-<replaceable>target_image</replaceable> = "<replaceable>package_name</replaceable>"
6088 </literallayout>
6089 </para>
6090
6091 <para>
6092 If you choose to not install
6093 a package using this variable and some other package is
6094 dependent on it (i.e. listed in a recipe's
6095 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
6096 variable), the OpenEmbedded build system generates a fatal
6097 installation error.
6098 Because the build system halts the process with a fatal
6099 error, you can use the variable with an iterative
6100 development process to remove specific components from a
6101 system.
6102 </para>
6103
6104 <para>
6105 Support for this variable exists only when using the
6106 IPK and RPM packaging backend.
6107 Support does not exist for DEB.
6108 </para>
6109
6110 <para>
6111 See the
6112 <link linkend='var-NO_RECOMMENDATIONS'><filename>NO_RECOMMENDATIONS</filename></link>
6113 and the
6114 <link linkend='var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></link>
6115 variables for related information.
6116 </para>
6117 </glossdef>
6118 </glossentry>
6119
6120 <glossentry id='var-PACKAGE_EXTRA_ARCHS'><glossterm>PACKAGE_EXTRA_ARCHS</glossterm>
6121 <glossdef>
6122 <para>Specifies the list of architectures compatible with the device CPU.
6123 This variable is useful when you build for several different devices that use
6124 miscellaneous processors such as XScale and ARM926-EJS).</para>
6125 </glossdef>
6126 </glossentry>
6127
6128 <glossentry id='var-PACKAGE_GROUP'><glossterm>PACKAGE_GROUP</glossterm>
6129 <glossdef>
6130
6131 <para>
6132 The <filename>PACKAGE_GROUP</filename> variable has been
6133 renamed to
6134 <link linkend='var-FEATURE_PACKAGES'><filename>FEATURE_PACKAGES</filename></link>.
6135 See the variable description for
6136 <filename>FEATURE_PACKAGES</filename> for information.
6137 </para>
6138
6139 <para>
6140 If if you use the <filename>PACKAGE_GROUP</filename>
6141 variable, the OpenEmbedded build system issues a warning
6142 message.
6143 </para>
6144 </glossdef>
6145 </glossentry>
6146
6147 <glossentry id='var-PACKAGE_INSTALL'><glossterm>PACKAGE_INSTALL</glossterm>
6148 <glossdef>
6149 <para>
6150 The final list of packages passed to the package manager
6151 for installation into the image.
6152 </para>
6153
6154 <para>
6155 Because the package manager controls actual installation
6156 of all packages, the list of packages passed using
6157 <filename>PACKAGE_INSTALL</filename> is not the final list
6158 of packages that are actually installed.
6159 This variable is internal to the image construction
6160 code.
6161 Consequently, in general, you should use the
6162 <link linkend='var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></link>
6163 variable to specify packages for installation.
6164 The exception to this is when working with
6165 the
6166 <link linkend='images-core-image-minimal-initramfs'><filename>core-image-minimal-initramfs</filename></link>
6167 image.
6168 When working with an initial RAM disk (initramfs)
6169 image, use the <filename>PACKAGE_INSTALL</filename>
6170 variable.
6171 </para>
6172 </glossdef>
6173 </glossentry>
6174
6175 <glossentry id='var-PACKAGE_PREPROCESS_FUNCS'><glossterm>PACKAGE_PREPROCESS_FUNCS</glossterm>
6176 <glossdef>
6177 <para>
6178 Specifies a list of functions run to pre-process the
6179 <link linkend='var-PKGD'><filename>PKGD</filename></link>
6180 directory prior to splitting the files out to individual
6181 packages.
6182 </para>
6183 </glossdef>
6184 </glossentry>
6185
6186 <glossentry id='var-PACKAGECONFIG'><glossterm>PACKAGECONFIG</glossterm>
6187 <glossdef>
6188 <para>
6189 This variable provides a means of enabling or disabling
6190 features of a recipe on a per-recipe basis.
6191 <filename>PACKAGECONFIG</filename> blocks are defined
6192 in recipes when you specify features and then arguments
6193 that define feature behaviors.
6194 Here is the basic block structure:
6195 <literallayout class='monospaced'>
6196 PACKAGECONFIG ??= "f1 f2 f3 ..."
6197 PACKAGECONFIG[f1] = "--with-f1,--without-f1,build-deps-f1,rt-deps-f1"
6198 PACKAGECONFIG[f2] = "--with-f2,--without-f2,build-deps-f2,rt-deps-f2"
6199 PACKAGECONFIG[f3] = "--with-f3,--without-f3,build-deps-f3,rt-deps-f3"
6200 </literallayout>
6201 The <filename>PACKAGECONFIG</filename>
6202 variable itself specifies a space-separated list of the
6203 features to enable.
6204 Following the features, you can determine the behavior of
6205 each feature by providing up to four order-dependent
6206 arguments, which are separated by commas.
6207 You can omit any argument you like but must retain the
6208 separating commas.
6209 The order is important and specifies the following:
6210 <orderedlist>
6211 <listitem><para>Extra arguments
6212 that should be added to the configure script
6213 argument list
6214 (<link linkend='var-EXTRA_OECONF'><filename>EXTRA_OECONF</filename></link>)
6215 if the feature is enabled.</para></listitem>
6216 <listitem><para>Extra arguments
6217 that should be added to <filename>EXTRA_OECONF</filename>
6218 if the feature is disabled.
6219 </para></listitem>
6220 <listitem><para>Additional build dependencies
6221 (<link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>)
6222 that should be added if the feature is enabled.
6223 </para></listitem>
6224 <listitem><para>Additional runtime dependencies
6225 (<link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>)
6226 that should be added if the feature is enabled.
6227 </para></listitem>
6228 </orderedlist>
6229 </para>
6230
6231 <para>
6232 Consider the following
6233 <filename>PACKAGECONFIG</filename> block taken from the
6234 <filename>librsvg</filename> recipe.
6235 In this example the feature is <filename>croco</filename>,
6236 which has three arguments that determine the feature's
6237 behavior.
6238 <literallayout class='monospaced'>
6239 PACKAGECONFIG ??= "croco"
6240 PACKAGECONFIG[croco] = "--with-croco,--without-croco,libcroco"
6241 </literallayout>
6242 The <filename>--with-croco</filename> and
6243 <filename>libcroco</filename> arguments apply only if
6244 the feature is enabled.
6245 In this case, <filename>--with-croco</filename> is
6246 added to the configure script argument list and
6247 <filename>libcroco</filename> is added to
6248 <filename><link linkend='var-DEPENDS'>DEPENDS</link></filename>.
6249 On the other hand, if the feature is disabled say through
6250 a <filename>.bbappend</filename> file in another layer, then
6251 the second argument <filename>--without-croco</filename> is
6252 added to the configure script rather than
6253 <filename>--with-croco</filename>.
6254 </para>
6255
6256 <para>
6257 The basic <filename>PACKAGECONFIG</filename> structure
6258 previously described holds true regardless of whether you
6259 are creating a block or changing a block.
6260 When creating a block, use the structure inside your
6261 recipe.
6262 </para>
6263
6264 <para>
6265 If you want to change an existing
6266 <filename>PACKAGECONFIG</filename> block, you can do so
6267 one of two ways:
6268 <itemizedlist>
6269 <listitem><para><emphasis>Append file:</emphasis>
6270 Create an append file named
6271 <replaceable>recipename</replaceable><filename>.bbappend</filename>
6272 in your layer and override the value of
6273 <filename>PACKAGECONFIG</filename>.
6274 You can either completely override the variable:
6275 <literallayout class='monospaced'>
6276 PACKAGECONFIG="f4 f5"
6277 </literallayout>
6278 Or, you can just append the variable:
6279 <literallayout class='monospaced'>
6280 PACKAGECONFIG_append = " f4"
6281 </literallayout></para></listitem>
6282 <listitem><para><emphasis>Configuration file:</emphasis>
6283 This method is identical to changing the block
6284 through an append file except you edit your
6285 <filename>local.conf</filename> or
6286 <filename><replaceable>mydistro</replaceable>.conf</filename> file.
6287 As with append files previously described,
6288 you can either completely override the variable:
6289 <literallayout class='monospaced'>
6290 PACKAGECONFIG_pn-<replaceable>recipename</replaceable>="f4 f5"
6291 </literallayout>
6292 Or, you can just amend the variable:
6293 <literallayout class='monospaced'>
6294 PACKAGECONFIG_append_pn-<replaceable>recipename</replaceable> = " f4"
6295 </literallayout></para></listitem>
6296 </itemizedlist>
6297 </para>
6298 </glossdef>
6299 </glossentry>
6300
6301 <glossentry id='var-PACKAGES'><glossterm>PACKAGES</glossterm>
6302 <glossdef>
6303 <para>The list of packages to be created from the recipe.
6304 The default value is the following:
6305 <literallayout class='monospaced'>
6306 ${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN}
6307 </literallayout></para>
6308 </glossdef>
6309 </glossentry>
6310
6311 <glossentry id='var-PACKAGESPLITFUNCS'><glossterm>PACKAGESPLITFUNCS</glossterm>
6312 <glossdef>
6313 <para>
6314 Specifies a list of functions run to perform additional
6315 splitting of files into individual packages.
6316 Recipes can either prepend to this variable or prepend
6317 to the <filename>populate_packages</filename> function
6318 in order to perform additional package splitting.
6319 In either case, the function should set
6320 <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>,
6321 <link linkend='var-FILES'><filename>FILES</filename></link>,
6322 <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
6323 and other packaging variables appropriately in order to
6324 perform the desired splitting.
6325 </para>
6326 </glossdef>
6327 </glossentry>
6328
6329 <glossentry id='var-PACKAGES_DYNAMIC'><glossterm>PACKAGES_DYNAMIC</glossterm>
6330 <glossdef>
6331 <para>
6332 A promise that your recipe satisfies runtime dependencies
6333 for optional modules that are found in other recipes.
6334 <filename>PACKAGES_DYNAMIC</filename>
6335 does not actually satisfy the dependencies, it only states that
6336 they should be satisfied.
6337 For example, if a hard, runtime dependency
6338 (<link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>)
6339 of another package is satisfied
6340 at build time through the <filename>PACKAGES_DYNAMIC</filename>
6341 variable, but a package with the module name is never actually
6342 produced, then the other package will be broken.
6343 Thus, if you attempt to include that package in an image,
6344 you will get a dependency failure from the packaging system
6345 during the
6346 <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link>
6347 task.
6348 </para>
6349 <para>
6350 Typically, if there is a chance that such a situation can
6351 occur and the package that is not created is valid
6352 without the dependency being satisfied, then you should use
6353 <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>
6354 (a soft runtime dependency) instead of
6355 <filename>RDEPENDS</filename>.
6356 </para>
6357
6358 <para>
6359 For an example of how to use the <filename>PACKAGES_DYNAMIC</filename>
6360 variable when you are splitting packages, see the
6361 "<ulink url='&YOCTO_DOCS_DEV_URL;#handling-optional-module-packaging'>Handling Optional Module Packaging</ulink>" section
6362 in the Yocto Project Development Manual.
6363 </para>
6364 </glossdef>
6365 </glossentry>
6366
6367 <glossentry id='var-PARALLEL_MAKE'><glossterm>PARALLEL_MAKE</glossterm>
6368 <glossdef>
6369 <para>
6370 Extra options passed to the <filename>make</filename>
6371 command during the
6372 <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
6373 task in order to specify parallel compilation on the local
6374 build host.
6375 This variable is usually in the form "-j &lt;x&gt;",
6376 where x represents the maximum number of parallel threads
6377 <filename>make</filename> can run.
6378 </para>
6379
6380 <para>
6381 If your development host supports multiple cores, a good
6382 rule of thumb is to set this variable to twice the number
6383 of cores on the host.
6384 If you do not set <filename>PARALLEL_MAKE</filename>, it
6385 defaults to the number of cores your build system has.
6386 <note>
6387 Individual recipes might clear out this variable if
6388 the software being built has problems running its
6389 <filename>make</filename> process in parallel.
6390 </note>
6391 </para>
6392 </glossdef>
6393 </glossentry>
6394
6395 <glossentry id='var-PARALLEL_MAKEINST'><glossterm>PARALLEL_MAKEINST</glossterm>
6396 <glossdef>
6397 <para>
6398 Extra options passed to the
6399 <filename>make install</filename> command during the
6400 <link linkend='ref-tasks-install'><filename>do_install</filename></link>
6401 task in order to specify parallel installation.
6402 This variable defaults to the value of
6403 <link linkend='var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></link>.
6404 <note>
6405 Individual recipes might clear out this variable if
6406 the software being built has problems running its
6407 <filename>make install</filename> process in parallel.
6408 </note>
6409 </para>
6410 </glossdef>
6411 </glossentry>
6412
6413 <glossentry id='var-PATCHRESOLVE'><glossterm>PATCHRESOLVE</glossterm>
6414 <glossdef>
6415 <para>
6416 Determines the action to take when a patch fails.
6417 You can set this variable to one of two values: "noop" and
6418 "user".
6419 </para>
6420
6421 <para>
6422 The default value of "noop" causes the build to simply fail
6423 when the OpenEmbedded build system cannot successfully
6424 apply a patch.
6425 Setting the value to "user" causes the build system to
6426 launch a shell and places you in the right location so that
6427 you can manually resolve the conflicts.
6428 </para>
6429
6430 <para>
6431 Set this variable in your
6432 <filename>local.conf</filename> file.
6433 </para>
6434 </glossdef>
6435 </glossentry>
6436
6437 <glossentry id='var-PATCHTOOL'><glossterm>PATCHTOOL</glossterm>
6438 <glossdef>
6439 <para>
6440 Specifies the utility used to apply patches for a recipe
6441 during the
6442 <link linkend='ref-tasks-patch'><filename>do_patch</filename></link>
6443 task.
6444 You can specify one of three utilities: "patch", "quilt", or
6445 "git".
6446 The default utility used is "quilt" except for the
6447 quilt-native recipe itself.
6448 Because the quilt tool is not available at the
6449 time quilt-native is being patched, it uses "patch".
6450 </para>
6451
6452 <para>
6453 If you wish to use an alternative patching tool, set the
6454 variable in the recipe using one of the following:
6455 <literallayout class='monospaced'>
6456 PATCHTOOL = "patch"
6457 PATCHTOOL = "quilt"
6458 PATCHTOOL = "git"
6459 </literallayout>
6460 </para>
6461 </glossdef>
6462 </glossentry>
6463
6464 <glossentry id='var-PE'><glossterm>PE</glossterm>
6465 <glossdef>
6466 <para>
6467 The epoch of the recipe.
6468 By default, this variable is unset.
6469 The variable is used to make upgrades possible when the
6470 versioning scheme changes in some backwards incompatible
6471 way.
6472 </para>
6473 </glossdef>
6474 </glossentry>
6475
6476 <glossentry id='var-PF'><glossterm>PF</glossterm>
6477 <glossdef>
6478 <para>Specifies the recipe or package name and includes all version and revision
6479 numbers (i.e. <filename>glibc-2.13-r20+svnr15508/</filename> and
6480 <filename>bash-4.2-r1/</filename>).
6481 This variable is comprised of the following:
6482 <literallayout class='monospaced'>
6483 ${<link linkend='var-PN'>PN</link>}-${<link linkend='var-EXTENDPE'>EXTENDPE</link>}${<link linkend='var-PV'>PV</link>}-${<link linkend='var-PR'>PR</link>}
6484 </literallayout></para>
6485 </glossdef>
6486 </glossentry>
6487
6488 <glossentry id='var-PIXBUF_PACKAGES'><glossterm>PIXBUF_PACKAGES</glossterm>
6489 <glossdef>
6490 <para>
6491 When inheriting the
6492 <link linkend='ref-classes-pixbufcache'><filename>pixbufcache</filename></link>
6493 class, this variable identifies packages that contain
6494 the pixbuf loaders used with
6495 <filename>gdk-pixbuf</filename>.
6496 By default, the <filename>pixbufcache</filename> class
6497 assumes that the loaders are in the recipe's main package
6498 (i.e. <filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}</filename>).
6499 Use this variable if the loaders you need are in a package
6500 other than that main package.
6501 </para>
6502 </glossdef>
6503 </glossentry>
6504
6505 <glossentry id='var-PKG'><glossterm>PKG</glossterm>
6506 <glossdef>
6507 <para>
6508 The name of the resulting package created by the
6509 OpenEmbedded build system.
6510 <note>
6511 When using the <filename>PKG</filename> variable, you
6512 must use a package name override.
6513 </note>
6514 For example, when the
6515 <link linkend='ref-classes-debian'><filename>debian</filename></link>
6516 class renames the output package, it does so by setting
6517 <filename>PKG_<replaceable>packagename</replaceable></filename>.
6518 </para>
6519 </glossdef>
6520 </glossentry>
6521
6522 <glossentry id='var-PKGD'><glossterm>PKGD</glossterm>
6523 <glossdef>
6524 <para>
6525 Points to the destination directory for files to be
6526 packaged before they are split into individual packages.
6527 This directory defaults to the following:
6528 <literallayout class='monospaced'>
6529 ${WORKDIR}/package
6530 </literallayout>
6531 Do not change this default.
6532 </para>
6533 </glossdef>
6534 </glossentry>
6535
6536 <glossentry id='var-PKGDATA_DIR'><glossterm>PKGDATA_DIR</glossterm>
6537 <glossdef>
6538 <para>
6539 Points to a shared, global-state directory that holds data
6540 generated during the packaging process.
6541 During the packaging process, the
6542 <link linkend='ref-tasks-packagedata'><filename>do_packagedata</filename></link>
6543 task packages data for each recipe and installs it into
6544 this temporary, shared area.
6545 This directory defaults to the following:
6546 <literallayout class='monospaced'>
6547 ${STAGING_DIR_HOST}/pkgdata
6548 </literallayout>
6549 Do not change this default.
6550 </para>
6551 </glossdef>
6552 </glossentry>
6553
6554 <glossentry id='var-PKGDEST'><glossterm>PKGDEST</glossterm>
6555 <glossdef>
6556 <para>
6557 Points to the parent directory for files to be packaged
6558 after they have been split into individual packages.
6559 This directory defaults to the following:
6560 <literallayout class='monospaced'>
6561 ${WORKDIR}/packages-split
6562 </literallayout>
6563 Under this directory, the build system creates
6564 directories for each package specified in
6565 <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>.
6566 Do not change this default.
6567 </para>
6568 </glossdef>
6569 </glossentry>
6570
6571 <glossentry id='var-PKGDESTWORK'><glossterm>PKGDESTWORK</glossterm>
6572 <glossdef>
6573 <para>
6574 Points to a temporary work area used by the
6575 <link linkend='ref-tasks-package'><filename>do_package</filename></link>
6576 task to write output from the
6577 <link linkend='ref-tasks-packagedata'><filename>do_packagedata</filename></link>
6578 task.
6579 The <filename>PKGDESTWORK</filename> location defaults to
6580 the following:
6581 <literallayout class='monospaced'>
6582 ${WORKDIR}/pkgdata
6583 </literallayout>
6584 The <filename>do_packagedata</filename> task then packages
6585 the data in the temporary work area and installs it into a
6586 shared directory pointed to by
6587 <link linkend='var-PKGDATA_DIR'><filename>PKGDATA_DIR</filename></link>.
6588 </para>
6589
6590 <para>
6591 Do not change this default.
6592 </para>
6593 </glossdef>
6594 </glossentry>
6595
6596 <glossentry id='var-PKGE'><glossterm>PKGE</glossterm>
6597 <glossdef>
6598 <para>
6599 The epoch of the output package built by the
6600 OpenEmbedded build system.
6601 By default, <filename>PKGE</filename> is set to
6602 <link linkend='var-PE'><filename>PE</filename></link>.
6603 </para>
6604 </glossdef>
6605 </glossentry>
6606
6607 <glossentry id='var-PKGR'><glossterm>PKGR</glossterm>
6608 <glossdef>
6609 <para>
6610 The revision of the output package built by the
6611 OpenEmbedded build system.
6612 By default, <filename>PKGR</filename> is set to
6613 <link linkend='var-PR'><filename>PR</filename></link>.
6614 </para>
6615 </glossdef>
6616 </glossentry>
6617
6618 <glossentry id='var-PKGV'><glossterm>PKGV</glossterm>
6619 <glossdef>
6620 <para>
6621 The version of the output package built by the
6622 OpenEmbedded build system.
6623 By default, <filename>PKGV</filename> is set to
6624 <link linkend='var-PV'><filename>PV</filename></link>.
6625 </para>
6626 </glossdef>
6627 </glossentry>
6628
6629 <glossentry id='var-PN'><glossterm>PN</glossterm>
6630 <glossdef>
6631 <para>This variable can have two separate functions depending on the context: a recipe
6632 name or a resulting package name.</para>
6633 <para><filename>PN</filename> refers to a recipe name in the context of a file used
6634 by the OpenEmbedded build system as input to create a package.
6635 The name is normally extracted from the recipe file name.
6636 For example, if the recipe is named
6637 <filename>expat_2.0.1.bb</filename>, then the default value of <filename>PN</filename>
6638 will be "expat".</para>
6639 <para>
6640 The variable refers to a package name in the context of a file created or produced by the
6641 OpenEmbedded build system.</para>
6642 <para>If applicable, the <filename>PN</filename> variable also contains any special
6643 suffix or prefix.
6644 For example, using <filename>bash</filename> to build packages for the native
6645 machine, <filename>PN</filename> is <filename>bash-native</filename>.
6646 Using <filename>bash</filename> to build packages for the target and for Multilib,
6647 <filename>PN</filename> would be <filename>bash</filename> and
6648 <filename>lib64-bash</filename>, respectively.
6649 </para>
6650 </glossdef>
6651 </glossentry>
6652
6653 <glossentry id='var-PNBLACKLIST'><glossterm>PNBLACKLIST</glossterm>
6654 <glossdef>
6655 <para>
6656 Lists recipes you do not want the OpenEmbedded build system
6657 to build.
6658 This variable works in conjunction with the
6659 <link linkend='ref-classes-blacklist'><filename>blacklist</filename></link>
6660 class, which the recipe must inherit globally.
6661 </para>
6662
6663 <para>
6664 To prevent a recipe from being built, inherit the class
6665 globally and use the variable in your
6666 <filename>local.conf</filename> file.
6667 Here is an example that prevents
6668 <filename>myrecipe</filename> from being built:
6669 <literallayout class='monospaced'>
6670 INHERIT += "blacklist"
6671 PNBLACKLIST[myrecipe] = "Not supported by our organization."
6672 </literallayout>
6673 </para>
6674 </glossdef>
6675 </glossentry>
6676
6677 <glossentry id='var-PR'><glossterm>PR</glossterm>
6678 <glossdef>
6679 <para>
6680 The revision of the recipe.
6681 The default value for this variable is "r0".
6682 </para>
6683 </glossdef>
6684 </glossentry>
6685
6686 <glossentry id='var-PREFERRED_PROVIDER'><glossterm>PREFERRED_PROVIDER</glossterm>
6687 <glossdef>
6688 <para>
6689 If multiple recipes provide an item, this variable
6690 determines which recipe should be given preference.
6691 You should always suffix the variable with the name of the
6692 provided item, and you should set it to the
6693 <link linkend='var-PN'><filename>PN</filename></link>
6694 of the recipe to which you want to give precedence.
6695 Some examples:
6696 <literallayout class='monospaced'>
6697 PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
6698 PREFERRED_PROVIDER_virtual/xserver = "xserver-xf86"
6699 PREFERRED_PROVIDER_virtual/libgl ?= "mesa"
6700 </literallayout>
6701 </para>
6702 </glossdef>
6703 </glossentry>
6704
6705 <glossentry id='var-PREFERRED_VERSION'><glossterm>PREFERRED_VERSION</glossterm>
6706 <glossdef>
6707 <para>
6708 If there are multiple versions of recipes available, this
6709 variable determines which recipe should be given preference.
6710 You must always suffix the variable with the
6711 <link linkend='var-PN'><filename>PN</filename></link>
6712 you want to select, and you should set the
6713 <link linkend='var-PV'><filename>PV</filename></link>
6714 accordingly for precedence.
6715 You can use the "<filename>%</filename>" character as a
6716 wildcard to match any number of characters, which can be
6717 useful when specifying versions that contain long revision
6718 numbers that could potentially change.
6719 Here are two examples:
6720 <literallayout class='monospaced'>
6721 PREFERRED_VERSION_python = "2.7.3"
6722 PREFERRED_VERSION_linux-yocto = "3.10%"
6723 </literallayout>
6724 </para>
6725 </glossdef>
6726 </glossentry>
6727
6728 <glossentry id='var-PREMIRRORS'><glossterm>PREMIRRORS</glossterm>
6729 <glossdef>
6730 <para>
6731 Specifies additional paths from which the OpenEmbedded
6732 build system gets source code.
6733 When the build system searches for source code, it first
6734 tries the local download directory.
6735 If that location fails, the build system tries locations
6736 defined by <filename>PREMIRRORS</filename>, the upstream
6737 source, and then locations specified by
6738 <link linkend='var-MIRRORS'><filename>MIRRORS</filename></link>
6739 in that order.
6740 </para>
6741
6742 <para>
6743 Assuming your distribution
6744 (<link linkend='var-DISTRO'><filename>DISTRO</filename></link>)
6745 is "poky", the default value for
6746 <filename>PREMIRRORS</filename> is defined in the
6747 <filename>conf/distro/poky.conf</filename> file in the
6748 <filename>meta-yocto</filename> Git repository.
6749 </para>
6750
6751 <para>
6752 Typically, you could add a specific server for the
6753 build system to attempt before any others by adding
6754 something like the following to the
6755 <filename>local.conf</filename> configuration file in the
6756 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>:
6757 <literallayout class='monospaced'>
6758 PREMIRRORS_prepend = "\
6759 git://.*/.* http://www.yoctoproject.org/sources/ \n \
6760 ftp://.*/.* http://www.yoctoproject.org/sources/ \n \
6761 http://.*/.* http://www.yoctoproject.org/sources/ \n \
6762 https://.*/.* http://www.yoctoproject.org/sources/ \n"
6763 </literallayout>
6764 These changes cause the build system to intercept
6765 Git, FTP, HTTP, and HTTPS requests and direct them to
6766 the <filename>http://</filename> sources mirror.
6767 You can use <filename>file://</filename> URLs to point
6768 to local directories or network shares as well.
6769 </para>
6770 </glossdef>
6771 </glossentry>
6772
6773 <glossentry id='var-PRINC'><glossterm>PRINC</glossterm>
6774 <glossdef>
6775
6776 <para>
6777 The <filename>PRINC</filename> variable has been deprecated
6778 and triggers a warning if detected during a build.
6779 For
6780 <link linkend='var-PR'><filename>PR</filename></link>
6781 increments on changes, use the PR service instead.
6782 You can find out more about this service in the
6783 "<ulink url='&YOCTO_DOCS_DEV_URL;#working-with-a-pr-service'>Working With a PR Service</ulink>"
6784 section in the Yocto Project Development Manual.
6785 </para>
6786<!--
6787
6788 <para>
6789 Causes the
6790 <link linkend='var-PR'><filename>PR</filename></link>
6791 variable of <filename>.bbappend</filename> files to
6792 dynamically increment.
6793 This increment minimizes the impact of layer ordering.
6794 </para>
6795
6796 <para>
6797 In order to ensure multiple <filename>.bbappend</filename>
6798 files can co-exist,
6799 <filename>PRINC</filename> should be self-referencing.
6800 This variable defaults to 0.
6801 </para>
6802
6803 <para>
6804 Following is an example that increments
6805 <filename>PR</filename> by two:
6806 <literallayout class='monospaced'>
6807 PRINC := "${@int(PRINC) + 2}"
6808 </literallayout>
6809 It is advisable not to use strings such as ".= '.1'" with the variable because
6810 this usage is very sensitive to layer ordering.
6811 You should avoid explicit assignments as they cannot
6812 adequately represent multiple
6813 <filename>.bbappend</filename> files.
6814 </para>
6815-->
6816 </glossdef>
6817 </glossentry>
6818
6819 <glossentry id='var-PRIVATE_LIBS'><glossterm>PRIVATE_LIBS</glossterm>
6820 <glossdef>
6821 <para>
6822 Specifies libraries installed within a recipe that
6823 should be ignored by the OpenEmbedded build system's
6824 shared library resolver.
6825 This variable is typically used when software being
6826 built by a recipe has its own private versions of a
6827 library normally provided by another recipe.
6828 In this case, you would not want the package containing
6829 the private libraries to be set as a dependency on other
6830 unrelated packages that should instead depend on the
6831 package providing the standard version of the library.
6832 </para>
6833
6834 <para>
6835 Libraries specified in this variable should be specified
6836 by their file name.
6837 For example, from the Firefox recipe in meta-browser:
6838 <literallayout class='monospaced'>
6839 PRIVATE_LIBS = "libmozjs.so \
6840 libxpcom.so \
6841 libnspr4.so \
6842 libxul.so \
6843 libmozalloc.so \
6844 libplc4.so \
6845 libplds4.so"
6846 </literallayout>
6847 </para>
6848 </glossdef>
6849 </glossentry>
6850
6851 <glossentry id='var-PROVIDES'><glossterm>PROVIDES</glossterm>
6852 <glossdef>
6853 <para>
6854 A list of aliases by which a particular recipe can be
6855 known.
6856 By default, a recipe's own
6857 <filename><link linkend='var-PN'>PN</link></filename>
6858 is implicitly already in its <filename>PROVIDES</filename>
6859 list.
6860 If a recipe uses <filename>PROVIDES</filename>, the
6861 additional aliases are synonyms for the recipe and can
6862 be useful satisfying dependencies of other recipes during
6863 the build as specified by
6864 <filename><link linkend='var-DEPENDS'>DEPENDS</link></filename>.
6865 </para>
6866
6867 <para>
6868 Consider the following example
6869 <filename>PROVIDES</filename> statement from a recipe
6870 file <filename>libav_0.8.11.bb</filename>:
6871 <literallayout class='monospaced'>
6872 PROVIDES += "libpostproc"
6873 </literallayout>
6874 The <filename>PROVIDES</filename> statement results in
6875 the "libav" recipe also being known as "libpostproc".
6876 </para>
6877 </glossdef>
6878 </glossentry>
6879
6880 <glossentry id='var-PRSERV_HOST'><glossterm>PRSERV_HOST</glossterm>
6881 <glossdef>
6882 <para>
6883 The network based
6884 <link linkend='var-PR'><filename>PR</filename></link>
6885 service host and port.
6886 </para>
6887
6888 <para>
6889 The <filename>conf/local.conf.sample.extended</filename>
6890 configuration file in the
6891 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
6892 shows how the <filename>PRSERV_HOST</filename> variable is
6893 set:
6894 <literallayout class='monospaced'>
6895 PRSERV_HOST = "localhost:0"
6896 </literallayout>
6897 You must set the variable if you want to automatically
6898 start a local
6899 <ulink url='&YOCTO_DOCS_DEV_URL;#working-with-a-pr-service'>PR service</ulink>.
6900 You can set <filename>PRSERV_HOST</filename> to other
6901 values to use a remote PR service.
6902 </para>
6903 </glossdef>
6904 </glossentry>
6905
6906 <glossentry id='var-PTEST_ENABLED'><glossterm>PTEST_ENABLED</glossterm>
6907 <glossdef>
6908 <para>
6909 Specifies whether or not
6910 <ulink url='&YOCTO_DOCS_DEV_URL;#testing-packages-with-ptest'>Package Test</ulink>
6911 (ptest) functionality is enabled when building a recipe.
6912 You should not set this variable directly.
6913 Enabling and disabling building Package Tests
6914 at build time should be done by adding "ptest" to (or
6915 removing it from)
6916 <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.
6917 </para>
6918 </glossdef>
6919 </glossentry>
6920
6921 <glossentry id='var-PV'><glossterm>PV</glossterm>
6922 <glossdef>
6923 <para>
6924 The version of the recipe.
6925 The version is normally extracted from the recipe filename.
6926 For example, if the recipe is named
6927 <filename>expat_2.0.1.bb</filename>, then the default value of <filename>PV</filename>
6928 will be "2.0.1".
6929 <filename>PV</filename> is generally not overridden within
6930 a recipe unless it is building an unstable (i.e. development) version from a source code repository
6931 (e.g. Git or Subversion).
6932 </para>
6933 </glossdef>
6934 </glossentry>
6935
6936 <glossentry id='var-PYTHON_ABI'><glossterm>PYTHON_ABI</glossterm>
6937 <glossdef>
6938 <para>
6939 When used by recipes that inherit the
6940 <link linkend='ref-classes-distutils3'><filename>distutils3</filename></link>,
6941 <link linkend='ref-classes-setuptools3'><filename>setuptools3</filename></link>,
6942 <link linkend='ref-classes-distutils'><filename>distutils</filename></link>,
6943 or
6944 <link linkend='ref-classes-setuptools'><filename>setuptools</filename></link>
6945 classes, denotes the Application Binary Interface (ABI)
6946 currently in use for Python.
6947 By default, the ABI is "m".
6948 You do not have to set this variable as the OpenEmbedded
6949 build system sets it for you.
6950 </para>
6951
6952 <para>
6953 The OpenEmbedded build system uses the ABI to construct
6954 directory names used when installing the Python headers
6955 and libraries in sysroot
6956 (e.g. <filename>.../python3.3m/...</filename>).
6957 </para>
6958
6959 <para>
6960 Recipes that inherit the
6961 <link linkend='ref-classes-distutils'><filename>distutils</filename></link>
6962 class during cross-builds also use this variable to
6963 locate the headers and libraries of the appropriate Python
6964 that the extension is targeting.
6965 </para>
6966 </glossdef>
6967 </glossentry>
6968
6969 <glossentry id='var-PYTHON_PN'><glossterm>PYTHON_PN</glossterm>
6970 <glossdef>
6971 <para>
6972 When used by recipes that inherit the
6973 <link linkend='ref-classes-distutils3'><filename>distutils3</filename></link>,
6974 <link linkend='ref-classes-setuptools3'><filename>setuptools3</filename></link>,
6975 <link linkend='ref-classes-distutils'><filename>distutils</filename></link>,
6976 or
6977 <link linkend='ref-classes-setuptools'><filename>setuptools</filename></link>
6978 classes, specifies the major Python version being built.
6979 For Python 2.x, <filename>PYTHON_PN</filename> would
6980 be "python2". For Python 3.x, the variable would be
6981 "python3".
6982 You do not have to set this variable as the
6983 OpenEmbedded build system automatically sets it for you.
6984 </para>
6985
6986 <para>
6987 The variable allows recipes to use common infrastructure
6988 such as the following:
6989 <literallayout class='monospaced'>
6990 DEPENDS += "${PYTHON_PN}-native"
6991 </literallayout>
6992 In the previous example, the version of the dependency
6993 is <filename>PYTHON_PN</filename>.
6994 </para>
6995 </glossdef>
6996 </glossentry>
6997
6998 </glossdiv>
6999
7000 <glossdiv id='var-glossary-q'><title>Q</title>
7001
7002 <glossentry id='var-QMAKE_PROFILES'><glossterm>QMAKE_PROFILES</glossterm>
7003 <glossdef>
7004 <para>
7005 Specifies your own subset of <filename>.pro</filename>
7006 files to be built for use with
7007 <filename>qmake</filename>.
7008 If you do not set this variable, all
7009 <filename>.pro</filename> files in the directory pointed to
7010 by <link linkend='var-S'><filename>S</filename></link>
7011 will be built by default.
7012 </para>
7013
7014 <para>
7015 This variable is used with recipes that inherit the
7016 <link linkend='ref-classes-qmake*'><filename>qmake_base</filename></link>
7017 class or other classes that inherit
7018 <filename>qmake_base</filename>.
7019 </para>
7020 </glossdef>
7021 </glossentry>
7022
7023 </glossdiv>
7024
7025 <glossdiv id='var-glossary-r'><title>R</title>
7026
7027 <glossentry id='var-RCONFLICTS'><glossterm>RCONFLICTS</glossterm>
7028 <glossdef>
7029 <para>
7030 The list of packages that conflict with packages.
7031 Note that packages will not be installed if conflicting
7032 packages are not first removed.
7033 </para>
7034
7035 <para>
7036 Like all package-controlling variables, you must always use
7037 them in conjunction with a package name override.
7038 Here is an example:
7039 <literallayout class='monospaced'>
7040 RCONFLICTS_${PN} = "<replaceable>another-conflicting-package-name</replaceable>"
7041 </literallayout>
7042 </para>
7043
7044 <para>
7045 BitBake, which the OpenEmbedded build system uses, supports
7046 specifying versioned dependencies.
7047 Although the syntax varies depending on the packaging
7048 format, BitBake hides these differences from you.
7049 Here is the general syntax to specify versions with
7050 the <filename>RCONFLICTS</filename> variable:
7051 <literallayout class='monospaced'>
7052 RCONFLICTS_${PN} = "<replaceable>package</replaceable> (<replaceable>operator</replaceable> <replaceable>version</replaceable>)"
7053 </literallayout>
7054 For <filename>operator</filename>, you can specify the
7055 following:
7056 <literallayout class='monospaced'>
7057 =
7058 &lt;
7059 &gt;
7060 &lt;=
7061 &gt;=
7062 </literallayout>
7063 For example, the following sets up a dependency on version
7064 1.2 or greater of the package <filename>foo</filename>:
7065 <literallayout class='monospaced'>
7066 RCONFLICTS_${PN} = "foo (>= 1.2)"
7067 </literallayout>
7068 </para>
7069 </glossdef>
7070 </glossentry>
7071
7072 <glossentry id='var-RDEPENDS'><glossterm>RDEPENDS</glossterm>
7073 <glossdef>
7074 <para>
7075 Lists a package's runtime dependencies (i.e. other packages)
7076 that must be installed in order for the built package to run
7077 correctly.
7078 If a package in this list cannot be found during the build,
7079 you will get a build error.
7080 </para>
7081
7082 <para>
7083 When you use the <filename>RDEPENDS</filename> variable
7084 in a recipe, you are essentially stating that the recipe's
7085 <link linkend='ref-tasks-build'><filename>do_build</filename></link>
7086 task depends on the existence of a specific package.
7087 Consider this simple example for two recipes named "a" and
7088 "b" that produce similarly named IPK packages.
7089 In this example, the <filename>RDEPENDS</filename>
7090 statement appears in the "a" recipe:
7091 <literallayout class='monospaced'>
7092 RDEPENDS_${PN} = "b"
7093 </literallayout>
7094 Here, the dependency is such that the
7095 <filename>do_build</filename> task for recipe "a" depends
7096 on the
7097 <link linkend='ref-tasks-package_write_ipk'><filename>do_package_write_ipk</filename></link>
7098 task of recipe "b".
7099 This means the package file for "b" must be available when
7100 the output for recipe "a" has been completely built.
7101 More importantly, package "a" will be marked as depending
7102 on package "b" in a manner that is understood by the
7103 package manager.
7104 </para>
7105
7106 <para>
7107 The names of the packages you list within
7108 <filename>RDEPENDS</filename> must be the names of other
7109 packages - they cannot be recipe names.
7110 Although package names and recipe names usually match,
7111 the important point here is that you are
7112 providing package names within the
7113 <filename>RDEPENDS</filename> variable.
7114 For an example of the default list of packages created from
7115 a recipe, see the
7116 <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>
7117 variable.
7118 </para>
7119
7120 <para>
7121 Because the <filename>RDEPENDS</filename> variable applies
7122 to packages being built, you should always use the variable
7123 in a form with an attached package name.
7124 For example, suppose you are building a development package
7125 that depends on the <filename>perl</filename> package.
7126 In this case, you would use the following
7127 <filename>RDEPENDS</filename> statement:
7128 <literallayout class='monospaced'>
7129 RDEPENDS_${PN}-dev += "perl"
7130 </literallayout>
7131 In the example, the development package depends on
7132 the <filename>perl</filename> package.
7133 Thus, the <filename>RDEPENDS</filename> variable has the
7134 <filename>${PN}-dev</filename> package name as part of the
7135 variable.
7136 </para>
7137
7138 <para>
7139 The package name you attach to the
7140 <filename>RDEPENDS</filename> variable must appear
7141 as it would in the <filename>PACKAGES</filename>
7142 namespace before any renaming of the output package by
7143 classes like
7144 <link linkend='ref-classes-debian'><filename>debian</filename></link>.
7145 </para>
7146
7147 <para>
7148 In many cases you do not need to explicitly add
7149 runtime dependencies using
7150 <filename>RDEPENDS</filename> since some automatic
7151 handling occurs:
7152 <itemizedlist>
7153 <listitem><para><emphasis><filename>shlibdeps</filename></emphasis>: If
7154 a runtime package contains a shared library
7155 (<filename>.so</filename>), the build
7156 processes the library in order to determine other
7157 libraries to which it is dynamically linked.
7158 The build process adds these libraries to
7159 <filename>RDEPENDS</filename> when creating the runtime
7160 package.</para></listitem>
7161 <listitem><para><emphasis><filename>pcdeps</filename></emphasis>: If
7162 the package ships a <filename>pkg-config</filename>
7163 information file, the build process uses this file
7164 to add items to the <filename>RDEPENDS</filename>
7165 variable to create the runtime packages.
7166 </para></listitem>
7167 </itemizedlist>
7168 </para>
7169
7170 <para>
7171 BitBake, which the OpenEmbedded build system uses, supports
7172 specifying versioned dependencies.
7173 Although the syntax varies depending on the packaging
7174 format, BitBake hides these differences from you.
7175 Here is the general syntax to specify versions with
7176 the <filename>RDEPENDS</filename> variable:
7177 <literallayout class='monospaced'>
7178 RDEPENDS_${PN} = "<replaceable>package</replaceable> (<replaceable>operator</replaceable> <replaceable>version</replaceable>)"
7179 </literallayout>
7180 For <filename>operator</filename>, you can specify the
7181 following:
7182 <literallayout class='monospaced'>
7183 =
7184 &lt;
7185 &gt;
7186 &lt;=
7187 &gt;=
7188 </literallayout>
7189 For example, the following sets up a dependency on version
7190 1.2 or greater of the package <filename>foo</filename>:
7191 <literallayout class='monospaced'>
7192 RDEPENDS_${PN} = "foo (>= 1.2)"
7193 </literallayout>
7194 </para>
7195
7196 <para>
7197 For information on build-time dependencies, see the
7198 <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>
7199 variable.
7200 </para>
7201 </glossdef>
7202 </glossentry>
7203
7204 <glossentry id='var-REQUIRED_DISTRO_FEATURES'><glossterm>REQUIRED_DISTRO_FEATURES</glossterm>
7205 <glossdef>
7206 <para>
7207 When inheriting the
7208 <link linkend='ref-classes-distro_features_check'><filename>distro_features_check</filename></link>
7209 class, this
7210 variable identifies distribution features that must
7211 exist in the current configuration in order for the
7212 OpenEmbedded build system to build the recipe.
7213 In other words, if the
7214 <filename>REQUIRED_DISTRO_FEATURES</filename> variable
7215 lists a feature that does not appear in
7216 <filename>DISTRO_FEATURES</filename> within the
7217 current configuration, an error occurs and the
7218 build stops.
7219 </para>
7220 </glossdef>
7221 </glossentry>
7222
7223 <glossentry id='var-RM_OLD_IMAGE'><glossterm>RM_OLD_IMAGE</glossterm>
7224 <glossdef>
7225 <para>
7226 Reclaims disk space by removing previously built
7227 versions of the same image from the
7228 <filename>images</filename> directory pointed to by the
7229 <link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link>
7230 variable.
7231 </para>
7232
7233 <para>
7234 Set this variable to "1" in your
7235 <filename>local.conf</filename> file to remove these
7236 images.
7237 </para>
7238 </glossdef>
7239 </glossentry>
7240
7241 <glossentry id='var-RM_WORK_EXCLUDE'><glossterm>RM_WORK_EXCLUDE</glossterm>
7242 <glossdef>
7243 <para>
7244 With <filename>rm_work</filename> enabled, this
7245 variable specifies a list of recipes whose work directories
7246 should not be removed.
7247 See the "<link linkend='ref-classes-rm-work'><filename>rm_work.bbclass</filename></link>"
7248 section for more details.
7249 </para>
7250 </glossdef>
7251 </glossentry>
7252
7253 <glossentry id='var-ROOT_HOME'><glossterm>ROOT_HOME</glossterm>
7254 <glossdef>
7255 <para>
7256 Defines the root home directory.
7257 By default, this directory is set as follows in the
7258 BitBake configuration file:
7259 <literallayout class='monospaced'>
7260 ROOT_HOME ??= "/home/root"
7261 </literallayout>
7262 <note>
7263 This default value is likely used because some
7264 embedded solutions prefer to have a read-only root
7265 filesystem and prefer to keep writeable data in one
7266 place.
7267 </note>
7268 </para>
7269
7270 <para>
7271 You can override the default by setting the variable
7272 in any layer or in the <filename>local.conf</filename> file.
7273 Because the default is set using a "weak" assignment
7274 (i.e. "??="), you can use either of the following forms
7275 to define your override:
7276 <literallayout class='monospaced'>
7277 ROOT_HOME = "/root"
7278 ROOT_HOME ?= "/root"
7279 </literallayout>
7280 These override examples use <filename>/root</filename>,
7281 which is probably the most commonly used override.
7282 </para>
7283 </glossdef>
7284 </glossentry>
7285
7286 <glossentry id='var-ROOTFS'><glossterm>ROOTFS</glossterm>
7287 <glossdef>
7288 <para>
7289 Indicates a filesystem image to include as the root
7290 filesystem.
7291 </para>
7292
7293 <para>
7294 The <filename>ROOTFS</filename> variable is an optional
7295 variable used with the
7296 <link linkend='ref-classes-bootimg'><filename>bootimg</filename></link>
7297 class.
7298 </para>
7299 </glossdef>
7300 </glossentry>
7301
7302 <glossentry id='var-ROOTFS_POSTPROCESS_COMMAND'><glossterm>ROOTFS_POSTPROCESS_COMMAND</glossterm>
7303 <glossdef>
7304 <para>
7305 Added by classes to run post processing commands once the
7306 OpenEmbedded build system has created the root filesystem.
7307 You can specify shell commands separated by semicolons:
7308 <literallayout class='monospaced'>
7309 ROOTFS_POSTPROCESS_COMMAND += "<replaceable>shell_command</replaceable>; ... "
7310 </literallayout>
7311 If you need to pass the path to the root filesystem within
7312 the command, you can use
7313 <filename>${IMAGE_ROOTFS}</filename>, which points to
7314 the root filesystem image.
7315 See the
7316 <link linkend='var-IMAGE_ROOTFS'><filename>IMAGE_ROOTFS</filename></link>
7317 variable for more information.
7318 </para>
7319 </glossdef>
7320 </glossentry>
7321
7322 <glossentry id='var-RPROVIDES'><glossterm>RPROVIDES</glossterm>
7323 <glossdef>
7324 <para>
7325 A list of package name aliases that a package also provides.
7326 These aliases are useful for satisfying runtime dependencies
7327 of other packages both during the build and on the target
7328 (as specified by
7329 <filename><link linkend='var-RDEPENDS'>RDEPENDS</link></filename>).
7330 <note>
7331 A package's own name is implicitly already in its
7332 <filename>RPROVIDES</filename> list.
7333 </note>
7334 </para>
7335 <para>
7336 As with all package-controlling variables, you must always
7337 use the variable in conjunction with a package name override.
7338 Here is an example:
7339 <literallayout class='monospaced'>
7340 RPROVIDES_${PN} = "widget-abi-2"
7341 </literallayout>
7342 </para>
7343 </glossdef>
7344 </glossentry>
7345
7346 <glossentry id='var-RRECOMMENDS'><glossterm>RRECOMMENDS</glossterm>
7347 <glossdef>
7348 <para>
7349 A list of packages that extends the usability of a package
7350 being built.
7351 The package being built does not depend on this list of
7352 packages in order to successfully build, but rather
7353 uses them for extended usability.
7354 To specify runtime dependencies for packages, see the
7355 <filename><link linkend='var-RDEPENDS'>RDEPENDS</link></filename>
7356 variable.
7357 </para>
7358
7359 <para>
7360 The package manager will automatically install the
7361 <filename>RRECOMMENDS</filename> list of packages when
7362 installing the built package.
7363 However, you can prevent listed packages from being
7364 installed by using the
7365 <link linkend='var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></link>,
7366 <link linkend='var-NO_RECOMMENDATIONS'><filename>NO_RECOMMENDATIONS</filename></link>,
7367 and
7368 <link linkend='var-PACKAGE_EXCLUDE'><filename>PACKAGE_EXCLUDE</filename></link>
7369 variables.
7370 </para>
7371
7372 <para>
7373 Packages specified in
7374 <filename>RRECOMMENDS</filename> need not actually be
7375 produced.
7376 However, a recipe must exist that provides each package,
7377 either through the
7378 <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>
7379 or
7380 <link linkend='var-PACKAGES_DYNAMIC'><filename>PACKAGES_DYNAMIC</filename></link>
7381 variables or the
7382 <link linkend='var-RPROVIDES'><filename>RPROVIDES</filename></link>
7383 variable, or an error will occur during the build.
7384 If such a recipe does exist and the package is not produced,
7385 the build continues without error.
7386 </para>
7387
7388 <para>
7389 Because the <filename>RRECOMMENDS</filename> variable
7390 applies to packages being built, you should always attach
7391 an override to the variable to specify the particular
7392 package whose usability is being extended.
7393 For example, suppose you are building a development package
7394 that is extended to support wireless functionality.
7395 In this case, you would use the following:
7396 <literallayout class='monospaced'>
7397 RRECOMMENDS_${PN}-dev += "<replaceable>wireless_package_name</replaceable>"
7398 </literallayout>
7399 In the example, the package name
7400 (<filename>${<link linkend='var-PN'>PN</link>}-dev</filename>)
7401 must appear as it would in the
7402 <filename><link linkend='var-PACKAGES'>PACKAGES</link></filename>
7403 namespace before any renaming of the output package by
7404 classes such as <filename>debian.bbclass</filename>.
7405 </para>
7406
7407 <para>
7408 BitBake, which the OpenEmbedded build system uses, supports
7409 specifying versioned recommends.
7410 Although the syntax varies depending on the packaging
7411 format, BitBake hides these differences from you.
7412 Here is the general syntax to specify versions with
7413 the <filename>RRECOMMENDS</filename> variable:
7414 <literallayout class='monospaced'>
7415 RRECOMMENDS_${PN} = "<replaceable>package</replaceable> (<replaceable>operator</replaceable> <replaceable>version</replaceable>)"
7416 </literallayout>
7417 For <filename>operator</filename>, you can specify the
7418 following:
7419 <literallayout class='monospaced'>
7420 =
7421 &lt;
7422 &gt;
7423 &lt;=
7424 &gt;=
7425 </literallayout>
7426 For example, the following sets up a recommend on version
7427 1.2 or greater of the package <filename>foo</filename>:
7428 <literallayout class='monospaced'>
7429 RRECOMMENDS_${PN} = "foo (>= 1.2)"
7430 </literallayout>
7431 </para>
7432 </glossdef>
7433 </glossentry>
7434
7435 <glossentry id='var-RREPLACES'><glossterm>RREPLACES</glossterm>
7436 <glossdef>
7437 <para>
7438 A list of packages replaced by a package.
7439 The package manager uses this variable to determine which
7440 package should be installed to replace other package(s)
7441 during an upgrade.
7442 In order to also have the other package(s) removed at the
7443 same time, you must add the name of the other
7444 package to the
7445 <filename><link linkend='var-RCONFLICTS'>RCONFLICTS</link></filename> variable.
7446 </para>
7447 <para>
7448 As with all package-controlling variables, you must use
7449 this variable in conjunction with a package name
7450 override.
7451 Here is an example:
7452 <literallayout class='monospaced'>
7453 RREPLACES_${PN} = "<replaceable>other-package-being-replaced</replaceable>"
7454 </literallayout>
7455 </para>
7456
7457 <para>
7458 BitBake, which the OpenEmbedded build system uses, supports
7459 specifying versioned replacements.
7460 Although the syntax varies depending on the packaging
7461 format, BitBake hides these differences from you.
7462 Here is the general syntax to specify versions with
7463 the <filename>RREPLACES</filename> variable:
7464 <literallayout class='monospaced'>
7465 RREPLACES_${PN} = "<replaceable>package</replaceable> (<replaceable>operator</replaceable> <replaceable>version</replaceable>)"
7466 </literallayout>
7467 For <filename>operator</filename>, you can specify the
7468 following:
7469 <literallayout class='monospaced'>
7470 =
7471 &lt;
7472 &gt;
7473 &lt;=
7474 &gt;=
7475 </literallayout>
7476 For example, the following sets up a replacement using
7477 version 1.2 or greater of the package
7478 <filename>foo</filename>:
7479 <literallayout class='monospaced'>
7480 RREPLACES_${PN} = "foo (>= 1.2)"
7481 </literallayout>
7482 </para>
7483 </glossdef>
7484 </glossentry>
7485
7486 <glossentry id='var-RSUGGESTS'><glossterm>RSUGGESTS</glossterm>
7487 <glossdef>
7488 <para>
7489 A list of additional packages that you can suggest for
7490 installation by the package manager at the time a package
7491 is installed.
7492 Not all package managers support this functionality.
7493 </para>
7494 <para>
7495 As with all package-controlling variables, you must always
7496 use this variable in conjunction with a package name
7497 override.
7498 Here is an example:
7499 <literallayout class='monospaced'>
7500 RSUGGESTS_${PN} = "<replaceable>useful-package</replaceable> <replaceable>another-package</replaceable>"
7501 </literallayout>
7502 </para>
7503 </glossdef>
7504 </glossentry>
7505
7506 </glossdiv>
7507
7508 <glossdiv id='var-glossary-s'><title>S</title>
7509
7510 <glossentry id='var-S'><glossterm>S</glossterm>
7511 <glossdef>
7512 <para>
7513 The location in the
7514 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
7515 where unpacked recipe source code resides.
7516 This location is within the work directory
7517 (<filename><link linkend='var-WORKDIR'>WORKDIR</link></filename>),
7518 which is not static.
7519 The unpacked source location depends on the recipe name
7520 (<filename><link linkend='var-PN'>PN</link></filename>) and
7521 recipe version
7522 (<filename><link linkend='var-PV'>PV</link></filename>) as
7523 follows:
7524 <literallayout class='monospaced'>
7525 ${WORKDIR}/${PN}-${PV}
7526 </literallayout>
7527 As an example, assume a
7528 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
7529 top-level folder named <filename>poky</filename> and a
7530 default Build Directory at <filename>poky/build</filename>.
7531 In this case, the work directory the build system uses
7532 to keep the unpacked recipe for <filename>db</filename>
7533 is the following:
7534 <literallayout class='monospaced'>
7535 poky/build/tmp/work/qemux86-poky-linux/db/5.1.19-r3/db-5.1.19
7536 </literallayout>
7537 </para>
7538 </glossdef>
7539 </glossentry>
7540
7541 <glossentry id='var-SANITY_REQUIRED_UTILITIES'><glossterm>SANITY_REQUIRED_UTILITIES</glossterm>
7542 <glossdef>
7543 <para>
7544 Specifies a list of command-line utilities that should be
7545 checked for during the initial sanity checking process when
7546 running BitBake.
7547 If any of the utilities are not installed on the build host,
7548 then BitBake immediately exits with an error.
7549 </para>
7550 </glossdef>
7551 </glossentry>
7552
7553 <glossentry id='var-SANITY_TESTED_DISTROS'><glossterm>SANITY_TESTED_DISTROS</glossterm>
7554 <glossdef>
7555 <para>
7556 A list of the host distribution identifiers that the
7557 build system has been tested against.
7558 Identifiers consist of the host distributor ID
7559 followed by the release,
7560 as reported by the <filename>lsb_release</filename> tool
7561 or as read from <filename>/etc/lsb-release</filename>.
7562 Separate the list items with explicit newline
7563 characters (<filename>\n</filename>).
7564 If <filename>SANITY_TESTED_DISTROS</filename> is not empty
7565 and the current value of
7566 <link linkend='var-NATIVELSBSTRING'><filename>NATIVELSBSTRING</filename></link>
7567 does not appear in the list, then the build system reports
7568 a warning that indicates the current host distribution has
7569 not been tested as a build host.
7570 </para>
7571 </glossdef>
7572 </glossentry>
7573
7574 <glossentry id='var-SDK_ARCH'><glossterm>SDK_ARCH</glossterm>
7575 <glossdef>
7576 <para>
7577 The target architecture for the SDK.
7578 Typically, you do not directly set this variable.
7579 Instead, use
7580 <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>.
7581 </para>
7582 </glossdef>
7583 </glossentry>
7584
7585 <glossentry id='var-SDK_DEPLOY'><glossterm>SDK_DEPLOY</glossterm>
7586 <glossdef>
7587 <para>
7588 The directory set up and used by the
7589 <link linkend='ref-classes-populate-sdk'><filename>populate_sdk_base</filename></link>
7590 to which the SDK is deployed.
7591 The <filename>populate_sdk_base</filename> class defines
7592 <filename>SDK_DEPLOY</filename> as follows:
7593 <literallayout class='monospaced'>
7594 SDK_DEPLOY = "${<link linkend='var-TMPDIR'>TMPDIR</link>}/deploy/sdk"
7595 </literallayout>
7596 </para>
7597 </glossdef>
7598 </glossentry>
7599
7600 <glossentry id='var-SDK_DIR'><glossterm>SDK_DIR</glossterm>
7601 <glossdef>
7602 <para>
7603 The parent directory used by the OpenEmbedded build system
7604 when creating SDK output.
7605 The
7606 <link linkend='ref-classes-populate-sdk-*'><filename>populate_sdk_base</filename></link>
7607 class defines the variable as follows:
7608 <literallayout class='monospaced'>
7609 SDK_DIR = "${<link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>}/sdk"
7610 </literallayout>
7611 <note>
7612 The <filename>SDK_DIR</filename> directory is a
7613 temporary directory as it is part of
7614 <filename>WORKDIR</filename>.
7615 The final output directory is
7616 <link linkend='var-SDK_DEPLOY'><filename>SDK_DEPLOY</filename></link>.
7617 </note>
7618 </para>
7619 </glossdef>
7620 </glossentry>
7621
7622 <glossentry id='var-SDK_NAME'><glossterm>SDK_NAME</glossterm>
7623 <glossdef>
7624 <para>
7625 The base name for SDK output files.
7626 The name is derived from the
7627 <link linkend='var-DISTRO'><filename>DISTRO</filename></link>,
7628 <link linkend='var-TCLIBC'><filename>TCLIBC</filename></link>,
7629 <link linkend='var-SDK_ARCH'><filename>SDK_ARCH</filename></link>,
7630 <link linkend='var-IMAGE_BASENAME'><filename>IMAGE_BASENAME</filename></link>,
7631 and
7632 <link linkend='var-TUNE_PKGARCH'><filename>TUNE_PKGARCH</filename></link>
7633 variables:
7634 <literallayout class='monospaced'>
7635 SDK_NAME = "${DISTRO}-${TCLIBC}-${SDK_ARCH}-${IMAGE_BASENAME}-${TUNE_PKGARCH}"
7636 </literallayout>
7637 </para>
7638 </glossdef>
7639 </glossentry>
7640
7641 <glossentry id='var-SDK_OUTPUT'><glossterm>SDK_OUTPUT</glossterm>
7642 <glossdef>
7643 <para>
7644 The location used by the OpenEmbedded build system when
7645 creating SDK output.
7646 The
7647 <link linkend='ref-classes-populate-sdk-*'><filename>populate_sdk_base</filename></link>
7648 class defines the variable as follows:
7649 <literallayout class='monospaced'>
7650 SDK_OUTPUT = "${<link linkend='var-SDK_DIR'>SDK_DIR</link>}/image"
7651 </literallayout>
7652 <note>
7653 The <filename>SDK_OUTPUT</filename> directory is a
7654 temporary directory as it is part of
7655 <filename>WORKDIR</filename> by way of
7656 <filename>SDK_DIR</filename>.
7657 The final output directory is
7658 <link linkend='var-SDK_DEPLOY'><filename>SDK_DEPLOY</filename></link>.
7659 </note>
7660
7661 </para>
7662 </glossdef>
7663 </glossentry>
7664
7665 <glossentry id='var-SDK_PACKAGE_ARCHS'><glossterm>SDK_PACKAGE_ARCHS</glossterm>
7666 <glossdef>
7667 <para>
7668 Specifies a list of architectures compatible with
7669 the SDK machine.
7670 This variable is set automatically and should not
7671 normally be hand-edited.
7672 Entries are separated using spaces and listed in order
7673 of priority.
7674 The default value for
7675 <filename>SDK_PACKAGE_ARCHS</filename> is "all any noarch
7676 ${SDK_ARCH}-${SDKPKGSUFFIX}".
7677 </para>
7678 </glossdef>
7679 </glossentry>
7680
7681 <glossentry id='var-SDKIMAGE_FEATURES'><glossterm>SDKIMAGE_FEATURES</glossterm>
7682 <glossdef>
7683 <para>Equivalent to
7684 <filename><link linkend='var-IMAGE_FEATURES'>IMAGE_FEATURES</link></filename>.
7685 However, this variable applies to the SDK generated from an
7686 image using the following command:
7687 <literallayout class='monospaced'>
7688 $ bitbake -c populate_sdk <replaceable>imagename</replaceable>
7689 </literallayout>
7690 </para>
7691 </glossdef>
7692 </glossentry>
7693
7694 <glossentry id='var-SDKMACHINE'><glossterm>SDKMACHINE</glossterm>
7695 <glossdef>
7696 <para>
7697 The machine for which the Application Development Toolkit
7698 (ADT) or SDK is built.
7699 In other words, the SDK or ADT is built such that it
7700 runs on the target you specify with the
7701 <filename>SDKMACHINE</filename> value.
7702 The value points to a corresponding
7703 <filename>.conf</filename> file under
7704 <filename>conf/machine-sdk/</filename>.
7705 </para>
7706
7707 <para>
7708 You can use "i686" and "x86_64" as possible values
7709 for this variable. The variable defaults to "i686"
7710 and is set in the local.conf file in the Build Directory.
7711 <literallayout class='monospaced'>
7712 SDKMACHINE ?= "i686"
7713 </literallayout>
7714 <note>
7715 You cannot set the <filename>SDKMACHINE</filename>
7716 variable in your distribution configuration file.
7717 If you do, the configuration will not take affect.
7718 </note>
7719 </para>
7720 </glossdef>
7721 </glossentry>
7722
7723 <glossentry id='var-SDKPATH'><glossterm>SDKPATH</glossterm>
7724 <glossdef>
7725 <para>
7726 Defines the path offered to the user for installation
7727 of the SDK that is generated by the OpenEmbedded build
7728 system.
7729 The path appears as the default location for installing
7730 the SDK when you run the SDK's installation script.
7731 You can override the offered path when you run the
7732 script.
7733 </para>
7734 </glossdef>
7735 </glossentry>
7736
7737 <glossentry id='var-SECTION'><glossterm>SECTION</glossterm>
7738 <glossdef>
7739 <para>The section in which packages should be categorized.
7740 Package management utilities can make use of this variable.</para>
7741 </glossdef>
7742 </glossentry>
7743
7744 <glossentry id='var-SELECTED_OPTIMIZATION'><glossterm>SELECTED_OPTIMIZATION</glossterm>
7745 <glossdef>
7746 <para>
7747 Specifies the optimization flags passed to the C compiler
7748 when building for the target.
7749 The flags are passed through the default value of the
7750 <link linkend='var-TARGET_CFLAGS'><filename>TARGET_CFLAGS</filename></link>
7751 variable.
7752 </para>
7753
7754 <para>
7755 The <filename>SELECTED_OPTIMIZATION</filename> variable
7756 takes the value of
7757 <filename><link linkend='var-FULL_OPTIMIZATION'>FULL_OPTIMIZATION</link></filename>
7758 unless <filename><link linkend='var-DEBUG_BUILD'>DEBUG_BUILD</link></filename> = "1".
7759 If that is the case, the value of
7760 <filename><link linkend='var-DEBUG_OPTIMIZATION'>DEBUG_OPTIMIZATION</link></filename> is used.
7761 </para>
7762 </glossdef>
7763 </glossentry>
7764
7765 <glossentry id='var-SERIAL_CONSOLE'><glossterm>SERIAL_CONSOLE</glossterm>
7766 <glossdef>
7767 <para>
7768 Defines a serial console (TTY) to enable using getty.
7769 Provide a value that specifies the baud rate followed by
7770 the TTY device name separated by a space.
7771 You cannot specify more than one TTY device:
7772 <literallayout class='monospaced'>
7773 SERIAL_CONSOLE = "115200 ttyS0"
7774 </literallayout>
7775 <note>
7776 The <filename>SERIAL_CONSOLE</filename> variable
7777 is deprecated.
7778 Please use the
7779 <link linkend='var-SERIAL_CONSOLES'><filename>SERIAL_CONSOLES</filename></link>
7780 variable.
7781 </note>
7782 </para>
7783 </glossdef>
7784 </glossentry>
7785
7786 <glossentry id='var-SERIAL_CONSOLES'><glossterm>SERIAL_CONSOLES</glossterm>
7787 <glossdef>
7788 <para>
7789 Defines the serial consoles (TTYs) to enable using getty.
7790 Provide a value that specifies the baud rate followed by
7791 the TTY device name separated by a semicolon.
7792 Use spaces to separate multiple devices:
7793 <literallayout class='monospaced'>
7794 SERIAL_CONSOLES = "115200;ttyS0 115200;ttyS1"
7795 </literallayout>
7796 </para>
7797 </glossdef>
7798 </glossentry>
7799
7800 <glossentry id='var-SERIAL_CONSOLES_CHECK'><glossterm>SERIAL_CONSOLES_CHECK</glossterm>
7801 <glossdef>
7802 <para>
7803 Similar to
7804 <link linkend='var-SERIAL_CONSOLES'><filename>SERIAL_CONSOLES</filename></link>
7805 except the device is checked for existence before attempting
7806 to enable it.
7807 This variable is currently only supported with SysVinit
7808 (i.e. not with systemd).
7809 </para>
7810 </glossdef>
7811 </glossentry>
7812
7813 <glossentry id='var-SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS'><glossterm>SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS</glossterm>
7814 <glossdef>
7815 <para>
7816 A list of recipe dependencies that should not be used to
7817 determine signatures of tasks from one recipe when they
7818 depend on tasks from another recipe.
7819 For example:
7820 <literallayout class='monospaced'>
7821 SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += "intone->mplayer2"
7822 </literallayout>
7823 In this example, <filename>intone</filename> depends on
7824 <filename>mplayer2</filename>.
7825 </para>
7826
7827 <para>
7828 Use of this variable is one mechanism to remove dependencies
7829 that affect task signatures and thus force rebuilds when a
7830 recipe changes.
7831 <note><title>Caution</title>
7832 If you add an inappropriate dependency for a recipe
7833 relationship, the software might break during
7834 runtime if the interface of the second recipe was
7835 changed after the first recipe had been built.
7836 </note>
7837 </para>
7838 </glossdef>
7839 </glossentry>
7840
7841 <glossentry id='var-SIGGEN_EXCLUDERECIPES_ABISAFE'><glossterm>SIGGEN_EXCLUDERECIPES_ABISAFE</glossterm>
7842 <glossdef>
7843 <para>
7844 A list of recipes that are completely stable and will
7845 never change.
7846 The ABI for the recipes in the list are presented by
7847 output from the tasks run to build the recipe.
7848 Use of this variable is one way to remove dependencies from
7849 one recipe on another that affect task signatures and
7850 thus force rebuilds when the recipe changes.
7851 <note><title>Caution</title>
7852 If you add an inappropriate variable to this list,
7853 the software might break at runtime if the
7854 interface of the recipe was changed after the other
7855 had been built.
7856 </note>
7857 </para>
7858 </glossdef>
7859 </glossentry>
7860
7861 <glossentry id='var-SITEINFO_BITS'><glossterm>SITEINFO_BITS</glossterm>
7862 <glossdef>
7863 <para>
7864 Specifies the number of bits for the target system CPU.
7865 The value should be either "32" or "64".
7866 </para>
7867 </glossdef>
7868 </glossentry>
7869
7870 <glossentry id='var-SITEINFO_ENDIANNESS'><glossterm>SITEINFO_ENDIANNESS</glossterm>
7871 <glossdef>
7872 <para>
7873 Specifies the endian byte order of the target system.
7874 The value should be either "le" for little-endian or "be" for big-endian.
7875 </para>
7876 </glossdef>
7877 </glossentry>
7878
7879 <glossentry id='var-SOC_FAMILY'><glossterm>SOC_FAMILY</glossterm>
7880 <glossdef>
7881 <para>
7882 Groups together machines based upon the same family
7883 of SOC (System On Chip).
7884 You typically set this variable in a common
7885 <filename>.inc</filename> file that you include in the
7886 configuration files of all the machines.
7887 <note>
7888 You must include
7889 <filename>conf/machine/include/soc-family.inc</filename>
7890 for this variable to appear in
7891 <link linkend='var-MACHINEOVERRIDES'><filename>MACHINEOVERRIDES</filename></link>.
7892 </note>
7893 </para>
7894 </glossdef>
7895 </glossentry>
7896
7897 <glossentry id='var-SOLIBS'><glossterm>SOLIBS</glossterm>
7898 <glossdef>
7899 <para>
7900 Defines the suffix for shared libraries used on the
7901 target platform.
7902 By default, this suffix is ".so.*" for all Linux-based
7903 systems and is defined in the
7904 <filename>meta/conf/bitbake.conf</filename> configuration
7905 file.
7906 </para>
7907
7908 <para>
7909 You will see this variable referenced in the default values
7910 of <filename>FILES_${PN}</filename>.
7911 </para>
7912 </glossdef>
7913 </glossentry>
7914
7915 <glossentry id='var-SOLIBSDEV'><glossterm>SOLIBSDEV</glossterm>
7916 <glossdef>
7917 <para>
7918 Defines the suffix for the development symbolic link
7919 (symlink) for shared libraries on the target platform.
7920 By default, this suffix is ".so" for Linux-based
7921 systems and is defined in the
7922 <filename>meta/conf/bitbake.conf</filename> configuration
7923 file.
7924 </para>
7925
7926 <para>
7927 You will see this variable referenced in the default values
7928 of <filename>FILES_${PN}-dev</filename>.
7929 </para>
7930 </glossdef>
7931 </glossentry>
7932
7933 <glossentry id='var-SOURCE_MIRROR_URL'><glossterm>SOURCE_MIRROR_URL</glossterm>
7934 <glossdef>
7935 <para>
7936 Defines your own
7937 <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>
7938 from which to first fetch source before attempting to fetch
7939 from the upstream specified in
7940 <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>.
7941 </para>
7942
7943 <para>
7944 To use this variable, you must globally inherit the
7945 <link linkend='ref-classes-own-mirrors'><filename>own-mirrors</filename></link>
7946 class and then provide the URL to your mirrors.
7947 Here is an example:
7948 <literallayout class='monospaced'>
7949 INHERIT += "own-mirrors"
7950 SOURCE_MIRROR_URL = "http://example.com/my-source-mirror"
7951 </literallayout>
7952 <note>
7953 You can specify only a single URL in
7954 <filename>SOURCE_MIRROR_URL</filename>.
7955 </note>
7956 </para>
7957 </glossdef>
7958 </glossentry>
7959
7960 <glossentry id='var-SPDXLICENSEMAP'><glossterm>SPDXLICENSEMAP</glossterm>
7961 <glossdef>
7962 <para>
7963 Maps commonly used license names to their SPDX counterparts
7964 found in <filename>meta/files/common-licenses/</filename>.
7965 For the default <filename>SPDXLICENSEMAP</filename>
7966 mappings, see the
7967 <filename>meta/conf/licenses.conf</filename> file.
7968 </para>
7969
7970 <para>
7971 For additional information, see the
7972 <link linkend='var-LICENSE'><filename>LICENSE</filename></link>
7973 variable.
7974 </para>
7975 </glossdef>
7976 </glossentry>
7977
7978 <glossentry id='var-SPECIAL_PKGSUFFIX'><glossterm>SPECIAL_PKGSUFFIX</glossterm>
7979 <glossdef>
7980 <para>
7981 A list of prefixes for <link linkend='var-PN'><filename>PN</filename></link> used by the
7982 OpenEmbedded build system to create variants of recipes or packages.
7983 The list specifies the prefixes to strip off during certain circumstances
7984 such as the generation of the <link linkend='var-BPN'><filename>BPN</filename></link> variable.
7985 </para>
7986 </glossdef>
7987 </glossentry>
7988
7989 <glossentry id='var-SRC_URI'><glossterm>SRC_URI</glossterm>
7990 <glossdef>
7991 <para>The list of source files - local or remote.
7992 This variable tells the OpenEmbedded build system which bits
7993 to pull in for the build and how to pull them in.
7994 For example, if the recipe or append file only needs to
7995 fetch a tarball from the Internet, the recipe or
7996 append file uses a single <filename>SRC_URI</filename>
7997 entry.
7998 On the other hand, if the recipe or append file needs to
7999 fetch a tarball, apply two patches, and include a custom
8000 file, the recipe or append file would include four
8001 instances of the variable.</para>
8002 <para>The following list explains the available URI protocols:
8003 <itemizedlist>
8004 <listitem><para><emphasis><filename>file://</filename> -</emphasis>
8005 Fetches files, which are usually files shipped with
8006 the
8007 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>,
8008 from the local machine.
8009 The path is relative to the
8010 <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>
8011 variable.
8012 Thus, the build system searches, in order, from the
8013 following directories, which are assumed to be a
8014 subdirectories of the directory in which the
8015 recipe file (<filename>.bb</filename>) or
8016 append file (<filename>.bbappend</filename>)
8017 resides:
8018 <itemizedlist>
8019 <listitem><para><emphasis><filename>${BPN}</filename> -</emphasis>
8020 The base recipe name without any special
8021 suffix or version numbers.
8022 </para></listitem>
8023 <listitem><para><emphasis><filename>${BP}</filename> -</emphasis>
8024 <filename>${<link linkend='var-BPN'>BPN</link>}-${PV}</filename>.
8025 The base recipe name and version but without
8026 any special package name suffix.
8027 </para></listitem>
8028 <listitem><para><emphasis>files -</emphasis>
8029 Files within a directory, which is named
8030 <filename>files</filename> and is also
8031 alongside the recipe or append file.
8032 </para></listitem>
8033 </itemizedlist>
8034 <note>
8035 If you want the build system to pick up files
8036 specified through a
8037 <filename>SRC_URI</filename>
8038 statement from your append file, you need to be
8039 sure to extend the
8040 <filename>FILESPATH</filename>
8041 variable by also using the
8042 <link linkend='var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></link>
8043 variable from within your append file.
8044 </note>
8045 </para></listitem>
8046 <listitem><para><emphasis><filename>bzr://</filename> -</emphasis> Fetches files from a
8047 Bazaar revision control repository.</para></listitem>
8048 <listitem><para><emphasis><filename>git://</filename> -</emphasis> Fetches files from a
8049 Git revision control repository.</para></listitem>
8050 <listitem><para><emphasis><filename>osc://</filename> -</emphasis> Fetches files from
8051 an OSC (OpenSUSE Build service) revision control repository.</para></listitem>
8052 <listitem><para><emphasis><filename>repo://</filename> -</emphasis> Fetches files from
8053 a repo (Git) repository.</para></listitem>
8054 <listitem><para><emphasis><filename>ccrc://</filename> -</emphasis>
8055 Fetches files from a ClearCase repository.
8056 </para></listitem>
8057 <listitem><para><emphasis><filename>http://</filename> -</emphasis> Fetches files from
8058 the Internet using <filename>http</filename>.</para></listitem>
8059 <listitem><para><emphasis><filename>https://</filename> -</emphasis> Fetches files
8060 from the Internet using <filename>https</filename>.</para></listitem>
8061 <listitem><para><emphasis><filename>ftp://</filename> -</emphasis> Fetches files
8062 from the Internet using <filename>ftp</filename>.</para></listitem>
8063 <listitem><para><emphasis><filename>cvs://</filename> -</emphasis> Fetches files from
8064 a CVS revision control repository.</para></listitem>
8065 <listitem><para><emphasis><filename>hg://</filename> -</emphasis> Fetches files from
8066 a Mercurial (<filename>hg</filename>) revision control repository.</para></listitem>
8067 <listitem><para><emphasis><filename>p4://</filename> -</emphasis> Fetches files from
8068 a Perforce (<filename>p4</filename>) revision control repository.</para></listitem>
8069 <listitem><para><emphasis><filename>ssh://</filename> -</emphasis> Fetches files from
8070 a secure shell.</para></listitem>
8071 <listitem><para><emphasis><filename>svn://</filename> -</emphasis> Fetches files from
8072 a Subversion (<filename>svn</filename>) revision control repository.</para></listitem>
8073 </itemizedlist>
8074 </para>
8075 <para>Standard and recipe-specific options for <filename>SRC_URI</filename> exist.
8076 Here are standard options:
8077 <itemizedlist>
8078 <listitem><para><emphasis><filename>apply</filename> -</emphasis> Whether to apply
8079 the patch or not.
8080 The default action is to apply the patch.</para></listitem>
8081 <listitem><para><emphasis><filename>striplevel</filename> -</emphasis> Which
8082 striplevel to use when applying the patch.
8083 The default level is 1.</para></listitem>
8084 <listitem><para><emphasis><filename>patchdir</filename> -</emphasis> Specifies
8085 the directory in which the patch should be applied.
8086 The default is <filename>${</filename><link linkend='var-S'><filename>S</filename></link><filename>}</filename>.
8087 </para></listitem>
8088 </itemizedlist>
8089 </para>
8090 <para>Here are options specific to recipes building code from a revision control system:
8091 <itemizedlist>
8092 <listitem><para><emphasis><filename>mindate</filename> -</emphasis>
8093 Apply the patch only if
8094 <link linkend='var-SRCDATE'><filename>SRCDATE</filename></link>
8095 is equal to or greater than <filename>mindate</filename>.
8096 </para></listitem>
8097 <listitem><para><emphasis><filename>maxdate</filename> -</emphasis>
8098 Apply the patch only if <filename>SRCDATE</filename>
8099 is not later than <filename>mindate</filename>.
8100 </para></listitem>
8101 <listitem><para><emphasis><filename>minrev</filename> -</emphasis>
8102 Apply the patch only if <filename>SRCREV</filename>
8103 is equal to or greater than <filename>minrev</filename>.
8104 </para></listitem>
8105 <listitem><para><emphasis><filename>maxrev</filename> -</emphasis>
8106 Apply the patch only if <filename>SRCREV</filename>
8107 is not later than <filename>maxrev</filename>.
8108 </para></listitem>
8109 <listitem><para><emphasis><filename>rev</filename> -</emphasis>
8110 Apply the patch only if <filename>SRCREV</filename>
8111 is equal to <filename>rev</filename>.
8112 </para></listitem>
8113 <listitem><para><emphasis><filename>notrev</filename> -</emphasis>
8114 Apply the patch only if <filename>SRCREV</filename>
8115 is not equal to <filename>rev</filename>.
8116 </para></listitem>
8117 </itemizedlist>
8118 </para>
8119 <para>Here are some additional options worth mentioning:
8120 <itemizedlist>
8121 <listitem><para><emphasis><filename>unpack</filename> -</emphasis> Controls
8122 whether or not to unpack the file if it is an archive.
8123 The default action is to unpack the file.</para></listitem>
8124 <listitem><para><emphasis><filename>subdir</filename> -</emphasis> Places the file
8125 (or extracts its contents) into the specified
8126 subdirectory of <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>.
8127 This option is useful for unusual tarballs or other archives that
8128 do not have their files already in a subdirectory within the archive.
8129 </para></listitem>
8130 <listitem><para><emphasis><filename>name</filename> -</emphasis> Specifies a
8131 name to be used for association with <filename>SRC_URI</filename> checksums
8132 when you have more than one file specified in <filename>SRC_URI</filename>.
8133 </para></listitem>
8134 <listitem><para><emphasis><filename>downloadfilename</filename> -</emphasis> Specifies
8135 the filename used when storing the downloaded file.</para></listitem>
8136 </itemizedlist>
8137 </para>
8138 </glossdef>
8139 </glossentry>
8140
8141 <glossentry id='var-SRC_URI_OVERRIDES_PACKAGE_ARCH'><glossterm>SRC_URI_OVERRIDES_PACKAGE_ARCH</glossterm>
8142 <glossdef>
8143 <para>
8144 By default, the OpenEmbedded build system automatically detects whether
8145 <filename><link linkend='var-SRC_URI'>SRC_URI</link></filename>
8146 contains files that are machine-specific.
8147 If so, the build system automatically changes
8148 <filename><link linkend='var-PACKAGE_ARCH'>PACKAGE_ARCH</link></filename>.
8149 Setting this variable to "0" disables this behavior.
8150 </para>
8151 </glossdef>
8152 </glossentry>
8153
8154 <glossentry id='var-SRCDATE'><glossterm>SRCDATE</glossterm>
8155 <glossdef>
8156 <para>
8157 The date of the source code used to build the package.
8158 This variable applies only if the source was fetched from a Source Code Manager (SCM).
8159 </para>
8160 </glossdef>
8161 </glossentry>
8162
8163 <glossentry id='var-SRCPV'><glossterm>SRCPV</glossterm>
8164 <glossdef>
8165 <para>
8166 Returns the version string of the current package.
8167 This string is used to help define the value of
8168 <link linkend='var-PV'><filename>PV</filename></link>.
8169 </para>
8170
8171 <para>
8172 The <filename>SRCPV</filename> variable is defined in the
8173 <filename>meta/conf/bitbake.conf</filename> configuration
8174 file in the
8175 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
8176 as follows:
8177 <literallayout class='monospaced'>
8178 SRCPV = "${@bb.fetch2.get_srcrev(d)}"
8179 </literallayout>
8180 </para>
8181
8182 <para>
8183 Recipes that need to define <filename>PV</filename> do so
8184 with the help of the <filename>SRCPV</filename>.
8185 For example, the <filename>ofono</filename> recipe
8186 (<filename>ofono_git.bb</filename>) located in
8187 <filename>meta/recipes-connectivity</filename> in the
8188 Source Directory defines <filename>PV</filename> as
8189 follows:
8190 <literallayout class='monospaced'>
8191 PV = "0.12-git${SRCPV}"
8192 </literallayout>
8193 </para>
8194 </glossdef>
8195 </glossentry>
8196
8197 <glossentry id='var-SRCREV'><glossterm>SRCREV</glossterm>
8198 <glossdef>
8199 <para>
8200 The revision of the source code used to build the package.
8201 This variable applies to Subversion, Git, Mercurial and Bazaar
8202 only.
8203 Note that if you wish to build a fixed revision and you wish
8204 to avoid performing a query on the remote repository every time
8205 BitBake parses your recipe, you should specify a <filename>SRCREV</filename> that is a
8206 full revision identifier and not just a tag.
8207 </para>
8208 </glossdef>
8209 </glossentry>
8210
8211 <glossentry id='var-SSTATE_DIR'><glossterm>SSTATE_DIR</glossterm>
8212 <glossdef>
8213 <para>The directory for the shared state cache.</para>
8214 </glossdef>
8215 </glossentry>
8216
8217 <glossentry id='var-SSTATE_MIRROR_ALLOW_NETWORK'><glossterm>SSTATE_MIRROR_ALLOW_NETWORK</glossterm>
8218 <glossdef>
8219 <para>
8220 If set to "1", allows fetches from
8221 mirrors that are specified in
8222 <link linkend='var-SSTATE_MIRRORS'><filename>SSTATE_MIRRORS</filename></link>
8223 to work even when fetching from the network has been
8224 disabled by setting <filename>BB_NO_NETWORK</filename>
8225 to "1".
8226 Using the
8227 <filename>SSTATE_MIRROR_ALLOW_NETWORK</filename>
8228 variable is useful if you have set
8229 <filename>SSTATE_MIRRORS</filename> to point to an
8230 internal server for your shared state cache, but
8231 you want to disable any other fetching from the network.
8232 </para>
8233 </glossdef>
8234 </glossentry>
8235
8236 <glossentry id='var-SSTATE_MIRRORS'><glossterm>SSTATE_MIRRORS</glossterm>
8237 <glossdef>
8238 <para>
8239 Configures the OpenEmbedded build system to search other
8240 mirror locations for prebuilt cache data objects before
8241 building out the data.
8242 This variable works like fetcher
8243 <link linkend='var-MIRRORS'><filename>MIRRORS</filename></link>
8244 and <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>
8245 and points to the cache locations to check for the shared
8246 objects.
8247 </para>
8248
8249 <para>
8250 You can specify a filesystem directory or a remote URL such
8251 as HTTP or FTP.
8252 The locations you specify need to contain the shared state
8253 cache (sstate-cache) results from previous builds.
8254 The sstate-cache you point to can also be from builds on
8255 other machines.
8256 </para>
8257
8258 <para>
8259 If a mirror uses the same structure as
8260 <link linkend='var-SSTATE_DIR'><filename>SSTATE_DIR</filename></link>,
8261 you need to add
8262 "PATH" at the end as shown in the examples below.
8263 The build system substitutes the correct path within the
8264 directory structure.
8265 <literallayout class='monospaced'>
8266 SSTATE_MIRRORS ?= "\
8267 file://.* http://<replaceable>someserver</replaceable>.tld/share/sstate/PATH \n \
8268 file://.* file:///<replaceable>some-local-dir</replaceable>/sstate/PATH"
8269 </literallayout>
8270 </para>
8271 </glossdef>
8272 </glossentry>
8273
8274 <glossentry id='var-STAGING_BASE_LIBDIR_NATIVE'><glossterm>STAGING_BASE_LIBDIR_NATIVE</glossterm>
8275 <glossdef>
8276 <para>
8277 Specifies the path to the <filename>/lib</filename>
8278 subdirectory of the sysroot directory for the
8279 build host.
8280 </para>
8281 </glossdef>
8282 </glossentry>
8283
8284 <glossentry id='var-STAGING_BASELIBDIR'><glossterm>STAGING_BASELIBDIR</glossterm>
8285 <glossdef>
8286 <para>
8287 Specifies the path to the <filename>/lib</filename>
8288 subdirectory of the sysroot directory for the target
8289 for which the current recipe is being built
8290 (<link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>).
8291 </para>
8292 </glossdef>
8293 </glossentry>
8294
8295 <glossentry id='var-STAGING_BINDIR'><glossterm>STAGING_BINDIR</glossterm>
8296 <glossdef>
8297 <para>
8298 Specifies the path to the
8299 <filename>/usr/bin</filename> subdirectory of the
8300 sysroot directory for the target for which the current
8301 recipe is being built
8302 (<link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>).
8303 </para>
8304 </glossdef>
8305 </glossentry>
8306
8307 <glossentry id='var-STAGING_BINDIR_CROSS'><glossterm>STAGING_BINDIR_CROSS</glossterm>
8308 <glossdef>
8309 <para>
8310 Specifies the path to the directory containing binary
8311 configuration scripts.
8312 These scripts provide configuration information for
8313 other software that wants to make use of libraries or
8314 include files provided by the software associated with
8315 the script.
8316 <note>
8317 This style of build configuration has been largely
8318 replaced by <filename>pkg-config</filename>.
8319 Consequently, if <filename>pkg-config</filename>
8320 is supported by the library to which you are linking,
8321 it is recommended you use
8322 <filename>pkg-config</filename> instead of a
8323 provided configuration script.
8324 </note>
8325 </para>
8326 </glossdef>
8327 </glossentry>
8328
8329 <glossentry id='var-STAGING_BINDIR_NATIVE'><glossterm>STAGING_BINDIR_NATIVE</glossterm>
8330 <glossdef>
8331 <para>
8332 Specifies the path to the
8333 <filename>/usr/bin</filename> subdirectory of the
8334 sysroot directory for the build host.
8335 </para>
8336 </glossdef>
8337 </glossentry>
8338
8339 <glossentry id='var-STAGING_DATADIR'><glossterm>STAGING_DATADIR</glossterm>
8340 <glossdef>
8341 <para>
8342 Specifies the path to the <filename>/usr/share</filename>
8343 subdirectory of the sysroot directory for the target
8344 for which the current recipe is being built
8345 (<link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>).
8346 </para>
8347 </glossdef>
8348 </glossentry>
8349
8350 <glossentry id='var-STAGING_DIR'><glossterm>STAGING_DIR</glossterm>
8351 <glossdef>
8352 <para>
8353 Specifies the path to the top-level sysroots directory
8354 (i.e.
8355 <filename>${</filename><link linkend='var-TMPDIR'><filename>TMPDIR</filename></link><filename>}/sysroots</filename>).
8356 <note>
8357 Recipes should never write files directly under
8358 this directory because the OpenEmbedded build system
8359 manages the directory automatically.
8360 Instead, files should be installed to
8361 <filename>${</filename><link linkend='var-D'><filename>D</filename></link><filename>}</filename>
8362 within your recipe's
8363 <link linkend='ref-tasks-install'><filename>do_install</filename></link>
8364 task and then the OpenEmbedded build system will
8365 stage a subset of those files into the sysroot.
8366 </note>
8367 </para>
8368 </glossdef>
8369 </glossentry>
8370
8371 <glossentry id='var-STAGING_DIR_HOST'><glossterm>STAGING_DIR_HOST</glossterm>
8372 <glossdef>
8373 <para>
8374 Specifies the path to the primary sysroot directory for
8375 which the target is being built.
8376 Depending on the type of recipe and the build target, the
8377 recipe's value is as follows:
8378 <itemizedlist>
8379 <listitem><para>For recipes building for the target
8380 machine, the value is "${STAGING_DIR}/${MACHINE}".
8381 </para></listitem>
8382 <listitem><para>For <filename>native</filename>
8383 recipes building
8384 for the build host, the value is empty given the
8385 assumption that when building for the build host,
8386 the build host's own directories should be used.
8387 </para></listitem>
8388 <listitem><para>For <filename>nativesdk</filename>
8389 recipes that Build for the SDK, the value is
8390 "${STAGING_DIR}/${MULTIMACH_HOST_SYS}".
8391 </para></listitem>
8392 </itemizedlist>
8393 </para>
8394 </glossdef>
8395 </glossentry>
8396
8397 <glossentry id='var-STAGING_DATADIR_NATIVE'><glossterm>STAGING_DATADIR_NATIVE</glossterm>
8398 <glossdef>
8399 <para>
8400 Specifies the path to the <filename>/usr/share</filename>
8401 subdirectory of the sysroot directory for the build host.
8402 </para>
8403 </glossdef>
8404 </glossentry>
8405
8406
8407
8408 <glossentry id='var-STAGING_DIR_NATIVE'><glossterm>STAGING_DIR_NATIVE</glossterm>
8409 <glossdef>
8410 <para>
8411 Specifies the path to the sysroot directory for the
8412 build host.
8413 </para>
8414 </glossdef>
8415 </glossentry>
8416
8417 <glossentry id='var-STAGING_DIR_TARGET'><glossterm>STAGING_DIR_TARGET</glossterm>
8418 <glossdef>
8419 <para>
8420 Specifies the path to the sysroot directory for the
8421 target for which the current recipe is being built.
8422 In most cases, this path is the
8423 <link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>.
8424 </para>
8425
8426 <para>
8427 Some recipes build binaries that can run on the target
8428 system but those binaries in turn generate code for
8429 another different system (e.g. cross-canadian recipes).
8430 Using terminology from GNU, the primary system is referred
8431 to as the "HOST" and the secondary, or different, system is
8432 referred to as the "TARGET".
8433 Thus, the binaries run on the "HOST" system and
8434 and generate binaries for the "TARGET" system.
8435 <filename>STAGING_DIR_TARGET</filename> points to the
8436 sysroot used for the "TARGET" system.
8437 </para>
8438 </glossdef>
8439 </glossentry>
8440
8441 <glossentry id='var-STAGING_ETCDIR_NATIVE'><glossterm>STAGING_ETCDIR_NATIVE</glossterm>
8442 <glossdef>
8443 <para>
8444 Specifies the path to the <filename>/etc</filename>
8445 subdirectory of the sysroot directory for the
8446 build host.
8447 </para>
8448 </glossdef>
8449 </glossentry>
8450
8451 <glossentry id='var-STAGING_EXECPREFIXDIR'><glossterm>STAGING_EXECPREFIXDIR</glossterm>
8452 <glossdef>
8453 <para>
8454 Specifies the path to the <filename>/usr</filename>
8455 subdirectory of the sysroot directory for the target
8456 for which the current recipe is being built
8457 (<link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>).
8458 </para>
8459 </glossdef>
8460 </glossentry>
8461
8462 <glossentry id='var-STAGING_INCDIR'><glossterm>STAGING_INCDIR</glossterm>
8463 <glossdef>
8464 <para>
8465 Specifies the path to the
8466 <filename>/usr/include</filename> subdirectory of the
8467 sysroot directory for the target for which the current
8468 recipe being built
8469 (<link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>).
8470 </para>
8471 </glossdef>
8472 </glossentry>
8473
8474 <glossentry id='var-STAGING_INCDIR_NATIVE'><glossterm>STAGING_INCDIR_NATIVE</glossterm>
8475 <glossdef>
8476 <para>
8477 Specifies the path to the <filename>/usr/include</filename>
8478 subdirectory of the sysroot directory for the build host.
8479 </para>
8480 </glossdef>
8481 </glossentry>
8482
8483 <glossentry id='var-STAGING_LIBDIR'><glossterm>STAGING_LIBDIR</glossterm>
8484 <glossdef>
8485 <para>
8486 Specifies the path to the <filename>/usr/lib</filename>
8487 subdirectory of the sysroot directory for the target for
8488 which the current recipe is being built
8489 (<link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>).
8490 </para>
8491 </glossdef>
8492 </glossentry>
8493
8494 <glossentry id='var-STAGING_LIBDIR_NATIVE'><glossterm>STAGING_LIBDIR_NATIVE</glossterm>
8495 <glossdef>
8496 <para>
8497 Specifies the path to the <filename>/usr/lib</filename>
8498 subdirectory of the sysroot directory for the build host.
8499 </para>
8500 </glossdef>
8501 </glossentry>
8502
8503 <glossentry id='var-STAGING_KERNEL_DIR'><glossterm>STAGING_KERNEL_DIR</glossterm>
8504 <glossdef>
8505 <para>
8506 The directory with kernel headers that are required to build out-of-tree
8507 modules.
8508 </para>
8509 </glossdef>
8510 </glossentry>
8511
8512 <glossentry id='var-STAMP'><glossterm>STAMP</glossterm>
8513 <glossdef>
8514 <para>
8515 Specifies the base path used to create recipe stamp files.
8516 The path to an actual stamp file is constructed by evaluating this
8517 string and then appending additional information.
8518 Currently, the default assignment for <filename>STAMP</filename>
8519 as set in the <filename>meta/conf/bitbake.conf</filename> file
8520 is:
8521 <literallayout class='monospaced'>
8522 STAMP = "${STAMPS_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}"
8523 </literallayout>
8524 See <link linkend='var-STAMPS_DIR'><filename>STAMPS_DIR</filename></link>,
8525 <link linkend='var-MULTIMACH_TARGET_SYS'><filename>MULTIMACH_TARGET_SYS</filename></link>,
8526 <link linkend='var-PN'><filename>PN</filename></link>,
8527 <link linkend='var-EXTENDPE'><filename>EXTENDPE</filename></link>,
8528 <link linkend='var-PV'><filename>PV</filename></link>, and
8529 <link linkend='var-PR'><filename>PR</filename></link> for related variable
8530 information.
8531 </para>
8532 </glossdef>
8533 </glossentry>
8534
8535 <glossentry id='var-STAMPS_DIR'><glossterm>STAMPS_DIR</glossterm>
8536 <glossdef>
8537 <para>
8538 Specifies the base directory in which the OpenEmbedded
8539 build system places stamps.
8540 The default directory is
8541 <filename>${TMPDIR}/stamps</filename>.
8542 </para>
8543 </glossdef>
8544 </glossentry>
8545
8546 <glossentry id='var-SUMMARY'><glossterm>SUMMARY</glossterm>
8547 <glossdef>
8548 <para>The short (72 characters or less) summary of the binary package for packaging
8549 systems such as <filename>opkg</filename>, <filename>rpm</filename> or
8550 <filename>dpkg</filename>.
8551 By default, <filename>SUMMARY</filename> is used to define
8552 the <link linkend='var-DESCRIPTION'><filename>DESCRIPTION</filename></link>
8553 variable if <filename>DESCRIPTION</filename> is not set
8554 in the recipe.
8555 </para>
8556 </glossdef>
8557 </glossentry>
8558
8559 <glossentry id='var-SYSLINUX_DEFAULT_CONSOLE'><glossterm>SYSLINUX_DEFAULT_CONSOLE</glossterm>
8560 <glossdef>
8561 <para>
8562 Specifies the kernel boot default console.
8563 If you want to use a console other than the default,
8564 set this variable in your recipe as follows where "X" is
8565 the console number you want to use:
8566 <literallayout class='monospaced'>
8567 SYSLINUX_DEFAULT_CONSOLE = "console=ttyX"
8568 </literallayout>
8569 </para>
8570
8571 <para>
8572 The
8573 <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
8574 class initially sets this variable to null but then checks
8575 for a value later.
8576 </para>
8577 </glossdef>
8578 </glossentry>
8579
8580 <glossentry id='var-SYSLINUX_OPTS'><glossterm>SYSLINUX_OPTS</glossterm>
8581 <glossdef>
8582 <para>
8583 Lists additional options to add to the syslinux file.
8584 You need to set this variable in your recipe.
8585 If you want to list multiple options, separate the options
8586 with a semicolon character (<filename>;</filename>).
8587 </para>
8588
8589 <para>
8590 The
8591 <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
8592 class uses this variable to create a set of options.
8593 </para>
8594 </glossdef>
8595 </glossentry>
8596
8597 <glossentry id='var-SYSLINUX_SERIAL'><glossterm>SYSLINUX_SERIAL</glossterm>
8598 <glossdef>
8599 <para>
8600 Specifies the alternate serial port or turns it off.
8601 To turn off serial, set this variable to an empty string
8602 in your recipe.
8603 The variable's default value is set in the
8604 <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
8605 as follows:
8606 <literallayout class='monospaced'>
8607 SYSLINUX_SERIAL ?= "0 115200"
8608 </literallayout>
8609 The class checks for and uses the variable as needed. </para>
8610 </glossdef>
8611 </glossentry>
8612
8613 <glossentry id='var-SYSLINUX_SPLASH'><glossterm>SYSLINUX_SPLASH</glossterm>
8614 <glossdef>
8615 <para>
8616 An <filename>.LSS</filename> file used as the background
8617 for the VGA boot menu when you are using the boot menu.
8618 You need to set this variable in your recipe.
8619 </para>
8620
8621 <para>
8622 The
8623 <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
8624 class checks for this variable and if found, the
8625 OpenEmbedded build system installs the splash screen.
8626 </para>
8627 </glossdef>
8628 </glossentry>
8629
8630 <glossentry id='var-SYSLINUX_SERIAL_TTY'><glossterm>SYSLINUX_SERIAL_TTY</glossterm>
8631 <glossdef>
8632 <para>
8633 Specifies the alternate console=tty... kernel boot argument.
8634 The variable's default value is set in the
8635 <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
8636 as follows:
8637 <literallayout class='monospaced'>
8638 SYSLINUX_SERIAL_TTY ?= "console=ttyS0,115200"
8639 </literallayout>
8640 The class checks for and uses the variable as needed.
8641 </para>
8642 </glossdef>
8643 </glossentry>
8644
8645 <glossentry id='var-SYSROOT_PREPROCESS_FUNCS'><glossterm>SYSROOT_PREPROCESS_FUNCS</glossterm>
8646 <glossdef>
8647 <para>
8648 A list of functions to execute after files are staged into
8649 the sysroot.
8650 These functions are usually used to apply additional
8651 processing on the staged files, or to stage additional
8652 files.
8653 </para>
8654 </glossdef>
8655 </glossentry>
8656
8657 <glossentry id='var-SYSTEMD_AUTO_ENABLE'><glossterm>SYSTEMD_AUTO_ENABLE</glossterm>
8658 <glossdef>
8659 <para>
8660 When inheriting the
8661 <link linkend='ref-classes-systemd'><filename>systemd</filename></link>
8662 class, this variable specifies whether the service you have
8663 specified in
8664 <link linkend='var-SYSTEMD_SERVICE'><filename>SYSTEMD_SERVICE</filename></link>
8665 should be started automatically or not.
8666 By default, the service is enabled to automatically start
8667 at boot time.
8668 The default setting is in the
8669 <link linkend='ref-classes-systemd'><filename>systemd</filename></link>
8670 class as follows:
8671 <literallayout class='monospaced'>
8672 SYSTEMD_AUTO_ENABLE ??= "enable"
8673 </literallayout>
8674 You can disable the service by setting the variable to
8675 "disable".
8676 </para>
8677 </glossdef>
8678 </glossentry>
8679
8680 <glossentry id='var-SYSTEMD_PACKAGES'><glossterm>SYSTEMD_PACKAGES</glossterm>
8681 <glossdef>
8682 <para>
8683 When inheriting the
8684 <link linkend='ref-classes-systemd'><filename>systemd</filename></link>
8685 class, this variable locates the systemd unit files when
8686 they are not found in the main recipe's package.
8687 By default, the
8688 <filename>SYSTEMD_PACKAGES</filename> variable is set
8689 such that the systemd unit files are assumed to reside in
8690 the recipes main package:
8691 <literallayout class='monospaced'>
8692 SYSTEMD_PACKAGES ?= "${PN}"
8693 </literallayout>
8694 If these unit files are not in this recipe's main
8695 package, you need to use
8696 <filename>SYSTEMD_PACKAGES</filename> to list the package
8697 or packages in which the build system can find the systemd
8698 unit files.
8699 </para>
8700 </glossdef>
8701 </glossentry>
8702
8703 <glossentry id='var-SYSTEMD_SERVICE'><glossterm>SYSTEMD_SERVICE</glossterm>
8704 <glossdef>
8705 <para>
8706 When inheriting the
8707 <link linkend='ref-classes-systemd'><filename>systemd</filename></link>
8708 class, this variable specifies the systemd service name for
8709 a package.
8710 </para>
8711
8712 <para>
8713 When you specify this file in your recipe, use a package
8714 name override to indicate the package to which the value
8715 applies.
8716 Here is an example from the connman recipe:
8717 <literallayout class='monospaced'>
8718 SYSTEMD_SERVICE_${PN} = "connman.service"
8719 </literallayout>
8720 </para>
8721 </glossdef>
8722 </glossentry>
8723
8724 <glossentry id='var-SYSVINIT_ENABLED_GETTYS'><glossterm>SYSVINIT_ENABLED_GETTYS</glossterm>
8725 <glossdef>
8726 <para>
8727 When using
8728 <ulink url='&YOCTO_DOCS_DEV_URL;#new-recipe-enabling-system-services'>SysVinit</ulink>,
8729 specifies a space-separated list of the virtual terminals
8730 that should be running a
8731 <ulink url='http://en.wikipedia.org/wiki/Getty_%28Unix%29'>getty</ulink>
8732 (allowing login), assuming
8733 <link linkend='var-USE_VT'><filename>USE_VT</filename></link>
8734 is not set to "0".
8735 </para>
8736
8737 <para>
8738 The default value for
8739 <filename>SYSVINIT_ENABLED_GETTYS</filename> is "1"
8740 (i.e. only run a getty on the first virtual terminal).
8741 </para>
8742 </glossdef>
8743 </glossentry>
8744
8745 </glossdiv>
8746
8747 <glossdiv id='var-glossary-t'><title>T</title>
8748
8749 <glossentry id='var-T'><glossterm>T</glossterm>
8750 <glossdef>
8751 <para>This variable points to a directory were BitBake places
8752 temporary files, which consist mostly of task logs and
8753 scripts, when building a particular recipe.
8754 The variable is typically set as follows:
8755 <literallayout class='monospaced'>
8756 T = "${WORKDIR}/temp"
8757 </literallayout>
8758 The <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>
8759 is the directory into which BitBake unpacks and builds the
8760 recipe.
8761 The default <filename>bitbake.conf</filename> file sets this variable.</para>
8762 <para>The <filename>T</filename> variable is not to be confused with
8763 the <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link> variable,
8764 which points to the root of the directory tree where BitBake
8765 places the output of an entire build.
8766 </para>
8767 </glossdef>
8768 </glossentry>
8769
8770 <glossentry id='var-TARGET_ARCH'><glossterm>TARGET_ARCH</glossterm>
8771 <glossdef>
8772 <para>
8773 The target machine's architecture.
8774 The OpenEmbedded build system supports many
8775 architectures.
8776 Here is an example list of architectures supported.
8777 This list is by no means complete as the architecture
8778 is configurable:
8779 <literallayout class='monospaced'>
8780 arm
8781 i586
8782 x86_64
8783 powerpc
8784 powerpc64
8785 mips
8786 mipsel
8787 </literallayout>
8788 For additional information on machine architectures, see
8789 the
8790 <link linkend='var-TUNE_ARCH'><filename>TUNE_ARCH</filename></link>
8791 variable.
8792 </para>
8793 </glossdef>
8794 </glossentry>
8795
8796 <glossentry id='var-TARGET_AS_ARCH'><glossterm>TARGET_AS_ARCH</glossterm>
8797 <glossdef>
8798 <para>
8799 Specifies architecture-specific assembler flags for the
8800 target system.
8801 <filename>TARGET_AS_ARCH</filename> is initialized from
8802 <link linkend='var-TUNE_ASARGS'><filename>TUNE_ASARGS</filename></link>
8803 by default in the BitBake configuration file
8804 (<filename>meta/conf/bitbake.conf</filename>):
8805 <literallayout class='monospaced'>
8806 TARGET_AS_ARCH = "${TUNE_ASARGS}"
8807 </literallayout>
8808 </para>
8809 </glossdef>
8810 </glossentry>
8811
8812 <glossentry id='var-TARGET_CC_ARCH'><glossterm>TARGET_CC_ARCH</glossterm>
8813 <glossdef>
8814 <para>
8815 Specifies architecture-specific C compiler flags for the
8816 target system.
8817 <filename>TARGET_CC_ARCH</filename> is initialized from
8818 <link linkend='var-TUNE_CCARGS'><filename>TUNE_CCARGS</filename></link>
8819 by default.
8820 <note>
8821 It is a common workaround to append
8822 <link linkend='var-LDFLAGS'><filename>LDFLAGS</filename></link>
8823 to <filename>TARGET_CC_ARCH</filename>
8824 in recipes that build software for the target that
8825 would not otherwise respect the exported
8826 <filename>LDFLAGS</filename> variable.
8827 </note>
8828 </para>
8829 </glossdef>
8830 </glossentry>
8831
8832 <glossentry id='var-TARGET_CC_KERNEL_ARCH'><glossterm>TARGET_CC_KERNEL_ARCH</glossterm>
8833 <glossdef>
8834 <para>
8835 This is a specific kernel compiler flag for a CPU or
8836 Application Binary Interface (ABI) tune.
8837 The flag is used rarely and only for cases where a
8838 userspace
8839 <link linkend='var-TUNE_CCARGS'><filename>TUNE_CCARGS</filename></link>
8840 is not compatible with the kernel compilation.
8841 The <filename>TARGET_CC_KERNEL_ARCH</filename> variable
8842 allows the kernel (and associated modules) to use a
8843 different configuration.
8844 See the
8845 <filename>meta/conf/machine/include/arm/feature-arm-thumb.inc</filename>
8846 file in the
8847 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
8848 for an example.
8849 </para>
8850 </glossdef>
8851 </glossentry>
8852
8853 <glossentry id='var-TARGET_CFLAGS'><glossterm>TARGET_CFLAGS</glossterm>
8854 <glossdef>
8855 <para>
8856 Specifies the flags to pass to the C compiler when building
8857 for the target.
8858 When building in the target context,
8859 <link linkend='var-CFLAGS'><filename>CFLAGS</filename></link>
8860 is set to the value of this variable by default.
8861 </para>
8862
8863 <para>
8864 Additionally, the SDK's environment setup script sets
8865 the
8866 <link linkend='var-CFLAGS'><filename>CFLAGS</filename></link>
8867 variable in the environment to the
8868 <filename>TARGET_CFLAGS</filename> value so that
8869 executables built using the SDK also have the flags
8870 applied.
8871 </para>
8872 </glossdef>
8873 </glossentry>
8874
8875 <glossentry id='var-TARGET_CPPFLAGS'><glossterm>TARGET_CPPFLAGS</glossterm>
8876 <glossdef>
8877 <para>
8878 Specifies the flags to pass to the C pre-processor
8879 (i.e. to both the C and the C++ compilers) when building
8880 for the target.
8881 When building in the target context,
8882 <link linkend='var-CPPFLAGS'><filename>CPPFLAGS</filename></link>
8883 is set to the value of this variable by default.
8884 </para>
8885
8886 <para>
8887 Additionally, the SDK's environment setup script sets
8888 the
8889 <link linkend='var-CPPFLAGS'><filename>CPPFLAGS</filename></link>
8890 variable in the environment to the
8891 <filename>TARGET_CPPFLAGS</filename> value so that
8892 executables built using the SDK also have the flags
8893 applied.
8894 </para>
8895 </glossdef>
8896 </glossentry>
8897
8898 <glossentry id='var-TARGET_CXXFLAGS'><glossterm>TARGET_CXXFLAGS</glossterm>
8899 <glossdef>
8900 <para>
8901 Specifies the flags to pass to the C++ compiler when
8902 building for the target.
8903 When building in the target context,
8904 <link linkend='var-CXXFLAGS'><filename>CXXFLAGS</filename></link>
8905 is set to the value of this variable by default.
8906 </para>
8907
8908 <para>
8909 Additionally, the SDK's environment setup script sets
8910 the
8911 <link linkend='var-CXXFLAGS'><filename>CXXFLAGS</filename></link>
8912 variable in the environment to the
8913 <filename>TARGET_CXXFLAGS</filename> value so that
8914 executables built using the SDK also have the flags
8915 applied.
8916 </para>
8917 </glossdef>
8918 </glossentry>
8919
8920 <glossentry id='var-TARGET_FPU'><glossterm>TARGET_FPU</glossterm>
8921 <glossdef>
8922 <para>Specifies the method for handling FPU code.
8923 For FPU-less targets, which include most ARM CPUs, the variable must be
8924 set to "soft".
8925 If not, the kernel emulation gets used, which results in a performance penalty.</para>
8926 </glossdef>
8927 </glossentry>
8928
8929 <glossentry id='var-TARGET_LD_ARCH'><glossterm>TARGET_LD_ARCH</glossterm>
8930 <glossdef>
8931 <para>
8932 Specifies architecture-specific linker flags for the
8933 target system.
8934 <filename>TARGET_LD_ARCH</filename> is initialized from
8935 <link linkend='var-TUNE_LDARGS'><filename>TUNE_LDARGS</filename></link>
8936 by default in the BitBake configuration file
8937 (<filename>meta/conf/bitbake.conf</filename>):
8938 <literallayout class='monospaced'>
8939 TARGET_LD_ARCH = "${TUNE_LDARGS}"
8940 </literallayout>
8941 </para>
8942 </glossdef>
8943 </glossentry>
8944
8945 <glossentry id='var-TARGET_LDFLAGS'><glossterm>TARGET_LDFLAGS</glossterm>
8946 <glossdef>
8947 <para>
8948 Specifies the flags to pass to the linker when building
8949 for the target.
8950 When building in the target context,
8951 <link linkend='var-LDFLAGS'><filename>LDFLAGS</filename></link>
8952 is set to the value of this variable by default.
8953 </para>
8954
8955 <para>
8956 Additionally, the SDK's environment setup script sets
8957 the
8958 <link linkend='var-LDFLAGS'><filename>LDFLAGS</filename></link>
8959 variable in the environment to the
8960 <filename>TARGET_LDFLAGS</filename> value so that
8961 executables built using the SDK also have the flags
8962 applied.
8963 </para>
8964 </glossdef>
8965 </glossentry>
8966
8967 <glossentry id='var-TARGET_OS'><glossterm>TARGET_OS</glossterm>
8968 <glossdef>
8969 <para>Specifies the target's operating system.
8970 The variable can be set to "linux" for <filename>glibc</filename>-based systems and
8971 to "linux-uclibc" for <filename>uclibc</filename>.
8972 For ARM/EABI targets, there are also "linux-gnueabi" and
8973 "linux-uclibc-gnueabi" values possible.</para>
8974 </glossdef>
8975 </glossentry>
8976
8977 <glossentry id='var-TCLIBC'><glossterm>TCLIBC</glossterm>
8978 <glossdef>
8979 <para>
8980 Specifies the GNU standard C library (<filename>libc</filename>)
8981 variant to use during the build process.
8982 This variable replaces <filename>POKYLIBC</filename>, which is no longer
8983 supported.
8984 </para>
8985 <para>
8986 You can select "glibc" or "uclibc".
8987 </para>
8988 </glossdef>
8989 </glossentry>
8990
8991 <glossentry id='var-TCMODE'><glossterm>TCMODE</glossterm>
8992 <glossdef>
8993 <para>
8994 Specifies the toolchain selector.
8995 <filename>TCMODE</filename> controls the characteristics
8996 of the generated packages and images by telling the
8997 OpenEmbedded build system which toolchain profile to use.
8998 By default, the OpenEmbedded build system builds its own
8999 internal toolchain.
9000 The variable's default value is "default", which uses
9001 that internal toolchain.
9002 <note>
9003 If <filename>TCMODE</filename> is set to a value
9004 other than "default", then it is your responsibility
9005 to ensure that the toolchain is compatible with the
9006 default toolchain.
9007 Using older or newer versions of these components
9008 might cause build problems.
9009 See the
9010 <ulink url='&YOCTO_RELEASE_NOTES;'>Release Notes</ulink>
9011 for the specific components with which the toolchain
9012 must be compatible.
9013 </note>
9014 </para>
9015
9016 <para>
9017 With additional layers, it is possible to use a pre-compiled
9018 external toolchain.
9019 One example is the Sourcery G++ Toolchain.
9020 The support for this toolchain resides in the separate
9021 <filename>meta-sourcery</filename> layer at
9022 <ulink url='http://github.com/MentorEmbedded/meta-sourcery/'></ulink>.
9023 You can use <filename>meta-sourcery</filename> as a
9024 template for adding support for other external toolchains.
9025 </para>
9026
9027 <para>
9028 The <filename>TCMODE</filename> variable points the build
9029 system to a file in
9030 <filename>conf/distro/include/tcmode-${TCMODE}.inc</filename>.
9031 Thus, for <filename>meta-sourcery</filename>,
9032 which has <filename>conf/distro/include/tcmode-external-sourcery.inc</filename>,
9033 you would set the variable as follows:
9034 <literallayout class='monospaced'>
9035 TCMODE ?= "external-sourcery"
9036 </literallayout>
9037 </para>
9038
9039 <para>
9040 The variable is similar to
9041 <link linkend='var-TCLIBC'><filename>TCLIBC</filename></link>,
9042 which controls the variant of the GNU standard C library
9043 (<filename>libc</filename>) used during the build process:
9044 <filename>glibc</filename> or <filename>uclibc</filename>.
9045 </para>
9046 </glossdef>
9047 </glossentry>
9048
9049 <glossentry id='var-TEST_EXPORT_DIR'><glossterm>TEST_EXPORT_DIR</glossterm>
9050 <glossdef>
9051 <para>
9052 The location the OpenEmbedded build system uses to export
9053 tests when the
9054 <link linkend='var-TEST_EXPORT_ONLY'><filename>TEST_EXPORT_ONLY</filename></link>
9055 variable is set to "1".
9056 </para>
9057
9058 <para>
9059 The <filename>TEST_EXPORT_DIR</filename> variable defaults
9060 to <filename>"${TMPDIR}/testimage/${PN}"</filename>.
9061 </para>
9062 </glossdef>
9063 </glossentry>
9064
9065 <glossentry id='var-TEST_EXPORT_ONLY'><glossterm>TEST_EXPORT_ONLY</glossterm>
9066 <glossdef>
9067 <para>
9068 Specifies to export the tests only.
9069 Set this variable to "1" if you do not want to run the
9070 tests but you want them to be exported in a manner that
9071 you to run them outside of the build system.
9072 </para>
9073 </glossdef>
9074 </glossentry>
9075
9076 <glossentry id='var-TEST_IMAGE'><glossterm>TEST_IMAGE</glossterm>
9077 <glossdef>
9078 <para>
9079 Automatically runs the series of automated tests for
9080 images when an image is successfully built.
9081 </para>
9082
9083 <para>
9084 These tests are written in Python making use of the
9085 <filename>unittest</filename> module, and the majority of
9086 them run commands on the target system over
9087 <filename>ssh</filename>.
9088 You can set this variable to "1" in your
9089 <filename>local.conf</filename> file in the
9090 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
9091 to have the OpenEmbedded build system automatically run
9092 these tests after an image successfully builds:
9093 <literallayout class='monospaced'>
9094 TEST_IMAGE = "1"
9095 </literallayout>
9096 For more information on enabling, running, and writing
9097 these tests, see the
9098 "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
9099 section in the Yocto Project Development Manual and the
9100 "<link linkend='ref-classes-testimage'><filename>testimage.bbclass</filename></link>"
9101 section.
9102 </para>
9103 </glossdef>
9104 </glossentry>
9105
9106 <glossentry id='var-TEST_LOG_DIR'><glossterm>TEST_LOG_DIR</glossterm>
9107 <glossdef>
9108 <para>
9109 Holds the SSH log and the boot log for QEMU machines.
9110 The <filename>TEST_LOG_DIR</filename> variable defaults
9111 to <filename>"${WORKDIR}/testimage"</filename>.
9112 <note>
9113 Actual test results reside in the task log
9114 (<filename>log.do_testimage</filename>), which is in
9115 the <filename>${WORKDIR}/temp/</filename> directory.
9116 </note>
9117 </para>
9118 </glossdef>
9119 </glossentry>
9120
9121 <glossentry id='var-TEST_POWERCONTROL_CMD'><glossterm>TEST_POWERCONTROL_CMD</glossterm>
9122 <glossdef>
9123 <para>
9124 For automated hardware testing, specifies the command to
9125 use to control the power of the target machine under test.
9126 Typically, this command would point to a script that
9127 performs the appropriate action (e.g. interacting
9128 with a web-enabled power strip).
9129 The specified command should expect to receive as the last
9130 argument "off", "on" or "cycle" specifying to power off,
9131 on, or cycle (power off and then power on) the device,
9132 respectively.
9133 </para>
9134 </glossdef>
9135 </glossentry>
9136
9137 <glossentry id='var-TEST_POWERCONTROL_EXTRA_ARGS'><glossterm>TEST_POWERCONTROL_EXTRA_ARGS</glossterm>
9138 <glossdef>
9139 <para>
9140 For automated hardware testing, specifies additional
9141 arguments to pass through to the command specified in
9142 <link linkend='var-TEST_POWERCONTROL_CMD'><filename>TEST_POWERCONTROL_CMD</filename></link>.
9143 Setting <filename>TEST_POWERCONTROL_EXTRA_ARGS</filename>
9144 is optional.
9145 You can use it if you wish, for example, to separate the
9146 machine-specific and non-machine-specific parts of the
9147 arguments.
9148 </para>
9149 </glossdef>
9150 </glossentry>
9151
9152 <glossentry id='var-TEST_QEMUBOOT_TIMEOUT'><glossterm>TEST_QEMUBOOT_TIMEOUT</glossterm>
9153 <glossdef>
9154 <para>
9155 The time in seconds allowed for an image to boot before
9156 automated runtime tests begin to run against an
9157 image.
9158 The default timeout period to allow the boot process to
9159 reach the login prompt is 500 seconds.
9160 You can specify a different value in the
9161 <filename>local.conf</filename> file.
9162 </para>
9163
9164 <para>
9165 For more information on testing images, see the
9166 "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
9167 section in the Yocto Project Development Manual.
9168 </para>
9169 </glossdef>
9170 </glossentry>
9171
9172 <glossentry id='var-TEST_SERIALCONTROL_CMD'><glossterm>TEST_SERIALCONTROL_CMD</glossterm>
9173 <glossdef>
9174 <para>
9175 For automated hardware testing, specifies the command
9176 to use to connect to the serial console of the target
9177 machine under test.
9178 This command simply needs to connect to the serial console
9179 and forward that connection to standard input and output
9180 as any normal terminal program does.
9181 </para>
9182
9183 <para>
9184 For example, to use the Picocom terminal program on
9185 serial device <filename>/dev/ttyUSB0</filename> at
9186 115200bps, you would set the variable as follows:
9187 <literallayout class='monospaced'>
9188 TEST_SERIALCONTROL_CMD = "picocom /dev/ttyUSB0 -b 115200"
9189 </literallayout>
9190 </para>
9191 </glossdef>
9192 </glossentry>
9193
9194 <glossentry id='var-TEST_SERIALCONTROL_EXTRA_ARGS'><glossterm>TEST_SERIALCONTROL_EXTRA_ARGS</glossterm>
9195 <glossdef>
9196 <para>
9197 For automated hardware testing, specifies additional
9198 arguments to pass through to the command specified in
9199 <link linkend='var-TEST_SERIALCONTROL_CMD'><filename>TEST_SERIALCONTROL_CMD</filename></link>.
9200 Setting <filename>TEST_SERIALCONTROL_EXTRA_ARGS</filename>
9201 is optional.
9202 You can use it if you wish, for example, to separate the
9203 machine-specific and non-machine-specific parts of the
9204 command.
9205 </para>
9206 </glossdef>
9207 </glossentry>
9208
9209 <glossentry id='var-TEST_SERVER_IP'><glossterm>TEST_SERVER_IP</glossterm>
9210 <glossdef>
9211 <para>
9212 The IP address of the build machine (host machine).
9213 This IP address is usually automatically detected.
9214 However, if detection fails, this variable needs to be set
9215 to the IP address of the build machine (i.e. where
9216 the build is taking place).
9217 <note>
9218 The <filename>TEST_SERVER_IP</filename> variable
9219 is only used for a small number of tests such as
9220 the "smart" test suite, which needs to download
9221 packages from <filename>DEPLOY_DIR/rpm</filename>.
9222 </note>
9223 </para>
9224 </glossdef>
9225 </glossentry>
9226
9227 <glossentry id='var-TEST_TARGET'><glossterm>TEST_TARGET</glossterm>
9228 <glossdef>
9229 <para>
9230 Specifies the target controller to use when running tests
9231 against a test image.
9232 The default controller to use is "qemu":
9233 <literallayout class='monospaced'>
9234 TEST_TARGET = "qemu"
9235 </literallayout>
9236 A target controller is a class that defines how an
9237 image gets deployed on a target and how a target is started.
9238 A layer can extend the controllers by adding a module
9239 in the layer's <filename>/lib/oeqa/controllers</filename>
9240 directory and by inheriting the
9241 <filename>BaseTarget</filename> class, which is an abstract
9242 class that cannot be used as a value of
9243 <filename>TEST_TARGET</filename>.
9244 </para>
9245
9246 <para>
9247 You can provide the following arguments with
9248 <filename>TEST_TARGET</filename>:
9249 <itemizedlist>
9250 <listitem><para><emphasis>"qemu" and "QemuTarget":</emphasis>
9251 Boots a QEMU image and runs the tests.
9252 See the
9253 "<ulink url='&YOCTO_DOCS_DEV_URL;#qemu-image-enabling-tests'>Enabling Runtime Tests on QEMU</ulink>"
9254 section in the Yocto Project Development Manual for
9255 more information.
9256 </para></listitem>
9257 <listitem><para><emphasis>"simpleremote" and "SimpleRemoteTarget":</emphasis>
9258 Runs the tests on target hardware that is already
9259 up and running.
9260 The hardware can be on the network or it can be
9261 a device running an image on QEMU.
9262 You must also set
9263 <link linkend='var-TEST_TARGET_IP'><filename>TEST_TARGET_IP</filename></link>
9264 when you use "simpleremote" or "SimpleRemoteTarget".
9265 <note>
9266 This argument is defined in
9267 <filename>meta/lib/oeqa/targetcontrol.py</filename>.
9268 The small caps names are kept for compatibility
9269 reasons.
9270 </note>
9271 </para></listitem>
9272 <listitem><para><emphasis>"GummibootTarget":</emphasis>
9273 Automatically deploys and runs tests on an
9274 EFI-enabled machine that has a master image
9275 installed.
9276 <note>
9277 This argument is defined in
9278 <filename>meta/lib/oeqa/controllers/masterimage.py</filename>.
9279 </note>
9280 </para></listitem>
9281 </itemizedlist>
9282 </para>
9283
9284 <para>
9285 For information on running tests on hardware, see the
9286 "<ulink url='&YOCTO_DOCS_DEV_URL;#hardware-image-enabling-tests'>Enabling Runtime Tests on Hardware</ulink>"
9287 section in the Yocto Project Development Manual.
9288 </para>
9289 </glossdef>
9290 </glossentry>
9291
9292 <glossentry id='var-TEST_TARGET_IP'><glossterm>TEST_TARGET_IP</glossterm>
9293 <glossdef>
9294 <para>
9295 The IP address of your hardware under test.
9296 The <filename>TEST_TARGET_IP</filename> variable has no
9297 effect when
9298 <link linkend='var-TEST_TARGET'><filename>TEST_TARGET</filename></link>
9299 is set to "qemu".
9300 </para>
9301
9302 <para>
9303 When you specify the IP address, you can also include a
9304 port.
9305 Here is an example:
9306 <literallayout class='monospaced'>
9307 TEST_TARGET_IP = "192.168.1.4:2201"
9308 </literallayout>
9309 Specifying a port is useful when SSH is started on a
9310 non-standard port or in cases when your hardware under test
9311 is behind a firewall or network that is not directly
9312 accessible from your host and you need to do port address
9313 translation.
9314 </para>
9315 </glossdef>
9316 </glossentry>
9317
9318 <glossentry id='var-TEST_SUITES'><glossterm>TEST_SUITES</glossterm>
9319 <glossdef>
9320 <para>
9321 An ordered list of tests (modules) to run against
9322 an image when performing automated runtime testing.
9323 </para>
9324
9325 <para>
9326 The OpenEmbedded build system provides a core set of tests
9327 that can be used against images.
9328 <note>
9329 Currently, there is only support for running these tests
9330 under QEMU.
9331 </note>
9332 Tests include <filename>ping</filename>,
9333 <filename>ssh</filename>, <filename>df</filename> among
9334 others.
9335 You can add your own tests to the list of tests by
9336 appending <filename>TEST_SUITES</filename> as follows:
9337 <literallayout class='monospaced'>
9338 TEST_SUITES_append = " <replaceable>mytest</replaceable>"
9339 </literallayout>
9340 Alternatively, you can provide the "auto" option to
9341 have all applicable tests run against the image.
9342 <literallayout class='monospaced'>
9343 TEST_SUITES_append = " auto"
9344 </literallayout>
9345 Using this option causes the build system to automatically
9346 run tests that are applicable to the image.
9347 Tests that are not applicable are skipped.
9348 </para>
9349
9350 <para>
9351 The order in which tests are run is important.
9352 Tests that depend on another test must appear later in the
9353 list than the test on which they depend.
9354 For example, if you append the list of tests with two
9355 tests (<filename>test_A</filename> and
9356 <filename>test_B</filename>) where
9357 <filename>test_B</filename> is dependent on
9358 <filename>test_A</filename>, then you must order the tests
9359 as follows:
9360 <literallayout class='monospaced'>
9361 TEST_SUITES = " test_A test_B"
9362 </literallayout>
9363 </para>
9364
9365 <para>
9366 For more information on testing images, see the
9367 "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
9368 section in the Yocto Project Development Manual.
9369 </para>
9370 </glossdef>
9371 </glossentry>
9372
9373 <glossentry id='var-THISDIR'><glossterm>THISDIR</glossterm>
9374 <glossdef>
9375 <para>
9376 The directory in which the file BitBake is currently
9377 parsing is located.
9378 Do not manually set this variable.
9379 </para>
9380 </glossdef>
9381 </glossentry>
9382
9383 <glossentry id='var-TMPDIR'><glossterm>TMPDIR</glossterm>
9384 <glossdef>
9385 <para>
9386 This variable is the base directory the OpenEmbedded
9387 build system uses for all build output and intermediate
9388 files (other than the shared state cache).
9389 By default, the <filename>TMPDIR</filename> variable points
9390 to <filename>tmp</filename> within the
9391 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
9392 </para>
9393
9394 <para>
9395 If you want to establish this directory in a location other
9396 than the default, you can uncomment and edit the following
9397 statement in the
9398 <filename>conf/local.conf</filename> file in the
9399 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>:
9400 <literallayout class='monospaced'>
9401 #TMPDIR = "${TOPDIR}/tmp"
9402 </literallayout>
9403 An example use for this scenario is to set
9404 <filename>TMPDIR</filename> to a local disk, which does
9405 not use NFS, while having the Build Directory use NFS.
9406 </para>
9407
9408 <para>
9409 The filesystem used by <filename>TMPDIR</filename> must
9410 have standard filesystem semantics (i.e. mixed-case files
9411 are unique, POSIX file locking, and persistent inodes).
9412 Due to various issues with NFS and bugs in some
9413 implementations, NFS does not meet this minimum
9414 requirement.
9415 Consequently, <filename>TMPDIR</filename> cannot be on
9416 NFS.
9417 </para>
9418 </glossdef>
9419 </glossentry>
9420
9421 <glossentry id='var-TOOLCHAIN_HOST_TASK'><glossterm>TOOLCHAIN_HOST_TASK</glossterm>
9422 <glossdef>
9423 <para>
9424 This variable lists packages the OpenEmbedded build system
9425 uses when building an SDK, which contains a
9426 cross-development environment.
9427 The packages specified by this variable are part of the
9428 toolchain set that runs on the
9429 <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>,
9430 and each package should usually have the prefix
9431 "nativesdk-".
9432 When building an SDK using
9433 <filename>bitbake -c populate_sdk &lt;imagename&gt;</filename>,
9434 a default list of packages is set in this variable, but
9435 you can add additional packages to the list.
9436 </para>
9437
9438 <para>
9439 For background information on cross-development toolchains
9440 in the Yocto Project development environment, see the
9441 "<link linkend='cross-development-toolchain-generation'>Cross-Development Toolchain Generation</link>"
9442 section.
9443 For information on setting up a cross-development
9444 environment, see the
9445 "<ulink url='&YOCTO_DOCS_ADT_URL;#installing-the-adt'>Installing the ADT and Toolchains</ulink>"
9446 section in the Yocto Project Application Developer's Guide.
9447 </para>
9448 </glossdef>
9449 </glossentry>
9450
9451 <glossentry id='var-TOOLCHAIN_TARGET_TASK'><glossterm>TOOLCHAIN_TARGET_TASK</glossterm>
9452 <glossdef>
9453 <para>
9454 This variable lists packages the OpenEmbedded build system
9455 uses when it creates the target part of an SDK
9456 (i.e. the part built for the target hardware), which
9457 includes libraries and headers.
9458 </para>
9459
9460 <para>
9461 For background information on cross-development toolchains
9462 in the Yocto Project development environment, see the
9463 "<link linkend='cross-development-toolchain-generation'>Cross-Development Toolchain Generation</link>"
9464 section.
9465 For information on setting up a cross-development
9466 environment, see the
9467 "<ulink url='&YOCTO_DOCS_ADT_URL;#installing-the-adt'>Installing the ADT and Toolchains</ulink>"
9468 section in the Yocto Project Application Developer's Guide.
9469 </para>
9470 </glossdef>
9471 </glossentry>
9472
9473 <glossentry id='var-TOPDIR'><glossterm>TOPDIR</glossterm>
9474 <glossdef>
9475 <para>
9476 The top-level
9477 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
9478 BitBake automatically sets this variable when you
9479 initialize your build environment using either
9480 <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
9481 or
9482 <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>.
9483 </para>
9484 </glossdef>
9485 </glossentry>
9486
9487 <glossentry id='var-TRANSLATED_TARGET_ARCH'><glossterm>TRANSLATED_TARGET_ARCH</glossterm>
9488 <glossdef>
9489 <para>
9490 A sanitized version of
9491 <link linkend='var-TARGET_ARCH'><filename>TARGET_ARCH</filename></link>.
9492 This variable is used where the architecture is needed in
9493 a value where underscores are not allowed, for example
9494 within package filenames.
9495 In this case, dash characters replace any underscore
9496 characters used in TARGET_ARCH.
9497 </para>
9498
9499 <para>
9500 Do not edit this variable.
9501 </para>
9502 </glossdef>
9503 </glossentry>
9504
9505 <glossentry id='var-TUNE_ARCH'><glossterm>TUNE_ARCH</glossterm>
9506 <glossdef>
9507 <para>
9508 The GNU canonical architecture for a specific architecture
9509 (i.e. <filename>arm</filename>,
9510 <filename>armeb</filename>,
9511 <filename>mips</filename>,
9512 <filename>mips64</filename>, and so forth).
9513 BitBake uses this value to setup configuration.
9514 </para>
9515
9516 <para>
9517 <filename>TUNE_ARCH</filename> definitions are specific to
9518 a given architecture.
9519 The definitions can be a single static definition, or
9520 can be dynamically adjusted.
9521 You can see details for a given CPU family by looking at
9522 the architecture's <filename>README</filename> file.
9523 For example, the
9524 <filename>meta/conf/machine/include/mips/README</filename>
9525 file in the
9526 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
9527 provides information for <filename>TUNE_ARCH</filename>
9528 specific to the <filename>mips</filename> architecture.
9529 </para>
9530
9531 <para>
9532 <filename>TUNE_ARCH</filename> is tied closely to
9533 <link linkend='var-TARGET_ARCH'><filename>TARGET_ARCH</filename></link>,
9534 which defines the target machine's architecture.
9535 The BitBake configuration file
9536 (<filename>meta/conf/bitbake.conf</filename>) sets
9537 <filename>TARGET_ARCH</filename> as follows:
9538 <literallayout class='monospaced'>
9539 TARGET_ARCH = "${TUNE_ARCH}"
9540 </literallayout>
9541 </para>
9542
9543 <para>
9544 The following list, which is by no means complete since
9545 architectures are configurable, shows supported machine
9546 architectures:
9547 <literallayout class='monospaced'>
9548 arm
9549 i586
9550 x86_64
9551 powerpc
9552 powerpc64
9553 mips
9554 mipsel
9555 </literallayout>
9556 </para>
9557 </glossdef>
9558 </glossentry>
9559
9560 <glossentry id='var-TUNE_ASARGS'><glossterm>TUNE_ASARGS</glossterm>
9561 <glossdef>
9562 <para>
9563 Specifies architecture-specific assembler flags for
9564 the target system.
9565 The set of flags is based on the selected tune features.
9566 <filename>TUNE_ASARGS</filename> is set using
9567 the tune include files, which are typically under
9568 <filename>meta/conf/machine/include/</filename> and are
9569 influenced through <filename>TUNE_FEATURES</filename>.
9570 For example, the
9571 <filename>meta/conf/machine/include/x86/arch-x86.inc</filename>
9572 file defines the flags for the x86 architecture as follows:
9573 <literallayout class='monospaced'>
9574 TUNE_ASARGS += "${@bb.utils.contains("TUNE_FEATURES", "mx32", "-x32", "", d)}"
9575 </literallayout>
9576 <note>
9577 Board Support Packages (BSPs) can supply their own
9578 set of flags.
9579 </note>
9580 </para>
9581 </glossdef>
9582 </glossentry>
9583
9584 <glossentry id='var-TUNE_CCARGS'><glossterm>TUNE_CCARGS</glossterm>
9585 <glossdef>
9586 <para>
9587 Specifies architecture-specific C compiler flags for
9588 the target system.
9589 The set of flags is based on the selected tune features.
9590 <filename>TUNE_CCARGS</filename> is set using
9591 the tune include files, which are typically under
9592 <filename>meta/conf/machine/include/</filename> and are
9593 influenced through <filename>TUNE_FEATURES</filename>.
9594 <note>
9595 Board Support Packages (BSPs) can supply their own
9596 set of flags.
9597 </note>
9598 </para>
9599 </glossdef>
9600 </glossentry>
9601
9602 <glossentry id='var-TUNE_LDARGS'><glossterm>TUNE_LDARGS</glossterm>
9603 <glossdef>
9604 <para>
9605 Specifies architecture-specific linker flags for
9606 the target system.
9607 The set of flags is based on the selected tune features.
9608 <filename>TUNE_LDARGS</filename> is set using
9609 the tune include files, which are typically under
9610 <filename>meta/conf/machine/include/</filename> and are
9611 influenced through <filename>TUNE_FEATURES</filename>.
9612 For example, the
9613 <filename>meta/conf/machine/include/x86/arch-x86.inc</filename>
9614 file defines the flags for the x86 architecture as follows:
9615 <literallayout class='monospaced'>
9616 TUNE_LDARGS += "${@bb.utils.contains("TUNE_FEATURES", "mx32", "-m elf32_x86_64", "", d)}"
9617 </literallayout>
9618 <note>
9619 Board Support Packages (BSPs) can supply their own
9620 set of flags.
9621 </note>
9622 </para>
9623 </glossdef>
9624 </glossentry>
9625
9626 <glossentry id='var-TUNE_FEATURES'><glossterm>TUNE_FEATURES</glossterm>
9627 <glossdef>
9628 <para>
9629 Features used to "tune" a compiler for optimal use
9630 given a specific processor.
9631 The features are defined within the tune files and allow
9632 arguments (i.e. <filename>TUNE_*ARGS</filename>) to be
9633 dynamically generated based on the features.
9634 </para>
9635
9636 <para>
9637 The OpenEmbedded build system verifies the features
9638 to be sure they are not conflicting and that they are
9639 supported.
9640 </para>
9641
9642 <para>
9643 The BitBake configuration file
9644 (<filename>meta/conf/bitbake.conf</filename>) defines
9645 <filename>TUNE_FEATURES</filename> as follows:
9646 <literallayout class='monospaced'>
9647 TUNE_FEATURES ??= "${TUNE_FEATURES_tune-${DEFAULTTUNE}}"
9648 </literallayout>
9649 See the
9650 <link linkend='var-DEFAULTTUNE'><filename>DEFAULTTUNE</filename></link>
9651 variable for more information.
9652 </para>
9653 </glossdef>
9654 </glossentry>
9655
9656 <glossentry id='var-TUNE_PKGARCH'><glossterm>TUNE_PKGARCH</glossterm>
9657 <glossdef>
9658 <para>
9659 The package architecture understood by the packaging
9660 system to define the architecture, ABI, and tuning of
9661 output packages.
9662 </para>
9663 </glossdef>
9664 </glossentry>
9665
9666 <glossentry id='var-TUNE_PKGARCH_tune'><glossterm>TUNE_PKGARCH_tune</glossterm>
9667 <glossdef>
9668 <para>
9669 The CPU or Application Binary Interface (ABI) specific
9670 tuning of the
9671 <link linkend='var-TUNE_PKGARCH'><filename>TUNE_PKGARCH</filename></link>.
9672 </para>
9673
9674 <para>
9675 These tune-specific package architectures are defined in
9676 the machine include files.
9677 Here is an example of the "core2-32" tuning as used
9678 in the
9679 <filename>meta/conf/machine/include/tune-core2.inc</filename>
9680 file:
9681 <literallayout class='monospaced'>
9682 TUNE_PKGARCH_tune-core2-32 = "core2-32"
9683 </literallayout>
9684 </para>
9685 </glossdef>
9686 </glossentry>
9687
9688 <glossentry id='var-TUNEABI'><glossterm>TUNEABI</glossterm>
9689 <glossdef>
9690 <para>
9691 An underlying Application Binary Interface (ABI) used by
9692 a particular tuning in a given toolchain layer.
9693 Providers that use prebuilt libraries can use the
9694 <filename>TUNEABI</filename>,
9695 <link linkend='var-TUNEABI_OVERRIDE'><filename>TUNEABI_OVERRIDE</filename></link>,
9696 and
9697 <link linkend='var-TUNEABI_WHITELIST'><filename>TUNEABI_WHITELIST</filename></link>
9698 variables to check compatibility of tunings against their
9699 selection of libraries.
9700 </para>
9701
9702 <para>
9703 If <filename>TUNEABI</filename> is undefined, then every
9704 tuning is allowed.
9705 See the
9706 <link linkend='ref-classes-sanity'><filename>sanity</filename></link>
9707 class to see how the variable is used.
9708 </para>
9709 </glossdef>
9710 </glossentry>
9711
9712 <glossentry id='var-TUNEABI_OVERRIDE'><glossterm>TUNEABI_OVERRIDE</glossterm>
9713 <glossdef>
9714 <para>
9715 If set, the OpenEmbedded system ignores the
9716 <link linkend='var-TUNEABI_WHITELIST'><filename>TUNEABI_WHITELIST</filename></link>
9717 variable.
9718 Providers that use prebuilt libraries can use the
9719 <filename>TUNEABI_OVERRIDE</filename>,
9720 <filename>TUNEABI_WHITELIST</filename>,
9721 and
9722 <link linkend='var-TUNEABI'><filename>TUNEABI</filename></link>
9723 variables to check compatibility of a tuning against their
9724 selection of libraries.
9725 </para>
9726
9727 <para>
9728 See the
9729 <link linkend='ref-classes-sanity'><filename>sanity</filename></link>
9730 class to see how the variable is used.
9731 </para>
9732 </glossdef>
9733 </glossentry>
9734
9735 <glossentry id='var-TUNEABI_WHITELIST'><glossterm>TUNEABI_WHITELIST</glossterm>
9736 <glossdef>
9737 <para>
9738 A whitelist of permissible
9739 <link linkend='var-TUNEABI'><filename>TUNEABI</filename></link>
9740 values.
9741 If <filename>TUNEABI_WHITELIST</filename> is not set,
9742 all tunes are allowed.
9743 Providers that use prebuilt libraries can use the
9744 <filename>TUNEABI_WHITELIST</filename>,
9745 <link linkend='var-TUNEABI_OVERRIDE'><filename>TUNEABI_OVERRIDE</filename></link>,
9746 and <filename>TUNEABI</filename> variables to check
9747 compatibility of a tuning against their selection of
9748 libraries.
9749 </para>
9750
9751 <para>
9752 See the
9753 <link linkend='ref-classes-sanity'><filename>sanity</filename></link>
9754 class to see how the variable is used.
9755 </para>
9756 </glossdef>
9757 </glossentry>
9758
9759 <glossentry id='var-TUNECONFLICT'><glossterm>TUNECONFLICT[<replaceable>feature</replaceable>]</glossterm>
9760 <glossdef>
9761 <para>
9762 Specifies CPU or Application Binary Interface (ABI)
9763 tuning features that conflict with <replaceable>feature</replaceable>.
9764 </para>
9765
9766 <para>
9767 Known tuning conflicts are specified in the machine include
9768 files in the
9769 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
9770 Here is an example from the
9771 <filename>meta/conf/machine/include/mips/arch-mips.inc</filename>
9772 include file that lists the "o32" and "n64" features as
9773 conflicting with the "n32" feature:
9774 <literallayout class='monospaced'>
9775 TUNECONFLICTS[n32] = "o32 n64"
9776 </literallayout>
9777 </para>
9778 </glossdef>
9779 </glossentry>
9780
9781 <glossentry id='var-TUNEVALID'><glossterm>TUNEVALID[<replaceable>feature</replaceable>]</glossterm>
9782 <glossdef>
9783 <para>
9784 Specifies a valid CPU or Application Binary Interface (ABI)
9785 tuning feature.
9786 The specified feature is stored as a flag.
9787 Valid features are specified in the machine include files
9788 (e.g. <filename>meta/conf/machine/include/arm/arch-arm.inc</filename>).
9789 Here is an example from that file:
9790 <literallayout class='monospaced'>
9791 TUNEVALID[bigendian] = "Enable big-endian mode."
9792 </literallayout>
9793 See the machine include files in the
9794 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
9795 for these features.
9796 </para>
9797 </glossdef>
9798 </glossentry>
9799
9800 </glossdiv>
9801
9802 <glossdiv id='var-glossary-u'><title>U</title>
9803
9804 <glossentry id='var-UBOOT_CONFIG'><glossterm>UBOOT_CONFIG</glossterm>
9805 <glossdef>
9806 <para>
9807 Configures the
9808 <link linkend='var-UBOOT_MACHINE'><filename>UBOOT_MACHINE</filename></link>
9809 and can also define
9810 <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
9811 for individual cases.
9812 </para>
9813
9814 <para>
9815 Following is an example from the
9816 <filename>meta-fsl-arm</filename> layer.
9817 <literallayout class='monospaced'>
9818 UBOOT_CONFIG ??= "sd"
9819 UBOOT_CONFIG[sd] = "mx6qsabreauto_config,sdcard"
9820 UBOOT_CONFIG[eimnor] = "mx6qsabreauto_eimnor_config"
9821 UBOOT_CONFIG[nand] = "mx6qsabreauto_nand_config,ubifs"
9822 UBOOT_CONFIG[spinor] = "mx6qsabreauto_spinor_config"
9823 </literallayout>
9824 In this example, "sd" is selected as the configuration
9825 of the possible four for the
9826 <filename>UBOOT_MACHINE</filename>.
9827 The "sd" configuration defines "mx6qsabreauto_config"
9828 as the value for <filename>UBOOT_MACHINE</filename>, while
9829 the "sdcard" specifies the
9830 <filename>IMAGE_FSTYPES</filename> to use for the U-boot
9831 image.
9832 </para>
9833
9834 <para>
9835 For more information on how the
9836 <filename>UBOOT_CONFIG</filename> is handled, see the
9837 <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/meta/classes/uboot-config.bbclass'><filename>uboot-config</filename></ulink>
9838 class.
9839 </para>
9840 </glossdef>
9841 </glossentry>
9842
9843 <glossentry id='var-UBOOT_ENTRYPOINT'><glossterm>UBOOT_ENTRYPOINT</glossterm>
9844 <glossdef>
9845 <para>
9846 Specifies the entry point for the U-Boot image.
9847 During U-Boot image creation, the
9848 <filename>UBOOT_ENTRYPOINT</filename> variable is passed
9849 as a command-line parameter to the
9850 <filename>uboot-mkimage</filename> utility.
9851 </para>
9852 </glossdef>
9853 </glossentry>
9854
9855 <glossentry id='var-UBOOT_LOADADDRESS'><glossterm>UBOOT_LOADADDRESS</glossterm>
9856 <glossdef>
9857 <para>
9858 Specifies the load address for the U-Boot image.
9859 During U-Boot image creation, the
9860 <filename>UBOOT_LOADADDRESS</filename> variable is passed
9861 as a command-line parameter to the
9862 <filename>uboot-mkimage</filename> utility.
9863 </para>
9864 </glossdef>
9865 </glossentry>
9866
9867 <glossentry id='var-UBOOT_LOCALVERSION'><glossterm>UBOOT_LOCALVERSION</glossterm>
9868 <glossdef>
9869 <para>
9870 Appends a string to the name of the local version of the
9871 U-Boot image.
9872 For example, assuming the version of the U-Boot image
9873 built was "2013.10, the full version string reported by
9874 U-Boot would be "2013.10-yocto" given the following
9875 statement:
9876 <literallayout class='monospaced'>
9877 UBOOT_LOCALVERSION = "-yocto"
9878 </literallayout>
9879 </para>
9880 </glossdef>
9881 </glossentry>
9882
9883 <glossentry id='var-UBOOT_MACHINE'><glossterm>UBOOT_MACHINE</glossterm>
9884 <glossdef>
9885 <para>
9886 Specifies the value passed on the
9887 <filename>make</filename> command line when building
9888 a U-Boot image.
9889 The value indicates the target platform configuration.
9890 You typically set this variable from the machine
9891 configuration file (i.e.
9892 <filename>conf/machine/<replaceable>machine_name</replaceable>.conf</filename>).
9893 </para>
9894
9895 <para>
9896 Please see the "Selection of Processor Architecture and
9897 Board Type" section in the U-Boot README for valid values
9898 for this variable.
9899 </para>
9900 </glossdef>
9901 </glossentry>
9902
9903 <glossentry id='var-UBOOT_MAKE_TARGET'><glossterm>UBOOT_MAKE_TARGET</glossterm>
9904 <glossdef>
9905 <para>
9906 Specifies the target called in the
9907 <filename>Makefile</filename>.
9908 The default target is "all".
9909 </para>
9910 </glossdef>
9911 </glossentry>
9912
9913 <glossentry id='var-UBOOT_SUFFIX'><glossterm>UBOOT_SUFFIX</glossterm>
9914 <glossdef>
9915 <para>
9916 Points to the generated U-Boot extension.
9917 For example, <filename>u-boot.sb</filename> has a
9918 <filename>.sb</filename> extension.
9919 </para>
9920
9921 <para>
9922 The default U-Boot extension is
9923 <filename>.bin</filename>
9924 </para>
9925 </glossdef>
9926 </glossentry>
9927
9928 <glossentry id='var-UBOOT_TARGET'><glossterm>UBOOT_TARGET</glossterm>
9929 <glossdef>
9930 <para>
9931 Specifies the target used for building U-Boot.
9932 The target is passed directly as part of the "make" command
9933 (e.g. SPL and AIS).
9934 If you do not specifically set this variable, the
9935 OpenEmbedded build process passes and uses "all" for the
9936 target during the U-Boot building process.
9937 </para>
9938 </glossdef>
9939 </glossentry>
9940
9941 <glossentry id='var-USE_VT'><glossterm>USE_VT</glossterm>
9942 <glossdef>
9943 <para>
9944 When using
9945 <ulink url='&YOCTO_DOCS_DEV_URL;#new-recipe-enabling-system-services'>SysVinit</ulink>,
9946 determines whether or not to run a
9947 <ulink url='http://en.wikipedia.org/wiki/Getty_%28Unix%29'>getty</ulink>
9948 on any virtual terminals in order to enable logging in
9949 through those terminals.
9950 </para>
9951
9952 <para>
9953 The default value used for <filename>USE_VT</filename>
9954 is "1" when no default value is specifically set.
9955 Typically, you would set <filename>USE_VT</filename>
9956 to "0" in the machine configuration file for machines
9957 that do not have a graphical display attached and
9958 therefore do not need virtual terminal functionality.
9959 </para>
9960 </glossdef>
9961 </glossentry>
9962
9963 <glossentry id='var-USER_CLASSES'><glossterm>USER_CLASSES</glossterm>
9964 <glossdef>
9965 <para>
9966 A list of classes to globally inherit.
9967 These classes are used by the OpenEmbedded build system
9968 to enable extra features (e.g.
9969 <filename>buildstats</filename>,
9970 <filename>image-mklibs</filename>, and so forth).
9971 </para>
9972
9973 <para>
9974 The default list is set in your
9975 <filename>local.conf</filename> file:
9976 <literallayout class='monospaced'>
9977 USER_CLASSES ?= "buildstats image-mklibs image-prelink"
9978 </literallayout>
9979 For more information, see
9980 <filename>meta-yocto/conf/local.conf.sample</filename> in
9981 the
9982 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
9983 </para>
9984 </glossdef>
9985 </glossentry>
9986
9987 <glossentry id='var-USERADD_ERROR_DYNAMIC'><glossterm>USERADD_ERROR_DYNAMIC</glossterm>
9988 <glossdef>
9989 <para>
9990 Forces the OpenEmbedded build system to produce an error
9991 if the user identification (<filename>uid</filename>) and
9992 group identification (<filename>gid</filename>) values
9993 are not defined in <filename>files/passwd</filename>
9994 and <filename>files/group</filename> files.
9995 </para>
9996
9997 <para>
9998 The default behavior for the build system is to dynamically
9999 apply <filename>uid</filename> and
10000 <filename>gid</filename> values.
10001 Consequently, the <filename>USERADD_ERROR_DYNAMIC</filename>
10002 variable is by default not set.
10003 If you plan on using statically assigned
10004 <filename>gid</filename> and <filename>uid</filename>
10005 values, you should set
10006 the <filename>USERADD_ERROR_DYNAMIC</filename> variable in
10007 your <filename>local.conf</filename> file as
10008 follows:
10009 <literallayout class='monospaced'>
10010 USERADD_ERROR_DYNAMIC = "1"
10011 </literallayout>
10012 Overriding the default behavior implies you are going to
10013 also take steps to set static <filename>uid</filename> and
10014 <filename>gid</filename> values through use of the
10015 <link linkend='var-USERADDEXTENSION'><filename>USERADDEXTENSION</filename></link>,
10016 <link linkend='var-USERADD_UID_TABLES'><filename>USERADD_UID_TABLES</filename></link>,
10017 and
10018 <link linkend='var-USERADD_GID_TABLES'><filename>USERADD_GID_TABLES</filename></link>
10019 variables.
10020 </para>
10021 </glossdef>
10022 </glossentry>
10023
10024 <glossentry id='var-USERADD_GID_TABLES'><glossterm>USERADD_GID_TABLES</glossterm>
10025 <glossdef>
10026 <para>
10027 Specifies a password file to use for obtaining static
10028 group identification (<filename>gid</filename>) values
10029 when the OpenEmbedded build system adds a group to the
10030 system during package installation.
10031 </para>
10032
10033 <para>
10034 When applying static group identification
10035 (<filename>gid</filename>) values, the OpenEmbedded build
10036 system looks in
10037 <link linkend='var-BBPATH'><filename>BBPATH</filename></link>
10038 for a <filename>files/group</filename> file and then applies
10039 those <filename>uid</filename> values.
10040 Set the variable as follows in your
10041 <filename>local.conf</filename> file:
10042 <literallayout class='monospaced'>
10043 USERADD_GID_TABLES = "files/group"
10044 </literallayout>
10045 </para>
10046
10047 <note>
10048 Setting the
10049 <link linkend='var-USERADDEXTENSION'><filename>USERADDEXTENSION</filename></link>
10050 variable to "useradd-staticids" causes the build system
10051 to use static <filename>gid</filename> values.
10052 </note>
10053 </glossdef>
10054 </glossentry>
10055
10056 <glossentry id='var-USERADD_UID_TABLES'><glossterm>USERADD_UID_TABLES</glossterm>
10057 <glossdef>
10058 <para>
10059 Specifies a password file to use for obtaining static
10060 user identification (<filename>uid</filename>) values
10061 when the OpenEmbedded build system adds a user to the
10062 system during package installation.
10063 </para>
10064
10065 <para>
10066 When applying static user identification
10067 (<filename>uid</filename>) values, the OpenEmbedded build
10068 system looks in
10069 <link linkend='var-BBPATH'><filename>BBPATH</filename></link>
10070 for a <filename>files/passwd</filename> file and then applies
10071 those <filename>uid</filename> values.
10072 Set the variable as follows in your
10073 <filename>local.conf</filename> file:
10074 <literallayout class='monospaced'>
10075 USERADD_UID_TABLES = "files/passwd"
10076 </literallayout>
10077 </para>
10078
10079 <note>
10080 Setting the
10081 <link linkend='var-USERADDEXTENSION'><filename>USERADDEXTENSION</filename></link>
10082 variable to "useradd-staticids" causes the build system
10083 to use static <filename>uid</filename> values.
10084 </note>
10085 </glossdef>
10086 </glossentry>
10087
10088 <glossentry id='var-USERADD_PACKAGES'><glossterm>USERADD_PACKAGES</glossterm>
10089 <glossdef>
10090 <para>
10091 When inheriting the
10092 <link linkend='ref-classes-useradd'><filename>useradd</filename></link>
10093 class, this variable
10094 specifies the individual packages within the recipe that
10095 require users and/or groups to be added.
10096 </para>
10097
10098 <para>
10099 You must set this variable if the recipe inherits the
10100 class.
10101 For example, the following enables adding a user for the
10102 main package in a recipe:
10103 <literallayout class='monospaced'>
10104 USERADD_PACKAGES = "${PN}"
10105 </literallayout>
10106 <note>
10107 If follows that if you are going to use the
10108 <filename>USERADD_PACKAGES</filename> variable,
10109 you need to set one or more of the
10110 <link linkend='var-USERADD_PARAM'><filename>USERADD_PARAM</filename></link>,
10111 <link linkend='var-GROUPADD_PARAM'><filename>GROUPADD_PARAM</filename></link>,
10112 or
10113 <link linkend='var-GROUPMEMS_PARAM'><filename>GROUPMEMS_PARAM</filename></link>
10114 variables.
10115 </note>
10116 </para>
10117
10118 </glossdef>
10119 </glossentry>
10120
10121 <glossentry id='var-USERADD_PARAM'><glossterm>USERADD_PARAM</glossterm>
10122 <glossdef>
10123 <para>
10124 When inheriting the
10125 <link linkend='ref-classes-useradd'><filename>useradd</filename></link>
10126 class, this variable
10127 specifies for a package what parameters should be passed
10128 to the <filename>useradd</filename> command
10129 if you wish to add a user to the system when the package
10130 is installed.
10131 </para>
10132
10133 <para>
10134 Here is an example from the <filename>dbus</filename>
10135 recipe:
10136 <literallayout class='monospaced'>
10137 USERADD_PARAM_${PN} = "--system --home ${localstatedir}/lib/dbus \
10138 --no-create-home --shell /bin/false \
10139 --user-group messagebus"
10140 </literallayout>
10141 For information on the standard Linux shell command
10142 <filename>useradd</filename>, see
10143 <ulink url='http://linux.die.net/man/8/useradd'></ulink>.
10144 </para>
10145 </glossdef>
10146 </glossentry>
10147
10148 <glossentry id='var-USERADDEXTENSION'><glossterm>USERADDEXTENSION</glossterm>
10149 <glossdef>
10150 <para>
10151 When set to "useradd-staticids", causes the
10152 OpenEmbedded build system to base all user and group
10153 additions on a static
10154 <filename>passwd</filename> and
10155 <filename>group</filename> files found in
10156 <link linkend='var-BBPATH'><filename>BBPATH</filename></link>.
10157 </para>
10158
10159 <para>
10160 To use static user identification (<filename>uid</filename>)
10161 and group identification (<filename>gid</filename>)
10162 values, set the variable
10163 as follows in your <filename>local.conf</filename> file:
10164 <literallayout class='monospaced'>
10165 USERADDEXTENSION = "useradd-staticids"
10166 </literallayout>
10167 <note>
10168 Setting this variable to use static
10169 <filename>uid</filename> and <filename>gid</filename>
10170 values causes the OpenEmbedded build system to employ
10171 the
10172 <link linkend='ref-classes-useradd-staticids'><filename>useradd-staticids</filename></link>
10173 class.
10174 </note>
10175 </para>
10176
10177 <para>
10178 If you use static <filename>uid</filename> and
10179 <filename>gid</filename> information, you must also
10180 specify the <filename>files/passwd</filename> and
10181 <filename>files/group</filename> files by setting the
10182 <link linkend='var-USERADD_UID_TABLES'><filename>USERADD_UID_TABLES</filename></link>
10183 and
10184 <link linkend='var-USERADD_GID_TABLES'><filename>USERADD_GID_TABLES</filename></link>
10185 variables.
10186 Additionally, you should also set the
10187 <link linkend='var-USERADD_ERROR_DYNAMIC'><filename>USERADD_ERROR_DYNAMIC</filename></link>
10188 variable.
10189 </para>
10190 </glossdef>
10191 </glossentry>
10192
10193 </glossdiv>
10194
10195<!-- <glossdiv id='var-glossary-v'><title>V</title>-->
10196<!-- </glossdiv>-->
10197
10198 <glossdiv id='var-glossary-w'><title>W</title>
10199
10200 <glossentry id='var-WARN_QA'><glossterm>WARN_QA</glossterm>
10201 <glossdef>
10202 <para>
10203 Specifies the quality assurance checks whose failures are
10204 reported as warnings by the OpenEmbedded build system.
10205 You set this variable in your distribution configuration
10206 file.
10207 For a list of the checks you can control with this variable,
10208 see the
10209 "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
10210 section.
10211 </para>
10212 </glossdef>
10213 </glossentry>
10214
10215 <glossentry id='var-WORKDIR'><glossterm>WORKDIR</glossterm>
10216 <glossdef>
10217 <para>
10218 The pathname of the work directory in which the OpenEmbedded
10219 build system builds a recipe.
10220 This directory is located within the
10221 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
10222 directory structure and is specific to the recipe being
10223 built and the system for which it is being built.
10224 </para>
10225
10226 <para>
10227 The <filename>WORKDIR</filename> directory is defined as
10228 follows:
10229 <literallayout class='monospaced'>
10230 ${TMPDIR}/work/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}
10231 </literallayout>
10232 The actual directory depends on several things:
10233 <itemizedlist>
10234 <listitem><link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>:
10235 The top-level build output directory</listitem>
10236 <listitem><link linkend='var-MULTIMACH_TARGET_SYS'><filename>MULTIMACH_TARGET_SYS</filename></link>:
10237 The target system identifier</listitem>
10238 <listitem><link linkend='var-PN'><filename>PN</filename></link>:
10239 The recipe name</listitem>
10240 <listitem><link linkend='var-EXTENDPE'><filename>EXTENDPE</filename></link>:
10241 The epoch - (if
10242 <link linkend='var-PE'><filename>PE</filename></link>
10243 is not specified, which is usually the case for most
10244 recipes, then <filename>EXTENDPE</filename> is blank)</listitem>
10245 <listitem><link linkend='var-PV'><filename>PV</filename></link>:
10246 The recipe version</listitem>
10247 <listitem><link linkend='var-PR'><filename>PR</filename></link>:
10248 The recipe revision</listitem>
10249 </itemizedlist>
10250 </para>
10251
10252 <para>
10253 As an example, assume a Source Directory top-level folder
10254 name <filename>poky</filename>, a default Build Directory at
10255 <filename>poky/build</filename>, and a
10256 <filename>qemux86-poky-linux</filename> machine target
10257 system.
10258 Furthermore, suppose your recipe is named
10259 <filename>foo_1.3.0-r0.bb</filename>.
10260 In this case, the work directory the build system uses to
10261 build the package would be as follows:
10262 <literallayout class='monospaced'>
10263 poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
10264 </literallayout>
10265 </para>
10266 </glossdef>
10267 </glossentry>
10268
10269 </glossdiv>
10270
10271<!-- <glossdiv id='var-glossary-x'><title>X</title>-->
10272<!-- </glossdiv>-->
10273
10274<!-- <glossdiv id='var-glossary-y'><title>Y</title>-->
10275<!-- </glossdiv>-->
10276
10277<!-- <glossdiv id='var-glossary-z'><title>Z</title>-->
10278<!-- </glossdiv>-->
10279
10280</glossary>
10281</chapter>
10282<!--
10283vim: expandtab tw=80 ts=4
10284-->
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..17b8e97145
--- /dev/null
+++ b/documentation/ref-manual/resources.xml
@@ -0,0 +1,130 @@
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 For more Yocto Project-related mailing lists, see the Yocto Project community mailing lists page
58 <ulink url='&YOCTO_HOME_URL;/tools-resources/community/mailing-lists'>here</ulink>.
59</section>
60
61<section id='resources-irc'>
62 <title>Internet Relay Chat (IRC)</title>
63
64 <para>
65 Two IRC channels on freenode are available for the Yocto Project and Poky discussions:
66 <itemizedlist>
67 <listitem><para><filename>#yocto</filename></para></listitem>
68 <listitem><para><filename>#poky</filename></para></listitem>
69 </itemizedlist>
70 </para>
71</section>
72
73<section id='resources-links'>
74 <title>Links</title>
75
76 <para>
77 Here is a list of resources you will find helpful:
78 <itemizedlist>
79 <listitem><para><emphasis>
80 <ulink url='&YOCTO_HOME_URL;'>The Yocto Project website</ulink>:
81 </emphasis> The home site for the Yocto
82 Project.</para></listitem>
83 <listitem><para><emphasis>
84 <ulink url='http://www.intel.com/'>Intel Corporation</ulink>:</emphasis>
85 The company that acquired OpenedHand in 2008 and began
86 development on the Yocto Project.</para></listitem>
87 <listitem><para><emphasis>
88 <ulink url='&OE_HOME_URL;'>OpenEmbedded</ulink>:</emphasis>
89 The upstream, generic, embedded distribution used as the basis
90 for the build system in the Yocto Project.
91 Poky derives from and contributes back to the OpenEmbedded
92 project.</para></listitem>
93 <listitem><para><emphasis>
94 <ulink url='http://www.openembedded.org/wiki/BitBake'>
95 BitBake</ulink>:</emphasis> The tool used to process metadata.</para></listitem>
96 <listitem><para><emphasis>
97 <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>:</emphasis>
98 A comprehensive guide to the BitBake tool.
99 In the
100 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>,
101 you can find the BitBake User Manual in the
102 <filename>bitbake/doc/bitbake-user-manual</filename> directory.
103 </para></listitem>
104 <listitem><para><emphasis>
105 <ulink url='http://wiki.qemu.org/Index.html'>QEMU</ulink>:
106 </emphasis> An open source machine emulator and virtualizer.
107 </para></listitem>
108 </itemizedlist>
109 </para>
110</section>
111
112<section id='resources-contributions'>
113 <title>Contributions</title>
114
115 <para>
116 The Yocto Project gladly accepts contributions.
117 You can submit changes to the project either by creating and sending
118 pull requests,
119 or by submitting patches through email.
120 For information on how to do both as well as information on how
121 to identify the maintainer for each area of code, see the
122 "<ulink url='&YOCTO_DOCS_DEV_URL;#how-to-submit-a-change'>How to Submit a Change</ulink>"
123 section in the Yocto Project Development Manual.
124 </para>
125</section>
126
127</chapter>
128<!--
129vim: expandtab tw=80 ts=4
130-->
diff --git a/documentation/ref-manual/technical-details.xml b/documentation/ref-manual/technical-details.xml
new file mode 100644
index 0000000000..2df36521c2
--- /dev/null
+++ b/documentation/ref-manual/technical-details.xml
@@ -0,0 +1,1421 @@
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 <replaceable>packagename</replaceable></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-preferences'>Preferences</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>glibc</filename> if they had not already
111 been built.
112 </para>
113
114 <para>
115 A useful BitBake option to consider is the <filename>-k</filename> or
116 <filename>--continue</filename> option.
117 This option instructs BitBake to try and continue processing the job
118 as long as possible even after encountering an error.
119 When an error occurs, the target that
120 failed and those that depend on it cannot be remade.
121 However, when you use this option other dependencies can still be
122 processed.
123 </para>
124 </section>
125
126 <section id='usingpoky-components-metadata'>
127 <title>Metadata (Recipes)</title>
128
129 <para>
130 Files that have the <filename>.bb</filename> suffix are "recipes"
131 files.
132 In general, a recipe contains information about a single piece of
133 software.
134 This information includes the location from which to download the
135 unaltered source, any source patches to be applied to that source
136 (if needed), which special configuration options to apply,
137 how to compile the source files, and how to package the compiled
138 output.
139 </para>
140
141 <para>
142 The term "package" is sometimes used to refer to recipes. However,
143 since the word "package" is used for the packaged output from the OpenEmbedded
144 build system (i.e. <filename>.ipk</filename> or <filename>.deb</filename> files),
145 this document avoids using the term "package" when referring to recipes.
146 </para>
147 </section>
148
149 <section id='usingpoky-components-classes'>
150 <title>Classes</title>
151
152 <para>
153 Class files (<filename>.bbclass</filename>) contain information that
154 is useful to share between
155 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink> files.
156 An example is the
157 <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
158 class, which contains common settings for any application that
159 Autotools uses.
160 The "<link linkend='ref-classes'>Classes</link>" chapter provides
161 details about classes and how to use them.
162 </para>
163 </section>
164
165 <section id='usingpoky-components-configuration'>
166 <title>Configuration</title>
167
168 <para>
169 The configuration files (<filename>.conf</filename>) define various configuration variables
170 that govern the OpenEmbedded build process.
171 These files fall into several areas that define machine configuration options,
172 distribution configuration options, compiler tuning options, general common configuration
173 options, and user configuration options in <filename>local.conf</filename>, which is found
174 in the
175 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
176 </para>
177 </section>
178</section>
179
180<section id="cross-development-toolchain-generation">
181 <title>Cross-Development Toolchain Generation</title>
182
183 <para>
184 The Yocto Project does most of the work for you when it comes to
185 creating
186 <ulink url='&YOCTO_DOCS_DEV_URL;#cross-development-toolchain'>cross-development toolchains</ulink>.
187 This section provides some technical background on how
188 cross-development toolchains are created and used.
189 For more information on toolchains, you can also see the
190 <ulink url='&YOCTO_DOCS_ADT_URL;'>Yocto Project Application Developer's Guide</ulink>.
191 </para>
192
193 <para>
194 In the Yocto Project development environment, cross-development
195 toolchains are used to build the image and applications that run on the
196 target hardware.
197 With just a few commands, the OpenEmbedded build system creates
198 these necessary toolchains for you.
199 </para>
200
201 <para>
202 The following figure shows a high-level build environment regarding
203 toolchain construction and use.
204 </para>
205
206 <para>
207 <imagedata fileref="figures/cross-development-toolchains.png" width="8in" depth="6in" align="center" />
208 </para>
209
210 <para>
211 Most of the work occurs on the Build Host.
212 This is the machine used to build images and generally work within the
213 the Yocto Project environment.
214 When you run BitBake to create an image, the OpenEmbedded build system
215 uses the host <filename>gcc</filename> compiler to bootstrap a
216 cross-compiler named <filename>gcc-cross</filename>.
217 The <filename>gcc-cross</filename> compiler is what BitBake uses to
218 compile source files when creating the target image.
219 You can think of <filename>gcc-cross</filename> simply as an
220 automatically generated cross-compiler that is used internally within
221 BitBake only.
222 </para>
223
224 <para>
225 The chain of events that occurs when <filename>gcc-cross</filename> is
226 bootstrapped is as follows:
227 <literallayout class='monospaced'>
228 gcc -> binutils-cross -> gcc-cross-initial -> linux-libc-headers -> glibc-initial -> glibc -> gcc-cross -> gcc-runtime
229 </literallayout>
230 <itemizedlist>
231 <listitem><para><filename>gcc</filename>:
232 The build host's GNU Compiler Collection (GCC).
233 </para></listitem>
234 <listitem><para><filename>binutils-cross</filename>:
235 The bare minimum binary utilities needed in order to run
236 the <filename>gcc-cross-initial</filename> phase of the
237 bootstrap operation.
238 </para></listitem>
239 <listitem><para><filename>gcc-cross-initial</filename>:
240 An early stage of the bootstrap process for creating
241 the cross-compiler.
242 This stage builds enough of the <filename>gcc-cross</filename>,
243 the C library, and other pieces needed to finish building the
244 final cross-compiler in later stages.
245 This tool is a "native" package (i.e. it is designed to run on
246 the build host).
247 </para></listitem>
248 <listitem><para><filename>linux-libc-headers</filename>:
249 Headers needed for the cross-compiler.
250 </para></listitem>
251 <listitem><para><filename>glibc-initial</filename>:
252 An initial version of the Embedded GLIBC needed to bootstrap
253 <filename>glibc</filename>.
254 </para></listitem>
255 <listitem><para><filename>gcc-cross</filename>:
256 The final stage of the bootstrap process for the
257 cross-compiler.
258 This stage results in the actual cross-compiler that
259 BitBake uses when it builds an image for a targeted
260 device.
261 <note>
262 If you are replacing this cross compiler toolchain
263 with a custom version, you must replace
264 <filename>gcc-cross</filename>.
265 </note>
266 This tool is also a "native" package (i.e. it is
267 designed to run on the build host).
268 </para></listitem>
269 <listitem><para><filename>gcc-runtime</filename>:
270 Runtime libraries resulting from the toolchain bootstrapping
271 process.
272 This tool produces a binary that consists of the
273 runtime libraries need for the targeted device.
274 </para></listitem>
275 </itemizedlist>
276 </para>
277
278 <para>
279 You can use the OpenEmbedded build system to build an installer for
280 the relocatable SDK used to develop applications.
281 When you run the installer, it installs the toolchain, which contains
282 the development tools (e.g., the
283 <filename>gcc-cross-canadian</filename>),
284 <filename>binutils-cross-canadian</filename>, and other
285 <filename>nativesdk-*</filename> tools you need to cross-compile and
286 test your software.
287 The figure shows the commands you use to easily build out this
288 toolchain.
289 This cross-development toolchain is built to execute on the
290 <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>,
291 which might or might not be the same
292 machine as the Build Host.
293 <note>
294 If your target architecture is supported by the Yocto Project,
295 you can take advantage of pre-built images that ship with the
296 Yocto Project and already contain cross-development toolchain
297 installers.
298 </note>
299 </para>
300
301 <para>
302 Here is the bootstrap process for the relocatable toolchain:
303 <literallayout class='monospaced'>
304 gcc -> binutils-crosssdk -> gcc-crosssdk-initial -> linux-libc-headers ->
305 glibc-initial -> nativesdk-glibc -> gcc-crosssdk -> gcc-cross-canadian
306 </literallayout>
307 <itemizedlist>
308 <listitem><para><filename>gcc</filename>:
309 The build host's GNU Compiler Collection (GCC).
310 </para></listitem>
311 <listitem><para><filename>binutils-crosssdk</filename>:
312 The bare minimum binary utilities needed in order to run
313 the <filename>gcc-crosssdk-initial</filename> phase of the
314 bootstrap operation.
315 </para></listitem>
316 <listitem><para><filename>gcc-crosssdk-initial</filename>:
317 An early stage of the bootstrap process for creating
318 the cross-compiler.
319 This stage builds enough of the
320 <filename>gcc-crosssdk</filename> and supporting pieces so that
321 the final stage of the bootstrap process can produce the
322 finished cross-compiler.
323 This tool is a "native" binary that runs on the build host.
324 </para></listitem>
325 <listitem><para><filename>linux-libc-headers</filename>:
326 Headers needed for the cross-compiler.
327 </para></listitem>
328 <listitem><para><filename>glibc-initial</filename>:
329 An initial version of the Embedded GLIBC needed to bootstrap
330 <filename>nativesdk-glibc</filename>.
331 </para></listitem>
332 <listitem><para><filename>nativesdk-glibc</filename>:
333 The Embedded GLIBC needed to bootstrap the
334 <filename>gcc-crosssdk</filename>.
335 </para></listitem>
336 <listitem><para><filename>gcc-crosssdk</filename>:
337 The final stage of the bootstrap process for the
338 relocatable cross-compiler.
339 The <filename>gcc-crosssdk</filename> is a transitory compiler
340 and never leaves the build host.
341 Its purpose is to help in the bootstrap process to create the
342 eventual relocatable <filename>gcc-cross-canadian</filename>
343 compiler, which is relocatable.
344 This tool is also a "native" package (i.e. it is
345 designed to run on the build host).
346 </para></listitem>
347 <listitem><para><filename>gcc-cross-canadian</filename>:
348 The final relocatable cross-compiler.
349 When run on the
350 <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>,
351 this tool
352 produces executable code that runs on the target device.
353 Only one cross-canadian compiler is produced per architecture
354 since they can be targeted at different processor optimizations
355 using configurations passed to the compiler through the
356 compile commands.
357 This circumvents the need for multiple compilers and thus
358 reduces the size of the toolchains.
359 </para></listitem>
360 </itemizedlist>
361 </para>
362
363 <note>
364 For information on advantages gained when building a
365 cross-development toolchain installer, see the
366 "<ulink url='&YOCTO_DOCS_ADT_URL;#optionally-building-a-toolchain-installer'>Optionally Building a Toolchain Installer</ulink>"
367 section in the Yocto Project Application Developer's Guide.
368 </note>
369</section>
370
371<section id="shared-state-cache">
372 <title>Shared State Cache</title>
373
374 <para>
375 By design, the OpenEmbedded build system builds everything from scratch unless
376 BitBake can determine that parts do not need to be rebuilt.
377 Fundamentally, building from scratch is attractive as it means all parts are
378 built fresh and there is no possibility of stale data causing problems.
379 When developers hit problems, they typically default back to building from scratch
380 so they know the state of things from the start.
381 </para>
382
383 <para>
384 Building an image from scratch is both an advantage and a disadvantage to the process.
385 As mentioned in the previous paragraph, building from scratch ensures that
386 everything is current and starts from a known state.
387 However, building from scratch also takes much longer as it generally means
388 rebuilding things that do not necessarily need to be rebuilt.
389 </para>
390
391 <para>
392 The Yocto Project implements shared state code that supports incremental builds.
393 The implementation of the shared state code answers the following questions that
394 were fundamental roadblocks within the OpenEmbedded incremental build support system:
395 <itemizedlist>
396 <listitem><para>What pieces of the system have changed and what pieces have
397 not changed?</para></listitem>
398 <listitem><para>How are changed pieces of software removed and replaced?</para></listitem>
399 <listitem><para>How are pre-built components that do not need to be rebuilt from scratch
400 used when they are available?</para></listitem>
401 </itemizedlist>
402 </para>
403
404 <para>
405 For the first question, the build system detects changes in the "inputs" to a given task by
406 creating a checksum (or signature) of the task's inputs.
407 If the checksum changes, the system assumes the inputs have changed and the task needs to be
408 rerun.
409 For the second question, the shared state (sstate) code tracks which tasks add which output
410 to the build process.
411 This means the output from a given task can be removed, upgraded or otherwise manipulated.
412 The third question is partly addressed by the solution for the second question
413 assuming the build system can fetch the sstate objects from remote locations and
414 install them if they are deemed to be valid.
415 </para>
416
417 <note>
418 The OpenEmbedded build system does not maintain
419 <link linkend='var-PR'><filename>PR</filename></link> information
420 as part of the shared state packages.
421 Consequently, considerations exist that affect maintaining shared
422 state feeds.
423 For information on how the OpenEmbedded build system
424 works with packages and can
425 track incrementing <filename>PR</filename> information, see the
426 "<ulink url='&YOCTO_DOCS_DEV_URL;#incrementing-a-package-revision-number'>Incrementing a Package Revision Number</ulink>"
427 section.
428 </note>
429
430 <para>
431 The rest of this section goes into detail about the overall incremental build
432 architecture, the checksums (signatures), shared state, and some tips and tricks.
433 </para>
434
435 <section id='overall-architecture'>
436 <title>Overall Architecture</title>
437
438 <para>
439 When determining what parts of the system need to be built, BitBake
440 works on a per-task basis rather than a per-recipe basis.
441 You might wonder why using a per-task basis is preferred over a per-recipe basis.
442 To help explain, consider having the IPK packaging backend enabled and then switching to DEB.
443 In this case, the
444 <link linkend='ref-tasks-install'><filename>do_install</filename></link>
445 and
446 <link linkend='ref-tasks-package'><filename>do_package</filename></link>
447 task outputs are still valid.
448 However, with a per-recipe approach, the build would not include the
449 <filename>.deb</filename> files.
450 Consequently, you would have to invalidate the whole build and rerun it.
451 Rerunning everything is not the best solution.
452 Also, in this case, the core must be "taught" much about specific tasks.
453 This methodology does not scale well and does not allow users to easily add new tasks
454 in layers or as external recipes without touching the packaged-staging core.
455 </para>
456 </section>
457
458 <section id='checksums'>
459 <title>Checksums (Signatures)</title>
460
461 <para>
462 The shared state code uses a checksum, which is a unique signature of a task's
463 inputs, to determine if a task needs to be run again.
464 Because it is a change in a task's inputs that triggers a rerun, the process
465 needs to detect all the inputs to a given task.
466 For shell tasks, this turns out to be fairly easy because
467 the build process generates a "run" shell script for each task and
468 it is possible to create a checksum that gives you a good idea of when
469 the task's data changes.
470 </para>
471
472 <para>
473 To complicate the problem, there are things that should not be included in
474 the checksum.
475 First, there is the actual specific build path of a given task -
476 the <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>.
477 It does not matter if the work directory changes because it should not
478 affect the output for target packages.
479 Also, the build process has the objective of making native or cross packages relocatable.
480 The checksum therefore needs to exclude <filename>WORKDIR</filename>.
481 The simplistic approach for excluding the work directory is to set
482 <filename>WORKDIR</filename> to some fixed value and create the checksum
483 for the "run" script.
484 </para>
485
486 <para>
487 Another problem results from the "run" scripts containing functions that
488 might or might not get called.
489 The incremental build solution contains code that figures out dependencies
490 between shell functions.
491 This code is used to prune the "run" scripts down to the minimum set,
492 thereby alleviating this problem and making the "run" scripts much more
493 readable as a bonus.
494 </para>
495
496 <para>
497 So far we have solutions for shell scripts.
498 What about Python tasks?
499 The same approach applies even though these tasks are more difficult.
500 The process needs to figure out what variables a Python function accesses
501 and what functions it calls.
502 Again, the incremental build solution contains code that first figures out
503 the variable and function dependencies, and then creates a checksum for the data
504 used as the input to the task.
505 </para>
506
507 <para>
508 Like the <filename>WORKDIR</filename> case, situations exist where dependencies
509 should be ignored.
510 For these cases, you can instruct the build process to ignore a dependency
511 by using a line like the following:
512 <literallayout class='monospaced'>
513 PACKAGE_ARCHS[vardepsexclude] = "MACHINE"
514 </literallayout>
515 This example ensures that the
516 <link linkend='var-PACKAGE_ARCHS'><filename>PACKAGE_ARCHS</filename></link>
517 variable does not
518 depend on the value of
519 <link linkend='var-MACHINE'><filename>MACHINE</filename></link>,
520 even if it does reference it.
521 </para>
522
523 <para>
524 Equally, there are cases where we need to add dependencies BitBake is not able to find.
525 You can accomplish this by using a line like the following:
526 <literallayout class='monospaced'>
527 PACKAGE_ARCHS[vardeps] = "MACHINE"
528 </literallayout>
529 This example explicitly adds the <filename>MACHINE</filename> variable as a
530 dependency for <filename>PACKAGE_ARCHS</filename>.
531 </para>
532
533 <para>
534 Consider a case with in-line Python, for example, where BitBake is not
535 able to figure out dependencies.
536 When running in debug mode (i.e. using <filename>-DDD</filename>), BitBake
537 produces output when it discovers something for which it cannot figure out
538 dependencies.
539 The Yocto Project team has currently not managed to cover those dependencies
540 in detail and is aware of the need to fix this situation.
541 </para>
542
543 <para>
544 Thus far, this section has limited discussion to the direct inputs into a task.
545 Information based on direct inputs is referred to as the "basehash" in the
546 code.
547 However, there is still the question of a task's indirect inputs - the
548 things that were already built and present in the
549 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>.
550 The checksum (or signature) for a particular task needs to add the hashes
551 of all the tasks on which the particular task depends.
552 Choosing which dependencies to add is a policy decision.
553 However, the effect is to generate a master checksum that combines the basehash
554 and the hashes of the task's dependencies.
555 </para>
556
557 <para>
558 At the code level, there are a variety of ways both the basehash and the
559 dependent task hashes can be influenced.
560 Within the BitBake configuration file, we can give BitBake some extra information
561 to help it construct the basehash.
562 The following statement effectively results in a list of global variable
563 dependency excludes - variables never included in any checksum:
564 <literallayout class='monospaced'>
565 BB_HASHBASE_WHITELIST ?= "TMPDIR FILE PATH PWD BB_TASKHASH BBPATH DL_DIR \
566 SSTATE_DIR THISDIR FILESEXTRAPATHS FILE_DIRNAME HOME LOGNAME SHELL TERM \
567 USER FILESPATH STAGING_DIR_HOST STAGING_DIR_TARGET COREBASE PRSERV_HOST \
568 PRSERV_DUMPDIR PRSERV_DUMPFILE PRSERV_LOCKDOWN PARALLEL_MAKE \
569 CCACHE_DIR EXTERNAL_TOOLCHAIN CCACHE CCACHE_DISABLE LICENSE_PATH SDKPKGSUFFIX"
570 </literallayout>
571 The previous example excludes
572 <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>
573 since that variable is actually constructed as a path within
574 <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>, which is on
575 the whitelist.
576 </para>
577
578 <para>
579 The rules for deciding which hashes of dependent tasks to include through
580 dependency chains are more complex and are generally accomplished with a
581 Python function.
582 The code in <filename>meta/lib/oe/sstatesig.py</filename> shows two examples
583 of this and also illustrates how you can insert your own policy into the system
584 if so desired.
585 This file defines the two basic signature generators <filename>OE-Core</filename>
586 uses: "OEBasic" and "OEBasicHash".
587 By default, there is a dummy "noop" signature handler enabled in BitBake.
588 This means that behavior is unchanged from previous versions.
589 <filename>OE-Core</filename> uses the "OEBasicHash" signature handler by default
590 through this setting in the <filename>bitbake.conf</filename> file:
591 <literallayout class='monospaced'>
592 BB_SIGNATURE_HANDLER ?= "OEBasicHash"
593 </literallayout>
594 The "OEBasicHash" <filename>BB_SIGNATURE_HANDLER</filename> is the same as the
595 "OEBasic" version but adds the task hash to the stamp files.
596 This results in any
597 <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
598 change that changes the task hash, automatically
599 causing the task to be run again.
600 This removes the need to bump <link linkend='var-PR'><filename>PR</filename></link>
601 values, and changes to Metadata automatically ripple across the build.
602 </para>
603
604 <para>
605 It is also worth noting that the end result of these signature generators is to
606 make some dependency and hash information available to the build.
607 This information includes:
608 <itemizedlist>
609 <listitem><para><filename>BB_BASEHASH_task-</filename><replaceable>taskname</replaceable>:
610 The base hashes for each task in the recipe.
611 </para></listitem>
612 <listitem><para><filename>BB_BASEHASH_</filename><replaceable>filename</replaceable><filename>:</filename><replaceable>taskname</replaceable>:
613 The base hashes for each dependent task.
614 </para></listitem>
615 <listitem><para><filename>BBHASHDEPS_</filename><replaceable>filename</replaceable><filename>:</filename><replaceable>taskname</replaceable>:
616 The task dependencies for each task.
617 </para></listitem>
618 <listitem><para><filename>BB_TASKHASH</filename>:
619 The hash of the currently running task.
620 </para></listitem>
621 </itemizedlist>
622 </para>
623 </section>
624
625 <section id='shared-state'>
626 <title>Shared State</title>
627
628 <para>
629 Checksums and dependencies, as discussed in the previous section, solve half the
630 problem of supporting a shared state.
631 The other part of the problem is being able to use checksum information during the build
632 and being able to reuse or rebuild specific components.
633 </para>
634
635 <para>
636 The
637 <link linkend='ref-classes-sstate'><filename>sstate</filename></link>
638 class is a relatively generic implementation of how to "capture"
639 a snapshot of a given task.
640 The idea is that the build process does not care about the source of a task's output.
641 Output could be freshly built or it could be downloaded and unpacked from
642 somewhere - the build process does not need to worry about its origin.
643 </para>
644
645 <para>
646 There are two types of output, one is just about creating a directory
647 in <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>.
648 A good example is the output of either
649 <link linkend='ref-tasks-install'><filename>do_install</filename></link>
650 or
651 <link linkend='ref-tasks-package'><filename>do_package</filename></link>.
652 The other type of output occurs when a set of data is merged into a shared directory
653 tree such as the sysroot.
654 </para>
655
656 <para>
657 The Yocto Project team has tried to keep the details of the
658 implementation hidden in <filename>sstate</filename> class.
659 From a user's perspective, adding shared state wrapping to a task
660 is as simple as this
661 <link linkend='ref-tasks-deploy'><filename>do_deploy</filename></link>
662 example taken from the
663 <link linkend='ref-classes-deploy'><filename>deploy</filename></link>
664 class:
665 <literallayout class='monospaced'>
666 DEPLOYDIR = "${WORKDIR}/deploy-${PN}"
667 SSTATETASKS += "do_deploy"
668 do_deploy[sstate-name] = "deploy"
669 do_deploy[sstate-inputdirs] = "${DEPLOYDIR}"
670 do_deploy[sstate-outputdirs] = "${DEPLOY_DIR_IMAGE}"
671
672 python do_deploy_setscene () {
673 sstate_setscene(d)
674 }
675 addtask do_deploy_setscene
676 do_deploy[dirs] = "${DEPLOYDIR} ${B}"
677 </literallayout>
678 In this example, we add some extra flags to the task, a name field ("deploy"), an
679 input directory where the task sends data, and the output
680 directory where the data from the task should eventually be copied.
681 We also add a <filename>_setscene</filename> variant of the task and add the task
682 name to the <filename>SSTATETASKS</filename> list.
683 </para>
684
685 <para>
686 If you have a directory whose contents you need to preserve, you can do this with
687 a line like the following:
688 <literallayout class='monospaced'>
689 do_package[sstate-plaindirs] = "${PKGD} ${PKGDEST}"
690 </literallayout>
691 This method, as well as the following example, also works for multiple directories.
692 <literallayout class='monospaced'>
693 do_package[sstate-inputdirs] = "${PKGDESTWORK} ${SHLIBSWORKDIR}"
694 do_package[sstate-outputdirs] = "${PKGDATA_DIR} ${SHLIBSDIR}"
695 do_package[sstate-lockfile] = "${PACKAGELOCK}"
696 </literallayout>
697 These methods also include the ability to take a lockfile when manipulating
698 shared state directory structures since some cases are sensitive to file
699 additions or removals.
700 </para>
701
702 <para>
703 Behind the scenes, the shared state code works by looking in
704 <link linkend='var-SSTATE_DIR'><filename>SSTATE_DIR</filename></link> and
705 <link linkend='var-SSTATE_MIRRORS'><filename>SSTATE_MIRRORS</filename></link>
706 for shared state files.
707 Here is an example:
708 <literallayout class='monospaced'>
709 SSTATE_MIRRORS ?= "\
710 file://.* http://someserver.tld/share/sstate/PATH \n \
711 file://.* file:///some/local/dir/sstate/PATH"
712 </literallayout>
713 <note>
714 The shared state directory (<filename>SSTATE_DIR</filename>) is
715 organized into two-character subdirectories, where the subdirectory
716 names are based on the first two characters of the hash.
717 If the shared state directory structure for a mirror has the
718 same structure as <filename>SSTATE_DIR</filename>, you must
719 specify "PATH" as part of the URI to enable the build system
720 to map to the appropriate subdirectory.
721 </note>
722 </para>
723
724 <para>
725 The shared state package validity can be detected just by looking at the
726 filename since the filename contains the task checksum (or signature) as
727 described earlier in this section.
728 If a valid shared state package is found, the build process downloads it
729 and uses it to accelerate the task.
730 </para>
731
732 <para>
733 The build processes use the <filename>*_setscene</filename> tasks
734 for the task acceleration phase.
735 BitBake goes through this phase before the main execution code and tries
736 to accelerate any tasks for which it can find shared state packages.
737 If a shared state package for a task is available, the shared state
738 package is used.
739 This means the task and any tasks on which it is dependent are not
740 executed.
741 </para>
742
743 <para>
744 As a real world example, the aim is when building an IPK-based image,
745 only the
746 <link linkend='ref-tasks-package_write_ipk'><filename>do_package_write_ipk</filename></link>
747 tasks would have their
748 shared state packages fetched and extracted.
749 Since the sysroot is not used, it would never get extracted.
750 This is another reason why a task-based approach is preferred over a
751 recipe-based approach, which would have to install the output from every task.
752 </para>
753 </section>
754
755 <section id='tips-and-tricks'>
756 <title>Tips and Tricks</title>
757
758 <para>
759 The code in the build system that supports incremental builds is not
760 simple code.
761 This section presents some tips and tricks that help you work around
762 issues related to shared state code.
763 </para>
764
765 <section id='debugging'>
766 <title>Debugging</title>
767
768 <para>
769 When things go wrong, debugging needs to be straightforward.
770 Because of this, the Yocto Project includes strong debugging
771 tools:
772 <itemizedlist>
773 <listitem><para>Whenever a shared state package is written out, so is a
774 corresponding <filename>.siginfo</filename> file.
775 This practice results in a pickled Python database of all
776 the metadata that went into creating the hash for a given shared state
777 package.</para></listitem>
778 <listitem><para>If you run BitBake with the <filename>--dump-signatures</filename>
779 (or <filename>-S</filename>) option, BitBake dumps out
780 <filename>.siginfo</filename> files in
781 the stamp directory for every task it would have executed instead of
782 building the specified target package.</para></listitem>
783 <listitem><para>There is a <filename>bitbake-diffsigs</filename> command that
784 can process <filename>.siginfo</filename> files.
785 If you specify one of these files, BitBake dumps out the dependency
786 information in the file.
787 If you specify two files, BitBake compares the two files and dumps out
788 the differences between the two.
789 This more easily helps answer the question of "What
790 changed between X and Y?"</para></listitem>
791 </itemizedlist>
792 </para>
793 </section>
794
795 <section id='invalidating-shared-state'>
796 <title>Invalidating Shared State</title>
797
798 <para>
799 The OpenEmbedded build system uses checksums and shared state
800 cache to avoid unnecessarily rebuilding tasks.
801 Collectively, this scheme is known as "shared state code."
802 </para>
803
804 <para>
805 As with all schemes, this one has some drawbacks.
806 It is possible that you could make implicit changes to your
807 code that the checksum calculations do not take into
808 account.
809 These implicit changes affect a task's output but do not trigger
810 the shared state code into rebuilding a recipe.
811 Consider an example during which a tool changes its output.
812 Assume that the output of <filename>rpmdeps</filename> changes.
813 The result of the change should be that all the
814 <filename>package</filename> and
815 <filename>package_write_rpm</filename> shared state cache
816 items become invalid.
817 However, because the change to the output is
818 external to the code and therefore implicit,
819 the associated shared state cache items do not become
820 invalidated.
821 In this case, the build process uses the cached items rather
822 than running the task again.
823 Obviously, these types of implicit changes can cause problems.
824 </para>
825
826 <para>
827 To avoid these problems during the build, you need to
828 understand the effects of any changes you make.
829 Realize that changes you make directly to a function
830 are automatically factored into the checksum calculation.
831 Thus, these explicit changes invalidate the associated area of
832 shared state cache.
833 However, you need to be aware of any implicit changes that
834 are not obvious changes to the code and could affect the output
835 of a given task.
836 </para>
837
838 <para>
839 When you identify an implicit change, you can easily take steps
840 to invalidate the cache and force the tasks to run.
841 The steps you can take are as simple as changing a function's
842 comments in the source code.
843 For example, to invalidate package shared state files, change
844 the comment statements of
845 <link linkend='ref-tasks-package'><filename>do_package</filename></link>
846 or the comments of one of the functions it calls.
847 Even though the change is purely cosmetic, it causes the
848 checksum to be recalculated and forces the OpenEmbedded build
849 system to run the task again.
850 </para>
851
852 <note>
853 For an example of a commit that makes a cosmetic change to
854 invalidate shared state, see this
855 <ulink url='&YOCTO_GIT_URL;/cgit.cgi/poky/commit/meta/classes/package.bbclass?id=737f8bbb4f27b4837047cb9b4fbfe01dfde36d54'>commit</ulink>.
856 </note>
857 </section>
858 </section>
859</section>
860
861<section id='x32'>
862 <title>x32</title>
863
864 <para>
865 x32 is a processor-specific Application Binary Interface (psABI) for x86_64.
866 An ABI defines the calling conventions between functions in a processing environment.
867 The interface determines what registers are used and what the sizes are for various C data types.
868 </para>
869
870 <para>
871 Some processing environments prefer using 32-bit applications even when running
872 on Intel 64-bit platforms.
873 Consider the i386 psABI, which is a very old 32-bit ABI for Intel 64-bit platforms.
874 The i386 psABI does not provide efficient use and access of the Intel 64-bit processor resources,
875 leaving the system underutilized.
876 Now consider the x86_64 psABI.
877 This ABI is newer and uses 64-bits for data sizes and program pointers.
878 The extra bits increase the footprint size of the programs, libraries,
879 and also increases the memory and file system size requirements.
880 Executing under the x32 psABI enables user programs to utilize CPU and system resources
881 more efficiently while keeping the memory footprint of the applications low.
882 Extra bits are used for registers but not for addressing mechanisms.
883 </para>
884
885 <section id='support'>
886 <title>Support</title>
887
888 <para>
889 This Yocto Project release supports the final specifications of x32
890 psABI.
891 Support for x32 psABI exists as follows:
892 <itemizedlist>
893 <listitem><para>You can create packages and images in x32 psABI format on x86_64 architecture targets.
894 </para></listitem>
895 <listitem><para>You can successfully build many recipes with the x32 toolchain.</para></listitem>
896 <listitem><para>You can create and boot <filename>core-image-minimal</filename> and
897 <filename>core-image-sato</filename> images.</para></listitem>
898 </itemizedlist>
899 </para>
900 </section>
901
902 <section id='completing-x32'>
903 <title>Completing x32</title>
904
905 <para>
906 Future Plans for the x32 psABI in the Yocto Project include the following:
907 <itemizedlist>
908 <listitem><para>Enhance and fix the few remaining recipes so they
909 work with and support x32 toolchains.</para></listitem>
910 <listitem><para>Enhance RPM Package Manager (RPM) support for x32 binaries.</para></listitem>
911 <listitem><para>Support larger images.</para></listitem>
912 </itemizedlist>
913 </para>
914 </section>
915
916 <section id='using-x32-right-now'>
917 <title>Using x32 Right Now</title>
918
919 <para>
920 Follow these steps to use the x32 spABI:
921 <itemizedlist>
922 <listitem><para>Enable the x32 psABI tuning file for <filename>x86_64</filename>
923 machines by editing the <filename>conf/local.conf</filename> like this:
924 <literallayout class='monospaced'>
925 MACHINE = "qemux86-64"
926 DEFAULTTUNE = "x86-64-x32"
927 baselib = "${@d.getVar('BASE_LIB_tune-' + (d.getVar('DEFAULTTUNE', True) \
928 or 'INVALID'), True) or 'lib'}"
929 #MACHINE = "genericx86"
930 #DEFAULTTUNE = "core2-64-x32"
931 </literallayout></para></listitem>
932 <listitem><para>As usual, use BitBake to build an image that supports the x32 psABI.
933 Here is an example:
934 <literallayout class='monospaced'>
935 $ bitbake core-image-sato
936 </literallayout></para></listitem>
937 <listitem><para>As usual, run your image using QEMU:
938 <literallayout class='monospaced'>
939 $ runqemu qemux86-64 core-image-sato
940 </literallayout></para></listitem>
941 </itemizedlist>
942 </para>
943 </section>
944</section>
945
946<section id="wayland">
947 <title>Wayland</title>
948
949 <para>
950 <ulink url='http://en.wikipedia.org/wiki/Wayland_(display_server_protocol)'>Wayland</ulink>
951 is a computer display server protocol that
952 provides a method for compositing window managers to communicate
953 directly with applications and video hardware and expects them to
954 communicate with input hardware using other libraries.
955 Using Wayland with supporting targets can result in better control
956 over graphics frame rendering than an application might otherwise
957 achieve.
958 </para>
959
960 <para>
961 The Yocto Project provides the Wayland protocol libraries and the
962 reference
963 <ulink url='http://en.wikipedia.org/wiki/Wayland_(display_server_protocol)#Weston'>Weston</ulink>
964 compositor as part of its release.
965 This section describes what you need to do to implement Wayland and
966 use the compositor when building an image for a supporting target.
967 </para>
968
969 <section id="wayland-support">
970 <title>Support</title>
971
972 <para>
973 The Wayland protocol libraries and the reference Weston compositor
974 ship as integrated packages in the <filename>meta</filename> layer
975 of the
976 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
977 Specifically, you can find the recipes that build both Wayland
978 and Weston at <filename>meta/recipes-graphics/wayland</filename>.
979 </para>
980
981 <para>
982 You can build both the Wayland and Weston packages for use only
983 with targets that accept the
984 <ulink url='http://dri.freedesktop.org/wiki/'>Mesa 3D and Direct Rendering Infrastructure</ulink>,
985 which is also known as Mesa DRI.
986 This implies that you cannot build and use the packages if your
987 target uses, for example, the
988 <trademark class='registered'>Intel</trademark> Embedded Media and
989 Graphics Driver (<trademark class='registered'>Intel</trademark>
990 EMGD) that overrides Mesa DRI.
991 </para>
992
993 <note>
994 Due to lack of EGL support, Weston 1.0.3 will not run directly on
995 the emulated QEMU hardware.
996 However, this version of Weston will run under X emulation without
997 issues.
998 </note>
999 </section>
1000
1001 <section id="enabling-wayland-in-an-image">
1002 <title>Enabling Wayland in an Image</title>
1003
1004 <para>
1005 To enable Wayland, you need to enable it to be built and enable
1006 it to be included in the image.
1007 </para>
1008
1009 <section id="enable-building">
1010 <title>Building</title>
1011
1012 <para>
1013 To cause Mesa to build the <filename>wayland-egl</filename>
1014 platform and Weston to build Wayland with Kernel Mode
1015 Setting
1016 (<ulink url='https://wiki.archlinux.org/index.php/Kernel_Mode_Setting'>KMS</ulink>)
1017 support, include the "wayland" flag in the
1018 <link linkend="var-DISTRO_FEATURES"><filename>DISTRO_FEATURES</filename></link>
1019 statement in your <filename>local.conf</filename> file:
1020 <literallayout class='monospaced'>
1021 DISTRO_FEATURES_append = " wayland"
1022 </literallayout>
1023 </para>
1024
1025 <note>
1026 If X11 has been enabled elsewhere, Weston will build Wayland
1027 with X11 support
1028 </note>
1029 </section>
1030
1031 <section id="enable-installation-in-an-image">
1032 <title>Installing</title>
1033
1034 <para>
1035 To install the Wayland feature into an image, you must
1036 include the following
1037 <link linkend='var-CORE_IMAGE_EXTRA_INSTALL'><filename>CORE_IMAGE_EXTRA_INSTALL</filename></link>
1038 statement in your <filename>local.conf</filename> file:
1039 <literallayout class='monospaced'>
1040 CORE_IMAGE_EXTRA_INSTALL += "wayland weston"
1041 </literallayout>
1042 </para>
1043 </section>
1044 </section>
1045
1046 <section id="running-weston">
1047 <title>Running Weston</title>
1048
1049 <para>
1050 To run Weston inside X11, enabling it as described earlier and
1051 building a Sato image is sufficient.
1052 If you are running your image under Sato, a Weston Launcher appears
1053 in the "Utility" category.
1054 </para>
1055
1056 <para>
1057 Alternatively, you can run Weston through the command-line
1058 interpretor (CLI), which is better suited for development work.
1059 To run Weston under the CLI, you need to do the following after
1060 your image is built:
1061 <orderedlist>
1062 <listitem><para>Run these commands to export
1063 <filename>XDG_RUNTIME_DIR</filename>:
1064 <literallayout class='monospaced'>
1065 mkdir -p /tmp/$USER-weston
1066 chmod 0700 /tmp/$USER-weston
1067 export XDG_RUNTIME_DIR=/tmp/$USER-weston
1068 </literallayout></para></listitem>
1069 <listitem><para>Launch Weston in the shell:
1070 <literallayout class='monospaced'>
1071 weston
1072 </literallayout></para></listitem>
1073 </orderedlist>
1074 </para>
1075 </section>
1076</section>
1077
1078<section id="licenses">
1079 <title>Licenses</title>
1080
1081 <para>
1082 This section describes the mechanism by which the OpenEmbedded build system
1083 tracks changes to licensing text.
1084 The section also describes how to enable commercially licensed recipes,
1085 which by default are disabled.
1086 </para>
1087
1088 <para>
1089 For information that can help you maintain compliance with various open
1090 source licensing during the lifecycle of the product, see the
1091 "<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
1092 in the Yocto Project Development Manual.
1093 </para>
1094
1095 <section id="usingpoky-configuring-LIC_FILES_CHKSUM">
1096 <title>Tracking License Changes</title>
1097
1098 <para>
1099 The license of an upstream project might change in the future.
1100 In order to prevent these changes going unnoticed, the
1101 <filename><link linkend='var-LIC_FILES_CHKSUM'>LIC_FILES_CHKSUM</link></filename>
1102 variable tracks changes to the license text. The checksums are validated at the end of the
1103 configure step, and if the checksums do not match, the build will fail.
1104 </para>
1105
1106 <section id="usingpoky-specifying-LIC_FILES_CHKSUM">
1107 <title>Specifying the <filename>LIC_FILES_CHKSUM</filename> Variable</title>
1108
1109 <para>
1110 The <filename>LIC_FILES_CHKSUM</filename>
1111 variable contains checksums of the license text in the source code for the recipe.
1112 Following is an example of how to specify <filename>LIC_FILES_CHKSUM</filename>:
1113 <literallayout class='monospaced'>
1114 LIC_FILES_CHKSUM = "file://COPYING;md5=xxxx \
1115 file://licfile1.txt;beginline=5;endline=29;md5=yyyy \
1116 file://licfile2.txt;endline=50;md5=zzzz \
1117 ..."
1118 </literallayout>
1119 </para>
1120
1121 <para>
1122 The build system uses the
1123 <filename><link linkend='var-S'>S</link></filename> variable as
1124 the default directory when searching files listed in
1125 <filename>LIC_FILES_CHKSUM</filename>.
1126 The previous example employs the default directory.
1127 </para>
1128
1129 <para>
1130 Consider this next example:
1131 <literallayout class='monospaced'>
1132 LIC_FILES_CHKSUM = "file://src/ls.c;beginline=5;endline=16;\
1133 md5=bb14ed3c4cda583abc85401304b5cd4e"
1134 LIC_FILES_CHKSUM = "file://${WORKDIR}/license.html;md5=5c94767cedb5d6987c902ac850ded2c6"
1135 </literallayout>
1136 </para>
1137
1138 <para>
1139 The first line locates a file in
1140 <filename>${S}/src/ls.c</filename>.
1141 The second line refers to a file in
1142 <filename><link linkend='var-WORKDIR'>WORKDIR</link></filename>.
1143 </para>
1144 <para>
1145 Note that <filename>LIC_FILES_CHKSUM</filename> variable is
1146 mandatory for all recipes, unless the
1147 <filename>LICENSE</filename> variable is set to "CLOSED".
1148 </para>
1149 </section>
1150
1151 <section id="usingpoky-LIC_FILES_CHKSUM-explanation-of-syntax">
1152 <title>Explanation of Syntax</title>
1153 <para>
1154 As mentioned in the previous section, the
1155 <filename>LIC_FILES_CHKSUM</filename> variable lists all the
1156 important files that contain the license text for the source code.
1157 It is possible to specify a checksum for an entire file, or a specific section of a
1158 file (specified by beginning and ending line numbers with the "beginline" and "endline"
1159 parameters, respectively).
1160 The latter is useful for source files with a license notice header,
1161 README documents, and so forth.
1162 If you do not use the "beginline" parameter, then it is assumed that the text begins on the
1163 first line of the file.
1164 Similarly, if you do not use the "endline" parameter, it is assumed that the license text
1165 ends with the last line of the file.
1166 </para>
1167
1168 <para>
1169 The "md5" parameter stores the md5 checksum of the license text.
1170 If the license text changes in any way as compared to this parameter
1171 then a mismatch occurs.
1172 This mismatch triggers a build failure and notifies the developer.
1173 Notification allows the developer to review and address the license text changes.
1174 Also note that if a mismatch occurs during the build, the correct md5
1175 checksum is placed in the build log and can be easily copied to the recipe.
1176 </para>
1177
1178 <para>
1179 There is no limit to how many files you can specify using the
1180 <filename>LIC_FILES_CHKSUM</filename> variable.
1181 Generally, however, every project requires a few specifications for license tracking.
1182 Many projects have a "COPYING" file that stores the license information for all the source
1183 code files.
1184 This practice allows you to just track the "COPYING" file as long as it is kept up to date.
1185 </para>
1186
1187 <tip>
1188 If you specify an empty or invalid "md5" parameter, BitBake returns an md5 mis-match
1189 error and displays the correct "md5" parameter value during the build.
1190 The correct parameter is also captured in the build log.
1191 </tip>
1192
1193 <tip>
1194 If the whole file contains only license text, you do not need to use the "beginline" and
1195 "endline" parameters.
1196 </tip>
1197 </section>
1198 </section>
1199
1200 <section id="enabling-commercially-licensed-recipes">
1201 <title>Enabling Commercially Licensed Recipes</title>
1202
1203 <para>
1204 By default, the OpenEmbedded build system disables
1205 components that have commercial or other special licensing
1206 requirements.
1207 Such requirements are defined on a
1208 recipe-by-recipe basis through the
1209 <link linkend='var-LICENSE_FLAGS'><filename>LICENSE_FLAGS</filename></link>
1210 variable definition in the affected recipe.
1211 For instance, the
1212 <filename>poky/meta/recipes-multimedia/gstreamer/gst-plugins-ugly</filename>
1213 recipe contains the following statement:
1214 <literallayout class='monospaced'>
1215 LICENSE_FLAGS = "commercial"
1216 </literallayout>
1217 Here is a slightly more complicated example that contains both an
1218 explicit recipe name and version (after variable expansion):
1219 <literallayout class='monospaced'>
1220 LICENSE_FLAGS = "license_${PN}_${PV}"
1221 </literallayout>
1222 In order for a component restricted by a <filename>LICENSE_FLAGS</filename>
1223 definition to be enabled and included in an image, it
1224 needs to have a matching entry in the global
1225 <link linkend='var-LICENSE_FLAGS_WHITELIST'><filename>LICENSE_FLAGS_WHITELIST</filename></link>
1226 variable, which is a variable
1227 typically defined in your <filename>local.conf</filename> file.
1228 For example, to enable
1229 the <filename>poky/meta/recipes-multimedia/gstreamer/gst-plugins-ugly</filename>
1230 package, you could add either the string
1231 "commercial_gst-plugins-ugly" or the more general string
1232 "commercial" to <filename>LICENSE_FLAGS_WHITELIST</filename>.
1233 See the
1234 "<link linkend='license-flag-matching'>License Flag Matching</link>" section
1235 for a full explanation of how <filename>LICENSE_FLAGS</filename> matching works.
1236 Here is the example:
1237 <literallayout class='monospaced'>
1238 LICENSE_FLAGS_WHITELIST = "commercial_gst-plugins-ugly"
1239 </literallayout>
1240 Likewise, to additionally enable the package built from the recipe containing
1241 <filename>LICENSE_FLAGS = "license_${PN}_${PV}"</filename>, and assuming
1242 that the actual recipe name was <filename>emgd_1.10.bb</filename>,
1243 the following string would enable that package as well as
1244 the original <filename>gst-plugins-ugly</filename> package:
1245 <literallayout class='monospaced'>
1246 LICENSE_FLAGS_WHITELIST = "commercial_gst-plugins-ugly license_emgd_1.10"
1247 </literallayout>
1248 As a convenience, you do not need to specify the complete license string
1249 in the whitelist for every package.
1250 You can use an abbreviated form, which consists
1251 of just the first portion or portions of the license string before
1252 the initial underscore character or characters.
1253 A partial string will match
1254 any license that contains the given string as the first
1255 portion of its license.
1256 For example, the following
1257 whitelist string will also match both of the packages
1258 previously mentioned as well as any other packages that have
1259 licenses starting with "commercial" or "license".
1260 <literallayout class='monospaced'>
1261 LICENSE_FLAGS_WHITELIST = "commercial license"
1262 </literallayout>
1263 </para>
1264
1265 <section id="license-flag-matching">
1266 <title>License Flag Matching</title>
1267
1268 <para>
1269 License flag matching allows you to control what recipes the
1270 OpenEmbedded build system includes in the build.
1271 Fundamentally, the build system attempts to match
1272 <link linkend='var-LICENSE_FLAGS'><filename>LICENSE_FLAGS</filename></link>
1273 strings found in recipes against
1274 <link linkend='var-LICENSE_FLAGS_WHITELIST'><filename>LICENSE_FLAGS_WHITELIST</filename></link>
1275 strings found in the whitelist.
1276 A match causes the build system to include a recipe in the
1277 build, while failure to find a match causes the build system to
1278 exclude a recipe.
1279 </para>
1280
1281 <para>
1282 In general, license flag matching is simple.
1283 However, understanding some concepts will help you
1284 correctly and effectively use matching.
1285 </para>
1286
1287 <para>
1288 Before a flag
1289 defined by a particular recipe is tested against the
1290 contents of the whitelist, the expanded string
1291 <filename>_${PN}</filename> is appended to the flag.
1292 This expansion makes each <filename>LICENSE_FLAGS</filename>
1293 value recipe-specific.
1294 After expansion, the string is then matched against the
1295 whitelist.
1296 Thus, specifying
1297 <filename>LICENSE_FLAGS = "commercial"</filename>
1298 in recipe "foo", for example, results in the string
1299 <filename>"commercial_foo"</filename>.
1300 And, to create a match, that string must appear in the
1301 whitelist.
1302 </para>
1303
1304 <para>
1305 Judicious use of the <filename>LICENSE_FLAGS</filename>
1306 strings and the contents of the
1307 <filename>LICENSE_FLAGS_WHITELIST</filename> variable
1308 allows you a lot of flexibility for including or excluding
1309 recipes based on licensing.
1310 For example, you can broaden the matching capabilities by
1311 using license flags string subsets in the whitelist.
1312 <note>When using a string subset, be sure to use the part of
1313 the expanded string that precedes the appended underscore
1314 character (e.g. <filename>usethispart_1.3</filename>,
1315 <filename>usethispart_1.4</filename>, and so forth).
1316 </note>
1317 For example, simply specifying the string "commercial" in
1318 the whitelist matches any expanded
1319 <filename>LICENSE_FLAGS</filename> definition that starts with
1320 the string "commercial" such as "commercial_foo" and
1321 "commercial_bar", which are the strings the build system
1322 automatically generates for hypothetical recipes named
1323 "foo" and "bar" assuming those recipes simply specify the
1324 following:
1325 <literallayout class='monospaced'>
1326 LICENSE_FLAGS = "commercial"
1327 </literallayout>
1328 Thus, you can choose to exhaustively
1329 enumerate each license flag in the whitelist and
1330 allow only specific recipes into the image, or
1331 you can use a string subset that causes a broader range of
1332 matches to allow a range of recipes into the image.
1333 </para>
1334
1335 <para>
1336 This scheme works even if the
1337 <filename>LICENSE_FLAGS</filename> string already
1338 has <filename>_${PN}</filename> appended.
1339 For example, the build system turns the license flag
1340 "commercial_1.2_foo" into "commercial_1.2_foo_foo" and would
1341 match both the general "commercial" and the specific
1342 "commercial_1.2_foo" strings found in the whitelist, as
1343 expected.
1344 </para>
1345
1346 <para>
1347 Here are some other scenarios:
1348 <itemizedlist>
1349 <listitem><para>You can specify a versioned string in the
1350 recipe such as "commercial_foo_1.2" in a "foo" recipe.
1351 The build system expands this string to
1352 "commercial_foo_1.2_foo".
1353 Combine this license flag with a whitelist that has
1354 the string "commercial" and you match the flag along
1355 with any other flag that starts with the string
1356 "commercial".</para></listitem>
1357 <listitem><para>Under the same circumstances, you can
1358 use "commercial_foo" in the whitelist and the
1359 build system not only matches "commercial_foo_1.2" but
1360 also matches any license flag with the string
1361 "commercial_foo", regardless of the version.
1362 </para></listitem>
1363 <listitem><para>You can be very specific and use both the
1364 package and version parts in the whitelist (e.g.
1365 "commercial_foo_1.2") to specifically match a
1366 versioned recipe.</para></listitem>
1367 </itemizedlist>
1368 </para>
1369 </section>
1370
1371 <section id="other-variables-related-to-commercial-licenses">
1372 <title>Other Variables Related to Commercial Licenses</title>
1373
1374 <para>
1375 Other helpful variables related to commercial
1376 license handling exist and are defined in the
1377 <filename>poky/meta/conf/distro/include/default-distrovars.inc</filename> file:
1378 <literallayout class='monospaced'>
1379 COMMERCIAL_AUDIO_PLUGINS ?= ""
1380 COMMERCIAL_VIDEO_PLUGINS ?= ""
1381 COMMERCIAL_QT = ""
1382 </literallayout>
1383 If you want to enable these components, you can do so by making sure you have
1384 statements similar to the following
1385 in your <filename>local.conf</filename> configuration file:
1386 <literallayout class='monospaced'>
1387 COMMERCIAL_AUDIO_PLUGINS = "gst-plugins-ugly-mad \
1388 gst-plugins-ugly-mpegaudioparse"
1389 COMMERCIAL_VIDEO_PLUGINS = "gst-plugins-ugly-mpeg2dec \
1390 gst-plugins-ugly-mpegstream gst-plugins-bad-mpegvideoparse"
1391 COMMERCIAL_QT ?= "qmmp"
1392 LICENSE_FLAGS_WHITELIST = "commercial_gst-plugins-ugly commercial_gst-plugins-bad commercial_qmmp"
1393 </literallayout>
1394 Of course, you could also create a matching whitelist
1395 for those components using the more general "commercial"
1396 in the whitelist, but that would also enable all the
1397 other packages with
1398 <link linkend='var-LICENSE_FLAGS'><filename>LICENSE_FLAGS</filename></link>
1399 containing "commercial", which you may or may not want:
1400 <literallayout class='monospaced'>
1401 LICENSE_FLAGS_WHITELIST = "commercial"
1402 </literallayout>
1403 </para>
1404
1405 <para>
1406 Specifying audio and video plug-ins as part of the
1407 <filename>COMMERCIAL_AUDIO_PLUGINS</filename> and
1408 <filename>COMMERCIAL_VIDEO_PLUGINS</filename> statements
1409 or commercial Qt components as part of
1410 the <filename>COMMERCIAL_QT</filename> statement (along
1411 with the enabling <filename>LICENSE_FLAGS_WHITELIST</filename>) includes the
1412 plug-ins or components into built images, thus adding
1413 support for media formats or components.
1414 </para>
1415 </section>
1416 </section>
1417</section>
1418</chapter>
1419<!--
1420vim: expandtab tw=80 ts=4
1421-->
diff --git a/documentation/ref-manual/usingpoky.xml b/documentation/ref-manual/usingpoky.xml
new file mode 100644
index 0000000000..2116852163
--- /dev/null
+++ b/documentation/ref-manual/usingpoky.xml
@@ -0,0 +1,915 @@
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; [<replaceable>build_dir</replaceable>]
39 </literallayout>
40 </para>
41
42 <para>
43 The <replaceable>build_dir</replaceable> 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 <replaceable>target</replaceable>
57 </literallayout>
58 </para>
59
60 <para>
61 The <replaceable>target</replaceable> 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
73 3 (GPLv3), or similarly licensed, components is supported for
74 only minimal and base images.
75 See the "<link linkend='ref-images'>Images</link>" chapter for more information.
76 </note>
77 </section>
78
79 <section id='building-an-image-using-gpl-components'>
80 <title>Building an Image Using GPL Components</title>
81
82 <para>
83 When building an image using GPL components, you need to maintain your original
84 settings and not switch back and forth applying different versions of the GNU
85 General Public License.
86 If you rebuild using different versions of GPL, dependency errors might occur
87 due to some components not being rebuilt.
88 </para>
89 </section>
90</section>
91
92<section id='usingpoky-install'>
93 <title>Installing and Using the Result</title>
94
95 <para>
96 Once an image has been built, it often needs to be installed.
97 The images and kernels built by the OpenEmbedded build system are placed in the
98 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink> in
99 <filename class="directory">tmp/deploy/images</filename>.
100 For information on how to run pre-built images such as <filename>qemux86</filename>
101 and <filename>qemuarm</filename>, see the
102 "<ulink url='&YOCTO_DOCS_QS_URL;#using-pre-built'>Using Pre-Built Binaries and QEMU</ulink>"
103 section in the Yocto Project Quick Start.
104 For information about how to install these images, see the documentation for your
105 particular board or machine.
106 </para>
107</section>
108
109<section id='usingpoky-debugging'>
110 <title>Debugging Build Failures</title>
111
112 <para>
113 The exact method for debugging build failures depends on the nature of
114 the problem and on the system's area from which the bug originates.
115 Standard debugging practices such as comparison against the last
116 known working version with examination of the changes and the
117 re-application of steps to identify the one causing the problem are
118 valid for the Yocto Project just as they are for any other system.
119 Even though it is impossible to detail every possible potential failure,
120 this section provides some general tips to aid in debugging.
121 </para>
122
123 <para>
124 A useful feature for debugging is the error reporting tool.
125 Configuring the Yocto Project to use this tool causes the
126 OpenEmbedded build system to produce error reporting commands as
127 part of the console output.
128 You can enter the commands after the build completes
129 to log error information
130 into a common database, that can help you figure out what might be
131 going wrong.
132 For information on how to enable and use this feature, see the
133 "<ulink url='&YOCTO_DOCS_DEV_URL;#using-the-error-reporting-tool'>Using the Error Reporting Tool</ulink>"
134 section in the Yocto Project Development Manual.
135 </para>
136
137 <para>
138 For discussions on debugging, see the
139 "<ulink url='&YOCTO_DOCS_DEV_URL;#platdev-gdb-remotedebug'>Debugging With the GNU Project Debugger (GDB) Remotely</ulink>"
140 and
141 "<ulink url='&YOCTO_DOCS_DEV_URL;#adt-eclipse'>Working within Eclipse</ulink>"
142 sections in the Yocto Project Development Manual.
143 </para>
144
145 <note>
146 The remainder of this section presents many examples of the
147 <filename>bitbake</filename> command.
148 You can learn about BitBake by reading the
149 <ulink url='&YOCTO_DOCS_BB_URL;#bitbake-user-manual'>BitBake User Manual</ulink>.
150 </note>
151
152
153 <section id='usingpoky-debugging-taskfailures'>
154 <title>Task Failures</title>
155
156 <para>The log file for shell tasks is available in
157 <filename>${WORKDIR}/temp/log.do_<replaceable>taskname</replaceable>.pid</filename>.
158 For example, the <filename>do_compile</filename> task for the QEMU minimal image for the x86
159 machine (<filename>qemux86</filename>) might be
160 <filename>tmp/work/qemux86-poky-linux/core-image-minimal/1.0-r0/temp/log.do_compile.20830</filename>.
161 To see what
162 <ulink url='&YOCTO_DOCS_DEV_URL;#bitbake-term'>BitBake</ulink>
163 runs to generate that log, look at the corresponding
164 <filename>run.do_<replaceable>taskname</replaceable>.pid</filename> file located in the same directory.
165 </para>
166
167 <para>
168 Presently, the output from Python tasks is sent directly to the console.
169 </para>
170 </section>
171
172 <section id='usingpoky-debugging-taskrunning'>
173 <title>Running Specific Tasks</title>
174
175 <para>
176 Any given package consists of a set of tasks.
177 The standard BitBake behavior in most cases is:
178 <filename>do_fetch</filename>,
179 <filename>do_unpack</filename>,
180 <filename>do_patch</filename>, <filename>do_configure</filename>,
181 <filename>do_compile</filename>, <filename>do_install</filename>,
182 <filename>do_package</filename>,
183 <filename>do_package_write_*</filename>, and
184 <filename>do_build</filename>.
185 The default task is <filename>do_build</filename> and any tasks
186 on which it depends build first.
187 Some tasks, such as <filename>do_devshell</filename>, are not part
188 of the default build chain.
189 If you wish to run a task that is not part of the default build
190 chain, you can use the <filename>-c</filename> option in BitBake.
191 Here is an example:
192 <literallayout class='monospaced'>
193 $ bitbake matchbox-desktop -c devshell
194 </literallayout>
195 </para>
196
197 <para>
198 If you wish to rerun a task, use the <filename>-f</filename> force
199 option.
200 For example, the following sequence forces recompilation after
201 changing files in the work directory.
202 <literallayout class='monospaced'>
203 $ bitbake matchbox-desktop
204 .
205 .
206 <replaceable>make some changes to the source code in the work directory</replaceable>
207 .
208 .
209 $ bitbake matchbox-desktop -c compile -f
210 $ bitbake matchbox-desktop
211 </literallayout>
212 </para>
213
214 <para>
215 This sequence first builds and then recompiles
216 <filename>matchbox-desktop</filename>.
217 The last command reruns all tasks (basically the packaging tasks)
218 after the compile.
219 BitBake recognizes that the <filename>do_compile</filename>
220 task was rerun and therefore understands that the other tasks
221 also need to be run again.
222 </para>
223
224 <para>
225 You can view a list of tasks in a given package by running the
226 <filename>do_listtasks</filename> task as follows:
227 <literallayout class='monospaced'>
228 $ bitbake matchbox-desktop -c listtasks
229 </literallayout>
230 The results appear as output to the console and are also in the
231 file <filename>${WORKDIR}/temp/log.do_listtasks</filename>.
232 </para>
233 </section>
234
235 <section id='usingpoky-debugging-dependencies'>
236 <title>Dependency Graphs</title>
237
238 <para>
239 Sometimes it can be hard to see why BitBake wants to build
240 other packages before building a given package you have specified.
241 The <filename>bitbake -g <replaceable>targetname</replaceable></filename> command
242 creates the <filename>pn-buildlist</filename>,
243 <filename>pn-depends.dot</filename>,
244 <filename>package-depends.dot</filename>, and
245 <filename>task-depends.dot</filename> files in the current
246 directory.
247 These files show what will be built and the package and task
248 dependencies, which are useful for debugging problems.
249 You can use the
250 <filename>bitbake -g -u depexp <replaceable>targetname</replaceable></filename>
251 command to display the results in a more human-readable form.
252 </para>
253 </section>
254
255 <section id='usingpoky-debugging-bitbake'>
256 <title>General BitBake Problems</title>
257
258 <para>
259 You can see debug output from BitBake by using the <filename>-D</filename> option.
260 The debug output gives more information about what BitBake
261 is doing and the reason behind it.
262 Each <filename>-D</filename> option you use increases the logging level.
263 The most common usage is <filename>-DDD</filename>.
264 </para>
265
266 <para>
267 The output from <filename>bitbake -DDD -v</filename> <replaceable>targetname</replaceable> can reveal why
268 BitBake chose a certain version of a package or why BitBake
269 picked a certain provider.
270 This command could also help you in a situation where you think BitBake did something
271 unexpected.
272 </para>
273 </section>
274
275 <section id='development-host-system-issues'>
276 <title>Development Host System Issues</title>
277
278 <para>
279 Sometimes issues on the host development system can cause your
280 build to fail.
281 Following are known, host-specific problems.
282 Be sure to always consult the
283 <ulink url='&YOCTO_RELEASE_NOTES;'>Release Notes</ulink>
284 for a look at all release-related issues.
285 <itemizedlist>
286 <listitem><para><emphasis><filename>glibc-initial</filename> fails to build</emphasis>:
287 If your development host system has the unpatched
288 <filename>GNU Make 3.82</filename>,
289 the
290 <link linkend='ref-tasks-install'><filename>do_install</filename></link>
291 task fails for <filename>glibc-initial</filename> during
292 the build.</para>
293 <para>Typically, every distribution that ships
294 <filename>GNU Make 3.82</filename> as
295 the default already has the patched version.
296 However, some distributions, such as Debian, have
297 <filename>GNU Make 3.82</filename> as an option, which
298 is unpatched.
299 You will see this error on these types of distributions.
300 Switch to <filename>GNU Make 3.81</filename> or patch
301 your <filename>make</filename> to solve the problem.
302 </para></listitem>
303 </itemizedlist>
304 </para>
305 </section>
306
307 <section id='usingpoky-debugging-buildfile'>
308 <title>Building with No Dependencies</title>
309 <para>
310 To build a specific recipe (<filename>.bb</filename> file),
311 you can use the following command form:
312 <literallayout class='monospaced'>
313 $ bitbake -b <replaceable>somepath</replaceable>/<replaceable>somerecipe</replaceable>.bb
314 </literallayout>
315 This command form does not check for dependencies.
316 Consequently, you should use it
317 only when you know existing dependencies have been met.
318 <note>
319 You can also specify fragments of the filename.
320 In this case, BitBake checks for a unique match.
321 </note>
322 </para>
323 </section>
324
325 <section id='usingpoky-debugging-variables'>
326 <title>Variables</title>
327 <para>
328 You can use the <filename>-e</filename> BitBake option to
329 display the parsing environment for a configuration.
330 The following displays the general parsing environment:
331 <literallayout class='monospaced'>
332 $ bitbake -e
333 </literallayout>
334 This next example shows the parsing environment for a specific
335 recipe:
336 <literallayout class='monospaced'>
337 $ bitbake -e <replaceable>recipename</replaceable>
338 </literallayout>
339 </para>
340 </section>
341
342 <section id='recipe-logging-mechanisms'>
343 <title>Recipe Logging Mechanisms</title>
344 <para>
345 Best practices exist while writing recipes that both log build progress and
346 act on build conditions such as warnings and errors.
347 Both Python and Bash language bindings exist for the logging mechanism:
348 <itemizedlist>
349 <listitem><para><emphasis>Python:</emphasis> For Python functions, BitBake
350 supports several loglevels: <filename>bb.fatal</filename>,
351 <filename>bb.error</filename>, <filename>bb.warn</filename>,
352 <filename>bb.note</filename>, <filename>bb.plain</filename>,
353 and <filename>bb.debug</filename>.</para></listitem>
354 <listitem><para><emphasis>Bash:</emphasis> For Bash functions, the same set
355 of loglevels exist and are accessed with a similar syntax:
356 <filename>bbfatal</filename>, <filename>bberror</filename>,
357 <filename>bbwarn</filename>, <filename>bbnote</filename>,
358 <filename>bbplain</filename>, and <filename>bbdebug</filename>.</para></listitem>
359 </itemizedlist>
360 </para>
361
362 <para>
363 For guidance on how logging is handled in both Python and Bash recipes, see the
364 <filename>logging.bbclass</filename> file in the
365 <filename>meta/classes</filename> folder of the
366 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
367 </para>
368
369 <section id='logging-with-python'>
370 <title>Logging With Python</title>
371 <para>
372 When creating recipes using Python and inserting code that handles build logs,
373 keep in mind the goal is to have informative logs while keeping the console as
374 "silent" as possible.
375 Also, if you want status messages in the log, use the "debug" loglevel.
376 </para>
377
378 <para>
379 Following is an example written in Python.
380 The code handles logging for a function that determines the
381 number of tasks needed to be run.
382 See the
383 "<link linkend='ref-tasks-listtasks'><filename>do_listtasks</filename></link>"
384 section for additional information:
385 <literallayout class='monospaced'>
386 python do_listtasks() {
387 bb.debug(2, "Starting to figure out the task list")
388 if noteworthy_condition:
389 bb.note("There are 47 tasks to run")
390 bb.debug(2, "Got to point xyz")
391 if warning_trigger:
392 bb.warn("Detected warning_trigger, this might be a problem later.")
393 if recoverable_error:
394 bb.error("Hit recoverable_error, you really need to fix this!")
395 if fatal_error:
396 bb.fatal("fatal_error detected, unable to print the task list")
397 bb.plain("The tasks present are abc")
398 bb.debug(2, "Finished figuring out the tasklist")
399 }
400 </literallayout>
401 </para>
402 </section>
403
404 <section id='logging-with-bash'>
405 <title>Logging With Bash</title>
406 <para>
407 When creating recipes using Bash and inserting code that handles build
408 logs, you have the same goals - informative with minimal console output.
409 The syntax you use for recipes written in Bash is similar to that of
410 recipes written in Python described in the previous section.
411 </para>
412
413 <para>
414 Following is an example written in Bash.
415 The code logs the progress of the <filename>do_my_function</filename> function.
416 <literallayout class='monospaced'>
417 do_my_function() {
418 bbdebug 2 "Running do_my_function"
419 if [ exceptional_condition ]; then
420 bbnote "Hit exceptional_condition"
421 fi
422 bbdebug 2 "Got to point xyz"
423 if [ warning_trigger ]; then
424 bbwarn "Detected warning_trigger, this might cause a problem later."
425 fi
426 if [ recoverable_error ]; then
427 bberror "Hit recoverable_error, correcting"
428 fi
429 if [ fatal_error ]; then
430 bbfatal "fatal_error detected"
431 fi
432 bbdebug 2 "Completed do_my_function"
433 }
434 </literallayout>
435 </para>
436 </section>
437 </section>
438
439 <section id='usingpoky-debugging-others'>
440 <title>Other Tips</title>
441
442 <para>
443 Here are some other tips that you might find useful:
444 <itemizedlist>
445 <listitem><para>When adding new packages, it is worth watching for
446 undesirable items making their way into compiler command lines.
447 For example, you do not want references to local system files like
448 <filename>/usr/lib/</filename> or <filename>/usr/include/</filename>.
449 </para></listitem>
450 <listitem><para>If you want to remove the <filename>psplash</filename>
451 boot splashscreen,
452 add <filename>psplash=false</filename> to the kernel command line.
453 Doing so prevents <filename>psplash</filename> from loading
454 and thus allows you to see the console.
455 It is also possible to switch out of the splashscreen by
456 switching the virtual console (e.g. Fn+Left or Fn+Right on a Zaurus).
457 </para></listitem>
458 </itemizedlist>
459 </para>
460 </section>
461</section>
462
463<section id='maintaining-build-output-quality'>
464 <title>Maintaining Build Output Quality</title>
465
466 <para>
467 Many factors can influence the quality of a build.
468 For example, if you upgrade a recipe to use a new version of an upstream software
469 package or you experiment with some new configuration options, subtle changes
470 can occur that you might not detect until later.
471 Consider the case where your recipe is using a newer version of an upstream package.
472 In this case, a new version of a piece of software might introduce an optional
473 dependency on another library, which is auto-detected.
474 If that library has already been built when the software is building,
475 the software will link to the built library and that library will be pulled
476 into your image along with the new software even if you did not want the
477 library.
478 </para>
479
480 <para>
481 The
482 <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
483 class exists to help you maintain
484 the quality of your build output.
485 You can use the class to highlight unexpected and possibly unwanted
486 changes in the build output.
487 When you enable build history, it records information about the contents of
488 each package and image and then commits that information to a local Git
489 repository where you can examine the information.
490 </para>
491
492 <para>
493 The remainder of this section describes the following:
494 <itemizedlist>
495 <listitem><para>How you can enable and disable
496 build history</para></listitem>
497 <listitem><para>How to understand what the build history contains
498 </para></listitem>
499 <listitem><para>How to limit the information used for build history
500 </para></listitem>
501 <listitem><para>How to examine the build history from both a
502 command-line and web interface</para></listitem>
503 </itemizedlist>
504 </para>
505
506 <section id='enabling-and-disabling-build-history'>
507 <title>Enabling and Disabling Build History</title>
508
509 <para>
510 Build history is disabled by default.
511 To enable it, add the following <filename>INHERIT</filename>
512 statement and set the
513 <link linkend='var-BUILDHISTORY_COMMIT'><filename>BUILDHISTORY_COMMIT</filename></link>
514 variable to "1" at the end of your
515 <filename>conf/local.conf</filename> file found in the
516 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>:
517 <literallayout class='monospaced'>
518 INHERIT += "buildhistory"
519 BUILDHISTORY_COMMIT = "1"
520 </literallayout>
521 Enabling build history as previously described
522 causes the build process to collect build
523 output information and commit it to a local
524 <ulink url='&YOCTO_DOCS_DEV_URL;#git'>Git</ulink> repository.
525 <note>
526 Enabling build history increases your build times slightly,
527 particularly for images, and increases the amount of disk
528 space used during the build.
529 </note>
530 </para>
531
532 <para>
533 You can disable build history by removing the previous statements
534 from your <filename>conf/local.conf</filename> file.
535 </para>
536 </section>
537
538 <section id='understanding-what-the-build-history-contains'>
539 <title>Understanding What the Build History Contains</title>
540
541 <para>
542 Build history information is kept in
543 <filename>${</filename><link linkend='var-TOPDIR'><filename>TOPDIR</filename></link><filename>}/buildhistory</filename>
544 in the Build Directory as defined by the
545 <link linkend='var-BUILDHISTORY_DIR'><filename>BUILDHISTORY_DIR</filename></link>
546 variable.
547 The following is an example abbreviated listing:
548 <imagedata fileref="figures/buildhistory.png" align="center" width="6in" depth="4in" />
549 </para>
550
551 <para>
552 At the top level, there is a <filename>metadata-revs</filename> file
553 that lists the revisions of the repositories for the layers enabled
554 when the build was produced.
555 The rest of the data splits into separate
556 <filename>packages</filename>, <filename>images</filename> and
557 <filename>sdk</filename> directories, the contents of which are
558 described below.
559 </para>
560
561 <section id='build-history-package-information'>
562 <title>Build History Package Information</title>
563
564 <para>
565 The history for each package contains a text file that has
566 name-value pairs with information about the package.
567 For example, <filename>buildhistory/packages/i586-poky-linux/busybox/busybox/latest</filename>
568 contains the following:
569 <literallayout class='monospaced'>
570 PV = 1.22.1
571 PR = r32
572 RPROVIDES =
573 RDEPENDS = glibc (>= 2.20) update-alternatives-opkg
574 RRECOMMENDS = busybox-syslog busybox-udhcpc update-rc.d
575 PKGSIZE = 540168
576 FILES = /usr/bin/* /usr/sbin/* /usr/lib/busybox/* /usr/lib/lib*.so.* \
577 /etc /com /var /bin/* /sbin/* /lib/*.so.* /lib/udev/rules.d \
578 /usr/lib/udev/rules.d /usr/share/busybox /usr/lib/busybox/* \
579 /usr/share/pixmaps /usr/share/applications /usr/share/idl \
580 /usr/share/omf /usr/share/sounds /usr/lib/bonobo/servers
581 FILELIST = /bin/busybox /bin/busybox.nosuid /bin/busybox.suid /bin/sh \
582 /etc/busybox.links.nosuid /etc/busybox.links.suid
583 </literallayout>
584 Most of these name-value pairs correspond to variables used
585 to produce the package.
586 The exceptions are <filename>FILELIST</filename>, which is the
587 actual list of files in the package, and
588 <filename>PKGSIZE</filename>, which is the total size of files
589 in the package in bytes.
590 </para>
591
592 <para>
593 There is also a file corresponding to the recipe from which the
594 package came (e.g.
595 <filename>buildhistory/packages/i586-poky-linux/busybox/latest</filename>):
596 <literallayout class='monospaced'>
597 PV = 1.22.1
598 PR = r32
599 DEPENDS = initscripts kern-tools-native update-rc.d-native \
600 virtual/i586-poky-linux-compilerlibs virtual/i586-poky-linux-gcc \
601 virtual/libc virtual/update-alternatives
602 PACKAGES = busybox-ptest busybox-httpd busybox-udhcpd busybox-udhcpc \
603 busybox-syslog busybox-mdev busybox-hwclock busybox-dbg \
604 busybox-staticdev busybox-dev busybox-doc busybox-locale busybox
605 </literallayout>
606 </para>
607
608 <para>
609 Finally, for those recipes fetched from a version control
610 system (e.g., Git), a file exists that lists source revisions
611 that are specified in the recipe and lists the actual revisions
612 used during the build.
613 Listed and actual revisions might differ when
614 <link linkend='var-SRCREV'><filename>SRCREV</filename></link>
615 is set to
616 <filename>${<link linkend='var-AUTOREV'>AUTOREV</link>}</filename>.
617 Here is an example assuming
618 <filename>buildhistory/packages/qemux86-poky-linux/linux-yocto/latest_srcrev</filename>):
619 <literallayout class='monospaced'>
620 # SRCREV_machine = "38cd560d5022ed2dbd1ab0dca9642e47c98a0aa1"
621 SRCREV_machine = "38cd560d5022ed2dbd1ab0dca9642e47c98a0aa1"
622 # SRCREV_meta = "a227f20eff056e511d504b2e490f3774ab260d6f"
623 SRCREV_meta = "a227f20eff056e511d504b2e490f3774ab260d6f"
624 </literallayout>
625 You can use the <filename>buildhistory-collect-srcrevs</filename>
626 command with the <filename>-a</filename> option to
627 collect the stored <filename>SRCREV</filename> values
628 from build history and report them in a format suitable for
629 use in global configuration (e.g.,
630 <filename>local.conf</filename> or a distro include file) to
631 override floating <filename>AUTOREV</filename> values to a
632 fixed set of revisions.
633 Here is some example output from this command:
634 <literallayout class='monospaced'>
635 $ buildhistory-collect-srcrevs -a
636 # i586-poky-linux
637 SRCREV_pn-glibc = "b8079dd0d360648e4e8de48656c5c38972621072"
638 SRCREV_pn-glibc-initial = "b8079dd0d360648e4e8de48656c5c38972621072"
639 SRCREV_pn-opkg-utils = "53274f087565fd45d8452c5367997ba6a682a37a"
640 SRCREV_pn-kmod = "fd56638aed3fe147015bfa10ed4a5f7491303cb4"
641 # x86_64-linux
642 SRCREV_pn-gtk-doc-stub-native = "1dea266593edb766d6d898c79451ef193eb17cfa"
643 SRCREV_pn-dtc-native = "65cc4d2748a2c2e6f27f1cf39e07a5dbabd80ebf"
644 SRCREV_pn-update-rc.d-native = "eca680ddf28d024954895f59a241a622dd575c11"
645 SRCREV_glibc_pn-cross-localedef-native = "b8079dd0d360648e4e8de48656c5c38972621072"
646 SRCREV_localedef_pn-cross-localedef-native = "c833367348d39dad7ba018990bfdaffaec8e9ed3"
647 SRCREV_pn-prelink-native = "faa069deec99bf61418d0bab831c83d7c1b797ca"
648 SRCREV_pn-opkg-utils-native = "53274f087565fd45d8452c5367997ba6a682a37a"
649 SRCREV_pn-kern-tools-native = "23345b8846fe4bd167efdf1bd8a1224b2ba9a5ff"
650 SRCREV_pn-kmod-native = "fd56638aed3fe147015bfa10ed4a5f7491303cb4"
651 # qemux86-poky-linux
652 SRCREV_machine_pn-linux-yocto = "38cd560d5022ed2dbd1ab0dca9642e47c98a0aa1"
653 SRCREV_meta_pn-linux-yocto = "a227f20eff056e511d504b2e490f3774ab260d6f"
654 # all-poky-linux
655 SRCREV_pn-update-rc.d = "eca680ddf28d024954895f59a241a622dd575c11"
656 </literallayout>
657 <note>
658 Here are some notes on using the
659 <filename>buildhistory-collect-srcrevs</filename> command:
660 <itemizedlist>
661 <listitem><para>By default, only values where the
662 <filename>SRCREV</filename> was
663 not hardcoded (usually when <filename>AUTOREV</filename>
664 was used) are reported.
665 Use the <filename>-a</filename> option to see all
666 <filename>SRCREV</filename> values.
667 </para></listitem>
668 <listitem><para>The output statements might not have any effect
669 if overrides are applied elsewhere in the build system
670 configuration.
671 Use the <filename>-f</filename> option to add the
672 <filename>forcevariable</filename> override to each output line
673 if you need to work around this restriction.
674 </para></listitem>
675 <listitem><para>The script does apply special handling when
676 building for multiple machines.
677 However, the script does place a
678 comment before each set of values that specifies
679 which triplet to which they belong as shown above
680 (e.g., <filename>i586-poky-linux</filename>).
681 </para></listitem>
682 </itemizedlist>
683 </note>
684 </para>
685 </section>
686
687 <section id='build-history-image-information'>
688 <title>Build History Image Information</title>
689
690 <para>
691 The files produced for each image are as follows:
692 <itemizedlist>
693 <listitem><para><filename>image-files:</filename>
694 A directory containing selected files from the root
695 filesystem.
696 The files are defined by
697 <link linkend='var-BUILDHISTORY_IMAGE_FILES'><filename>BUILDHISTORY_IMAGE_FILES</filename></link>.
698 </para></listitem>
699 <listitem><para><filename>build-id.txt:</filename>
700 Human-readable information about the build configuration
701 and metadata source revisions.
702 This file contains the full build header as printed
703 by BitBake.</para></listitem>
704 <listitem><para><filename>*.dot:</filename>
705 Dependency graphs for the image that are
706 compatible with <filename>graphviz</filename>.
707 </para></listitem>
708 <listitem><para><filename>files-in-image.txt:</filename>
709 A list of files in the image with permissions,
710 owner, group, size, and symlink information.
711 </para></listitem>
712 <listitem><para><filename>image-info.txt:</filename>
713 A text file containing name-value pairs with information
714 about the image.
715 See the following listing example for more information.
716 </para></listitem>
717 <listitem><para><filename>installed-package-names.txt:</filename>
718 A list of installed packages by name only.</para></listitem>
719 <listitem><para><filename>installed-package-sizes.txt:</filename>
720 A list of installed packages ordered by size.
721 </para></listitem>
722 <listitem><para><filename>installed-packages.txt:</filename>
723 A list of installed packages with full package
724 filenames.</para></listitem>
725 </itemizedlist>
726 <note>
727 Installed package information is able to be gathered and
728 produced even if package management is disabled for the final
729 image.
730 </note>
731 </para>
732
733 <para>
734 Here is an example of <filename>image-info.txt</filename>:
735 <literallayout class='monospaced'>
736 DISTRO = poky
737 DISTRO_VERSION = 1.7
738 USER_CLASSES = buildstats image-mklibs image-prelink
739 IMAGE_CLASSES = image_types
740 IMAGE_FEATURES = debug-tweaks
741 IMAGE_LINGUAS =
742 IMAGE_INSTALL = packagegroup-core-boot run-postinsts
743 BAD_RECOMMENDATIONS =
744 NO_RECOMMENDATIONS =
745 PACKAGE_EXCLUDE =
746 ROOTFS_POSTPROCESS_COMMAND = write_package_manifest; license_create_manifest; \
747 write_image_manifest ; buildhistory_list_installed_image ; \
748 buildhistory_get_image_installed ; ssh_allow_empty_password; \
749 postinst_enable_logging; rootfs_update_timestamp ; ssh_disable_dns_lookup ;
750 IMAGE_POSTPROCESS_COMMAND = buildhistory_get_imageinfo ;
751 IMAGESIZE = 6900
752 </literallayout>
753 Other than <filename>IMAGESIZE</filename>, which is the
754 total size of the files in the image in Kbytes, the
755 name-value pairs are variables that may have influenced the
756 content of the image.
757 This information is often useful when you are trying to determine
758 why a change in the package or file listings has occurred.
759 </para>
760 </section>
761
762 <section id='using-build-history-to-gather-image-information-only'>
763 <title>Using Build History to Gather Image Information Only</title>
764
765 <para>
766 As you can see, build history produces image information,
767 including dependency graphs, so you can see why something
768 was pulled into the image.
769 If you are just interested in this information and not
770 interested in collecting specific package or SDK information,
771 you can enable writing only image information without
772 any history by adding the following to your
773 <filename>conf/local.conf</filename> file found in the
774 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>:
775 <literallayout class='monospaced'>
776 INHERIT += "buildhistory"
777 BUILDHISTORY_COMMIT = "0"
778 BUILDHISTORY_FEATURES = "image"
779 </literallayout>
780 Here, you set the
781 <link linkend='var-BUILDHISTORY_FEATURES'><filename>BUILDHISTORY_FEATURES</filename></link>
782 variable to use the image feature only.
783 </para>
784 </section>
785
786 <section id='build-history-sdk-information'>
787 <title>Build History SDK Information</title>
788 <para>
789 Build history collects similar information on the contents
790 of SDKs (e.g. <filename>meta-toolchain</filename>
791 or <filename>bitbake -c populate_sdk imagename</filename>)
792 as compared to information it collects for images.
793 The following list shows the files produced for each SDK:
794 <itemizedlist>
795 <listitem><para><filename>files-in-sdk.txt:</filename>
796 A list of files in the SDK with permissions,
797 owner, group, size, and symlink information.
798 This list includes both the host and target parts
799 of the SDK.
800 </para></listitem>
801 <listitem><para><filename>sdk-info.txt:</filename>
802 A text file containing name-value pairs with information
803 about the SDK.
804 See the following listing example for more information.
805 </para></listitem>
806 <listitem><para>The following information appears under
807 each of the <filename>host</filename>
808 and <filename>target</filename> directories
809 for the portions of the SDK that run on the host and
810 on the target, respectively:
811 <itemizedlist>
812 <listitem><para><filename>depends.dot:</filename>
813 Dependency graph for the SDK that is
814 compatible with <filename>graphviz</filename>.
815 </para></listitem>
816 <listitem><para><filename>installed-package-names.txt:</filename>
817 A list of installed packages by name only.
818 </para></listitem>
819 <listitem><para><filename>installed-package-sizes.txt:</filename>
820 A list of installed packages ordered by size.
821 </para></listitem>
822 <listitem><para><filename>installed-packages.txt:</filename>
823 A list of installed packages with full package
824 filenames.</para></listitem>
825 </itemizedlist>
826 </para></listitem>
827 </itemizedlist>
828 </para>
829
830 <para>
831 Here is an example of <filename>sdk-info.txt</filename>:
832 <literallayout class='monospaced'>
833 DISTRO = poky
834 DISTRO_VERSION = 1.3+snapshot-20130327
835 SDK_NAME = poky-glibc-i686-arm
836 SDK_VERSION = 1.3+snapshot
837 SDKMACHINE =
838 SDKIMAGE_FEATURES = dev-pkgs dbg-pkgs
839 BAD_RECOMMENDATIONS =
840 SDKSIZE = 352712
841 </literallayout>
842 Other than <filename>SDKSIZE</filename>, which is the
843 total size of the files in the SDK in Kbytes, the
844 name-value pairs are variables that might have influenced the
845 content of the SDK.
846 This information is often useful when you are trying to
847 determine why a change in the package or file listings
848 has occurred.
849 </para>
850 </section>
851
852 <section id='examining-build-history-information'>
853 <title>Examining Build History Information</title>
854
855 <para>
856 You can examine build history output from the command line or
857 from a web interface.
858 </para>
859
860 <para>
861 To see any changes that have occurred (assuming you have
862 <link linkend='var-BUILDHISTORY_COMMIT'><filename>BUILDHISTORY_COMMIT = "1"</filename></link>),
863 you can simply
864 use any Git command that allows you to view the history of
865 a repository.
866 Here is one method:
867 <literallayout class='monospaced'>
868 $ git log -p
869 </literallayout>
870 You need to realize, however, that this method does show
871 changes that are not significant (e.g. a package's size
872 changing by a few bytes).
873 </para>
874
875 <para>
876 A command-line tool called <filename>buildhistory-diff</filename>
877 does exist, though, that queries the Git repository and prints just
878 the differences that might be significant in human-readable form.
879 Here is an example:
880 <literallayout class='monospaced'>
881 $ ~/poky/poky/scripts/buildhistory-diff . HEAD^
882 Changes to images/qemux86_64/glibc/core-image-minimal (files-in-image.txt):
883 /etc/anotherpkg.conf was added
884 /sbin/anotherpkg was added
885 * (installed-package-names.txt):
886 * anotherpkg was added
887 Changes to images/qemux86_64/glibc/core-image-minimal (installed-package-names.txt):
888 anotherpkg was added
889 packages/qemux86_64-poky-linux/v86d: PACKAGES: added "v86d-extras"
890 * PR changed from "r0" to "r1"
891 * PV changed from "0.1.10" to "0.1.12"
892 packages/qemux86_64-poky-linux/v86d/v86d: PKGSIZE changed from 110579 to 144381 (+30%)
893 * PR changed from "r0" to "r1"
894 * PV changed from "0.1.10" to "0.1.12"
895 </literallayout>
896 </para>
897
898 <para>
899 To see changes to the build history using a web interface, follow
900 the instruction in the <filename>README</filename> file here.
901 <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/buildhistory-web/'></ulink>.
902 </para>
903
904 <para>
905 Here is a sample screenshot of the interface:
906 <imagedata fileref="figures/buildhistory-web.png" align="center" scalefit="1" width="130%" contentdepth="130%" />
907 </para>
908 </section>
909 </section>
910</section>
911
912</chapter>
913<!--
914vim: expandtab tw=80 ts=4
915-->
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/component.title.xsl b/documentation/template/component.title.xsl
new file mode 100644
index 0000000000..ee21d59ad5
--- /dev/null
+++ b/documentation/template/component.title.xsl
@@ -0,0 +1,39 @@
1<xsl:stylesheet version="1.0"
2 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3 xmlns:d="http://docbook.org/ns/docbook"
4 xmlns="http://www.w3.org/1999/xhtml"
5 exclude-result-prefixes="d">
6
7 <xsl:template name="component.title">
8 <xsl:param name="node" select="."/>
9
10 <xsl:variable name="level">
11 <xsl:choose>
12 <xsl:when test="ancestor::d:section">
13 <xsl:value-of select="count(ancestor::d:section)+1"/>
14 </xsl:when>
15 <xsl:when test="ancestor::sect5">6</xsl:when>
16 <xsl:when test="ancestor::sect4">5</xsl:when>
17 <xsl:when test="ancestor::sect3">4</xsl:when>
18 <xsl:when test="ancestor::sect2">3</xsl:when>
19 <xsl:when test="ancestor::sect1">2</xsl:when>
20 <xsl:otherwise>1</xsl:otherwise>
21 </xsl:choose>
22 </xsl:variable>
23 <xsl:element name="h{$level+1}" namespace="http://www.w3.org/1999/xhtml">
24 <xsl:attribute name="class">title</xsl:attribute>
25 <xsl:if test="$generate.id.attributes = 0">
26 <xsl:call-template name="anchor">
27 <xsl:with-param name="node" select="$node"/>
28 <xsl:with-param name="conditional" select="0"/>
29 </xsl:call-template>
30 </xsl:if>
31 <xsl:apply-templates select="$node" mode="object.title.markup">
32 <xsl:with-param name="allow-anchors" select="1"/>
33 </xsl:apply-templates>
34 <xsl:call-template name="permalink">
35 <xsl:with-param name="node" select="$node"/>
36 </xsl:call-template>
37 </xsl:element>
38 </xsl:template>
39</xsl:stylesheet>
diff --git a/documentation/template/division.title.xsl b/documentation/template/division.title.xsl
new file mode 100644
index 0000000000..6c265970d5
--- /dev/null
+++ b/documentation/template/division.title.xsl
@@ -0,0 +1,24 @@
1<xsl:stylesheet version="1.0"
2 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3 xmlns:d="http://docbook.org/ns/docbook"
4 xmlns="http://www.w3.org/1999/xhtml"
5 exclude-result-prefixes="d">
6
7 <xsl:template name="division.title">
8 <xsl:param name="node" select="."/>
9
10 <h1>
11 <xsl:attribute name="class">title</xsl:attribute>
12 <xsl:call-template name="anchor">
13 <xsl:with-param name="node" select="$node"/>
14 <xsl:with-param name="conditional" select="0"/>
15 </xsl:call-template>
16 <xsl:apply-templates select="$node" mode="object.title.markup">
17 <xsl:with-param name="allow-anchors" select="1"/>
18 </xsl:apply-templates>
19 <xsl:call-template name="permalink">
20 <xsl:with-param name="node" select="$node"/>
21 </xsl:call-template>
22 </h1>
23 </xsl:template>
24</xsl:stylesheet>
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/formal.object.heading.xsl b/documentation/template/formal.object.heading.xsl
new file mode 100644
index 0000000000..1a5e697808
--- /dev/null
+++ b/documentation/template/formal.object.heading.xsl
@@ -0,0 +1,21 @@
1<xsl:stylesheet version="1.0"
2 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3 xmlns:d="http://docbook.org/ns/docbook"
4 xmlns="http://www.w3.org/1999/xhtml"
5 exclude-result-prefixes="d">
6
7 <xsl:template name="formal.object.heading">
8 <xsl:param name="object" select="."/>
9 <xsl:param name="title">
10 <xsl:apply-templates select="$object" mode="object.title.markup">
11 <xsl:with-param name="allow-anchors" select="1"/>
12 </xsl:apply-templates>
13 </xsl:param>
14 <p class="title">
15 <b><xsl:copy-of select="$title"/></b>
16 <xsl:call-template name="permalink">
17 <xsl:with-param name="node" select="$object"/>
18 </xsl:call-template>
19 </p>
20 </xsl:template>
21</xsl:stylesheet>
diff --git a/documentation/template/gloss-permalinks.xsl b/documentation/template/gloss-permalinks.xsl
new file mode 100644
index 0000000000..6bf58116f6
--- /dev/null
+++ b/documentation/template/gloss-permalinks.xsl
@@ -0,0 +1,14 @@
1<xsl:stylesheet version="1.0"
2 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3 xmlns:d="http://docbook.org/ns/docbook"
4 xmlns="http://www.w3.org/1999/xhtml">
5
6 <xsl:template match="glossentry/glossterm">
7 <xsl:apply-imports/>
8 <xsl:if test="$generate.permalink != 0">
9 <xsl:call-template name="permalink">
10 <xsl:with-param name="node" select=".."/>
11 </xsl:call-template>
12 </xsl:if>
13 </xsl:template>
14</xsl:stylesheet>
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/permalinks.xsl b/documentation/template/permalinks.xsl
new file mode 100644
index 0000000000..d2a1c14524
--- /dev/null
+++ b/documentation/template/permalinks.xsl
@@ -0,0 +1,25 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<xsl:stylesheet version="1.0"
3 xmlns="http://www.w3.org/1999/xhtml"
4 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
5
6 <xsl:param name="generate.permalink" select="1"/>
7 <xsl:param name="permalink.text">¶</xsl:param>
8
9 <xsl:template name="permalink">
10 <xsl:param name="node"/>
11
12 <xsl:if test="$generate.permalink != '0'">
13 <span class="permalink">
14 <a alt="Permalink" title="Permalink">
15 <xsl:attribute name="href">
16 <xsl:call-template name="href.target">
17 <xsl:with-param name="object" select="$node"/>
18 </xsl:call-template>
19 </xsl:attribute>
20 <xsl:copy-of select="$permalink.text"/>
21 </a>
22 </span>
23 </xsl:if>
24 </xsl:template>
25</xsl:stylesheet>
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/qa-code-permalinks.xsl b/documentation/template/qa-code-permalinks.xsl
new file mode 100644
index 0000000000..a309095c60
--- /dev/null
+++ b/documentation/template/qa-code-permalinks.xsl
@@ -0,0 +1,23 @@
1<!--
2This XSL sheet enables creation of permalinks for <para><code>
3constructs. Right now, this construct occurs only in the ref-manual
4book's qa issues and warnings chapter. However, if the construct
5were to appear anywhere in that ref-manual, a permalink would be
6generated. I don't foresee any <para><code> constructs being used
7in the future but if they are then a permalink with a generically
8numbered permalink would be generated.
9-->
10<xsl:stylesheet version="1.0"
11 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
12 xmlns:d="http://docbook.org/ns/docbook"
13 xmlns="http://www.w3.org/1999/xhtml">
14
15 <xsl:template match="para/code">
16 <xsl:apply-imports/>
17 <xsl:if test="$generate.permalink != 0">
18 <xsl:call-template name="permalink">
19 <xsl:with-param name="node" select=".."/>
20 </xsl:call-template>
21 </xsl:if>
22 </xsl:template>
23</xsl:stylesheet>
diff --git a/documentation/template/section.title.xsl b/documentation/template/section.title.xsl
new file mode 100644
index 0000000000..5c6ff9a96e
--- /dev/null
+++ b/documentation/template/section.title.xsl
@@ -0,0 +1,55 @@
1<xsl:stylesheet version="1.0"
2 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3 xmlns:d="http://docbook.org/ns/docbook"
4 xmlns="http://www.w3.org/1999/xhtml" exclude-result-prefixes="d">
5
6 <xsl:template name="section.title">
7 <xsl:variable name="section"
8 select="(ancestor::section |
9 ancestor::simplesect|
10 ancestor::sect1|
11 ancestor::sect2|
12 ancestor::sect3|
13 ancestor::sect4|
14 ancestor::sect5)[last()]"/>
15
16 <xsl:variable name="renderas">
17 <xsl:choose>
18 <xsl:when test="$section/@renderas = 'sect1'">1</xsl:when>
19 <xsl:when test="$section/@renderas = 'sect2'">2</xsl:when>
20 <xsl:when test="$section/@renderas = 'sect3'">3</xsl:when>
21 <xsl:when test="$section/@renderas = 'sect4'">4</xsl:when>
22 <xsl:when test="$section/@renderas = 'sect5'">5</xsl:when>
23 <xsl:otherwise><xsl:value-of select="''"/></xsl:otherwise>
24 </xsl:choose>
25 </xsl:variable>
26
27 <xsl:variable name="level">
28 <xsl:choose>
29 <xsl:when test="$renderas != ''">
30 <xsl:value-of select="$renderas"/>
31 </xsl:when>
32 <xsl:otherwise>
33 <xsl:call-template name="section.level">
34 <xsl:with-param name="node" select="$section"/>
35 </xsl:call-template>
36 </xsl:otherwise>
37 </xsl:choose>
38 </xsl:variable>
39
40 <xsl:call-template name="section.heading">
41 <xsl:with-param name="section" select="$section"/>
42 <xsl:with-param name="level" select="$level"/>
43 <xsl:with-param name="title">
44 <xsl:apply-templates select="$section" mode="object.title.markup">
45 <xsl:with-param name="allow-anchors" select="1"/>
46 </xsl:apply-templates>
47 <xsl:if test="$level &gt; 0">
48 <xsl:call-template name="permalink">
49 <xsl:with-param name="node" select="$section"/>
50 </xsl:call-template>
51 </xsl:if>
52 </xsl:with-param>
53 </xsl:call-template>
54 </xsl:template>
55</xsl:stylesheet>
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..9f3a7ecbeb
--- /dev/null
+++ b/documentation/tools/mega-manual.sed
@@ -0,0 +1,31 @@
1# Processes poky-ref-manual and yocto-project-qs manual (<word>-<word>-<word> style).
2# This style is for manual folders like "yocto-project-qs" and "poky-ref-manual".
3# This is the old way that did it. Can't do that now that we have "bitbake-user-manual" strings
4# in the mega-manual.
5# s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.7.2\/[a-z]*-[a-z]*-[a-z]*\/[a-z]*-[a-z]*-[a-z]*.html#/\"link\" href=\"#/g
6s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.7.2\/yocto-project-qs\/yocto-project-qs.html#/\"link\" href=\"#/g
7s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.7.2\/poky-ref-manual\/poky-ref-manual.html#/\"link\" href=\"#/g
8
9# Processes all other manuals (<word>-<word> style) except for the BitBake User Manual because
10# it is not included in the mega-manual.
11# This style is for manual folders that use two word, which is the standard now (e.g. "ref-manual").
12# This was the one-liner that worked before we introduced the BitBake User Manual, which is
13# not in the mega-manual.
14# s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.7.2\/[a-z]*-[a-z]*\/[a-z]*-[a-z]*.html#/\"link\" href=\"#/g
15
16s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.7.2\/adt-manual\/adt-manual.html#/\"link\" href=\"#/g
17s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.7.2\/bsp-guide\/bsp-guide.html#/\"link\" href=\"#/g
18s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.7.2\/dev-manual\/dev-manual.html#/\"link\" href=\"#/g
19s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.7.2\/kernel-dev\/kernel-dev.html#/\"link\" href=\"#/g
20s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.7.2\/profile-manual\/profile-manual.html#/\"link\" href=\"#/g
21s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.7.2\/ref-manual\/ref-manual.html#/\"link\" href=\"#/g
22s/\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.7.2\/yocto-project-qs\/yocto-project-qs.html#/\"link\" href=\"#/g
23
24# Process cases where just an external manual is referenced without an id anchor
25s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.7.2\/yocto-project-qs\/yocto-project-qs.html\" target=\"_top\">Yocto Project Quick Start<\/a>/Yocto Project Quick Start/g
26s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.7.2\/dev-manual\/dev-manual.html\" target=\"_top\">Yocto Project Development Manual<\/a>/Yocto Project Development Manual/g
27s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.7.2\/adt-manual\/adt-manual.html\" target=\"_top\">Yocto Project Application Developer's Guide<\/a>/Yocto Project Application Developer's Guide/g
28s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.7.2\/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
29s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.7.2\/profile-manual\/profile-manual.html\" target=\"_top\">Yocto Project Profiling and Tracing Manual<\/a>/Yocto Project Profiling and Tracing Manual/g
30s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.7.2\/kernel-dev\/kernel-dev.html\" target=\"_top\">Yocto Project Linux Kernel Development Manual<\/a>/Yocto Project Linux Kernel Development Manual/g
31s/<a class=\"ulink\" href=\"http:\/\/www.yoctoproject.org\/docs\/1.7.2\/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..235c85a1ba
--- /dev/null
+++ b/documentation/yocto-project-qs/qs-style.css
@@ -0,0 +1,983 @@
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-position: top;
122 margin-top: -256px;
123 padding-right: 50px;
124 margin-left: 50px;
125 text-align: center;
126 width: 600px;
127}
128
129h3.author {
130 margin: 0em 0me 0em 0em;
131 padding: 0em 0em 0em 0em;
132 font-weight: normal;
133 font-size: 100%;
134 color: #333;
135 clear: both;
136}
137
138.author tt.email {
139 font-size: 66%;
140}
141
142.titlepage hr {
143 width: 0em;
144 clear: both;
145}
146
147.revhistory {
148 padding-top: 2em;
149 clear: both;
150}
151
152.toc,
153.list-of-tables,
154.list-of-examples,
155.list-of-figures {
156 padding: 1.33em 0em 2.5em 0em;
157 color: #00557D;
158}
159
160.toc p,
161.list-of-tables p,
162.list-of-figures p,
163.list-of-examples p {
164 padding: 0em 0em 0em 0em;
165 padding: 0em 0em 0.3em;
166 margin: 1.5em 0em 0em 0em;
167}
168
169.toc p b,
170.list-of-tables p b,
171.list-of-figures p b,
172.list-of-examples p b{
173 font-size: 100.0%;
174 font-weight: bold;
175}
176
177.toc dl,
178.list-of-tables dl,
179.list-of-figures dl,
180.list-of-examples dl {
181 margin: 0em 0em 0.5em 0em;
182 padding: 0em 0em 0em 0em;
183}
184
185.toc dt {
186 margin: 0em 0em 0em 0em;
187 padding: 0em 0em 0em 0em;
188}
189
190.toc dd {
191 margin: 0em 0em 0em 2.6em;
192 padding: 0em 0em 0em 0em;
193}
194
195div.glossary dl,
196div.variablelist dl {
197}
198
199.glossary dl dt,
200.variablelist dl dt,
201.variablelist dl dt span.term {
202 font-weight: normal;
203 width: 20em;
204 text-align: right;
205}
206
207.variablelist dl dt {
208 margin-top: 0.5em;
209}
210
211.glossary dl dd,
212.variablelist dl dd {
213 margin-top: -1em;
214 margin-left: 25.5em;
215}
216
217.glossary dd p,
218.variablelist dd p {
219 margin-top: 0em;
220 margin-bottom: 1em;
221}
222
223
224div.calloutlist table td {
225 padding: 0em 0em 0em 0em;
226 margin: 0em 0em 0em 0em;
227}
228
229div.calloutlist table td p {
230 margin-top: 0em;
231 margin-bottom: 1em;
232}
233
234div p.copyright {
235 text-align: left;
236}
237
238div.legalnotice p.legalnotice-title {
239 margin-bottom: 0em;
240}
241
242p {
243 line-height: 1.5em;
244 margin-top: 0em;
245
246}
247
248dl {
249 padding-top: 0em;
250}
251
252hr {
253 border: solid 1px;
254}
255
256
257.mediaobject,
258.mediaobjectco {
259 text-align: center;
260}
261
262img {
263 border: none;
264}
265
266ul {
267 padding: 0em 0em 0em 1.5em;
268}
269
270ul li {
271 padding: 0em 0em 0em 0em;
272}
273
274ul li p {
275 text-align: left;
276}
277
278table {
279 width :100%;
280}
281
282th {
283 padding: 0.25em;
284 text-align: left;
285 font-weight: normal;
286 vertical-align: top;
287}
288
289td {
290 padding: 0.25em;
291 vertical-align: top;
292}
293
294p a[id] {
295 margin: 0px;
296 padding: 0px;
297 display: inline;
298 background-image: none;
299}
300
301a {
302 text-decoration: underline;
303 color: #444;
304}
305
306pre {
307 overflow: auto;
308}
309
310a:hover {
311 text-decoration: underline;
312 /*font-weight: bold;*/
313}
314
315/* This style defines how the permalink character
316 appears by itself and when hovered over with
317 the mouse. */
318
319[alt='Permalink'] { color: #eee; }
320[alt='Permalink']:hover { color: black; }
321
322
323div.informalfigure,
324div.informalexample,
325div.informaltable,
326div.figure,
327div.table,
328div.example {
329 margin: 1em 0em;
330 padding: 1em;
331 page-break-inside: avoid;
332}
333
334
335div.informalfigure p.title b,
336div.informalexample p.title b,
337div.informaltable p.title b,
338div.figure p.title b,
339div.example p.title b,
340div.table p.title b{
341 padding-top: 0em;
342 margin-top: 0em;
343 font-size: 100%;
344 font-weight: normal;
345}
346
347.mediaobject .caption,
348.mediaobject .caption p {
349 text-align: center;
350 font-size: 80%;
351 padding-top: 0.5em;
352 padding-bottom: 0.5em;
353}
354
355.epigraph {
356 padding-left: 55%;
357 margin-bottom: 1em;
358}
359
360.epigraph p {
361 text-align: left;
362}
363
364.epigraph .quote {
365 font-style: italic;
366}
367.epigraph .attribution {
368 font-style: normal;
369 text-align: right;
370}
371
372span.application {
373 font-style: italic;
374}
375
376.programlisting {
377 font-family: monospace;
378 font-size: 80%;
379 white-space: pre;
380 margin: 1.33em 0em;
381 padding: 1.33em;
382}
383
384.tip,
385.warning,
386.caution,
387.note {
388 margin-top: 1em;
389 margin-bottom: 1em;
390
391}
392
393/* force full width of table within div */
394.tip table,
395.warning table,
396.caution table,
397.note table {
398 border: none;
399 width: 100%;
400}
401
402
403.tip table th,
404.warning table th,
405.caution table th,
406.note table th {
407 padding: 0.8em 0.0em 0.0em 0.0em;
408 margin : 0em 0em 0em 0em;
409}
410
411.tip p,
412.warning p,
413.caution p,
414.note p {
415 margin-top: 0.5em;
416 margin-bottom: 0.5em;
417 padding-right: 1em;
418 text-align: left;
419}
420
421.acronym {
422 text-transform: uppercase;
423}
424
425b.keycap,
426.keycap {
427 padding: 0.09em 0.3em;
428 margin: 0em;
429}
430
431.itemizedlist li {
432 clear: none;
433}
434
435.filename {
436 font-size: medium;
437 font-family: Courier, monospace;
438}
439
440
441div.navheader, div.heading{
442 position: absolute;
443 left: 0em;
444 top: 0em;
445 width: 100%;
446 background-color: #cdf;
447 width: 100%;
448}
449
450div.navfooter, div.footing{
451 position: fixed;
452 left: 0em;
453 bottom: 0em;
454 background-color: #eee;
455 width: 100%;
456}
457
458
459div.navheader td,
460div.navfooter td {
461 font-size: 66%;
462}
463
464div.navheader table th {
465 /*font-family: Georgia, Times, serif;*/
466 /*font-size: x-large;*/
467 font-size: 80%;
468}
469
470div.navheader table {
471 border-left: 0em;
472 border-right: 0em;
473 border-top: 0em;
474 width: 100%;
475}
476
477div.navfooter table {
478 border-left: 0em;
479 border-right: 0em;
480 border-bottom: 0em;
481 width: 100%;
482}
483
484div.navheader table td a,
485div.navfooter table td a {
486 color: #777;
487 text-decoration: none;
488}
489
490/* normal text in the footer */
491div.navfooter table td {
492 color: black;
493}
494
495div.navheader table td a:visited,
496div.navfooter table td a:visited {
497 color: #444;
498}
499
500
501/* links in header and footer */
502div.navheader table td a:hover,
503div.navfooter table td a:hover {
504 text-decoration: underline;
505 background-color: transparent;
506 color: #33a;
507}
508
509div.navheader hr,
510div.navfooter hr {
511 display: none;
512}
513
514
515.qandaset tr.question td p {
516 margin: 0em 0em 1em 0em;
517 padding: 0em 0em 0em 0em;
518}
519
520.qandaset tr.answer td p {
521 margin: 0em 0em 1em 0em;
522 padding: 0em 0em 0em 0em;
523}
524.answer td {
525 padding-bottom: 1.5em;
526}
527
528.emphasis {
529 font-weight: bold;
530}
531
532
533 /************* /
534 / decorations /
535/ *************/
536
537.titlepage {
538}
539
540.part .title {
541}
542
543.subtitle {
544 border: none;
545}
546
547/*
548h1 {
549 border: none;
550}
551
552h2 {
553 border-top: solid 0.2em;
554 border-bottom: solid 0.06em;
555}
556
557h3 {
558 border-top: 0em;
559 border-bottom: solid 0.06em;
560}
561
562h4 {
563 border: 0em;
564 border-bottom: solid 0.06em;
565}
566
567h5 {
568 border: 0em;
569}
570*/
571
572.programlisting {
573 border: solid 1px;
574}
575
576div.figure,
577div.table,
578div.informalfigure,
579div.informaltable,
580div.informalexample,
581div.example {
582 border: 1px solid;
583}
584
585
586
587.tip,
588.warning,
589.caution,
590.note {
591 border: 1px solid;
592}
593
594.tip table th,
595.warning table th,
596.caution table th,
597.note table th {
598 border-bottom: 1px solid;
599}
600
601.question td {
602 border-top: 1px solid black;
603}
604
605.answer {
606}
607
608
609b.keycap,
610.keycap {
611 border: 1px solid;
612}
613
614
615div.navheader, div.heading{
616 border-bottom: 1px solid;
617}
618
619
620div.navfooter, div.footing{
621 border-top: 1px solid;
622}
623
624 /********* /
625 / colors /
626/ *********/
627
628body {
629 color: #333;
630 background: white;
631}
632
633a {
634 background: transparent;
635}
636
637a:hover {
638 background-color: #dedede;
639}
640
641
642h1,
643h2,
644h3,
645h4,
646h5,
647h6,
648h7,
649h8 {
650 background-color: transparent;
651}
652
653hr {
654 border-color: #aaa;
655}
656
657
658.tip, .warning, .caution, .note {
659 border-color: #fff;
660}
661
662
663.tip table th,
664.warning table th,
665.caution table th,
666.note table th {
667 border-bottom-color: #fff;
668}
669
670
671.warning {
672 background-color: #f0f0f2;
673}
674
675.caution {
676 background-color: #f0f0f2;
677}
678
679.tip {
680 background-color: #f0f0f2;
681}
682
683.note {
684 background-color: #f0f0f2;
685}
686
687.glossary dl dt,
688.variablelist dl dt,
689.variablelist dl dt span.term {
690 color: #044;
691}
692
693div.figure,
694div.table,
695div.example,
696div.informalfigure,
697div.informaltable,
698div.informalexample {
699 border-color: #aaa;
700}
701
702pre.programlisting {
703 color: black;
704 background-color: #fff;
705 border-color: #aaa;
706 border-width: 2px;
707}
708
709.guimenu,
710.guilabel,
711.guimenuitem {
712 background-color: #eee;
713}
714
715
716b.keycap,
717.keycap {
718 background-color: #eee;
719 border-color: #999;
720}
721
722
723div.navheader {
724 border-color: black;
725}
726
727
728div.navfooter {
729 border-color: black;
730}
731
732
733 /*********** /
734 / graphics /
735/ ***********/
736
737/*
738body {
739 background-image: url("images/body_bg.jpg");
740 background-attachment: fixed;
741}
742
743.navheader,
744.note,
745.tip {
746 background-image: url("images/note_bg.jpg");
747 background-attachment: fixed;
748}
749
750.warning,
751.caution {
752 background-image: url("images/warning_bg.jpg");
753 background-attachment: fixed;
754}
755
756.figure,
757.informalfigure,
758.example,
759.informalexample,
760.table,
761.informaltable {
762 background-image: url("images/figure_bg.jpg");
763 background-attachment: fixed;
764}
765
766*/
767h1,
768h2,
769h3,
770h4,
771h5,
772h6,
773h7{
774}
775
776/*
777Example of how to stick an image as part of the title.
778
779div.article .titlepage .title
780{
781 background-image: url("figures/white-on-black.png");
782 background-position: center;
783 background-repeat: repeat-x;
784}
785*/
786
787div.preface .titlepage .title,
788div.colophon .title,
789div.chapter .titlepage .title,
790div.article .titlepage .title
791{
792}
793
794div.section div.section .titlepage .title,
795div.sect2 .titlepage .title {
796 background: none;
797}
798
799
800h1.title {
801 background-color: transparent;
802 background-repeat: no-repeat;
803 height: 256px;
804 text-indent: -9000px;
805 overflow:hidden;
806}
807
808h2.subtitle {
809 background-color: transparent;
810 text-indent: -9000px;
811 overflow:hidden;
812 width: 0px;
813 display: none;
814}
815
816 /*************************************** /
817 / pippin.gimp.org specific alterations /
818/ ***************************************/
819
820/*
821div.heading, div.navheader {
822 color: #777;
823 font-size: 80%;
824 padding: 0;
825 margin: 0;
826 text-align: left;
827 position: absolute;
828 top: 0px;
829 left: 0px;
830 width: 100%;
831 height: 50px;
832 background: url('/gfx/heading_bg.png') transparent;
833 background-repeat: repeat-x;
834 background-attachment: fixed;
835 border: none;
836}
837
838div.heading a {
839 color: #444;
840}
841
842div.footing, div.navfooter {
843 border: none;
844 color: #ddd;
845 font-size: 80%;
846 text-align:right;
847
848 width: 100%;
849 padding-top: 10px;
850 position: absolute;
851 bottom: 0px;
852 left: 0px;
853
854 background: url('/gfx/footing_bg.png') transparent;
855}
856*/
857
858
859
860 /****************** /
861 / nasty ie tweaks /
862/ ******************/
863
864/*
865div.heading, div.navheader {
866 width:expression(document.body.clientWidth + "px");
867}
868
869div.footing, div.navfooter {
870 width:expression(document.body.clientWidth + "px");
871 margin-left:expression("-5em");
872}
873body {
874 padding:expression("4em 5em 0em 5em");
875}
876*/
877
878 /**************************************** /
879 / mozilla vendor specific css extensions /
880/ ****************************************/
881/*
882div.navfooter, div.footing{
883 -moz-opacity: 0.8em;
884}
885
886div.figure,
887div.table,
888div.informalfigure,
889div.informaltable,
890div.informalexample,
891div.example,
892.tip,
893.warning,
894.caution,
895.note {
896 -moz-border-radius: 0.5em;
897}
898
899b.keycap,
900.keycap {
901 -moz-border-radius: 0.3em;
902}
903*/
904
905table tr td table tr td {
906 display: none;
907}
908
909
910hr {
911 display: none;
912}
913
914table {
915 border: 0em;
916}
917
918 .photo {
919 float: right;
920 margin-left: 1.5em;
921 margin-bottom: 1.5em;
922 margin-top: 0em;
923 max-width: 17em;
924 border: 1px solid gray;
925 padding: 3px;
926 background: white;
927}
928 .seperator {
929 padding-top: 2em;
930 clear: both;
931 }
932
933 #validators {
934 margin-top: 5em;
935 text-align: right;
936 color: #777;
937 }
938 @media print {
939 body {
940 font-size: 8pt;
941 }
942 .noprint {
943 display: none;
944 }
945 }
946
947
948.tip,
949.note {
950 background: #f0f0f2;
951 color: #333;
952 padding: 20px;
953 margin: 20px;
954}
955
956.tip h3,
957.note h3 {
958 padding: 0em;
959 margin: 0em;
960 font-size: 2em;
961 font-weight: bold;
962 color: #333;
963}
964
965.tip a,
966.note a {
967 color: #333;
968 text-decoration: underline;
969}
970
971.footnote {
972 font-size: small;
973 color: #333;
974}
975
976/* Changes the announcement text */
977.tip h3,
978.warning h3,
979.caution h3,
980.note h3 {
981 font-size:large;
982 color: #00557D;
983}
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..3dad6b96c5
--- /dev/null
+++ b/documentation/yocto-project-qs/yocto-project-qs-customization.xsl
@@ -0,0 +1,15 @@
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/1.76.1/xhtml/docbook.xsl" />
5 <xsl:import href="yocto-project-qs-titlepage.xsl"/>
6
7 <xsl:include href="../template/permalinks.xsl"/>
8 <xsl:include href="../template/section.title.xsl"/>
9 <xsl:include href="../template/component.title.xsl"/>
10 <xsl:include href="../template/division.title.xsl"/>
11 <xsl:include href="../template/formal.object.heading.xsl"/>
12
13 <xsl:param name="generate.toc" select="'article nop'"></xsl:param>
14 <xsl:param name="html.stylesheet" select="'qs-style.css'" />
15</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..d0f0d113da
--- /dev/null
+++ b/documentation/yocto-project-qs/yocto-project-qs.xml
@@ -0,0 +1,968 @@
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 Developer Screencast Tutorial</ulink>
90 provides a 30-minute video created for users unfamiliar with
91 the Yocto Project but familiar with Linux build systems.
92 While this screencast is somewhat dated, the introductory
93 and fundamental concepts are useful for the beginner.
94 </para></listitem>
95 </itemizedlist>
96 </para>
97</section>
98
99<section id='yp-intro'>
100 <title>Introducing the Yocto Project Development Environment</title>
101 <para>
102 The Yocto Project through the OpenEmbedded build system provides an open source development
103 environment targeting the ARM, MIPS, PowerPC and x86 architectures for a variety of
104 platforms including x86-64 and emulated ones.
105 You can use components from the Yocto Project to design, develop, build, debug, simulate,
106 and test the complete software stack using Linux, the X Window System, GNOME Mobile-based
107 application frameworks, and Qt frameworks.
108 </para>
109
110 <mediaobject>
111 <imageobject>
112 <imagedata fileref="figures/yocto-environment.png"
113 format="PNG" align='center' scalefit='1' width="100%"/>
114 </imageobject>
115 <caption>
116 <para>The Yocto Project Development Environment</para>
117 </caption>
118 </mediaobject>
119
120 <para>
121 Here are some highlights for the Yocto Project:
122 </para>
123
124 <itemizedlist>
125 <listitem>
126 <para>Provides a recent Linux kernel along with a set of system commands and libraries suitable for the embedded environment.</para>
127 </listitem>
128 <listitem>
129 <para>Makes available system components such as X11, GTK+, Qt, Clutter, and SDL
130 (among others) so you can create a rich user experience on devices
131 that have display hardware.
132 For devices that do not have a display or where you wish to use alternative UI
133 frameworks, these components need not be installed.</para>
134 </listitem>
135 <listitem>
136 <para>Creates a focused and stable core compatible with the OpenEmbedded
137 project with which you can easily and reliably build and develop.</para>
138 </listitem>
139 <listitem>
140 <para>Fully supports a wide range of hardware and device emulation through the QEMU
141 Emulator.</para>
142 </listitem>
143 </itemizedlist>
144
145 <para>
146 The Yocto Project can generate images for many kinds of devices.
147 However, the standard example machines target QEMU full-system emulation for x86, x86-64, ARM, MIPS,
148 and PPC-based architectures as well as specific hardware such as the
149 <trademark class='registered'>Intel</trademark> Desktop Board DH55TC.
150 Because an image developed with the Yocto Project can boot inside a QEMU emulator, the
151 development environment works nicely as a test platform for developing embedded software.
152 </para>
153
154 <para>
155 Another important Yocto Project feature is the Sato reference User Interface.
156 This optional GNOME mobile-based UI, which is intended for devices with
157 restricted screen sizes, sits neatly on top of a device using the
158 GNOME Mobile Stack and provides a well-defined user experience.
159 Implemented in its own layer, it makes it clear to developers how they can implement
160 their own user interface on top of a Linux image created with the Yocto Project.
161 </para>
162</section>
163
164<section id='yp-resources'>
165 <title>What You Need and How You Get It</title>
166
167 <para>
168 You need these things to develop projects in the Yocto Project
169 environment:
170 </para>
171
172 <itemizedlist>
173 <listitem><para>
174 A host system with a minimum of 50 Gbytes of free disk space that
175 is running a supported Linux distribution (i.e. recent releases
176 of Fedora, openSUSE, CentOS, Debian, or Ubuntu).
177 If the host system supports multiple cores and threads, you can
178 configure the Yocto Project build system to significantly
179 decrease the time needed to build images.
180 </para></listitem>
181 <listitem><para>
182 Appropriate packages installed on the system you are using for
183 builds.
184 </para></listitem>
185 <listitem><para>
186 A release of the Yocto Project.
187 </para></listitem>
188 </itemizedlist>
189
190 <section id='the-linux-distro'>
191 <title>The Linux Distribution</title>
192
193 <para>
194 The Yocto Project team is continually verifying more and more Linux
195 distributions with each release.
196 In general, if you have the current release minus one of the following
197 distributions you should have no problems.
198 <itemizedlist>
199 <listitem><para>Ubuntu</para></listitem>
200 <listitem><para>Fedora</para></listitem>
201 <listitem><para>openSUSE</para></listitem>
202 <listitem><para>CentOS</para></listitem>
203 <listitem><para>Debian</para></listitem>
204 </itemizedlist>
205 For a more detailed list of distributions that support the Yocto Project,
206 see the
207 "<ulink url='&YOCTO_DOCS_REF_URL;#detailed-supported-distros'>Supported Linux Distributions</ulink>" section
208 in the Yocto Project Reference Manual.
209 </para>
210 <para>
211 The OpenEmbedded build system should be able to run on any modern
212 distribution that has the following versions for Git, tar, and
213 Python.
214 <itemizedlist>
215 <listitem><para>Git 1.7.8 or greater</para></listitem>
216 <listitem><para>tar 1.24 or greater</para></listitem>
217 <listitem><para>Python 2.7.3 or greater excluding Python
218 3.x, which is not supported.</para></listitem>
219 </itemizedlist>
220 Earlier releases of Python are known to not work and the
221 system does not support Python 3 at this time.
222 If your system does not meet any of these three listed
223 version requirements, you can
224 take steps to prepare the system so that you can still use the build
225 system.
226 See the
227 "<ulink url='&YOCTO_DOCS_REF_URL;#required-git-tar-and-python-versions'>Required Git, tar, and Python Versions</ulink>"
228 section in the Yocto Project Reference Manual for information.
229 </para>
230 <para>
231 This document assumes you are running one of the previously noted
232 distributions on your Linux-based host systems.
233 </para>
234 <note>
235 <para>
236 If you attempt to use a distribution not in the above list,
237 you may or may not have success.
238 Yocto Project releases are tested against the stable Linux
239 distributions listed in the
240 "<ulink url='&YOCTO_DOCS_REF_URL;#detailed-supported-distros'>Supported Linux Distributions</ulink>"
241 section of the Yocto Project Reference Manual.
242 If you encounter problems, please go to
243 <ulink url='&YOCTO_BUGZILLA_URL;'>Yocto Project Bugzilla</ulink>
244 and submit a bug.
245 We are interested in hearing about your experience.
246 </para>
247 </note>
248 </section>
249
250 <section id='packages'>
251 <title>The Packages</title>
252
253 <para>
254 Packages and package installation vary depending on your development system
255 and on your intent.
256 For example, if you want to build an image that can run
257 on QEMU in graphical mode (a minimal, basic build
258 requirement), then the number of packages is different than if you want to
259 build an image on a headless system or build out the Yocto Project
260 documentation set.
261 Collectively, the number of required packages is large
262 if you want to be able to cover all cases.
263 <note>In general, you need to have root access and then install the
264 required packages.
265 Thus, the commands in the following section may or may not work
266 depending on whether or not your Linux distribution has
267 <filename>sudo</filename> installed.</note>
268 </para>
269
270 <para>
271 The next few sections list, by supported Linux Distributions, the required
272 packages needed to build an image that runs on QEMU in graphical mode
273 (e.g. essential plus graphics support).
274 </para>
275
276 <para>
277 For lists of required packages for other scenarios, see the
278 "<ulink url='&YOCTO_DOCS_REF_URL;#required-packages-for-the-host-development-system'>Required Packages for the Host Development System</ulink>"
279 section in the Yocto Project Reference Manual.
280 </para>
281
282 <section id='ubuntu'>
283 <title>Ubuntu and Debian</title>
284
285 <para>
286 The essential and graphical support packages you need for a
287 supported Ubuntu or Debian distribution are shown in the
288 following command:
289 <literallayout class='monospaced'>
290 $ sudo apt-get install &UBUNTU_HOST_PACKAGES_ESSENTIAL; libsdl1.2-dev xterm
291 </literallayout>
292 </para>
293 </section>
294
295 <section id='fedora'>
296 <title>Fedora</title>
297
298 <para>
299 The essential and graphical packages you need for a supported
300 Fedora distribution are shown in the following command:
301 <literallayout class='monospaced'>
302 $ sudo yum install &FEDORA_HOST_PACKAGES_ESSENTIAL; SDL-devel xterm
303 </literallayout>
304 </para>
305 </section>
306
307 <section id='opensuse'>
308 <title>OpenSUSE</title>
309
310 <para>
311 The essential and graphical packages you need for a supported
312 OpenSUSE distribution are shown in the following command:
313 <literallayout class='monospaced'>
314 $ sudo zypper install &OPENSUSE_HOST_PACKAGES_ESSENTIAL; libSDL-devel xterm
315 </literallayout>
316 </para>
317 </section>
318
319 <section id='centos'>
320 <title>CentOS</title>
321
322 <para>
323 The essential and graphical packages you need for a supported
324 CentOS distribution are shown in the following command:
325 <literallayout class='monospaced'>
326 $ sudo yum install &CENTOS_HOST_PACKAGES_ESSENTIAL; SDL-devel xterm
327 </literallayout>
328 <note>Depending on the CentOS version you are using, other requirements
329 and dependencies might exist.
330 For details, you should look at the CentOS sections on the
331 <ulink url='https://wiki.yoctoproject.org/wiki/Poky/GettingStarted/Dependencies'>Poky/GettingStarted/Dependencies</ulink>
332 wiki page.</note>
333 </para>
334 </section>
335 </section>
336
337 <section id='releases'>
338 <title>Yocto Project Release</title>
339
340 <para>
341 It is recommended that you get the latest Yocto Project files
342 by setting up (cloning in
343 <ulink url='&YOCTO_DOCS_DEV_URL;#git'>Git</ulink> terms) a local
344 copy of the
345 <filename>poky</filename> Git repository on your host development
346 system.
347 Doing so allows you to contribute back to the Yocto Project project.
348 For information on how to get set up using this method, see the
349 "<ulink url='&YOCTO_DOCS_DEV_URL;#local-yp-release'>Yocto
350 Project Release</ulink>" item in the Yocto Project Development Manual.
351 </para>
352
353 <para>
354 You can also get the Yocto Project Files by downloading
355 Yocto Project releases from the
356 <ulink url="&YOCTO_HOME_URL;">Yocto Project website</ulink>.
357 From the website, you just click "Downloads" in the navigation pane
358 to the left to display all Yocto Project downloads.
359 Current and archived releases are available for download.
360 Nightly and developmental builds are also maintained at
361 <ulink url="&YOCTO_AB_NIGHTLY_URL;"></ulink>.
362 However, for this document a released version of Yocto Project is used.
363 </para>
364
365 </section>
366</section>
367
368<section id='test-run'>
369 <title>A Quick Test Run</title>
370
371 <para>
372 Now that you have your system requirements in order, you can give the Yocto Project a try.
373 This section presents some steps that let you do the following:
374 </para>
375
376 <itemizedlist>
377 <listitem>
378 <para>
379 Build an image and run it in the QEMU emulator.
380 </para>
381 </listitem>
382 <listitem>
383 <para>
384 Use a pre-built image and run it in the QEMU emulator.
385 </para>
386 </listitem>
387 </itemizedlist>
388
389 <section id='building-image'>
390 <title>Building an Image</title>
391
392 <para>
393 In the development environment you will need to build an image whenever you change hardware
394 support, add or change system libraries, or add or change services that have dependencies.
395 </para>
396
397 <mediaobject>
398 <imageobject>
399 <imagedata fileref="figures/building-an-image.png" format="PNG" align='center' scalefit='1'/>
400 </imageobject>
401 <caption>
402 <para>Building an Image</para>
403 </caption>
404 </mediaobject>
405
406 <para>
407 Use the following commands to build your image.
408 The OpenEmbedded build process creates an entire Linux
409 distribution, including the toolchain, from source.
410 <note><title>Note about Network Proxies</title>
411 <para>
412 By default, the build process searches for source code
413 using a pre-determined order through a set of locations.
414 If you are working behind a firewall and your build system
415 is not set up for proxies, you could encounter problems
416 with the build process when fetching source code (e.g.
417 fetcher failures or Git failures).
418 </para>
419
420 <para>
421 If you do not know your proxy settings, consult your
422 local network infrastructure resources and get that
423 information.
424 A good starting point could also be to check your web
425 browser settings.
426 Finally, you can find more information on using the Yocto
427 Project behind a firewall in the Yocto Project Reference
428 Manual
429 <ulink url='&YOCTO_DOCS_REF_URL;#how-does-the-yocto-project-obtain-source-code-and-will-it-work-behind-my-firewall-or-proxy-server'>FAQ</ulink>
430 and on the
431 "<ulink url='https://wiki.yoctoproject.org/wiki/Working_Behind_a_Network_Proxy'>Working Behind a Network Proxy</ulink>"
432 wiki page.
433 </para>
434 </note>
435 </para>
436
437 <para>
438 <literallayout class='monospaced'>
439 $ git clone &YOCTO_GIT_URL;/git/poky
440 $ cd poky
441 $ git checkout -b &DISTRO_NAME; origin/&DISTRO_NAME;
442 $ source &OE_INIT_FILE;
443 </literallayout>
444 </para>
445
446 <tip>
447 <para>
448 To help conserve disk space during builds, you can add the
449 following statement to your project's configuration file,
450 which for this example is
451 <filename>poky/build/conf/local.conf</filename>.
452 Adding this statement deletes the work directory used for
453 building a package once the package is built.
454 <literallayout class='monospaced'>
455 INHERIT += "rm_work"
456 </literallayout>
457 </para>
458 </tip>
459
460 <itemizedlist>
461 <listitem><para>In the previous example, the first command uses
462 <ulink url='&YOCTO_DOCS_DEV_URL;#git'>Git</ulink> to create
463 a local repository named <filename>poky</filename> that is a
464 clone of the upstream Yocto Project
465 <filename>poky</filename> repository.</para></listitem>
466 <listitem><para>The third command checks out a local branch and
467 names it <filename>&DISTRO_NAME;</filename>.
468 The local branch tracks the upstream branch of the same name.
469 Creating your own branch based on the released branch ensures
470 you are using the latest files for that release.
471 </para></listitem>
472 <listitem><para>
473 The final command runs the Yocto Project
474 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
475 environment setup script.
476 Running this script defines OpenEmbedded build environment
477 settings needed to complete the build.
478 The script also creates the
479 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>,
480 which is <filename>build</filename> in this case and is located
481 in the
482 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
483 After the script runs, your current working directory is set
484 to the Build Directory.
485 Later, when the build completes, the Build Directory contains
486 all the files created during the build.
487 <note>
488 For information on running a memory-resident
489 <ulink url='&YOCTO_DOCS_REF_URL;#usingpoky-components-bitbake'>BitBake</ulink>,
490 see the
491 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>
492 setup script.
493 </note></para></listitem>
494 </itemizedlist>
495 <para>
496 Take some time to examine your <filename>local.conf</filename> file
497 in your project's configuration directory, which is found in the Build Directory.
498 The defaults in that file should work fine.
499 However, there are some variables of interest at which you might look.
500 </para>
501
502 <para>
503 By default, the target architecture for the build is <filename>qemux86</filename>,
504 which produces an image that can be used in the QEMU emulator and is targeted at an
505 <trademark class='registered'>Intel</trademark> 32-bit based architecture.
506 To change this default, edit the value of the
507 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
508 variable in the configuration file before launching the build.
509 </para>
510
511 <para>
512 Another couple of variables of interest are the
513 <ulink url='&YOCTO_DOCS_REF_URL;#var-BB_NUMBER_THREADS'><filename>BB_NUMBER_THREADS</filename></ulink> and the
514 <ulink url='&YOCTO_DOCS_REF_URL;#var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></ulink> variables.
515 By default, these variables are set to the number of processor
516 cores your build host uses.
517 However, if your build host uses multiple processor cores,
518 you should increase these settings to twice the number of
519 cores used.
520 Doing so can significantly shorten your build time.
521 </para>
522
523 <para>
524 Another consideration before you build is the package manager used when creating
525 the image.
526 By default, the OpenEmbedded build system uses the RPM package manager.
527 You can control this configuration by using the
528 <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></ulink></filename> variable.
529 For additional package manager selection information, see the
530 "<ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-package'><filename>package*.bbclass</filename></ulink>"
531 section in the Yocto Project Reference Manual.
532 </para>
533
534 <para>
535 Continue with the following command to build an OS image for the target, which is
536 <filename>core-image-sato</filename> in this example.
537 For information on the <filename>-k</filename> option use the
538 <filename>bitbake --help</filename> command, see the
539 "<ulink url='&YOCTO_DOCS_REF_URL;#usingpoky-components-bitbake'>BitBake</ulink>"
540 section in the Yocto Project Reference Manual, or see the
541 "<ulink url='&YOCTO_DOCS_BB_URL;#bitbake-user-manual-command'>BitBake Command</ulink>"
542 section in the BitBake User Manual.
543 <literallayout class='monospaced'>
544 $ bitbake -k core-image-sato
545 </literallayout>
546 <note>
547 BitBake requires Python 2.6 or 2.7. For more information on
548 this requirement, see the
549 "<ulink url='&YOCTO_DOCS_REF_URL;#required-git-tar-and-python-versions'>Required Git, tar, and Python</ulink>"
550 section in the Yocto Project Reference Manual.
551 </note>
552 The final command runs the image using the QEMU emulator:
553 <literallayout class='monospaced'>
554 $ runqemu qemux86
555 </literallayout>
556 <note>
557 <para>
558 Depending on the number of processors and cores, the amount
559 of RAM, the speed of your Internet connection and other
560 factors, the build process could take several hours the
561 first time you run it.
562 Subsequent builds run much faster since parts of the build
563 are cached.
564 </para>
565 </note>
566 </para>
567 </section>
568
569 <section id='using-pre-built'>
570 <title>Using Pre-Built Binaries and QEMU</title>
571
572 <para>
573 If hardware, libraries and services are stable, you can get started by using a pre-built binary
574 of the filesystem image, kernel, and toolchain and run it using the QEMU emulator.
575 This scenario is useful for developing application software.
576 </para>
577
578 <mediaobject>
579 <imageobject>
580 <imagedata fileref="figures/using-a-pre-built-image.png" format="PNG" align='center' scalefit='1'/>
581 </imageobject>
582 <caption>
583 <para>Using a Pre-Built Image</para>
584 </caption>
585 </mediaobject>
586
587 <para>
588 For this scenario, you need to do several things:
589 </para>
590
591 <itemizedlist>
592 <listitem><para>Install the appropriate stand-alone toolchain tarball.</para></listitem>
593 <listitem><para>Download the pre-built image that will boot with QEMU.
594 You need to be sure to get the QEMU image that matches your target machine’s
595 architecture (e.g. x86, ARM, etc.).</para></listitem>
596 <listitem><para>Download the filesystem image for your target machine's architecture.
597 </para></listitem>
598 <listitem><para>Set up the environment to emulate the hardware and then start the QEMU emulator.
599 </para></listitem>
600 </itemizedlist>
601
602 <section id='installing-the-toolchain'>
603 <title>Installing the Toolchain</title>
604
605 <para>
606 You can download a tarball installer, which includes the
607 pre-built toolchain, the <filename>runqemu</filename>
608 script, and support files from the appropriate directory under
609 <ulink url='&YOCTO_TOOLCHAIN_DL_URL;'></ulink>.
610 Toolchains are available for 32-bit and 64-bit x86 development
611 systems from the <filename>i686</filename> and
612 <filename>x86_64</filename> directories, respectively.
613 The toolchains the Yocto Project provides are based off the
614 <filename>core-image-sato</filename> image and contain
615 libraries appropriate for developing against that image.
616 Each type of development system supports five or more target
617 architectures.
618 </para>
619
620 <para>
621 The names of the tarball installer scripts are such that a
622 string representing the host system appears first in the
623 filename and then is immediately followed by a string
624 representing the target architecture.
625 </para>
626
627 <literallayout class='monospaced'>
628 poky-glibc-<replaceable>host_system</replaceable>-<replaceable>image_type</replaceable>-<replaceable>arch</replaceable>-toolchain-<replaceable>release_version</replaceable>.sh
629
630 Where:
631 <replaceable>host_system</replaceable> is a string representing your development system:
632
633 i686 or x86_64.
634
635 <replaceable>image_type</replaceable> is a string representing the image you wish to
636 develop a Software Development Toolkit (SDK) for use against.
637 The Yocto Project builds toolchain installers using the
638 following BitBake command:
639
640 bitbake core-image-sato -c populate_sdk
641
642 <replaceable>arch</replaceable> is a string representing the tuned target architecture:
643
644 i586, x86_64, powerpc, mips, armv7a or armv5te
645
646 <replaceable>release_version</replaceable> is a string representing the release number of the
647 Yocto Project:
648
649 &DISTRO;, &DISTRO;+snapshot
650 </literallayout>
651
652 <para>
653 For example, the following toolchain installer is for a 64-bit
654 development host system and a i586-tuned target architecture
655 based off the SDK for <filename>core-image-sato</filename>:
656 <literallayout class='monospaced'>
657 poky-glibc-x86_64-core-image-sato-i586-toolchain-&DISTRO;.sh
658 </literallayout>
659 </para>
660
661 <para>
662 Toolchains are self-contained and by default are installed into
663 <filename>/opt/poky</filename>.
664 However, when you run the toolchain installer, you can choose an
665 installation directory.
666 </para>
667
668 <para>
669 The following command shows how to run the installer given a toolchain tarball
670 for a 64-bit x86 development host system and a 32-bit x86 target architecture.
671 You must change the permissions on the toolchain
672 installer script so that it is executable.
673 </para>
674
675 <para>
676 The example assumes the toolchain installer is located in <filename>~/Downloads/</filename>.
677 <note>
678 If you do not have write permissions for the directory into which you are installing
679 the toolchain, the toolchain installer notifies you and exits.
680 Be sure you have write permissions in the directory and run the installer again.
681 </note>
682 </para>
683
684 <para>
685 <literallayout class='monospaced'>
686 $ ~/Downloads/poky-glibc-x86_64-core-image-sato-i586-toolchain-&DISTRO;.sh
687 </literallayout>
688 </para>
689
690 <para>
691 For more information on how to install tarballs, see the
692 "<ulink url='&YOCTO_DOCS_ADT_URL;#using-an-existing-toolchain-tarball'>Using a Cross-Toolchain Tarball</ulink>" and
693 "<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.
694 </para>
695 </section>
696
697 <section id='downloading-the-pre-built-linux-kernel'>
698 <title>Downloading the Pre-Built Linux Kernel</title>
699
700 <para>
701 You can download the pre-built Linux kernel suitable for running in the QEMU emulator from
702 <ulink url='&YOCTO_QEMU_DL_URL;'></ulink>.
703 Be sure to use the kernel that matches the architecture you want to simulate.
704 Download areas exist for the five supported machine architectures:
705 <filename>qemuarm</filename>, <filename>qemumips</filename>, <filename>qemuppc</filename>,
706 <filename>qemux86</filename>, and <filename>qemux86-64</filename>.
707 </para>
708
709 <para>
710 Most kernel files have one of the following forms:
711 <literallayout class='monospaced'>
712 *zImage-qemu<replaceable>arch</replaceable>.bin
713 vmlinux-qemu<replaceable>arch</replaceable>.bin
714
715 Where:
716 <replaceable>arch</replaceable> is a string representing the target architecture:
717 x86, x86-64, ppc, mips, or arm.
718 </literallayout>
719 </para>
720
721 <para>
722 You can learn more about downloading a Yocto Project kernel in the
723 "<ulink url='&YOCTO_DOCS_DEV_URL;#local-kernel-files'>Yocto Project Kernel</ulink>"
724 bulleted item in the Yocto Project Development Manual.
725 </para>
726 </section>
727
728 <section id='downloading-the-filesystem'>
729 <title>Downloading the Filesystem</title>
730
731 <para>
732 You can also download the filesystem image suitable for your target architecture from
733 <ulink url='&YOCTO_QEMU_DL_URL;'></ulink>.
734 Again, be sure to use the filesystem that matches the architecture you want
735 to simulate.
736 </para>
737
738 <para>
739 The filesystem image has two tarball forms: <filename>ext3</filename> and
740 <filename>tar</filename>.
741 You must use the <filename>ext3</filename> form when booting an image using the
742 QEMU emulator.
743 The <filename>tar</filename> form can be flattened out in your host development system
744 and used for build purposes with the Yocto Project.
745 <literallayout class='monospaced'>
746 core-image-<replaceable>profile</replaceable>-qemu<replaceable>arch</replaceable>.ext3
747 core-image-<replaceable>profile</replaceable>-qemu<replaceable>arch</replaceable>.tar.bz2
748
749 Where:
750 <replaceable>profile</replaceable> is the filesystem image's profile:
751 lsb, lsb-dev, lsb-sdk, lsb-qt3, minimal, minimal-dev, sato,
752 sato-dev, or sato-sdk. For information on these types of image
753 profiles, see the "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>"
754 chapter in the Yocto Project Reference Manual.
755
756 <replaceable>arch</replaceable> is a string representing the target architecture:
757 x86, x86-64, ppc, mips, or arm.
758 </literallayout>
759 </para>
760 </section>
761
762 <section id='setting-up-the-environment-and-starting-the-qemu-emulator'>
763 <title>Setting Up the Environment and Starting the QEMU Emulator</title>
764
765 <para>
766 Before you start the QEMU emulator, you need to set up the emulation environment.
767 The following command form sets up the emulation environment.
768 <literallayout class='monospaced'>
769 $ source &YOCTO_ADTPATH_DIR;/environment-setup-<replaceable>arch</replaceable>-poky-linux-<replaceable>if</replaceable>
770
771 Where:
772 <replaceable>arch</replaceable> is a string representing the target architecture:
773 i586, x86_64, ppc603e, mips, or armv5te.
774
775 <replaceable>if</replaceable> is a string representing an embedded application binary interface.
776 Not all setup scripts include this string.
777 </literallayout>
778 </para>
779
780 <para>
781 Finally, this command form invokes the QEMU emulator
782 <literallayout class='monospaced'>
783 $ runqemu <replaceable>qemuarch</replaceable> <replaceable>kernel-image</replaceable> <replaceable>filesystem-image</replaceable>
784
785 Where:
786 <replaceable>qemuarch</replaceable> is a string representing the target architecture: qemux86, qemux86-64,
787 qemuppc, qemumips, or qemuarm.
788
789 <replaceable>kernel-image</replaceable> is the architecture-specific kernel image.
790
791 <replaceable>filesystem-image</replaceable> is the .ext3 filesystem image.
792
793 </literallayout>
794 </para>
795
796 <para>
797 Continuing with the example, the following two commands setup the emulation
798 environment and launch QEMU.
799 This example assumes the root filesystem (<filename>.ext3</filename> file) and
800 the pre-built kernel image file both reside in your home directory.
801 The kernel and filesystem are for a 32-bit target architecture.
802 <literallayout class='monospaced'>
803 $ cd $HOME
804 $ source &YOCTO_ADTPATH_DIR;/environment-setup-i586-poky-linux
805 $ runqemu qemux86 bzImage-qemux86.bin \
806 core-image-sato-qemux86.ext3
807 </literallayout>
808 </para>
809
810 <para>
811 The environment in which QEMU launches varies depending on the filesystem image and on the
812 target architecture.
813 For example, if you source the environment for the ARM target
814 architecture and then boot the minimal QEMU image, the emulator comes up in a new
815 shell in command-line mode.
816 However, if you boot the SDK image, QEMU comes up with a GUI.
817 <note>Booting the PPC image results in QEMU launching in the same shell in
818 command-line mode.</note>
819 </para>
820 </section>
821 </section>
822</section>
823
824<section id='super-user'>
825 <title>Super User
826</title>
827
828 <para>
829 This section
830 <footnote>
831 <para>
832 Kudos and thanks to Robert P. J. Day of
833 <ulink url='http://www.crashcourse.ca'>CrashCourse</ulink> for providing the basis
834 for this "expert" section with information from one of his
835 <ulink url='http://www.crashcourse.ca/wiki/index.php/Yocto_Project_Quick_Start'>wiki</ulink>
836 pages.
837 </para>
838 </footnote>
839 gives you a minimal description of how to use the Yocto Project to build
840 images for Beaglebone hardware starting from scratch.
841 The steps were performed on a 64-bit Ubuntu 12.04 system that
842 has four cores.
843 </para>
844
845 <section id='getting-yocto'>
846 <title>Getting the Yocto Project</title>
847
848 <para>
849 Set up your
850 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
851 by using Git to clone the <filename>poky</filename>
852 repository and then check out the release branch:
853 <literallayout class='monospaced'>
854 $ cd ~
855 $ git clone git://git.yoctoproject.org/poky
856 $ cd poky
857 $ git checkout -b &DISTRO_NAME; origin/&DISTRO_NAME;
858 </literallayout>
859 </para>
860 </section>
861
862 <section id='setting-up-your-host'>
863 <title>Setting Up Your Host</title>
864
865 <para>
866 You need some packages for everything to work.
867 Rather than duplicate them here, look at the
868 "<link linkend='packages'>The Packages</link>"
869 section earlier in this quick start.
870 </para>
871 </section>
872
873 <section id='initializing-the-build-environment'>
874 <title>Initializing the Build Environment</title>
875
876 <para>
877 From the root directory of your
878 <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>,
879 initialize your environment and provide a meaningful
880 <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
881 name:
882 <literallayout class='monospaced'>
883 $ source &OE_INIT_FILE; mybuilds
884 </literallayout>
885 At this point, the <filename>mybuilds</filename> directory has
886 been created for you and it is now your current working directory.
887 If you do not provide your own directory name,
888 it defaults to <filename>build</filename>,
889 which is inside the Source Directory.
890 </para>
891 </section>
892
893 <section id='configuring-the-local.conf-file'>
894 <title>Configuring the local.conf File</title>
895
896 <para>
897 Initializing the build environment creates a
898 <filename>conf/local.conf</filename> configuration file
899 in the Build Directory.
900 You need to manually edit this file to specify the machine you
901 are building and to optimize your build time.
902 Here are the minimal changes to make:
903 <literallayout class='monospaced'>
904 BB_NUMBER_THREADS = "8"
905 PARALLEL_MAKE = "-j 8"
906 MACHINE ?= "beaglebone"
907 </literallayout>
908 Briefly, set
909 <ulink url='&YOCTO_DOCS_REF_URL;#var-BB_NUMBER_THREADS'><filename>BB_NUMBER_THREADS</filename></ulink>
910 and
911 <ulink url='&YOCTO_DOCS_REF_URL;#var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></ulink> to
912 twice your host processor's number of cores.
913 </para>
914
915 <para>
916 A good deal that goes into a Yocto Project build is simply
917 downloading all of the source tarballs.
918 Steps exist that can help you be more efficient with gathering
919 source files.
920 For example, you can set up local mirrors that hold your
921 source tarballs or you can pre-fetch all your source without
922 initiating a build until later.
923 For more information, see the
924 "<ulink url='&YOCTO_DOCS_DEV_URL;#working-with-source-files'>Working with Source Files</ulink>"
925 section in the Yocto Project Development Manual.
926 </para>
927 </section>
928
929 <section id='building-the-image'>
930 <title>Building the Image</title>
931
932 <para>
933 At this point, you need to select an image to build for the
934 Beaglebone hardware.
935 If this is your first build using the Yocto Project, you should try
936 the smallest and simplest image:
937 <literallayout class='monospaced'>
938 $ bitbake core-image-minimal
939 </literallayout>
940 Now you just wait for the build to finish.
941 </para>
942
943 <para>
944 By default, BitBake aborts when it encounters an error during
945 the build.
946 If you want to make sure the build continues even when BitBake
947 encounters an error, use this variation:
948 <literallayout class='monospaced'>
949 $ bitbake -k core-image-minimal
950 </literallayout>
951 </para>
952
953 <para>
954 Once you have your image, you can take steps to load and boot it on
955 the target hardware.
956 </para>
957
958 <para>
959 You can learn about BitBake in general by reading the
960 <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
961 </para>
962 </section>
963</section>
964
965</article>
966<!--
967vim: expandtab tw=80 ts=4
968-->