summaryrefslogtreecommitdiff
path: root/distribution
diff options
context:
space:
mode:
authorManuel Traut <manut@linutronix.de>2016-05-18 09:44:42 +0200
committerManuel Traut <manut@linutronix.de>2016-05-18 09:44:42 +0200
commite11da41853ddb36745c68adaab352fbe00bebc16 (patch)
tree6910e39f9f93b1622cc6692701ae42fd289e339a /distribution
parent03566e0d038005ca58630c3decc1f5ae301a67a7 (diff)
split yocto advanced training
use several tex files and include them in the presentation Signed-off-by: Manuel Traut <manut@linutronix.de>
Diffstat (limited to 'distribution')
-rw-r--r--distribution/yocto-advanced/pres_yocto-advanced.tex1062
-rw-r--r--distribution/yocto-advanced/yocto-add-autools-based-src.tex19
-rw-r--r--distribution/yocto-advanced/yocto-add-own-kernel.tex74
-rw-r--r--distribution/yocto-advanced/yocto-add-qt-cmake-projects.tex45
-rw-r--r--distribution/yocto-advanced/yocto-add-simple-application.tex47
-rw-r--r--distribution/yocto-advanced/yocto-bbb-machine-conf.tex31
-rw-r--r--distribution/yocto-advanced/yocto-create-own-layer.tex89
-rw-r--r--distribution/yocto-advanced/yocto-distro-definitions.tex92
-rw-r--r--distribution/yocto-advanced/yocto-excercise-build-bbb-img.tex12
-rw-r--r--distribution/yocto-advanced/yocto-extend-image.tex20
-rw-r--r--distribution/yocto-advanced/yocto-flash-official-bb-img.tex31
-rw-r--r--distribution/yocto-advanced/yocto-img-customization.tex74
-rw-r--r--distribution/yocto-advanced/yocto-layer-imx6.tex99
-rw-r--r--distribution/yocto-advanced/yocto-layers.tex69
-rw-r--r--distribution/yocto-advanced/yocto-local-conf.tex37
-rw-r--r--distribution/yocto-advanced/yocto-resume.tex10
-rw-r--r--distribution/yocto-advanced/yocto-sdcard-generation.tex109
-rw-r--r--distribution/yocto-advanced/yocto-ti-layer.tex103
-rw-r--r--distribution/yocto-advanced/yocto-u-boot-integration.tex35
19 files changed, 1014 insertions, 1044 deletions
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}
diff --git a/distribution/yocto-advanced/yocto-add-autools-based-src.tex b/distribution/yocto-advanced/yocto-add-autools-based-src.tex
new file mode 100644
index 0000000..7c99f69
--- /dev/null
+++ b/distribution/yocto-advanced/yocto-add-autools-based-src.tex
@@ -0,0 +1,19 @@
+\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}
diff --git a/distribution/yocto-advanced/yocto-add-own-kernel.tex b/distribution/yocto-advanced/yocto-add-own-kernel.tex
new file mode 100644
index 0000000..7f86ecc
--- /dev/null
+++ b/distribution/yocto-advanced/yocto-add-own-kernel.tex
@@ -0,0 +1,74 @@
+\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}
diff --git a/distribution/yocto-advanced/yocto-add-qt-cmake-projects.tex b/distribution/yocto-advanced/yocto-add-qt-cmake-projects.tex
new file mode 100644
index 0000000..2e5fa41
--- /dev/null
+++ b/distribution/yocto-advanced/yocto-add-qt-cmake-projects.tex
@@ -0,0 +1,45 @@
+\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}
diff --git a/distribution/yocto-advanced/yocto-add-simple-application.tex b/distribution/yocto-advanced/yocto-add-simple-application.tex
new file mode 100644
index 0000000..cf7fa57
--- /dev/null
+++ b/distribution/yocto-advanced/yocto-add-simple-application.tex
@@ -0,0 +1,47 @@
+\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}
+
diff --git a/distribution/yocto-advanced/yocto-bbb-machine-conf.tex b/distribution/yocto-advanced/yocto-bbb-machine-conf.tex
new file mode 100644
index 0000000..7345952
--- /dev/null
+++ b/distribution/yocto-advanced/yocto-bbb-machine-conf.tex
@@ -0,0 +1,31 @@
+\subsection{Machines}
+\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}
+
+\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"
+
+SPL_BINARY = "MLO"
+UBOOT_SUFFIX = "img"
+UBOOT_MACHINE = "am335x_boneblack_config"
+UBOOT_ENTRYPOINT = "0x80008000"
+UBOOT_LOADADDRESS = "0x80008000"
+\end{verbatim}
+\end{frame}
diff --git a/distribution/yocto-advanced/yocto-create-own-layer.tex b/distribution/yocto-advanced/yocto-create-own-layer.tex
new file mode 100644
index 0000000..95d4916
--- /dev/null
+++ b/distribution/yocto-advanced/yocto-create-own-layer.tex
@@ -0,0 +1,89 @@
+\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{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}
diff --git a/distribution/yocto-advanced/yocto-distro-definitions.tex b/distribution/yocto-advanced/yocto-distro-definitions.tex
new file mode 100644
index 0000000..d556131
--- /dev/null
+++ b/distribution/yocto-advanced/yocto-distro-definitions.tex
@@ -0,0 +1,92 @@
+\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}
diff --git a/distribution/yocto-advanced/yocto-excercise-build-bbb-img.tex b/distribution/yocto-advanced/yocto-excercise-build-bbb-img.tex
new file mode 100644
index 0000000..d1b003a
--- /dev/null
+++ b/distribution/yocto-advanced/yocto-excercise-build-bbb-img.tex
@@ -0,0 +1,12 @@
+\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}
diff --git a/distribution/yocto-advanced/yocto-extend-image.tex b/distribution/yocto-advanced/yocto-extend-image.tex
new file mode 100644
index 0000000..a8a86ad
--- /dev/null
+++ b/distribution/yocto-advanced/yocto-extend-image.tex
@@ -0,0 +1,20 @@
+\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}
diff --git a/distribution/yocto-advanced/yocto-flash-official-bb-img.tex b/distribution/yocto-advanced/yocto-flash-official-bb-img.tex
new file mode 100644
index 0000000..94c408c
--- /dev/null
+++ b/distribution/yocto-advanced/yocto-flash-official-bb-img.tex
@@ -0,0 +1,31 @@
+\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}
diff --git a/distribution/yocto-advanced/yocto-img-customization.tex b/distribution/yocto-advanced/yocto-img-customization.tex
new file mode 100644
index 0000000..85599b7
--- /dev/null
+++ b/distribution/yocto-advanced/yocto-img-customization.tex
@@ -0,0 +1,74 @@
+\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}
diff --git a/distribution/yocto-advanced/yocto-layer-imx6.tex b/distribution/yocto-advanced/yocto-layer-imx6.tex
new file mode 100644
index 0000000..557afe2
--- /dev/null
+++ b/distribution/yocto-advanced/yocto-layer-imx6.tex
@@ -0,0 +1,99 @@
+\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}
diff --git a/distribution/yocto-advanced/yocto-layers.tex b/distribution/yocto-advanced/yocto-layers.tex
new file mode 100644
index 0000000..1c6dc53
--- /dev/null
+++ b/distribution/yocto-advanced/yocto-layers.tex
@@ -0,0 +1,69 @@
+\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}
diff --git a/distribution/yocto-advanced/yocto-local-conf.tex b/distribution/yocto-advanced/yocto-local-conf.tex
new file mode 100644
index 0000000..b8dd222
--- /dev/null
+++ b/distribution/yocto-advanced/yocto-local-conf.tex
@@ -0,0 +1,37 @@
+\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}
diff --git a/distribution/yocto-advanced/yocto-resume.tex b/distribution/yocto-advanced/yocto-resume.tex
new file mode 100644
index 0000000..1db1e87
--- /dev/null
+++ b/distribution/yocto-advanced/yocto-resume.tex
@@ -0,0 +1,10 @@
+\subsection{Resume}
+\begin{frame}
+ \begin{itemize}
+ \item Yocto is a huge collection of tools
+ \item Bitbake can be used to describe/build a distribution
+ \item The quality of the Images depend on the maintainance of the Layers
+ \item Only build your own distribution if you really need to!
+ \item Poky can be used as an example / reference.
+ \end{itemize}
+\end{frame}
diff --git a/distribution/yocto-advanced/yocto-sdcard-generation.tex b/distribution/yocto-advanced/yocto-sdcard-generation.tex
new file mode 100644
index 0000000..a36e213
--- /dev/null
+++ b/distribution/yocto-advanced/yocto-sdcard-generation.tex
@@ -0,0 +1,109 @@
+\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}
diff --git a/distribution/yocto-advanced/yocto-ti-layer.tex b/distribution/yocto-advanced/yocto-ti-layer.tex
new file mode 100644
index 0000000..5b5daa9
--- /dev/null
+++ b/distribution/yocto-advanced/yocto-ti-layer.tex
@@ -0,0 +1,103 @@
+\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}
diff --git a/distribution/yocto-advanced/yocto-u-boot-integration.tex b/distribution/yocto-advanced/yocto-u-boot-integration.tex
new file mode 100644
index 0000000..6b1421e
--- /dev/null
+++ b/distribution/yocto-advanced/yocto-u-boot-integration.tex
@@ -0,0 +1,35 @@
+\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}