From e11da41853ddb36745c68adaab352fbe00bebc16 Mon Sep 17 00:00:00 2001
From: Manuel Traut <manut@linutronix.de>
Date: Wed, 18 May 2016 09:44:42 +0200
Subject: split yocto advanced training

use several tex files and include them in the presentation

Signed-off-by: Manuel Traut <manut@linutronix.de>
---
 .../yocto-advanced/pres_yocto-advanced.tex         | 1062 +-------------------
 1 file changed, 18 insertions(+), 1044 deletions(-)

(limited to 'distribution/yocto-advanced/pres_yocto-advanced.tex')

diff --git a/distribution/yocto-advanced/pres_yocto-advanced.tex b/distribution/yocto-advanced/pres_yocto-advanced.tex
index 1a2b644..7e94bff 100644
--- a/distribution/yocto-advanced/pres_yocto-advanced.tex
+++ b/distribution/yocto-advanced/pres_yocto-advanced.tex
@@ -14,1049 +14,23 @@
 \end{itemize}
 \end{frame}
 
-\subsection{Using BSP layers}
-
-\begin{frame}[fragile]
-\frametitle{folder layout}
-\begin{verbatim}
-meta-mylayer
-+ conf
-|  + layer.conf
-+ classes
-|  + class1.bbclass
-|  + class2.bbclass
-+ recipes-category1
-|  + package-1
-|      + package-1.bb
-|  + package-2
-|      + package-2.bb
-+ recipes-category2
-| ..
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-	\frametitle{meta-*/conf/layer.conf}
-	each layer needs a configuration file
-	\begin{itemize}
-		\item add conf and class directories to BBPATH
-			\begin{verbatim}BBPATH =. "${LAYERDIR}"\end{verbatim}
-		\item add recipe directories to BBFILES
-			\begin{verbatim}BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
-			${LAYERDIR}/recipes-*/*/*.bbappend"\end{verbatim}
-		\item add layer name to BBFILE\_COLLECTIONS
-			\begin{verbatim}BBFILE_COLLECTIONS += "mylayer"\end{verbatim}
-		\item set root of the layer
-			\begin{verbatim}BBFILE_PATTERN_mylayer = "^${LAYERDIR}/"\end{verbatim}
-		\item set default priority of the layer
-			\begin{verbatim}BBFILE_PRIORITY_mylayer = "5"\end{verbatim}
-		\item set version of layer (only increment if dependencies with other
-			layers are affected)
-			\begin{verbatim}LAYERVERSION_mylayer = "2"\end{verbatim}
-		\item set dependencies to other layers
-			\begin{verbatim}LAYERDEPENDS_mylayer = "meta-yocto"\end{verbatim}
-	\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{bitbake-layers}
-is useful to debug relations between different layers, options are:
-\begin{description}
-\item [show-layers] shows the current configured layers
-\item [show-recipes] lists available recipes and the layers that provide them.
-\item [show-overlayed] lists overlayed recipes
-\item [show-appends] lists .bbappend files
-	and the recipe files to which they apply
-\item [show-cross-depends] lists dependency relationships
-	between recipes that cross layer boundaries
-\item [flatten] flattens the layer configuration
-	into a separate output directory.
-\end{description}
-\end{frame}
-
-\begin{frame}
-\frametitle{definitions}
-\begin{itemize}
-	\item It is possible for a recipe with a lower version number PV in a layer
-that has a higher priority to take precedence.
-	\item Also, the layer priority does not currently affect the precedence
-order of .conf or .bbclass files. Future versions of BitBake might address this.
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{get an existing layer}
-retrive the layer from your BSP/SoC vendor
-\begin{verbatim}
-poky % git clone git://git.yoctoproject.org/meta-ti
-poky % cd meta-ti
-poky/meta-ti % git branch -r
-poky/meta-ti % git checkout -t origin/fido -b fido
-poky/meta-ti % cd ..
-poky % git checkout -t origin/fido -b fido
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{layer dependencies}
-have a look at it's dependencies
-\begin{verbatim}
-poky % cat meta-ti/conf/layer.conf | grep LAYERDEPENDS
-\end{verbatim}
-no dependencies, so we are safe to continue, otherwise
-retrive more layers.
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{generate a new build environment}
-\begin{verbatim}
-poky % . oe-init-build-env build-ti
-poky/build-ti %
-\end{verbatim}
-\end{frame}
-
-\subsection{configure build environment}
-\begin{frame}
-\frametitle{overview}
-builds are configured using two configuration files
-\begin{itemize}
-	\item /home/devel/poky/build-ti/conf/bblayers.conf
-	\item /home/devel/poky/build-ti/conf/local.conf
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{bblayers.conf}
-additional layers are added with absolute! path to the BBLAYERS variable
-\begin{verbatim}
-BBLAYERS ?= " \
-  /home/devel/poky/meta \
-  /home/devel/poky/meta-yocto \
-  /home/devel/poky/meta-yocto-bsp \
-  "
-\end{verbatim}
-\pause
-\begin{verbatim}
-% bitbake-layers show-layers
-layer                 path                                  priority
-=====================================================================
-meta                  /home/devel/poky/meta                 5
-meta-yocto            /home/devel/poky/meta-yocto           5
-meta-yocto-bsp        /home/devel/poky/meta-yocto-bsp       5
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{add ti and meta-mini layers}
-modify the BBLAYERS variable in bblayers.conf
-\begin{verbatim}
-BBLAYERS ?= " \
-  /home/devel/poky/meta \
-  /home/devel/poky/meta-yocto \
-  /home/devel/poky/meta-yocto-bsp \
-  /home/devel/poky/meta-ti \
-  "
-\end{verbatim}
-\pause
-\begin{verbatim}
-% bitbake-layers show-layers
-layer                 path                                  priority
-=====================================================================
-meta                  /home/devel/poky/meta                 5
-meta-yocto            /home/devel/poky/meta-yocto           5
-meta-yocto-bsp        /home/devel/poky/meta-yocto-bsp       5
-meta-ti               /home/devel/poky/meta-ti              6
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{overlayed recipes}
-to see which recipes replace official ones:
-\begin{verbatim}
-poky/build-ti % bitbake-layers show-overlayed
-Parsing recipes..done.
-=== Overlayed recipes ===
-directfb:
-  meta-ti              1.6.3
-  meta                 1.7.1
-directfb-examples:
-  meta-ti              1.6.0
-  meta                 1.7.0
-xserver-xorg:
-  meta-ti              2:1.14.4
-  meta                 2:1.15.0
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{EXCURSUS: build an imx.6 image \#1}
-use
-\begin{verbatim}
-ls ../*/*/images/
-\end{verbatim}
-to get a list of predefined images; image, you want to build an imx6 image, so
-none of them fits your needs\dots
-		\pause
-\begin{verbatim}
-poky/build-fsl % cd ..
-poky % git clone -b fido https://github.com/Freescale/meta-fsl-demos.git
-poky % git clone -b fido git://git.openembedded.org/meta-openembedded
-poky % cd -
-\end{verbatim}
-		\pause
-and edit conf/bblayers.conf, to match
-\begin{verbatim}
-BBLAYERS ?= " \
-  /home/devel/poky/meta \
-  /home/devel/poky/meta-yocto \
-  /home/devel/poky/meta-yocto-bsp \
-  /home/devel/poky/meta-fsl-arm \
-  /home/devel/poky/meta-fsl-arm-extra \
-  /home/devel/poky/meta-openembedded/meta-oe \
-  /home/devel/poky/meta-fsl-demos \
-  "
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{EXCURSUS: build an imx.6 image \#2}
-build a qt demo image
-\begin{verbatim}
-poky/build-imx6 % bitbake qt4e-demo-image
-Currently 4 running tasks (26 of 4459):
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{EXCURSUS: build an imx.6 image \#3}
-\dots back from coffee break
-\begin{verbatim}
-ERROR: No new tasks can be executed since
-       the disk space monitor action is "STOPTASKS"!
-\end{verbatim}
-what happened??
-		\pause
-\begin{verbatim}
-poky/build-imx6 % df -h
-Filesystem      Size  Used Avail Use% Mounted on
-/dev/sda4       367G  348G  850M 100% /
-poky/build-imx6 % du -sm .
-31026   .
-poky/build-imx6 % du -sm ../build
-29172   ../build/
-\end{verbatim}
-		\pause
-\dots so the solution is to cleanup the disk and run
-\begin{verbatim}
-poky/build-imx6 % bitbake qt4e-demo-image
-\end{verbatim}
-again.
-
-A different behaviour can be configured in 'conf/local.conf'.
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{EXCURSUS: build an imx.6 image \#4}
-example of an issue with a sabrelite board
-\begin{verbatim}
-ERROR: To use 'gpu-viv-bin-mx6q'
-  you need to accept the Freescale EULA
-  at '/home/local/src/poky/meta-ti-arm/EULA'.
-  Please read it and in case you accept it, write:
-  ACCEPT_FSL_EULA = "1" in your local.conf.
-ERROR: Function failed: do_unpack
-ERROR: Logfile of failure stored in:
-  /home/local/src/poky/build-ti/tmp/work/
-   cortexa9hf-vfp-neon-mx6-poky-linux-gnueabi/
-   gpu-viv-bin-mx6q/1_3.10.17-1.0.0-hfp-r0/temp/
-   log.do_unpack.6795
-ERROR: Task 1105 (/home/local/src/poky/meta-ti-arm/
-  recipes-graphics/gpu-viv-bin-mx6q/
-  gpu-viv-bin-mx6q_3.10.17-1.0.0-hfp.bb, do_unpack) failed
-  with exit code '1'
-\end{verbatim}
-		\pause
-to solve this issue:
-\begin{verbatim}
-poky/build-fsl % echo 'ACCEPT_FSL_EULA = "1"' >> conf/local.conf
-\end{verbatim}
-		\pause
-\dots and run
-\begin{verbatim}
-poky/build-ti % bitbake qt4e-demo-image
-\end{verbatim}
-again.
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{EXCURSUS: flash the official beaglebone image \#1}
-\begin{verbatim}
-poky/build-ti % sudo fdisk /dev/mmcblk0
-# create a
-# * bootable
-# * primary partition with
-# * about 100 MB and
-# * Windows vFat format
-# and another primary partition with Linux Ext format
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{EXCURSUS: flash the official beaglebone image \#2}
-\begin{verbatim}
-poky/build-ti % sudo mkfs.vfat -F 16 -n boot /dev/mmcblk0p1
-poky/build-ti % sudo mke2fs -j -L "root" /dev/mmcblk0p2
-poky/build-ti % sudo mount /dev/mmcblk0p1 /mnt
-poky/build-ti % sudo cp -a tmp/deploy/images/beaglebone/MLO-beaglebone \
-  /mnt/MLO
-poky/build-ti % sudo cp -a \
-  tmp/deploy/images/beaglebone/u-boot-beaglebone.img \
-  /mnt/u-boot.img
-poky/build-ti % sudo umount /mnt
-poky/build-ti % sudo mount /dev/mmcblk0p2 /mnt
-poky/build-ti % sudo tar xjf \
-  tmp/deploy/images/qt4e-demo-image-beaglebone.tar.bz2 -C /mnt
-poky/build-ti % sudo umount /mnt
-\end{verbatim}
-\end{frame}
-
-\subsection{Creating a layer}
-\begin{frame}[fragile]
-\frametitle{with yocto helper script}
-\begin{verbatim}
-poky/build-ti % cd ..
-poky % yocto-layer create mini
-Please enter the layer priority you'd like to use for the layer:
-[default: 6] <return>
-Would you like to have an example recipe created? (y/n)
-[default: n] <return>
-Would you like to have an example bbappend file created? (y/n)
-[default: n] <return>
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{manage the layer with git}
-\begin{verbatim}
-poky % cd meta-mini
-poky/meta-mini % git init .
-poky/meta-mini % git add *
-poky/meta-mini % git commit -sam 'inital version'
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{machine configs}
-to get a list of currently available machine configs:
-\begin{verbatim}
-poky/build-ti % grep -r '@NAME' ../meta*/conf/machine
-\end{verbatim}
-if no machine fits your needs, define your own!
-\end{frame}
-
-\subsection{Machines}
-\begin{frame}[fragile]
-\frametitle{create a beaglebone-black machine config}
-create the file 'meta-mini/conf/machine/beaglebone-black.conf':
-\begin{verbatim}
-#@TYPE: Machine
-#@NAME: BeagleBone Black
-#@DESCRIPTION: Machine configuration for the http://beagleboard.org/bone board 
-
-require conf/machine/include/ti33x.inc
-
-IMAGE_FSTYPES += "ext3 tar.gz"
-EXTRA_IMAGEDEPENDS += "u-boot"
-SERIAL_CONSOLE = "115200 ttyO0"
-
-SDCARD_ROOTFS ?= "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext3"
-
-SPL_BINARY = "MLO"
-UBOOT_SUFFIX = "img"
-UBOOT_MACHINE = "am335x_boneblack_config"
-UBOOT_ENTRYPOINT = "0x80008000"
-UBOOT_LOADADDRESS = "0x80008000"
-\end{verbatim}
-\end{frame}
-
-\subsection{Writing recipes}
-\begin{frame}[fragile]
-\frametitle{adding a kernel}
-create the file 'meta-mini/recipes-bsp/linux-vanilla/linux-vanilla\_3.16.1.bb':
-\begin{verbatim}
-SECTION = "kernel"
-DESCRIPTION = "Linux vanilla kernel"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
-KERNEL_IMAGETYPE ?= "uImage"
-
-inherit kernel
-require recipes-kernel/linux/linux-dtb.inc
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{adding a kernel \#2}
-\begin{verbatim}
-COMPATILBE_MACHINE_imx6qsabrelite = "imx6qsabrelite"
-KERNEL_DEVICETREE_imx6qsabrelite = "arch/arm/boot/dts/imx6q-sabrelite.dts"
-COMPATILBE_MACHINE_beaglebone-black = "beaglebone-black"
-KERNEL_DEVICETREE_beaglebone-black = "arch/arm/boot/dts/am335x-boneblack.dts"
-
-S = "${WORKDIR}/git
-
-BRANCH = "master"
-SRC_URI = "https://www.kernel.org/pub/linux/kernel/v3.x/linux-${PV}.tar.xz \
-	file://defconfig"
-
-SRC_URI[md5sum] = "e7a985a243b7941b6bc6240fcbc797fc"
-SRC_URI[sha256sum] = "be37dda8ea090525661d64e5c7fc8580f313b7f9ba8592e32120f1332b
-
-KERNEL_EXTRA_ARGS += "LOADADDR=${UBOOT_ENTRYPOINT}"
-LINUX_VERSION_EXTENSION = "-linutronix"
-
-do_configure_prepend() {
-	cp '${WORKDIR}/defconfig' '${S}/.config'
-}
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{adding a defconfig}
-copy your .config file to
-'meta-mini/recipes-bsp/linux-vanilla/files/beaglebone-black/defconfig'
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{using a specific kernel}
-add
-\begin{verbatim}
-PREFERRED_PROVIDER_virtual/kernel = "linux-vanilla"
-\end{verbatim}
-to meta-mini/machine/beaglebone-black.conf
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Providers}
-\begin{verbatim}
---8<- meta/classos/kernel.bbclass --
-PROVIDES += "virtual/kernel"
---8<--------------------------------
-\end{verbatim}
-
-PREFERRED\_PROVIDER\_virtual/kernel = "linux-vanilla"
-
-
-\pause
-\vspace{2em}
-also a preferred version can be set:
-
-PREFERRED\_VERSION\_virtual/kernel = "3.18.5"
-\end{frame}
-
-\begin{frame}
-\frametitle{Preferences}
-\begin{itemize}
-\item by default, files have a preference of "0"
-\pause
-\item setting DEFAULT\_PREFERENCE to "-1" makes the recipe unlikely to be used
-	unless it is explicitly referenced.
-\pause
-\item setting DEFAULT\_PREFERENCE to "1" makes it likely the recipe is used
-\pause
-\item PREFERRED\_VERSION overrides any DEFAULT\_PREFERENCE setting
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{using a specific bootloader}
-add
-\begin{verbatim}
-PREFERRED_PROVIDER_virtual/bootloader = "u-boot"
-PREFERRED_PROVIDER_virtual/u-boot = "u-boot"
-\end{verbatim}
-to meta-mini/machine/beaglebone-black.conf
-\end{frame}
-
-\subsection{generate a sdcard image}
-\begin{frame}[fragile]
-\frametitle{sdcard generation}
-create the file: 'meta-mini/classes/image\_sdcard.bbclass':
-\begin{verbatim}
-inherit image_types
-
-IMAGE_BOOTLOADER ?= "u-boot"
-
-# Handle u-boot suffixes
-UBOOT_SUFFIX ?= "bin"
-UBOOT_PADDING ?= "0"
-UBOOT_SUFFIX_SDCARD ?= "${UBOOT_SUFFIX}"
-
-# Linux bootstream
-IMAGE_DEPENDS_linux.sb = "virtual/kernel:do_deploy"
-
-# Boot partition volume id
-BOOTDD_VOLUME_ID ?= "Boot ${MACHINE}"
-# Boot partition size [in KiB]
-BOOT_SPACE ?= "8192"
-# Set alignment to 4MB [in KiB]
-IMAGE_ROOTFS_ALIGNMENT = "4096"
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{sdcard generation \#2}
-\begin{verbatim}
-IMAGE_DEPENDS_sdcard = "parted-native:do_populate_sysroot \
-  dosfstools-native:do_populate_sysroot \
-  mtools-native:do_populate_sysroot \
-  virtual/kernel:do_deploy \
-  ${@d.getVar('IMAGE_BOOTLOADER', True) and \
-    'd.getVar('IMAGE_BOOTLOADER', True) + ':do_deploy' or ''}"
-
-SDCARD = "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.sdcard"
-SDCARD_GENERATION_COMMAND_ti33x = "generate_ti_sdcard"
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{sdcard generation \#3}
-\begin{verbatim}
-generate_ti_sdcard () {
-  parted -s ${SDCARD} mklabel msdos
-
-  parted -s ${SDCARD} unit KiB mkpart primary fat32 \
-   ${IMAGE_ROOTFS_ALIGNMENT} $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ \
-   ${BOOT_SPACE_ALIGNED})
-
-  parted -s ${SDCARD} unit KiB mkpart primary \
-   $(expr  ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED}) \
-   $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED} \+ \
-     $ROOTFS_SIZE)
-
-  parted -s ${SDCARD} set 1 boot on
-  parted ${SDCARD} print
-
-  BOOT_BLOCKS=$(LC_ALL=C parted -s ${SDCARD} unit b print \
-    | awk '/ 1 / { print substr($4, 1, length($4 -1)) / 1024 }')
-
-  mkfs.vfat -n "${BOOTDD_VOLUME_ID}" -S 512 -C \
-    ${WORKDIR}/boot.img $BOOT_BLOCKS
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{sdcard generation \#4}
-\begin{verbatim}
-  # copy files to /boot
-  mcopy -i ${WORKDIR}/boot.img -s \
-    ${DEPLOY_DIR_IMAGE}/MLO-${MACHINE} ::/MLO
-  mcopy -i ${WORKDIR}/boot.img -s \
-    ${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.img ::/u-boot.img
-  mmd -i ${WORKDIR}/boot.img  ::/boot
-  mcopy -i ${WORKDIR}/boot.img -s \
-    ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin \
-    ::/boot/${KERNEL_IMAGETYPE}
-  mcopy -i ${WORKDIR}/boot.img -s \
-    ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-am335x-boneblack.dtb \
-    ::/boot/am335x-boneblack.dtb
-  mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/uEnv.txt \
-    ::/uEnv.txt
-
-  # Burn Partition
-  dd if=${WORKDIR}/boot.img of=${SDCARD} conv=notrunc seek=1 \
-    bs=$(expr ${IMAGE_ROOTFS_ALIGNMENT} \* 1024)
-  sync
-  dd if=${SDCARD_ROOTFS} of=${SDCARD} conv=notrunc seek=1 \
-    bs=$(expr ${BOOT_SPACE_ALIGNED} \* 1024 + \
-         ${IMAGE_ROOTFS_ALIGNMENT} \* 1024)
-  sync
-}
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{sdcard generation \#5}
-\begin{verbatim}
-IMAGE_CMD_sdcard () {
-  if [ -z "${SDCARD_ROOTFS}" ]; then
-    bberror "SDCARD_ROOTFS is undefined."
-    exit 1
-  fi
-
-  # Align boot partition and calculate total SD card image size
-  BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE} + ${IMAGE_ROOTFS_ALIGNMENT} - 1)
-  BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE_ALIGNED} - \
-    ${BOOT_SPACE_ALIGNED} % ${IMAGE_ROOTFS_ALIGNMENT})
-  SDCARD_SIZE=$(expr ${IMAGE_ROOTFS_ALIGNMENT} + \
-    ${BOOT_SPACE_ALIGNED} + $ROOTFS_SIZE + ${IMAGE_ROOTFS_ALIGNMENT})
-
-  # Initialize a sparse file
-  dd if=/dev/zero of=${SDCARD} bs=1 count=0 \
-    seek=$(expr 1024 \* ${SDCARD_SIZE})
-
-  ${SDCARD_GENERATION_COMMAND}
-}
-
-# The sdcard requires the rootfs filesystem to be built before using
-# it so we must make this dependency explicit.
-IMAGE_TYPEDEP_sdcard = "${@d.getVar('SDCARD_ROOTFS', 1).split('.')[-1]}"
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{configure machine to use sdcard imagetype}
-add the following lines to 'meta-mini/conf/machine/beaglebone-black.conf':
-\begin{verbatim}
-IMAGE_CLASSES += "image_sdcard"
-SDCARD_ROOTFS ?= "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext3"
-IMAGE_FSTYPES += "sdcard"
-\end{verbatim}
-\end{frame}
-
-\subsection{Define a distribution}
-\begin{frame}
-\frametitle{why define a distribution?}
-\begin{itemize}
-\item naming of the toolchain (codenames, vendor)
-		\pause
-\item version numbers
-		\pause
-\item enable default features
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{distro features: file-systems}
-\begin{description}
-\item[cramfs] CramFS support
-\item[ext2] tools for supporting for devices with internal HDD/Microdrive
-	for storing files (instead of Flash only devices)
-\item[nfs] NFS client support (for mounting NFS exports on device)
-\item[smbfs] SMB networks client support
-	(for mounting Samba/Microsoft Windows shares on device)
-\end{description}
-\end{frame}
-
-\begin{frame}
-\frametitle{distro features: hardware support}
-\begin{description}
-\item[alsa] ALSA/sound support
-	(OSS compatibility kernel modules installed if available)
-\item[bluetooth] bluetooth support (integrated BT only)
-\item[irda] IrDA support
-		\pause
-\item[wifi] WiFi support (integrated only).
-\item[keyboard] keyboard support (e.g. keymaps will be loaded during boot)
-\end{description}
-\end{frame}
-
-\begin{frame}
-\frametitle{distro features: grahpics}
-\begin{description}
-\item[opengl] the Open Graphics Library, which is a cross-language,
-	multi-platform application programming interface used for rendering two
-	and three-dimensional graphics
-\item[directfb] DirectFB support
-\end{description}
-\end{frame}
-
-\begin{frame}
-\frametitle{distro features: networking}
-\begin{description}
-\item[ipsec] IPSec support
-\item[ipv6] IPv6 support
-\item[ppp] PPP dialup support
-\end{description}
-\end{frame}
-
-\begin{frame}
-\frametitle{distro features: bus support}
-\begin{description}
-\item[pci] PCI bus support
-\item[pcmcia] PCMCIA/CompactFlash support
-\item[usbgadget] USB Gadget Device support (for USB networking/serial/storage)
-\item[usbhost] USB Host support
-	(allows to connect external keyboard, mouse, storage, network etc)
-\end{description}
-\end{frame}
-
-\begin{frame}
-\frametitle{distro features: software}
-\begin{description}
-\item[systemd] support for this init manager, which is a full replacement of
-	for init with parallel starting of services, reduced shell overhead,
-	and other features. This init manager is used by many distributions
-\item[wayland] the Wayland display server protocol
-	and the library that supports it
-\item[x11] X server and libraries
-\end{description}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{use a DISTRO\_FEATURE}
-Normally the distro features are used in package groups in a core layer.
-e.g. 'meta/recipes-core/packagegroups/packagegroup-base.bb':
-\begin{verbatim}
-PACKAGES = ' \
-	..
-	${@base_contains("DISTRO_FEATURES", \
-	                 "opengl", "packagegroup-opengl", "", d)} \
-	..
-	'
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{EXCURSUS: package groups}
-are recipes that are used to group packages together:
-\begin{verbatim}
-DESCRIPTION = “My Package Group”
-LICENSE = “MIT”
-LIC_FILES_CHECKSUM = “file://<licfile>;md5=<chksum>
-inherit packagegroup
-PROVIDES = “${PACKAGES}”
-PACKAGES = “packagegroup-mypkg-apps packagegroup-mypkg-tools”
-RDEPENDS_packagegroup-mypkg-apps = “sqlite3 python-core python-sqlite3”
-RDEPENDS_pacakgegroup-mypkg-tools = “sudo gzip tar”
-\end{verbatim}
-it can be used, to simplify image definitions
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{minimal distribution}
-distros are defined in a layer, e.g.
-
-meta-linutronix/conf/distro/mini.conf:
-\begin{verbatim}
-meta-mini/conf/distro/mini.conf:
-DISTRO = "mini"
-DISTRO_NAME = "mini 1.0 (for foo devices)"
-DISTRO_VERSION = "1.0"
-DISTRO_CODENAME = "mal"
-\end{verbatim}
-\end{frame}
-\begin{frame}[fragile]
-\begin{verbatim}
-SDK_VENDOR = "-linutronix"
-SDK_VERSION := "${@'${DISTRO_VERSION}'}"
-SDK_NAME = "${DISTRO}-${TCLIBC}-${SDK_ARCH}-${IMAGE_BASENAME}-${TUNE_PKGARCH}"
-SDKPATH = "/opt/${DISTRO}/${SDK_VERSION}"
-\end{verbatim}
-\end{frame}
-\begin{frame}[fragile]
-\begin{verbatim}
-MAINTAINER = "Manuel Traut <manut@linutronix.de>"
-TARGET_VENDOR = "-linutronix"
-LOCALCONF_VERSION = "1"
-LAYER_CONF_VERSION ?= "6"
-DISTRO_FEATURES ?= "opengl ${DISTRO_FEATURES_DEFAULT} ${DISTRO_FEATURES_LIBC}"
-DISTRO_FEATURES_append = " systemd"
-TCLIBCAPPEND = ""
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\begin{verbatim}
-CONNECTIVITY_CHECK_URIS ?= " \
-             https://eula-downloads.yoctoproject.org/index.php \
-             http://bugzilla.yoctoproject.org/report.cgi"
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\begin{verbatim}
-SANITY_TESTED_DISTROS ?= " \
-            Ubuntu-14.04 \n \
-            Debian-7.0 \n \
-            Debian-7.1 \n \
-            Debian-7.2 \n \
-            Debian-7.3 \n \
-            Debian-7.4 \n \
-            "
-
-BB_SIGNATURE_HANDLER ?= 'OEBasicHash'
-OELAYOUT_ABI = "8"
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{add distro to git repo}
-\begin{verbatim}
-poky/meta-mini % git add conf/distro/mini.conf
-poky/meta-mini % git commit -sam 'add mini distro'
-\end{verbatim}
-\end{frame}
-
-\subsection{Creating images}
-\begin{frame}[fragile]
-\frametitle{based on core-image class}
-build image with ssh support
-\begin{verbatim}
-poky/build-ti % bitbake-layers show-recipes | grep ssh
-Parsing recipes..done.
-libssh:
-openssh:
-packagegroup-core-ssh-dropbear:
-packagegroup-core-ssh-openssh:
-\end{verbatim}
-\pause
-create the file
-'meta-mini/recipes-bsp/mini-image/mini-image.bb'
-\begin{verbatim}
-IMAGE_INSTALL += "openssh"
-inherit core-image
-\end{verbatim}
-\end{frame}
-
-
-\begin{frame}
-\frametitle{build configuration}
-local.conf is used to configure
-\begin{itemize}
-	\item the target machine
-	\item paths
-	\item the used distribution
-	\item package formats
-	\item arch of developer machine
-	\item additional image features
-	\item use additional classes
-	\item enable testing
-	\item devshell terminal
-	\item patch resolver
-	\item disk monitoring
-	\item sstate mirrors
-	\item qemu configuration
-	\item incompatible licenses, e.g. INCOMPATIBLE\_LICENSE = “GPLv3”
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{override default config files}
-default templates can be overridden by setting TEMPLATECONF
-to e.g. meta-mini/conf during ./oe-init-buildenv.
-
-Then meta-mini/conf bblayers.conf.sample and local.conf.sample will
-be used.
-
-The default location is specified in
-
-\begin{verbatim}
-% cat .templateconf
-# Template settings
-TEMPLATECONF=${TEMPLATECONF:-meta-yocto/conf}
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-	\frametitle{Excercise}
-	1) Add sample configs to the meta-mini layer providing a valid
-	layer configuration and a build configuration that creates a
-	debug RFS for our self defined machine, by using our distribution.
-	The configus should Use packages in deb format and the shared
-	download directory from the poky directory.
-
-
-	2) create a new build directory, e.g. build-bbb and build our self
-	defined image.
-\end{frame}
-
-\begin{frame}
-\frametitle{adding an own application}
-\begin{itemize}
-	\item recipe already available? check http://layers.openembedded.org
-	\item look for a similar recipe
-	\item proper bbclass available?
-\end{itemize}
-on the next slides, we have a look what is useful for very simple applications,
-autotools and cmake based projects and qt applications.
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{as simple as posible}
-use this folder layout
-\begin{verbatim}
-poky/meta-mini/recipes-hello % tree
-hello
-├── files
-│   └── hello.c
-└── hello.bb
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{as simple as posible \#2}
-this is the content of hello.bb
-\begin{verbatim}
-DESCRIPTION = "Simple helloworld application"
-SECTION = "examples"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT; \
-  md5=0835ade698e0bcf8506ecda2f7b4f302"
-PR = "r0"
-SRC_URI = "file://hello.c"
-S = "${WORKDIR}"
-
-do_compile() {
-  ${CC} hello.c -o hello
-}
-
-do_install() {
-  install -d ${D}${bindir}
-  install -m 0755 hello ${D}${bindir}
-}
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{autools based project}
-\begin{verbatim}
-├── autohello_1.0.bb
-└── files
-    └── autohello-1.0.tar.gz
-\end{verbatim}
-\pause
-\begin{verbatim}
-DESCRIPTION = "GNU Helloworld application"
-SECTION = "examples"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-PR = "r0"
-SRC_URI = "file://autohello-${PV}.tar.gz"
-SRC_URI[md5sum] = "4bfc9bed4d5d67a266d93e99e5883211"
-inherit autotools
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{cmake based project}
-\begin{verbatim}
-.
-├── files
-│   └── hellocm-0.1.tar.bz2
-└── hellocm_0.1.bb
-\end{verbatim}
-\pause
-\begin{verbatim}
-DESCRIPTION = "hellocm cmake example"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
-SECTION = "examples"
-SRC_URI = "file://${BPN}-${PV}.tar.bz2"
-inherit cmake
-
-#export EXTRA_OECMAKE = '-DBLUBB="bla"
-
-FILES_{PN} = "${bindir}/hellocm"
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{qt application}
-\begin{verbatim}
-├── files
-│   └── helloqt-1.0.tar.bz2
-└── helloqt_1.0.bb
-\end{verbatim}
-\pause
-\begin{verbatim}
-DESCRIPTION = "helloqt QT example"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
-SECTION = "examples"
-SRC_URI = "file://${BPN}-${PV}.tar.bz2"
-inherit qt4e
-PR = "r4"
-do_install() {
-        install -d ${D}${bindir}
-        install -m 0755 helloqt ${D}${bindir}
-}
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{adding a bootscript}
-\begin{itemize}
-	\item add 'systemd' to DISTRO\_FEATURES
-\pause
-	\item inherit from systemd.bbclass
-\pause
-	\item your package needs to set SYSTEMD\_SERVICE variable; e.g.
-		\begin{verbatim}
-SYSTEMD_SERVICE_${PN} = "connman.service"
-		\end{verbatim}
-\pause
-	\item to disable the service, set  SYSTEMD\_AUTO\_ENABLE to 'disable'
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{user and group configuration}
-use this in an image recipe:
-\begin{verbatim}
-inherit extrausers
-EXTRA_USERS_PARAMS = "\
-    useradd -p '' tester; \
-    groupadd developers; \
-    userdel nobody; \
-    groupdel -g video; \
-    groupmod -g 1020 developers; \
-    usermod -s /bin/sh tester; \
-    "
-\end{verbatim}
-or the useradd class, for an example see useradd-example.bb
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{external sources}
-e.g. for a heavily customized kernel
-\begin{itemize}
-\item kernel source directory on the development machine
-\item inherit externalsrc class
-\item set EXTERNALSRC variable to point to your external source code
-\end{itemize}
-
-this local.conf extension:
-\begin{verbatim}
-INHERIT += "externalsrc"
-EXTERNALSRC_pn-myrecipe = "/some/path/to/your/source/tree"
-\end{verbatim}
-overrides the SOURCE\_URI of pn-myrecipe.bb
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{blacklist packages}
-To blacklist a package, inherit the blacklist.bbclass globally and set
-PNBLACKLIST for each recipe you wish to blacklist.
-
-
-Specify the PN value as a variable flag (varflag) and provide a reason,
-which is reported, if the package is requested to be built as the value:
-\begin{verbatim}
-INHERIT += "blacklist"
-PNBLACKLIST[exoticware] = "Not supported by our organization."
-\end{verbatim}
-\end{frame}
-
-\begin{frame}
-	\frametitle{Application Development Excercise}
-\begin{itemize}
-\item generate a standalone or integrated SDK
-\item configure the SDK in eclipse
-\item build and remote debug yesterdays application on the beaglebone-black
-\item integrate the application into the image
-\item build the image including your application
-\end{itemize}
-\end{frame}
-
-\subsection{Resume}
-\begin{frame}
-	\begin{itemize}
-		\item Yocto is a huge collection of tools
-		\item Bitbake can be used to create Images
-		\item The quality of the Images depend on the maintainance of the Layers
-		\item Only build your own distribution if you really need to!
-	\end{itemize}
-\end{frame}
+\input{yocto-layers}
+\input{yocto-ti-layer}
+\input{yocto-layer-imx6}
+\input{yocto-flash-official-bb-img}
+\input{yocto-bbb-machine-conf}
+\input{yocto-add-own-kernel}
+\input{yocto-u-boot-integration}
+\input{yocto-sdcard-generation}
+\input{yocto-distro-definitions}
+\input{yocto-create-own-layer}
+\input{yocto-extend-image}
+\input{yocto-local-conf}
+\input{yocto-excercise-build-bbb-img}
+\input{yocto-add-simple-application}
+\input{yocto-add-autools-based-src}
+\input{yocto-add-qt-cmake-projects}
+\input{yocto-img-customization}
+\input{yocto-resume}
 
 \input{tailpres}
-- 
cgit v1.2.3

