summaryrefslogtreecommitdiff
path: root/distribution
diff options
context:
space:
mode:
authorManuel Traut <manut@linutronix.de>2016-05-17 15:55:39 +0200
committerManuel Traut <manut@linutronix.de>2016-05-17 15:55:39 +0200
commit7032a45ced955efc7d369b3ccf6491654d6549b0 (patch)
tree992bf96e61822444366b008ceeebd215f3d44a8f /distribution
parent31553e08f214315eca8cabddfbb802add5ba9e8f (diff)
yocto-basics: split slides
Signed-off-by: Manuel Traut <manut@linutronix.de>
Diffstat (limited to 'distribution')
-rw-r--r--distribution/Kconfig1
-rw-r--r--distribution/yocto-basic/pres_yocto-basic.tex1175
-rw-r--r--distribution/yocto-basic/yocto-adt.tex193
-rw-r--r--distribution/yocto-basic/yocto-imgbuild-predefined.tex13
-rw-r--r--distribution/yocto-basic/yocto-imgbuild1.tex13
-rw-r--r--distribution/yocto-basic/yocto-imgbuild2.tex265
-rw-r--r--distribution/yocto-basic/yocto-workflow.tex681
7 files changed, 1171 insertions, 1170 deletions
diff --git a/distribution/Kconfig b/distribution/Kconfig
index 1cc108e..ffac90f 100644
--- a/distribution/Kconfig
+++ b/distribution/Kconfig
@@ -16,4 +16,5 @@ if YOCTO
source "distribution/yocto-intro/Kconfig"
source "distribution/yocto-basic/Kconfig"
source "distribution/yocto-advanced/Kconfig"
+ source "distribution/yocto-x86/Kconfig"
endif
diff --git a/distribution/yocto-basic/pres_yocto-basic.tex b/distribution/yocto-basic/pres_yocto-basic.tex
index 77b17fc..b779a1d 100644
--- a/distribution/yocto-basic/pres_yocto-basic.tex
+++ b/distribution/yocto-basic/pres_yocto-basic.tex
@@ -18,1175 +18,10 @@
\end{itemize}
\end{frame}
-\subsection{Workflow}
-\begin{frame}[fragile]
-\includegraphics[width=\textwidth]{images/yocto-workflow}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{retrieve poky}
-\begin{verbatim}
-% git clone http://git.yoctoproject.org/git/poky
-% cd poky
-% git checkout origin/jethro -b jethro -t
-\end{verbatim}
-\end{frame}
-
-
-\begin{frame}[fragile]
-\frametitle{prepare environment}
-\begin{itemize}
-\item bitbake is typically not installed into regular search paths
-\item the environment of the bash is modified to find the commands
-\item non-bash shells are not supported
-\end{itemize}
-\begin{verbatim}
-% . ./oe-init-buildenv <builddir>
-\end{verbatim}
-\begin{itemize}
-\item is used to modify the environment and change the CWD to <builddir>
-\item ./oe-init-buildenv-memres is used to keep the bitbake-server running
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{classes}
-\begin{itemize}
-\item denoted by the .bbclass extension
-\item base.bbclass is automatically included by all other classes and recipes.
-\item common tasks and there execution order is defined in base.bbclass
-\item tasks can be added, overridden, extended or used by other classes
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{recipes}
-\begin{itemize}
-\item a .bb file inherits classes and populates them with data
-\item bitbake is used to schedule the tasks defined in a recipe
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{layers}
-\begin{itemize}
-\item a folder containing recipes, configs and classes
-\item used to isolate different types of customizations from each other
-\item e.g. own layer for machine specific stuff, one for own applications
-\item extend, add, replace or modify recipes
-\item add or replace class files
-\item 'conf/layer.conf' is used to configure the layer
-\item are added and ordered via BBLAYERS variable in build/conf/bblayers.conf
-\item 'bitbake-layers show-layers' is used to show used layers
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{layers \#2}
-layers should be grouped by functionality
-\begin{itemize}
-\item custom toolchains (compilers, debuggers, profiling tools)
-\item distribution specifications (i.e. meta-yocto)
-\item BSP/machine settings (i.e. meta-yocto-bsp)
-\item functional areas (selinux, networking, etc)
-\item project specific changes
-\item a layer is typically organized as a git repository
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{directory layout}
- \begin{verbatim}
-poky
-├── bitbake
-├── documentation
-├── meta
-├── meta-selftest
-├── meta-skeleton
-├── meta-yocto
-├── meta-yocto-bsp
-└── scripts
-\end{verbatim}
-\end{frame}
-
-\subsection{Variable assignments}
-\begin{frame}
-\frametitle{available operators}
-\begin{itemize}
-\item =
-\item ?=
-\item ??=
-\item :=
-\item += / =+
-\item .= / =.
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{variable assignment with =}
-\begin{verbatim}
-VAR = "value"
-\end{verbatim}
-\pause
-\begin{itemize}
- \item normal assignment
- \item values need to be surrounded by double quotes
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{early default assignment with ?=}
-\begin{verbatim}
-VAR ?= "1"
-VAR ?= "2"
-\end{verbatim}
-\pause
-\begin{itemize}
- \item VAR is set to "1" in this example
- \item if there are multiple assignments using ?= the first one is used
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{late default assignment with ??=}
-\begin{verbatim}
-VAR ??= "1"
-VAR ??= "2"
-\end{verbatim}
-\pause
-\begin{itemize}
- \item VAR is set to "2" in this example
- \item if there are multiple assignments using ??= the last one is used
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{assignment priorities \#1}
-\begin{verbatim}
-VAR_A ??= "12"
-VAR_A ?= "34"
-
-VAR_B ?= "12"
-VAR_B ??= "34"
-\end{verbatim}
-\pause
-\begin{itemize}
- \item VAR\_A contains "34"
- \item VAR\_B contains "12"
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{assignment priorities \#2}
-\begin{verbatim}
-VAR ?= "12"
-VAR ??= "34"
-VAR = "56"
-VAR ?= "78"
-VAR ??= "78"
-\end{verbatim}
-\pause
-\begin{itemize}
- \item VAR contains "56"
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{immediate variable expansion with :=}
-\begin{verbatim}
-VAR_A = "11"
-VAR_B = "B:${VAR_A}"
-VAR_A = "22"
-VAR_C := "C:${VAR_A}"
-VAR_A = "33"
-echo ${VAR_A} ${VAR_B} ${VAR_C}
-\end{verbatim}
-\pause
-\begin{itemize}
- \item 33 B:33 C:22
- \item the content of VAR\_C is expanded immediately on assignment
- \item the content of VAR\_B is expanded on use
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{append (+=) or prepend (=+) a variable}
-\begin{verbatim}
-VAR_A = "12"
-VAR_A += "34"
-VAR_B = "56"
-VAR_B =+ "78"
-\end{verbatim}
-\pause
-\begin{itemize}
- \item VAR\_A contains "12 34"
- \item VAR\_B contains "78 56"
- \item there are spaces between the appended values
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{append (.=) or prepend (=.) a variable}
-\begin{verbatim}
-VAR_A = "12"
-VAR_A .= "34"
-VAR_B = "56"
-VAR_B =. "78"
-\end{verbatim}
-\pause
-\begin{itemize}
- \item VAR\_A contains "1234"
- \item VAR\_B contains "7856"
- \item there are no spaces between the appended values
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{assignment debugging}
-\begin{verbatim}
-$ echo 'FOO ??= "123"' >> conf/local.conf
-$ echo 'FOO ?= "456"' >> conf/local.conf
-
-$ bitbake -e | grep FOO
-# $FOO [2 operations]
-FOO="456"
-\end{verbatim}
-\end{frame}
-
-\subsection{Recipes}
-\begin{frame}
-\frametitle{typical progressing}
-\begin{enumerate}
-\item fetch source files
-\item extract sources
-\item patch sources
-\item configure sources
-\item compilation
-\item packaging
-\end{enumerate}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{skeleton}
-\begin{verbatim}
-SUMMARY = "short description of the package (1 line)"
-DESCRIPTION = "a long version of the description of the package"
-HOMEPAGE = "http://url-of-the-os-project.org"
-LICENSE = "LGPLv2.1"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=xxxx \
- file://licfile1.txt;beginline=5;endline=29;md5=yyyy \
- file://licfile2.txt;endline=50;md5=zzzz
-
-SRC_URI = "file://mysw-1.0.tbz"
-SRC_URI[md5sum] = "xxx"
-SRC_URI[sha256sum] = "yyy"
-
-S = "${WORKDIR}/${PN}-${PV}"
-
-inherit autotools
-\end{verbatim}
-\end{frame}
-
-\begin{frame}
-\frametitle{syntax}
-a recipe normaly consists of a human readable description of the project and
-references to the open-source project and:
-\begin{description}
-\item[LIC*] reference to the used licenses
-\item[SRC\_URI] list of source files (local or remote)
-\item[PV] package-version (retrived from filename name\_version.bb)
-\item[PN] package-name (retrived from filename name\_version.bb)
-\item[P] ${PN}-${PV}
-\item[S] The location in the Build Directory where unpacked recipe source code resides.
-\item[inherit] use a class (or multiple classes)
-\end{description}
-\end{frame}
-
-\begin{frame}
-\frametitle{the LICENSE variable}
-list of source licenses for the recipe:
-\begin{itemize}
-\item do not use spaces within individual license names
-\item use spaces between license names
-\item separate license names using | (pipe) when there is a choice between
- licenses
-\item separate license names using \& (AND) if parts of the code are licensed
- with different licenses
-\item for standard licenses, use the names of the files in
- meta/files/common-licenses/ or the SPDXLICENSEMAP
- \footnote{aps commonly used license names to their SPDX counterparts found in
- meta/files/common-licenses/. For the default SPDXLICENSEMAP mappings, see the
- meta/conf/licenses.conf file}
- flag names defined in meta/conf/licenses.conf
-\item use "CLOSED" for closed source software
- (LIC\_FILES\_CHKSUM is not needed to be defined then)
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{LIC\_FILE\_CHKSUM variable}
-Checksums of the license text in the recipe source code.
-\vspace{2em}
-
-
-This variable tracks changes in license text of the source code files.
-If the license text is changed, it will trigger a build failure,
-which gives the developer an opportunity to review any license change.
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{SRC\_URI variable}
-\begin{verbatim}
-SRC_URI = "<protocol>://<host>/<path>;<OptionA=xxx>;<OptionB=xxx>"
-\end{verbatim}
-\pause
-multiple urls can be set in a SRC\_URI variable:
-\begin{verbatim}
-SRC_URI = "<url1>;name=url1 <url2>;name=url2"
-\end{verbatim}
-for each url a md5 and sha256 checksum needs to be added:
-\begin{verbatim}
-SRC_URI[url1.md5sum] = xxx
-SRC_URI[url1.sha256sum] = yyy
-SRC_URI[url2.md5sum] = zzz
-SRC_URI[url2.sha256sum] = xyz
-\end{verbatim}
-To get these checksums don't specify them and run a build and copy them from
-the error message. (Don't use md5sum or sha256sum on the commandline; they
-produce a different checksum.)
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{local SRC\_URI (file://)}
-The path is relative to the FILESPATH variable. To modify the FILESPATH use
-FILESEXTRAPATH.
-\vspace{2em}
-
-
-Additional files are searched in subdirectories of the directory in which the
-recipe file (.bb) or append file (.bbappend) resides.
-
-To find out which paths can be used, it is best practice to use
-\begin{verbatim}
-$ bitbake -e <recipe-name> | grep FILESPATH
-\end{verbatim}
-\end{frame}
-
-\begin{frame}
-\frametitle{remote SRC\_URI}
-\begin{description}
-\item[bzr://]Bazaar revision control repository
-\item[git://]Git revision control repository
-\item[osc://]OSC (OpenSUSE Build service) revision control repository
-\item[ccrc://]ClearCase repository
-\item[http://]Internet using http
-\item[https://]Internet using https
-\item[ftp://]Internet using ftp
-\item[cvs://]CVS revision control repository
-\item[hg://]Mercurial (hg) revision control repository
-\item[p4://]Perforce (p4) revision control repository
-\item[ssh://]secure shell
-\item[svn://]Subversion (svn) revision control repository
-\end{description}
-\end{frame}
-
-\begin{frame}
-\frametitle{SRC\_URI patch options}
-\begin{itemize}
- \item patches are applied in the order they appear in SRC\_URI
- \item quilt is used to apply the patches
-\end{itemize}
-\begin{description}
-\item[apply=no] apply patch or not; default is yes
-\item[striplevel=0] striplevel to use when applying a patch; default is 1
-\item[patchdir=\${S}/foo] directory in which the patch should be applied;
- default is \${S}
-\end{description}
-\end{frame}
-
-\begin{frame}
-\frametitle{SRC\_URI patch options \#2}
-\begin{description}
-\item[mindate] apply patch only if SRCDATE
- \footnote{The date of the source code used to build the package.
- This variable applies only if the source was fetched from a
- Source Code Manager (SCM)} is equal to or greater than mindate
-\item[maxdate] apply patch only if SRCDATE is not later than maxdate
-\item[minrev] apply the patch only if SRCREV
- \footnote{The revision of the source code used to build the package.
- This variable applies to Subversion, Git, Mercurial and Bazaar only}
- is equal to or greater than minrev
-\item[maxrev] apply patch only if SRCREV is not later than maxrev
-\item[rev] apply patch only if SRCREV is equal to rev
-\item[notrev] apply patch only if SRCREV is not equal to rev
-\end{description}
-\end{frame}
-
-\begin{frame}
-\frametitle{SRC\_URI options}
-\begin{description}
-\item[unpack=no] controls if an archive is unpacked; default is yes
-\item[subdir=bla] places the file (or extracts its contents) into the
- specified subdirectory of WORKDIR
- \footnote{${TMPDIR}/work/${MULTIMACH\_TARGET\_SYS}/${PN}/${EXTENDPE}${PV}-${PR};
- eg. poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0}
-\item[name=mydl] name to be used for association with SRC\_URI checksums when
- you have more than one file specified in SRC\_URI
-\item[downloadfilename=my.tar.gz] the filename used when storing the downloaded file
-\end{description}
-\end{frame}
-
-\begin{frame}
-\frametitle{inherit}
-inherit is used to use the functionality defined in a .bblcass file. Popular
-predefined classes are:
-\begin{itemize}
-\item autotools
-\item cmake
-\item cpan
-\item distutils / setuptools
-\item kernel / module
-\item mime
-\item qmake / qmake2
-\item qt4e / qt4x11
-\item scons
-\item systemd
-\item u-boot
-\item vala
-\end{itemize}
-\end{frame}
-
-\subsection{Append files}
-\begin{frame}
-\frametitle{basics}
-\begin{itemize}
- \item are typically used to modify or extend the functionality of the base
- recipe
- \item it's recommended by the Yocto project to use bbappend files instead
- of copying and modyfiing a recipe in an own layer
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{naming}
-an append file must be named after the base package:
-\begin{verbatim}
-<base-pn>_<base-pv>.bbappend
-\end{verbatim}
-\end{frame}
-
-\subsection{Classes}
-\begin{frame}
-\frametitle{basics}
-\begin{itemize}
- \item python can be used to write functions
- \item e.g. write your own image generation class
-\end{itemize}
-\end{frame}
-
-\subsection{Tasks}
-\begin{frame}
-\frametitle{basics}
-\begin{itemize}
- \item are defined and ordered in classes
- \item can be overriden by classes and recipes
-\end{itemize}
-\end{frame}
-
-\begin{frame}
- \frametitle{download \& patch}
-\begin{description}
-\item [do\_checkuri] validates the SRC\_URI value
-\item [do\_checkuriall] validates the SRC\_URI value for all recipes required
- to build a target"
-\item [do\_fetch] fetches the source code
-\item [do\_fetchall] fetches all remote sources required to build a target
-\item [do\_unpack] unpacks the source code into a working directory
-\item [do\_patch] locates patch files and applies them to the source code
-\end{description}
-\end{frame}
-
-\begin{frame}
- \frametitle{configue \& compile}
-\begin{description}
-\item [do\_configure] configures the source by enabling and disabling any
- build-time and configuration options for the software being built
-\item [do\_configure\_ptest\_base] configures the runtime test suite included
- in the software being built
-\item [do\_compile] compiles the source in the compilation directory
-\item [do\_install] copies files from the compilation directory to a holding
- area
-\item [do\_populate\_sysroot] copies a subset of files installed by
- do\_install into the sysroot in order to make them available to other
- recipes
-\end{description}
-\end{frame}
-
-\begin{frame}
-\frametitle{packaging}
-\begin{description}
-\item [do\_packagedata] creates package metadata used by the build system to
- generate the final packages
-\item [do\_package] analyzes the content of the holding area and splits it
- into subsets based on available packages and files
-\item [do\_package\_write] creates the actual packages and places them in the
- Package Feed area
-\item [do\_package\_write\_deb] creates the actual DEB packages and places
- them in the Package Feed area
-\item [do\_package\_write\_ipk] creates the actual IPK packages and places
- them in the Package Feed area
-\item [do\_package\_write\_rpm] creates the actual RPM packages and places
- them in the Package Feed area
-\item [do\_package\_write\_tar] creates tar archives for packages and places
- them in the Package Feed area
-\item [do\_package\_index] creates or updates the index in the Package Feed
- area
-\end{description}
-\end{frame}
-
-\begin{frame}
- \frametitle{deploy}
-\begin{description}
-\item [do\_rootfs] creates the root filesystem (file and directory structure)
- for an image
-\item [do\_vmdkimg] creates a .vmdk image for use with VMware and compatible
- virtual machine hosts"
-\item [do\_deploy] writes deployable output files to the deploy directory
-\item [do\_populate\_sdk] creates the file and directory structure for an
- installable SDK
-\end{description}
-\end{frame}
-
-\begin{frame}
-\frametitle{cleanup}
-\begin{description}
-\item [do\_clean] removes all output files for a target
-\item [do\_cleanall] removes all output files, shared state cache, and
- downloaded source files for a target
-\item [do\_cleansstate] removes all output files and shared state cache for a
- target
-\item [do\_rm\_work] removes work files after the build system has finished
- with them
-\item [do\_rm\_work\_all] top-level task for removing work files after the
- build system has finished with them
-\end{description}
-\end{frame}
-
-\begin{frame}
-\frametitle{kernel}
-\begin{description}
-\item [do\_kernel\_checkout] checks out source/meta branches for a linux-yocto
- style kernel
-\item [do\_validate\_branches] ensures that the source/meta branches are on
- the locations specified by their SRCREV values for a linux-yocto style
- kernel"
-\item [do\_kernel\_configme] assembles the kernel configuration for a
- linux-yocto style kernel
-\item [do\_menuconfig] runs 'make menuconfig' for the kernel
-\item [do\_diffconfig] compares the old and new config files after running
- do\_menuconfig for the kernel
-\item [do\_savedefconfig] creates a minimal Linux kernel configuration file
-\item [do\_kernel\_configcheck] validates the kernel configuration for a
- linux-yocto style kernel
-\item [do\_sizecheck] checks the size of the kernel image against
- KERNEL\_IMAGE\_MAXSIZE (if set)
-\end{description}
-\end{frame}
-
-\begin{frame}
-\frametitle{kernel}
-\begin{description}
-\item [do\_compile\_kernelmodules] compiles loadable modules for the Linux
- kernel
-\item [do\_strip] strips unneeded sections out of the Linux kernel image
-\item [do\_kernel\_link\_vmlinux] creates a symbolic link in arch/\$arch/boot
- for vmlinux kernel images
-\item [do\_bundle\_initramfs] combines an initial ramdisk image and kernel
- together to form a single image
-\end{description}
-\end{frame}
-
-\begin{frame}
-\frametitle{licenses}
-\begin{description}
-\item [do\_populate\_lic] writes license information for the recipe that is
- collected later when the image is constructed
-\item [do\_spdx] a build stage that takes the source code and scans it on a
- remote FOSSOLOGY server in order to produce an SPDX document
-\end{description}
-\end{frame}
-
-\begin{frame}
-\frametitle{special stuff}
-\begin{description}
-\item [do\_uboot\_mkimage] creates a uImage file from the kernel for the
- U-Boot bootloader
-\item [do\_generate\_qt\_config\_file] writes a qt.conf file for building a
- Qt-based application
-\item [do\_devshell] starts a shell with the environment set up for
- development/debugging
-\item [do\_listtasks] lists all defined tasks for a target
-\end{description}
-\end{frame}
-
-\subsection{Machines}
-\begin{frame}
-\frametitle{basics}
-a machine config is used to describe a board
-\begin{itemize}
- \item machine configs are stored in the layers: conf/machine/*
- \item settings can be splitted in different include *.inc files
- \item e.g. one include for CPU that is used by the SoC inc file,
-that is used by the Board .conf file
- \item the include files can be stored in different layers
-\end{itemize}
-\end{frame}
-
-\begin{frame}
- \frametitle{u-boot \& kernel}
-\begin{description}
- \item [UBOOT\_MACHINE] value passed on the make command line when building a
- U-Boot image
- \item [UBOOT\_MAKE\_TARGET] target called in the Makefile
- \item [UBOOT\_ENTRYPOINT] entry point for the U-Boot image
- \item [PREFERRED\_PROVIDER\_virtual/kernel] default kernel
- \item [KERNEL\_DEVICETREE] default devicetree
- \item [KERNEL\_IMAGETYPE] type of kernel to build for a device,
- defaults to 'zImage'
-\end{description}
-\end{frame}
-
-\begin{frame}
- \frametitle{hardware}
-\begin{description}
- \item[SOC\_FAMILY] groups together machines based upon the same family of SOC
- (System On Chip)
- \item [MACHINEOVERRIDES] lists overrides specific to the current machine.
- By default, this list includes the value of MACHINE. This can be used in
- recipes; e.g. MACHINEOVERRIDES =. "mymachine" and in the recipe
- SRC\_URI\_append\_mymachine = "file://mymachine-quirk.patch"
- \item [MACHINE\_FEATURES] list of hardware features the MACHINE supports
- \footnote{acpi, alsa, apm, bluetooth, ext2, irda, keyboard, pci, pcmcia,
- screen, serial, touchscreen, usbgadget, usbhost, wifi}
- \item [MACHINE\_EXTRA\_RRECOMMENDS] list of machine-specific packages to
- install as part of the image being built that are not essential for booting
- the machine. The image being built has no build dependencies on the packages
- in this list.
-\item [SERIAL\_CONSOLE] speed and device for the serial port used to attach
- the serial console. This variable is given to the kernel as the 'console'
- parameter. After booting occurs, getty is started on that port so remote
- login is possible.
- \end{description}
-\end{frame}
-
-\begin{frame}
-\frametitle{compiler settings}
-\begin{description}
-\item [DEFAULTTUNE] e.g. armv6hf or cortexa8hf-neon, x86-64, \dots
-\item [TUNE\_FEATURES] e.g. "armv7a vfp neon"
-\item [TUNEVALID] Descriptions, stored as flags, of valid tuning features
-\item [TUNECONFLICTS] list of conflicting features for a given feature
-\end{description}
-\end{frame}
-
-\begin{frame}
-\frametitle{software}
-\begin{description}
-\item [PREFERRED\_VERSION\_xserver-xorg] compatible xserver version
-\item [PREFERRED\_PROVIDER\_virtual/kernel] recommended kernel
-\item [IMAGE\_FSTYPES] formats for the rootfs, e.g. "ext3 tar.bz2"
-\item [IMAGE\_CLASSES] list of classes that all images should inherit, default
- is image\_types, e.g. to hook in own image generation code
-\end{description}
-\end{frame}
-
-\subsection{Images}
-\begin{frame}
-\frametitle{basics}
-\begin{itemize}
-\item images are constructed using the packages built earlier and put into the
- Package Feeds
-\item decisions of what to install on the image is based on the minimum
- defined set of required components in an image recipe
-\item this minimum set is then expanded based on dependencies to produce a
- package solution
-\item variety of formats (tar.bz2, ext2, ext3, jffs, \dots) are supported
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{build a predefined image}
-edit the local build configuration './conf/local.conf'
-\begin{verbatim}
-DL_DIR ?= "${TOPDIR}/../downloads"
-PACKAGE_CLASSES ?= "package_deb"
-EXTRA_IMAGE_FEATURES = "debug-tweaks eclipse-debug tools-profile tools-debug"
-\end{verbatim}
-and start the image build
-\begin{verbatim}
-% bitbake core-image-minimal
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{start the image}
-\begin{verbatim}
-% runqemu qemux86 core-image-minimal
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{inspect the build}
-\begin{verbatim}
-tmp/
-├── buildstats
-├── cache
-├── deploy
-├── log
-├── sstate-control
-├── stamps
-├── sysroots
-├── work
-└── work-shared
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{inspect the build}
-\begin{verbatim}
-tmp/buildstats/core-image-minimal-qemux86/201408271416/
-├── acl-2.2.52-r0
-├── acl-native-2.2.52-r0
-├── alsa-lib-native-1.0.27.2-r0
-├── attr-2.4.47-r0
-├── attr-native-2.4.47-r0
-├── autoconf-native-2.69-r11
-...
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{inspect the build}
-\begin{verbatim}
-tmp/buildstats/core-image-minimal-qemux86/201408271416/acl-2.2.52-r0/
-├── do_compile
-├── do_compile_ptest_base
-├── do_configure
-├── do_configure_ptest_base
-├── do_fetch
-├── do_install
-├── do_install_ptest_base
-├── do_package
-├── do_packagedata
-├── do_package_write_rpm
-├── do_patch
-├── do_populate_lic
-├── do_populate_sysroot
-└── do_unpack
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{inspect the build}
-\begin{verbatim}
-408271416/acl-2.2.52-r0/do_unpack
-Event: TaskStarted
-Started: 1409143746.65
-acl-2.2.52-r0: do_unpack: Elapsed time: 0.22 seconds
-CPU usage: 7.1%
-EndIOinProgress: 0
-EndReadsComp: 973062
-EndReadsMerged: 543875573
-EndSectRead: 36860156
-EndSectWrite: 1158945211
-EndTimeIO: 30104972
-EndTimeReads: 5545878
-EndTimeWrite: 1455538600
-...
-StartWritesComp: 12202741
-Status: PASSED
-Ended: 1409143746.87
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{inspect the build}
-\begin{verbatim}
-tmp/
-├── buildstats
-├── cache
-├── deploy
-├── log
-├── sstate-control
-├── stamps
-├── sysroots
-├── work
-└── work-shared
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{inspect the build}
-\begin{verbatim}
-tmp/deploy/
-├── images
-│   └── qemux86
-│   ├── bzImage -> bzImage--3.14+git0+09424...
-│   ├── core-image-minimal-qemux86-20140827121546.rootfs.ext3
-│   ├── core-image-minimal-qemux86-20140827121546.rootfs.manifest
-│   ├── core-image-minimal-qemux86-20140827121546.rootfs.tar.bz2
-│   ├── core-image-minimal-qemux86.ext3 -> core-image...
-│   ├── ...
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{inspect the build}
-\begin{verbatim}
-tmp/deploy/
-├── licenses
-│   ├── acl
-│ │ ├── COPYING
-│ │ ├── COPYING.LGPL
-│ │ ├── generic_GPLv2
-│ │ └── generic_LGPLv2.1
-│   ├── acl-native
-│   ├── alsa-lib-native
-│   ├── apr-native
-│   ├── ..
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{inspect the build}
-\begin{verbatim}
-tmp/deploy/
-└── rpm
- ├── all
- │ ├── packagegroup-core-standalone-sdk-target-1.0-r8.all.rpm
- │ ├── packagegroup-core-standalone-sdk-target-dbg-1.0-r8.all.rpm
- │ ├── packagegroup-core-standalone-sdk-target-dev-1.0-r8.all.rpm
- │ ├── repodata
- │ ├── run-postinsts-1.0-r9.all.rpm
- │ ├── ...
- ├── i586
- ├── qemux86
- └── x86_64_nativesdk
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{inspect the build}
-\begin{verbatim}
-├── % cat sstate-control/manifest-<pn>.<task>
-| /home/devel/poky/build/tmp/sysroots/x86_64-linux/usr/include/zconf.h
-| /home/devel/poky/build/tmp/sysroots/x86_64-linux/usr/include/zlib.h
-| /home/devel/poky/build/tmp/sysroots/x86_64-linux/usr/lib/libz.so.1
-\end{verbatim}
-\pause
-\begin{verbatim}
-├── sysroots # for the differnet architectures
-\end{verbatim}
-\pause
-\begin{verbatim}
-├── work # work directories / where the sources are built
-| % ls tmp/work/qemux86-poky-linux/linux-yocto/3.14+gitAUTOINC+0942...
-| deploy-linux-yocto linux packages-split
-| deploy-rpms linux-qemux86-standard-build pkgdata
-| image linux-yocto.spec pseudo
-| license-destdir package sysroot-destdir
-| temp
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{execute a specific task}
-\begin{verbatim}
-bitbake <recipe> -c <task>
-\end{verbatim}
-use
-\begin{verbatim}
-bitbake <recipe> -c listtasks
-\end{verbatim}
-to get a list of all available tasks
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{build dependencies}
-dependency graphs (sucks because they're really huge)
-\begin{verbatim}
-bitbake -g <target>
-\end{verbatim}
-\pause
-it is better to use the dependency explorer
-\begin{verbatim}
-bitbake -g -u depexp <target>
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{developer shell}
-\begin{verbatim}
-bitbake <recipe> -c devshell
-\end{verbatim}
-use ./configure and make to debug build issues
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{cleanup}
-\begin{verbatim}
-% bitbake -c clean core-image-minimal
-\end{verbatim}
-\pause
-\begin{itemize}
-\item doesn't cleanup dependencies
-\item doesn't remove deployed files
-\item triggers repackaging of all packages
-\end{itemize}
-
-\vspace{2em}
-To start from scratch backup the conf directory
-and remove everything from build. Otherwise
-sstate-cache will be used.
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{cleanup}
-\begin{verbatim}
-% bitbake -c clean xserver-nodm-init
-\end{verbatim}
-\pause
-\begin{itemize}
-\item doesn't cleanup dependencies
-\item removes deployed files
-\item removes downloaded files
-\item removes data from work and sysroot directory
-\item doesn't remove data from sstate
-\item triggers restoring files from sstate-cache
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{cleanup}
-\begin{verbatim}
-% bitbake -c cleanall xserver-nodm-init
-\end{verbatim}
-\pause
-\begin{itemize}
-\item doesn't cleanup dependencies
-\item removes deployed files
-\item removes downloaded files
-\item removes data from work and sysroot directory
-\item removes data from sstate-cache
-\item triggers fetch, compilation and packaging of the component
-\item BUT changes will not be in the image
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{force recompilation}
-\begin{verbatim}
-% bitbake -f -c compile xserver-nodm-init
-\end{verbatim}
-\begin{itemize}
-\item changes are not in the image
-\item and not in the package
-\end{itemize}
-\end{frame}
-
-\subsection{ADT}
-\begin{frame}
-\frametitle{Yocto ADT (Application Development Kit}
-Core Components
-\vspace{2em}
-\begin{itemize}
-\item System Root
-\item QEMU Emulator
-\item Cross Development Toolchain
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{Yocto ADT}
-Eclipse Plugin
-\vspace{2em}
-\begin{itemize}
-\item Roundtrip Application Development
-\item Toolchain/System Root Integration
-\item Emulated and Hardware Targets
-\item Application Templates
-\item On-target Debugging
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{Yocto ADT}
-Profiling Tools
-\vspace{2em}
-\begin{itemize}
-\item LatencyTOP
-\item PowerTOP
-\item OProfile
-\item Perf
-\item SystemTap
-\item Lttng-ust
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{build an external usable toolchain}
-\begin{verbatim}
-poky/build % bitbake meta-toolchain
-# OR to include headers and static version of all used libraries
-poky/build % bitbake -c populate_sdk core-image-minimal
-\end{verbatim}
-\vspace{2em}
-\pause
-to install the toolchain:
-\begin{verbatim}
-% ./tmp/deploy/sdk/poky-glibc-x86\_64-meta-toolchain-i586-toolchain-2.0.sh
-Enter target directory for SDK (default: /opt/poky/2.0): /home/devel/sdk
-\end{verbatim}
-\pause
-to use the toolchain:
-\begin{verbatim}
-source /home/devel/sdk/environment-setup-i586-poky-linux
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{export a nfsroot}
-\begin{verbatim}
-poky/build % runqemu-extract-sdk \
-tmp/deploy/images/qemux86/core-image-minimal-qemux86.tar.bz2 \
-~/sdk/core-image-minimal
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{build a internal usable toolchain}
-\begin{verbatim}
-poky/build % bitbake meta-ide-support
-\end{verbatim}
-\vspace{2em}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{build ADT installer script}
-\begin{verbatim}
-poky/build % bitbake adt-installer
-poky/build % cp tmp/deploy/sdk/adt_installer.tar.bz2 ~/
-poky/build % cd
-% cp tmp/deploy/sdk/adt_installer.tar.bz2 ~/
-% tar xjf adt_installer.tar.bz2
-% cd adt-installer
-\end{verbatim}
-\end{frame}
-
-\begin{frame}
-\frametitle{configure ADT installer}
-general configuration
-\begin{description}
-\item[YOCTOADT\_REPO] http repo with rootfs images and ipkg packages.
- Needs to match the layout from 'http://adtrepo.yoctoproject.org'
-\item[YOCTOADT\_TARGETS] machine target architectures to setup cross SDKs
-\item[YOCTOADT\_QEMU] install qemu? \[Y/N\]
-\item[YOCTOADT\_NFS\_UTIL] needed for eclipse \[Y/N\]
-\end{description}
-\end{frame}
-
-\begin{frame}
-\frametitle{configure ADT installer \#2}
-configuration for each supported BSP
-\begin{description}
-\item[YOCTOADT\_TARGET\_MACHINE\_<arch>] qemu that should be used, e.g. qemux86
-\item[YOCTOADT\_ROOTFS\_<arch>] rfs images that should be used, e.g. sato-sdk
-\item[YOCTOADT\_TARGET\_SYSROOT\_<arch>] needs to match above variable
-\item[YOCTOADT\_TARGET\_SYSROOT\_LOC\_<arch>] path where the sysroot will be
- stored
-\end{description}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{run ADT installer}
-\begin{verbatim}
-adt-installer % ./adt_installer
-Please enter the install location (default: /opt/poky/2.0): <return>
-...
-[ADT_INST] Please enter your selections here:
-S<return>
-...
-\end{verbatim}
-\pause
-to use the ADT, the environment needs to be sourced:
-\begin{verbatim}
-% . /opt/poky/2.0/environment-setup-i586-poky-linux
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{ADT \& Eclipse}
-install and start eclipse:
-\begin{verbatim}
-% wget http://ftp.fau.de/eclipse/technology/epp/downloads/release/kepler/R/eclipse-cpp-kepler-R-linux-gtk.tar.gz
-% tar xzf eclipse-*.tar.gz
-% ./eclipse/eclipse
-\end{verbatim}
-\pause
-add the yocto update-site (Help, Install New Software, Add\dots)
-\begin{verbatim}
-http://downloads.yoctoproject.org/releases/eclipse-plugin/1.9/kepler/
-\end{verbatim}
-select and install all components, by clicking
-
-'Next, Next, Accept Licenses, Finish, Accept installing from insecure source,
-and accept to restart eclipse'
-\pause
-goto 'Help, Install New Software, Add\dots' again and
-select 'Kepler' as update site and select 'Linux Tools' and
-'Mobile and Device Development'; select 'Next' until you can
-'Finish' and quit eclipse
-\end{frame}
-
-\begin{frame}
-\frametitle{configure Eclipse}
-\begin{itemize}
- \item select 'Window, Preferences, Yocto Project ADT'
- \item select 'Standalone pre-built toolchain'
- \item set Toolchain Root Location '/home/devel/sdk'
- \item set Sysroot Location '/home/devel/sdk/core-image-minimal'
- \item use 'native' as 'Target Options'
- \item 'Apply' the Settings and close the dialog with 'OK'
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{Hello World example}
-\begin{itemize}
- \item select 'File, New, Project\dots'
- \item select 'C/C++, C Project'
- \item select 'Yocto Project ADT Autotools Project, Hello World ANSI C Project'
- \item enter a 'Project name' and select 'Next'
- \item enter 'Basic settings' and select 'Finish'
- \item if opened, close the 'Welcome' window
- \item right click on the root project folder and select 'Reconfigure Project'
- \item right click on the root project folder and select 'Build Project'
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{remote execution and debugging}
-\begin{itemize}
- \item switch to 'Remote System Explorer' perspective
- \item create a new 'TCF' connection
- \item switch to 'C/C++' perspective and select 'Run / Debug Configurations'
- \item select the preconfigured 'C/C++ Application' and select the correct
- 'Connection'
- \item set 'Remote Absolute File Path' to sth. like '/usr/bin/<yourapp>'
- \item select 'Apply', 'Debug' - Next time you can use this preconfigured debug
- configuration
-\end{itemize}
-\end{frame}
+\input{yocto-workflow}
+\input{yocto-imgbuild1}
+\input{yocto-imgbuild-predefined}
+\input{yocto-imgbuild2}
+\input{yocto-adt}
\input{tailpres}
diff --git a/distribution/yocto-basic/yocto-adt.tex b/distribution/yocto-basic/yocto-adt.tex
new file mode 100644
index 0000000..17d0733
--- /dev/null
+++ b/distribution/yocto-basic/yocto-adt.tex
@@ -0,0 +1,193 @@
+\subsection{ADT}
+\begin{frame}
+\frametitle{Yocto ADT (Application Development Kit}
+Core Components
+\vspace{2em}
+\begin{itemize}
+\item System Root
+\item QEMU Emulator
+\item Cross Development Toolchain
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Yocto ADT}
+Eclipse Plugin
+\vspace{2em}
+\begin{itemize}
+\item Roundtrip Application Development
+\item Toolchain/System Root Integration
+\item Emulated and Hardware Targets
+\item Application Templates
+\item On-target Debugging
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Yocto ADT}
+Profiling Tools
+\vspace{2em}
+\begin{itemize}
+\item LatencyTOP
+\item PowerTOP
+\item OProfile
+\item Perf
+\item SystemTap
+\item Lttng-ust
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{build an external usable toolchain}
+\begin{verbatim}
+poky/build % bitbake meta-toolchain
+# OR to include headers and static version of all used libraries
+poky/build % bitbake -c populate_sdk core-image-minimal
+\end{verbatim}
+\vspace{2em}
+\pause
+to install the toolchain:
+\begin{verbatim}
+% ./tmp/deploy/sdk/poky-glibc-x86\_64-meta-toolchain-i586-toolchain-2.0.sh
+Enter target directory for SDK (default: /opt/poky/2.0): /home/devel/sdk
+\end{verbatim}
+\pause
+to use the toolchain:
+\begin{verbatim}
+source /home/devel/sdk/environment-setup-i586-poky-linux
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{export a nfsroot}
+\begin{verbatim}
+poky/build % runqemu-extract-sdk \
+tmp/deploy/images/qemux86/core-image-minimal-qemux86.tar.bz2 \
+~/sdk/core-image-minimal
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{build a internal usable toolchain}
+\begin{verbatim}
+poky/build % bitbake meta-ide-support
+\end{verbatim}
+\vspace{2em}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{build ADT installer script}
+\begin{verbatim}
+poky/build % bitbake adt-installer
+poky/build % cp tmp/deploy/sdk/adt_installer.tar.bz2 ~/
+poky/build % cd
+% cp tmp/deploy/sdk/adt_installer.tar.bz2 ~/
+% tar xjf adt_installer.tar.bz2
+% cd adt-installer
+\end{verbatim}
+\end{frame}
+
+\begin{frame}
+\frametitle{configure ADT installer}
+general configuration
+\begin{description}
+\item[YOCTOADT\_REPO] http repo with rootfs images and ipkg packages.
+ Needs to match the layout from 'http://adtrepo.yoctoproject.org'
+\item[YOCTOADT\_TARGETS] machine target architectures to setup cross SDKs
+\item[YOCTOADT\_QEMU] install qemu? \[Y/N\]
+\item[YOCTOADT\_NFS\_UTIL] needed for eclipse \[Y/N\]
+\end{description}
+\end{frame}
+
+\begin{frame}
+\frametitle{configure ADT installer \#2}
+configuration for each supported BSP
+\begin{description}
+\item[YOCTOADT\_TARGET\_MACHINE\_<arch>] qemu that should be used, e.g. qemux86
+\item[YOCTOADT\_ROOTFS\_<arch>] rfs images that should be used, e.g. sato-sdk
+\item[YOCTOADT\_TARGET\_SYSROOT\_<arch>] needs to match above variable
+\item[YOCTOADT\_TARGET\_SYSROOT\_LOC\_<arch>] path where the sysroot will be
+ stored
+\end{description}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{run ADT installer}
+\begin{verbatim}
+adt-installer % ./adt_installer
+Please enter the install location (default: /opt/poky/2.0): <return>
+...
+[ADT_INST] Please enter your selections here:
+S<return>
+...
+\end{verbatim}
+\pause
+to use the ADT, the environment needs to be sourced:
+\begin{verbatim}
+% . /opt/poky/2.0/environment-setup-i586-poky-linux
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{ADT \& Eclipse}
+install and start eclipse:
+\begin{verbatim}
+% wget http://ftp.fau.de/eclipse/technology/epp/downloads/release/kepler/R/eclipse-cpp-kepler-R-linux-gtk.tar.gz
+% tar xzf eclipse-*.tar.gz
+% ./eclipse/eclipse
+\end{verbatim}
+\pause
+add the yocto update-site (Help, Install New Software, Add\dots)
+\begin{verbatim}
+http://downloads.yoctoproject.org/releases/eclipse-plugin/1.9/kepler/
+\end{verbatim}
+select and install all components, by clicking
+
+'Next, Next, Accept Licenses, Finish, Accept installing from insecure source,
+and accept to restart eclipse'
+\pause
+goto 'Help, Install New Software, Add\dots' again and
+select 'Kepler' as update site and select 'Linux Tools' and
+'Mobile and Device Development'; select 'Next' until you can
+'Finish' and quit eclipse
+\end{frame}
+
+\begin{frame}
+\frametitle{configure Eclipse}
+\begin{itemize}
+ \item select 'Window, Preferences, Yocto Project ADT'
+ \item select 'Standalone pre-built toolchain'
+ \item set Toolchain Root Location '/home/devel/sdk'
+ \item set Sysroot Location '/home/devel/sdk/core-image-minimal'
+ \item use 'native' as 'Target Options'
+ \item 'Apply' the Settings and close the dialog with 'OK'
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Hello World example}
+\begin{itemize}
+ \item select 'File, New, Project\dots'
+ \item select 'C/C++, C Project'
+ \item select 'Yocto Project ADT Autotools Project, Hello World ANSI C Project'
+ \item enter a 'Project name' and select 'Next'
+ \item enter 'Basic settings' and select 'Finish'
+ \item if opened, close the 'Welcome' window
+ \item right click on the root project folder and select 'Reconfigure Project'
+ \item right click on the root project folder and select 'Build Project'
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{remote execution and debugging}
+\begin{itemize}
+ \item switch to 'Remote System Explorer' perspective
+ \item create a new 'TCF' connection
+ \item switch to 'C/C++' perspective and select 'Run / Debug Configurations'
+ \item select the preconfigured 'C/C++ Application' and select the correct
+ 'Connection'
+ \item set 'Remote Absolute File Path' to sth. like '/usr/bin/<yourapp>'
+ \item select 'Apply', 'Debug' - Next time you can use this preconfigured debug
+ configuration
+\end{itemize}
+\end{frame}
diff --git a/distribution/yocto-basic/yocto-imgbuild-predefined.tex b/distribution/yocto-basic/yocto-imgbuild-predefined.tex
new file mode 100644
index 0000000..fb74586
--- /dev/null
+++ b/distribution/yocto-basic/yocto-imgbuild-predefined.tex
@@ -0,0 +1,13 @@
+\begin{frame}[fragile]
+\frametitle{build a predefined image}
+edit the local build configuration './conf/local.conf'
+\begin{verbatim}
+DL_DIR ?= "${TOPDIR}/../downloads"
+PACKAGE_CLASSES ?= "package_deb"
+EXTRA_IMAGE_FEATURES = "debug-tweaks eclipse-debug"
+\end{verbatim}
+and start the image build
+\begin{verbatim}
+% bitbake core-image-minimal
+\end{verbatim}
+\end{frame}
diff --git a/distribution/yocto-basic/yocto-imgbuild1.tex b/distribution/yocto-basic/yocto-imgbuild1.tex
new file mode 100644
index 0000000..7437ab7
--- /dev/null
+++ b/distribution/yocto-basic/yocto-imgbuild1.tex
@@ -0,0 +1,13 @@
+\subsection{Images}
+\begin{frame}
+\frametitle{basics}
+\begin{itemize}
+\item images are constructed using the packages built earlier and put into the
+ Package Feeds
+\item decisions of what to install on the image is based on the minimum
+ defined set of required components in an image recipe
+\item this minimum set is then expanded based on dependencies to produce a
+ package solution
+\item variety of formats (tar.bz2, ext2, ext3, jffs, \dots) are supported
+\end{itemize}
+\end{frame}
diff --git a/distribution/yocto-basic/yocto-imgbuild2.tex b/distribution/yocto-basic/yocto-imgbuild2.tex
new file mode 100644
index 0000000..b6a04bb
--- /dev/null
+++ b/distribution/yocto-basic/yocto-imgbuild2.tex
@@ -0,0 +1,265 @@
+\begin{frame}[fragile]
+\frametitle{start the image}
+\begin{verbatim}
+% runqemu qemux86 core-image-minimal
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{inspect the build}
+\begin{verbatim}
+tmp/
+├── buildstats
+├── cache
+├── deploy
+├── log
+├── sstate-control
+├── stamps
+├── sysroots
+├── work
+└── work-shared
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{inspect the build}
+\begin{verbatim}
+tmp/buildstats/core-image-minimal-qemux86/201408271416/
+├── acl-2.2.52-r0
+├── acl-native-2.2.52-r0
+├── alsa-lib-native-1.0.27.2-r0
+├── attr-2.4.47-r0
+├── attr-native-2.4.47-r0
+├── autoconf-native-2.69-r11
+...
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{inspect the build}
+\begin{verbatim}
+tmp/buildstats/core-image-minimal-qemux86/201408271416/acl-2.2.52-r0/
+├── do_compile
+├── do_compile_ptest_base
+├── do_configure
+├── do_configure_ptest_base
+├── do_fetch
+├── do_install
+├── do_install_ptest_base
+├── do_package
+├── do_packagedata
+├── do_package_write_rpm
+├── do_patch
+├── do_populate_lic
+├── do_populate_sysroot
+└── do_unpack
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{inspect the build}
+\begin{verbatim}
+408271416/acl-2.2.52-r0/do_unpack
+Event: TaskStarted
+Started: 1409143746.65
+acl-2.2.52-r0: do_unpack: Elapsed time: 0.22 seconds
+CPU usage: 7.1%
+EndIOinProgress: 0
+EndReadsComp: 973062
+EndReadsMerged: 543875573
+EndSectRead: 36860156
+EndSectWrite: 1158945211
+EndTimeIO: 30104972
+EndTimeReads: 5545878
+EndTimeWrite: 1455538600
+...
+StartWritesComp: 12202741
+Status: PASSED
+Ended: 1409143746.87
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{inspect the build}
+\begin{verbatim}
+tmp/
+├── buildstats
+├── cache
+├── deploy
+├── log
+├── sstate-control
+├── stamps
+├── sysroots
+├── work
+└── work-shared
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{inspect the build}
+\begin{verbatim}
+tmp/deploy/
+├── images
+│   └── qemux86
+│   ├── bzImage -> bzImage--3.14+git0+09424...
+│   ├── core-image-minimal-qemux86-20140827121546.rootfs.ext3
+│   ├── core-image-minimal-qemux86-20140827121546.rootfs.manifest
+│   ├── core-image-minimal-qemux86-20140827121546.rootfs.tar.bz2
+│   ├── core-image-minimal-qemux86.ext3 -> core-image...
+│   ├── ...
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{inspect the build}
+\begin{verbatim}
+tmp/deploy/
+├── licenses
+│   ├── acl
+│ │ ├── COPYING
+│ │ ├── COPYING.LGPL
+│ │ ├── generic_GPLv2
+│ │ └── generic_LGPLv2.1
+│   ├── acl-native
+│   ├── alsa-lib-native
+│   ├── apr-native
+│   ├── ..
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{inspect the build}
+\begin{verbatim}
+tmp/deploy/
+└── rpm
+ ├── all
+ │ ├── packagegroup-core-standalone-sdk-target-1.0-r8.all.rpm
+ │ ├── packagegroup-core-standalone-sdk-target-dbg-1.0-r8.all.rpm
+ │ ├── packagegroup-core-standalone-sdk-target-dev-1.0-r8.all.rpm
+ │ ├── repodata
+ │ ├── run-postinsts-1.0-r9.all.rpm
+ │ ├── ...
+ ├── i586
+ ├── qemux86
+ └── x86_64_nativesdk
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{inspect the build}
+\begin{verbatim}
+├── % cat sstate-control/manifest-<pn>.<task>
+| /home/devel/poky/build/tmp/sysroots/x86_64-linux/usr/include/zconf.h
+| /home/devel/poky/build/tmp/sysroots/x86_64-linux/usr/include/zlib.h
+| /home/devel/poky/build/tmp/sysroots/x86_64-linux/usr/lib/libz.so.1
+\end{verbatim}
+\pause
+\begin{verbatim}
+├── sysroots # for the differnet architectures
+\end{verbatim}
+\pause
+\begin{verbatim}
+├── work # work directories / where the sources are built
+| % ls tmp/work/qemux86-poky-linux/linux-yocto/3.14+gitAUTOINC+0942...
+| deploy-linux-yocto linux packages-split
+| deploy-rpms linux-qemux86-standard-build pkgdata
+| image linux-yocto.spec pseudo
+| license-destdir package sysroot-destdir
+| temp
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{execute a specific task}
+\begin{verbatim}
+bitbake <recipe> -c <task>
+\end{verbatim}
+use
+\begin{verbatim}
+bitbake <recipe> -c listtasks
+\end{verbatim}
+to get a list of all available tasks
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{build dependencies}
+dependency graphs (sucks because they're really huge)
+\begin{verbatim}
+bitbake -g <target>
+\end{verbatim}
+\pause
+it is better to use the dependency explorer
+\begin{verbatim}
+bitbake -g -u depexp <target>
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{developer shell}
+\begin{verbatim}
+bitbake <recipe> -c devshell
+\end{verbatim}
+use ./configure and make to debug build issues
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{cleanup}
+\begin{verbatim}
+% bitbake -c clean core-image-minimal
+\end{verbatim}
+\pause
+\begin{itemize}
+\item doesn't cleanup dependencies
+\item doesn't remove deployed files
+\item triggers repackaging of all packages
+\end{itemize}
+
+\vspace{2em}
+To start from scratch backup the conf directory
+and remove everything from build. Otherwise
+sstate-cache will be used.
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{cleanup}
+\begin{verbatim}
+% bitbake -c clean xserver-nodm-init
+\end{verbatim}
+\pause
+\begin{itemize}
+\item doesn't cleanup dependencies
+\item removes deployed files
+\item removes downloaded files
+\item removes data from work and sysroot directory
+\item doesn't remove data from sstate
+\item triggers restoring files from sstate-cache
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{cleanup}
+\begin{verbatim}
+% bitbake -c cleanall xserver-nodm-init
+\end{verbatim}
+\pause
+\begin{itemize}
+\item doesn't cleanup dependencies
+\item removes deployed files
+\item removes downloaded files
+\item removes data from work and sysroot directory
+\item removes data from sstate-cache
+\item triggers fetch, compilation and packaging of the component
+\item BUT changes will not be in the image
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{force recompilation}
+\begin{verbatim}
+% bitbake -f -c compile xserver-nodm-init
+\end{verbatim}
+\begin{itemize}
+\item changes are not in the image
+\item and not in the package
+\end{itemize}
+\end{frame}
diff --git a/distribution/yocto-basic/yocto-workflow.tex b/distribution/yocto-basic/yocto-workflow.tex
new file mode 100644
index 0000000..3810acb
--- /dev/null
+++ b/distribution/yocto-basic/yocto-workflow.tex
@@ -0,0 +1,681 @@
+\subsection{Workflow}
+\begin{frame}[fragile]
+\includegraphics[width=\textwidth]{images/yocto-workflow}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{retrieve poky}
+\begin{verbatim}
+% git clone http://git.yoctoproject.org/git/poky
+% cd poky
+% git checkout origin/krogoth -b krogoth -t
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{prepare environment}
+\begin{itemize}
+\item bitbake is typically not installed into regular search paths
+\item the environment of the bash is modified to find the commands
+\item non-bash shells are not supported
+\end{itemize}
+\begin{verbatim}
+% . ./oe-init-buildenv <builddir>
+\end{verbatim}
+\begin{itemize}
+\item is used to modify the environment and change the CWD to <builddir>
+\item ./oe-init-buildenv-memres is used to keep the bitbake-server running
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{classes}
+\begin{itemize}
+\item denoted by the .bbclass extension
+\item base.bbclass is automatically included by all other classes and recipes.
+\item common tasks and there execution order is defined in base.bbclass
+\item tasks can be added, overridden, extended or used by other classes
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{recipes}
+\begin{itemize}
+\item a .bb file inherits classes and populates them with data
+\item bitbake is used to schedule the tasks defined in a recipe
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{layers}
+\begin{itemize}
+\item a folder containing recipes, configs and classes
+\item used to isolate different types of customizations from each other
+\item e.g. own layer for machine specific stuff, one for own applications
+\item extend, add, replace or modify recipes
+\item add or replace class files
+\item 'conf/layer.conf' is used to configure the layer
+\item are added and ordered via BBLAYERS variable in build/conf/bblayers.conf
+\item 'bitbake-layers show-layers' is used to show used layers
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{layers \#2}
+layers should be grouped by functionality
+\begin{itemize}
+\item custom toolchains (compilers, debuggers, profiling tools)
+\item distribution specifications (i.e. meta-yocto)
+\item BSP/machine settings (i.e. meta-yocto-bsp)
+\item functional areas (selinux, networking, etc)
+\item project specific changes
+\item a layer is typically organized as a git repository
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{directory layout}
+ \begin{verbatim}
+poky
+├── bitbake
+├── documentation
+├── meta
+├── meta-selftest
+├── meta-skeleton
+├── meta-yocto
+├── meta-yocto-bsp
+└── scripts
+\end{verbatim}
+\end{frame}
+
+\subsection{Variable assignments}
+\begin{frame}
+\frametitle{available operators}
+\begin{itemize}
+\item =
+\item ?=
+\item ??=
+\item :=
+\item += / =+
+\item .= / =.
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{variable assignment with =}
+\begin{verbatim}
+VAR = "value"
+\end{verbatim}
+\pause
+\begin{itemize}
+ \item normal assignment
+ \item values need to be surrounded by double quotes
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{early default assignment with ?=}
+\begin{verbatim}
+VAR ?= "1"
+VAR ?= "2"
+\end{verbatim}
+\pause
+\begin{itemize}
+ \item VAR is set to "1" in this example
+ \item if there are multiple assignments using ?= the first one is used
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{late default assignment with ??=}
+\begin{verbatim}
+VAR ??= "1"
+VAR ??= "2"
+\end{verbatim}
+\pause
+\begin{itemize}
+ \item VAR is set to "2" in this example
+ \item if there are multiple assignments using ??= the last one is used
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{assignment priorities \#1}
+\begin{verbatim}
+VAR_A ??= "12"
+VAR_A ?= "34"
+
+VAR_B ?= "12"
+VAR_B ??= "34"
+\end{verbatim}
+\pause
+\begin{itemize}
+ \item VAR\_A contains "34"
+ \item VAR\_B contains "12"
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{assignment priorities \#2}
+\begin{verbatim}
+VAR ?= "12"
+VAR ??= "34"
+VAR = "56"
+VAR ?= "78"
+VAR ??= "78"
+\end{verbatim}
+\pause
+\begin{itemize}
+ \item VAR contains "56"
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{immediate variable expansion with :=}
+\begin{verbatim}
+VAR_A = "11"
+VAR_B = "B:${VAR_A}"
+VAR_A = "22"
+VAR_C := "C:${VAR_A}"
+VAR_A = "33"
+echo ${VAR_A} ${VAR_B} ${VAR_C}
+\end{verbatim}
+\pause
+\begin{itemize}
+ \item 33 B:33 C:22
+ \item the content of VAR\_C is expanded immediately on assignment
+ \item the content of VAR\_B is expanded on use
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{append (+=) or prepend (=+) a variable}
+\begin{verbatim}
+VAR_A = "12"
+VAR_A += "34"
+VAR_B = "56"
+VAR_B =+ "78"
+\end{verbatim}
+\pause
+\begin{itemize}
+ \item VAR\_A contains "12 34"
+ \item VAR\_B contains "78 56"
+ \item there are spaces between the appended values
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{append (.=) or prepend (=.) a variable}
+\begin{verbatim}
+VAR_A = "12"
+VAR_A .= "34"
+VAR_B = "56"
+VAR_B =. "78"
+\end{verbatim}
+\pause
+\begin{itemize}
+ \item VAR\_A contains "1234"
+ \item VAR\_B contains "7856"
+ \item there are no spaces between the appended values
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{assignment debugging}
+\begin{verbatim}
+$ echo 'FOO ??= "123"' >> conf/local.conf
+$ echo 'FOO ?= "456"' >> conf/local.conf
+
+$ bitbake -e | grep FOO
+# $FOO [2 operations]
+FOO="456"
+\end{verbatim}
+\end{frame}
+
+\subsection{Recipes}
+\begin{frame}
+\frametitle{typical progressing}
+\begin{enumerate}
+\item fetch source files
+\item extract sources
+\item patch sources
+\item configure sources
+\item compilation
+\item packaging
+\end{enumerate}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{skeleton}
+\begin{verbatim}
+SUMMARY = "short description of the package (1 line)"
+DESCRIPTION = "a long version of the description of the package"
+HOMEPAGE = "http://url-of-the-os-project.org"
+LICENSE = "LGPLv2.1"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=xxxx \
+ file://licfile1.txt;beginline=5;endline=29;md5=yyyy \
+ file://licfile2.txt;endline=50;md5=zzzz
+
+SRC_URI = "file://mysw-1.0.tbz"
+SRC_URI[md5sum] = "xxx"
+SRC_URI[sha256sum] = "yyy"
+
+S = "${WORKDIR}/${PN}-${PV}"
+
+inherit autotools
+\end{verbatim}
+\end{frame}
+
+\begin{frame}
+\frametitle{syntax}
+a recipe normaly consists of a human readable description of the project and
+references to the open-source project and:
+\begin{description}
+\item[LIC*] reference to the used licenses
+\item[SRC\_URI] list of source files (local or remote)
+\item[PV] package-version (retrived from filename name\_version.bb)
+\item[PN] package-name (retrived from filename name\_version.bb)
+\item[P] ${PN}-${PV}
+\item[S] The location in the Build Directory where unpacked recipe source code resides.
+\item[inherit] use a class (or multiple classes)
+\end{description}
+\end{frame}
+
+\begin{frame}
+\frametitle{the LICENSE variable}
+list of source licenses for the recipe:
+\begin{itemize}
+\item do not use spaces within individual license names
+\item use spaces between license names
+\item separate license names using | (pipe) when there is a choice between
+ licenses
+\item separate license names using \& (AND) if parts of the code are licensed
+ with different licenses
+\item for standard licenses, use the names of the files in
+ meta/files/common-licenses/ or the SPDXLICENSEMAP
+ \footnote{aps commonly used license names to their SPDX counterparts found in
+ meta/files/common-licenses/. For the default SPDXLICENSEMAP mappings, see the
+ meta/conf/licenses.conf file}
+ flag names defined in meta/conf/licenses.conf
+\item use "CLOSED" for closed source software
+ (LIC\_FILES\_CHKSUM is not needed to be defined then)
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{LIC\_FILE\_CHKSUM variable}
+Checksums of the license text in the recipe source code.
+\vspace{2em}
+
+
+This variable tracks changes in license text of the source code files.
+If the license text is changed, it will trigger a build failure,
+which gives the developer an opportunity to review any license change.
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{SRC\_URI variable}
+\begin{verbatim}
+SRC_URI = "<protocol>://<host>/<path>;<OptionA=xxx>;<OptionB=xxx>"
+\end{verbatim}
+\pause
+multiple urls can be set in a SRC\_URI variable:
+\begin{verbatim}
+SRC_URI = "<url1>;name=url1 <url2>;name=url2"
+\end{verbatim}
+for each url a md5 and sha256 checksum needs to be added:
+\begin{verbatim}
+SRC_URI[url1.md5sum] = xxx
+SRC_URI[url1.sha256sum] = yyy
+SRC_URI[url2.md5sum] = zzz
+SRC_URI[url2.sha256sum] = xyz
+\end{verbatim}
+To get these checksums don't specify them and run a build and copy them from
+the error message. (Don't use md5sum or sha256sum on the commandline; they
+produce a different checksum.)
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{local SRC\_URI (file://)}
+The path is relative to the FILESPATH variable. To modify the FILESPATH use
+FILESEXTRAPATH.
+\vspace{2em}
+
+
+Additional files are searched in subdirectories of the directory in which the
+recipe file (.bb) or append file (.bbappend) resides.
+
+To find out which paths can be used, it is best practice to use
+\begin{verbatim}
+$ bitbake -e <recipe-name> | grep FILESPATH
+\end{verbatim}
+\end{frame}
+
+\begin{frame}
+\frametitle{remote SRC\_URI}
+\begin{description}
+\item[bzr://]Bazaar revision control repository
+\item[git://]Git revision control repository
+\item[osc://]OSC (OpenSUSE Build service) revision control repository
+\item[ccrc://]ClearCase repository
+\item[http://]Internet using http
+\item[https://]Internet using https
+\item[ftp://]Internet using ftp
+\item[cvs://]CVS revision control repository
+\item[hg://]Mercurial (hg) revision control repository
+\item[p4://]Perforce (p4) revision control repository
+\item[ssh://]secure shell
+\item[svn://]Subversion (svn) revision control repository
+\end{description}
+\end{frame}
+
+\begin{frame}
+\frametitle{SRC\_URI patch options}
+\begin{itemize}
+ \item patches are applied in the order they appear in SRC\_URI
+ \item quilt is used to apply the patches
+\end{itemize}
+\begin{description}
+\item[apply=no] apply patch or not; default is yes
+\item[striplevel=0] striplevel to use when applying a patch; default is 1
+\item[patchdir=\${S}/foo] directory in which the patch should be applied;
+ default is \${S}
+\end{description}
+\end{frame}
+
+\begin{frame}
+\frametitle{SRC\_URI patch options \#2}
+\begin{description}
+\item[mindate] apply patch only if SRCDATE
+ \footnote{The date of the source code used to build the package.
+ This variable applies only if the source was fetched from a
+ Source Code Manager (SCM)} is equal to or greater than mindate
+\item[maxdate] apply patch only if SRCDATE is not later than maxdate
+\item[minrev] apply the patch only if SRCREV
+ \footnote{The revision of the source code used to build the package.
+ This variable applies to Subversion, Git, Mercurial and Bazaar only}
+ is equal to or greater than minrev
+\item[maxrev] apply patch only if SRCREV is not later than maxrev
+\item[rev] apply patch only if SRCREV is equal to rev
+\item[notrev] apply patch only if SRCREV is not equal to rev
+\end{description}
+\end{frame}
+
+\begin{frame}
+\frametitle{SRC\_URI options}
+\begin{description}
+\item[unpack=no] controls if an archive is unpacked; default is yes
+\item[subdir=bla] places the file (or extracts its contents) into the
+ specified subdirectory of WORKDIR
+ \footnote{${TMPDIR}/work/${MULTIMACH\_TARGET\_SYS}/${PN}/${EXTENDPE}${PV}-${PR};
+ eg. poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0}
+\item[name=mydl] name to be used for association with SRC\_URI checksums when
+ you have more than one file specified in SRC\_URI
+\item[downloadfilename=my.tar.gz] the filename used when storing the downloaded file
+\end{description}
+\end{frame}
+
+\begin{frame}
+\frametitle{inherit}
+inherit is used to use the functionality defined in a .bblcass file. Popular
+predefined classes are:
+\begin{itemize}
+\item autotools
+\item cmake
+\item cpan
+\item distutils / setuptools
+\item kernel / module
+\item mime
+\item qmake / qmake2
+\item qt4e / qt4x11
+\item scons
+\item systemd
+\item u-boot
+\item vala
+\end{itemize}
+\end{frame}
+
+\subsection{Append files}
+\begin{frame}
+\frametitle{basics}
+\begin{itemize}
+ \item are typically used to modify or extend the functionality of the base
+ recipe
+ \item it's recommended by the Yocto project to use bbappend files instead
+ of copying and modyfiing a recipe in an own layer
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{naming}
+an append file must be named after the base package:
+\begin{verbatim}
+<base-pn>_<base-pv>.bbappend
+\end{verbatim}
+\end{frame}
+
+\subsection{Classes}
+\begin{frame}
+\frametitle{basics}
+\begin{itemize}
+ \item python can be used to write functions
+ \item e.g. write your own image generation class
+\end{itemize}
+\end{frame}
+
+\subsection{Tasks}
+\begin{frame}
+\frametitle{basics}
+\begin{itemize}
+ \item are defined and ordered in classes
+ \item can be overriden by classes and recipes
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{download \& patch}
+\begin{description}
+\item [do\_checkuri] validates the SRC\_URI value
+\item [do\_checkuriall] validates the SRC\_URI value for all recipes required
+ to build a target"
+\item [do\_fetch] fetches the source code
+\item [do\_fetchall] fetches all remote sources required to build a target
+\item [do\_unpack] unpacks the source code into a working directory
+\item [do\_patch] locates patch files and applies them to the source code
+\end{description}
+\end{frame}
+
+\begin{frame}
+ \frametitle{configure \& compile}
+\begin{description}
+\item [do\_configure] configures the source by enabling and disabling any
+ build-time and configuration options for the software being built
+\item [do\_configure\_ptest\_base] configures the runtime test suite included
+ in the software being built
+\item [do\_compile] compiles the source in the compilation directory
+\item [do\_install] copies files from the compilation directory to a holding
+ area
+\item [do\_populate\_sysroot] copies a subset of files installed by
+ do\_install into the sysroot in order to make them available to other
+ recipes
+\end{description}
+\end{frame}
+
+\begin{frame}
+\frametitle{packaging}
+\begin{description}
+\item [do\_packagedata] creates package metadata used by the build system to
+ generate the final packages
+\item [do\_package] analyzes the content of the holding area and splits it
+ into subsets based on available packages and files
+\item [do\_package\_write] creates the actual packages and places them in the
+ Package Feed area
+\item [do\_package\_write\_deb] creates the actual DEB packages and places
+ them in the Package Feed area
+\item [do\_package\_write\_ipk] creates the actual IPK packages and places
+ them in the Package Feed area
+\item [do\_package\_write\_rpm] creates the actual RPM packages and places
+ them in the Package Feed area
+\item [do\_package\_write\_tar] creates tar archives for packages and places
+ them in the Package Feed area
+\item [do\_package\_index] creates or updates the index in the Package Feed
+ area
+\end{description}
+\end{frame}
+
+\begin{frame}
+ \frametitle{deploy}
+\begin{description}
+\item [do\_rootfs] creates the root filesystem (file and directory structure)
+ for an image
+\item [do\_vmdkimg] creates a .vmdk image for use with VMware and compatible
+ virtual machine hosts"
+\item [do\_deploy] writes deployable output files to the deploy directory
+\item [do\_populate\_sdk] creates the file and directory structure for an
+ installable SDK
+\end{description}
+\end{frame}
+
+\begin{frame}
+\frametitle{cleanup}
+\begin{description}
+\item [do\_clean] removes all output files for a target
+\item [do\_cleanall] removes all output files, shared state cache, and
+ downloaded source files for a target
+\item [do\_cleansstate] removes all output files and shared state cache for a
+ target
+\item [do\_rm\_work] removes work files after the build system has finished
+ with them
+\item [do\_rm\_work\_all] top-level task for removing work files after the
+ build system has finished with them
+\end{description}
+\end{frame}
+
+\begin{frame}
+\frametitle{kernel}
+\begin{description}
+\item [do\_kernel\_checkout] checks out source/meta branches for a linux-yocto
+ style kernel
+\item [do\_validate\_branches] ensures that the source/meta branches are on
+ the locations specified by their SRCREV values for a linux-yocto style
+ kernel"
+\item [do\_kernel\_configme] assembles the kernel configuration for a
+ linux-yocto style kernel
+\item [do\_menuconfig] runs 'make menuconfig' for the kernel
+\item [do\_diffconfig] compares the old and new config files after running
+ do\_menuconfig for the kernel
+\item [do\_savedefconfig] creates a minimal Linux kernel configuration file
+\item [do\_kernel\_configcheck] validates the kernel configuration for a
+ linux-yocto style kernel
+\item [do\_sizecheck] checks the size of the kernel image against
+ KERNEL\_IMAGE\_MAXSIZE (if set)
+\end{description}
+\end{frame}
+
+\begin{frame}
+\frametitle{kernel}
+\begin{description}
+\item [do\_compile\_kernelmodules] compiles loadable modules for the Linux
+ kernel
+\item [do\_strip] strips unneeded sections out of the Linux kernel image
+\item [do\_kernel\_link\_vmlinux] creates a symbolic link in arch/\$arch/boot
+ for vmlinux kernel images
+\item [do\_bundle\_initramfs] combines an initial ramdisk image and kernel
+ together to form a single image
+\end{description}
+\end{frame}
+
+\begin{frame}
+\frametitle{licenses}
+\begin{description}
+\item [do\_populate\_lic] writes license information for the recipe that is
+ collected later when the image is constructed
+\item [do\_spdx] a build stage that takes the source code and scans it on a
+ remote FOSSOLOGY server in order to produce an SPDX document
+\end{description}
+\end{frame}
+
+\begin{frame}
+\frametitle{special stuff}
+\begin{description}
+\item [do\_uboot\_mkimage] creates a uImage file from the kernel for the
+ U-Boot bootloader
+\item [do\_generate\_qt\_config\_file] writes a qt.conf file for building a
+ Qt-based application
+\item [do\_devshell] starts a shell with the environment set up for
+ development/debugging
+\item [do\_listtasks] lists all defined tasks for a target
+\end{description}
+\end{frame}
+
+\subsection{Machines}
+\begin{frame}
+\frametitle{basics}
+a machine config is used to describe a board
+\begin{itemize}
+ \item machine configs are stored in the layers: conf/machine/*
+ \item settings can be splitted in different include *.inc files
+ \item e.g. one include for CPU that is used by the SoC inc file,
+that is used by the Board .conf file
+ \item the include files can be stored in different layers
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{u-boot \& kernel}
+\begin{description}
+ \item [UBOOT\_MACHINE] value passed on the make command line when building a
+ U-Boot image
+ \item [UBOOT\_MAKE\_TARGET] target called in the Makefile
+ \item [UBOOT\_ENTRYPOINT] entry point for the U-Boot image
+ \item [PREFERRED\_PROVIDER\_virtual/kernel] default kernel
+ \item [KERNEL\_DEVICETREE] default devicetree
+ \item [KERNEL\_IMAGETYPE] type of kernel to build for a device,
+ defaults to 'zImage'
+\end{description}
+\end{frame}
+
+\begin{frame}
+ \frametitle{hardware}
+\begin{description}
+ \item[SOC\_FAMILY] groups together machines based upon the same family of SOC
+ (System On Chip)
+ \item [MACHINEOVERRIDES] lists overrides specific to the current machine.
+ By default, this list includes the value of MACHINE. This can be used in
+ recipes; e.g. MACHINEOVERRIDES =. "mymachine" and in the recipe
+ SRC\_URI\_append\_mymachine = "file://mymachine-quirk.patch"
+ \item [MACHINE\_FEATURES] list of hardware features the MACHINE supports
+ \footnote{acpi, alsa, apm, bluetooth, ext2, irda, keyboard, pci, pcmcia,
+ screen, serial, touchscreen, usbgadget, usbhost, wifi}
+ \item [MACHINE\_EXTRA\_RRECOMMENDS] list of machine-specific packages to
+ install as part of the image being built that are not essential for booting
+ the machine. The image being built has no build dependencies on the packages
+ in this list.
+\item [SERIAL\_CONSOLE] speed and device for the serial port used to attach
+ the serial console. This variable is given to the kernel as the 'console'
+ parameter. After booting occurs, getty is started on that port so remote
+ login is possible.
+ \end{description}
+\end{frame}
+
+\begin{frame}
+\frametitle{compiler settings}
+\begin{description}
+\item [DEFAULTTUNE] e.g. armv6hf or cortexa8hf-neon, x86-64, \dots
+\item [TUNE\_FEATURES] e.g. "armv7a vfp neon"
+\item [TUNEVALID] Descriptions, stored as flags, of valid tuning features
+\item [TUNECONFLICTS] list of conflicting features for a given feature
+\end{description}
+\end{frame}
+
+\begin{frame}
+\frametitle{software}
+\begin{description}
+\item [PREFERRED\_VERSION\_xserver-xorg] compatible xserver version
+\item [PREFERRED\_PROVIDER\_virtual/kernel] recommended kernel
+\item [IMAGE\_FSTYPES] formats for the rootfs, e.g. "ext3 tar.bz2"
+\item [IMAGE\_CLASSES] list of classes that all images should inherit, default
+ is image\_types, e.g. to hook in own image generation code
+\end{description}
+\end{frame}