summaryrefslogtreecommitdiff
path: root/distribution/yocto-advanced/pres_yocto-advanced.tex
diff options
context:
space:
mode:
Diffstat (limited to 'distribution/yocto-advanced/pres_yocto-advanced.tex')
-rw-r--r--distribution/yocto-advanced/pres_yocto-advanced.tex1023
1 files changed, 26 insertions, 997 deletions
diff --git a/distribution/yocto-advanced/pres_yocto-advanced.tex b/distribution/yocto-advanced/pres_yocto-advanced.tex
index 51bd7b5..7e94bff 100644
--- a/distribution/yocto-advanced/pres_yocto-advanced.tex
+++ b/distribution/yocto-advanced/pres_yocto-advanced.tex
@@ -6,1002 +6,31 @@
\begin{frame}
\frametitle{Agenda}
\begin{itemize}
-\item Using BSP layers (beaglebone)
-\item Build a predefined image (beaglebone)
-\item Creating a layer
-\item Define a distribution
-\item Create an image
-\item Writing recipes
-\item Yocto \& ELBE combined
-\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}
- \pause
- \item add recipe directories to BBFILES
- \begin{verbatim}BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
- ${LAYERDIR}/recipes-*/*/*.bbappend"\end{verbatim}
- \pause
- \item add layer name to BBFILE\_COLLECTIONS
- \begin{verbatim}BBFILE_COLLECTIONS += "mylayer"\end{verbatim}
- \pause
- \item set root of the layer
- \begin{verbatim}BBFILE_PATTERN_mylayer = "^${LAYERDIR}/"\end{verbatim}
- \pause
- \item set default priority of the layer
- \begin{verbatim}BBFILE_PRIORITY_mylayer = "5"\end{verbatim}
- \pause
- \item set version of layer (only increment if dependencies with other
- layers are affected)
- \begin{verbatim}LAYERVERSION_mylayer = "2"\end{verbatim}
- \pause
- \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 % git branch -r
-poky % git checkout <RELEASE>
-\end{verbatim}
-have a look at it's dependencies
-\begin{verbatim}
-poky % cat meta-ti/conf/layer.conf | grep LAYERDEPENDS
-LAYERDEPENDS_ti = "core"
-\end{verbatim}
-and retrieve them also (if not yet done).
-
-If added a new layer, check its dependencies again.
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{get example layer for trainig}
-\begin{verbatim}
-poky % git clone /home/devel/yocto/meta-mini
-\end{verbatim}
-\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{Build a predefined image}
-\begin{frame}
-\frametitle{overview}
-builds are configured using two configuration files
-\begin{itemize}
- \item build-ti/conf/bblayers.conf
- \item 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 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 5
-\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 1.7.1
- meta-ti 1.6.3
-directfb-examples:
- meta 1.7.0
- meta-ti 1.6.0
-xserver-xorg:
- meta 2:1.15.0
- meta-ti 2:1.14.4
-\end{verbatim}
-\end{frame}
-
-\begin{frame}
-\frametitle{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{configure the machine}
-to get a list of currently available machines configs:
-\begin{verbatim}
-poky/build-ti % grep -r '@NAME' ../meta*/conf/machine
-\end{verbatim}
-beaglebone.conf - seems to be the one for our bord, so set
-\begin{verbatim}
-MACHINE ??= "beaglebone"
-\end{verbatim}
-in conf/local.conf
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{package format}
-as we realized with toaster, rpm packaging consumes a lot of CPU time, so lets
-try ipk, by setting
-\begin{verbatim}
-PACKAGE_CLASSES ?= "package_ipk"
-\end{verbatim}
-in conf/local.conf
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{set extra image features}
-we want an image suitable for development, so set
-\begin{verbatim}
-EXTRA_IMAGE_FEATURES = "debug-tweaks tools-debug \
- eclipse-debug tools-profile"
-\end{verbatim}
-in conf/local.conf
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{build an predefined image}
-use
-\begin{verbatim}
-ls ../*/*/images/
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{build a qt demo image}
-\begin{verbatim}
-poky/build-ti % source toaster start
-poky/build-ti % bitbake qt4e-demo-image
-Currently 4 running tasks (26 of 4459):
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{build a ti demo image}
-\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??
-\begin{verbatim}
-poky/build-ti % df -h
-Filesystem Size Used Avail Use% Mounted on
-/dev/sda4 367G 348G 850M 100% /
-poky/build-ti % du -sm .
-31026 .
-poky/build-ti % du -sm ../build
-29172 ../build/
-\end{verbatim}
-\dots so the solution is to cleanup the disk and run
-\begin{verbatim}
-poky/build-ti % bitbake qt4e-demo-image
-\end{verbatim}
-again.
-
-A different behaviour can be configured in 'conf/local.conf'.
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{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}
-to solve this issue:
-\begin{verbatim}
-poky/build-ti % echo 'ACCEPT_FSL_EULA = "1"' >> conf/local.conf
-\end{verbatim}
-\dots and run
-\begin{verbatim}
-poky/build-ti % bitbake qt4e-demo-image
-\end{verbatim}
-again.
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{flashing the image}
-if the build is completed the image can be transfered to a sdcard:
-\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{flashing the 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]
-\begin{verbatim}
-poky/meta-mini % cd ../build-ti
-\end{verbatim}
-edit 'conf/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 \
- /home/devel/poky/meta-mini \
- "
-\end{verbatim}
-\end{frame}
-
-\subsection{Define a distribution}
-\begin{frame}
-\frametitle{why define a distribution?}
-\begin{itemize}
-\item naming of the toolchain (codenames, vendor)
-\item version numbers
-\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
-\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{exkurs: 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-mini/conf/distro/mini.conf:
-\begin{verbatim}
-DISTRO = "mini"
-DISTRO_NAME = "mini 1.0 (for foo devices)"
-DISTRO_VERSION = "1.0"
-DISTRO_CODENAME = "mal"
-SDK_VENDOR = "-linutronix"
-SDK_VERSION := "${@'${DISTRO_VERSION}'}"
-MAINTAINER = "Manuel Traut <manut@linutronix.de>"
-TARGET_VENDOR = "-linutronix"
-LOCALCONF_VERSION = "1"
-LAYER_CONF_VERSION ?= "6"
-DISTRO_FEATURES_append = " opengl"
-\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}
-
-\begin{frame}[fragile]
-\frametitle{use mini distro}
-edit DISTRO var in conf/local.conf
-\begin{verbatim}
-DISTRO ?= "mini"
-\end{verbatim}
-\end{frame}
-
-\subsection{Creating images}
-\begin{frame}[fragile]
-\frametitle{based on core-image class}
-\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}
-create the file
-'meta-mini/recipes-bsp/mini-image/mini-image.bb'
-\begin{verbatim}
-IMAGE_INSTALL += "openssh"
-inherit core-image
-\end{verbatim}
-to build the image, use:
-\begin{verbatim}
-poky/build-ti % bitbake mini-image
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{first errors and warnings}
-\begin{verbatim}
-recommended that you use a tested distribution.
-ERROR: OE-core's config sanity checker detected a potential
- misconfiguration. Either fix the cause of this error or
- at your own risk disable the checker see sanity.conf).
-Following is the list of potential problems / advisories:
-
-libsdl-native is set to be ASSUME_PROVIDED but sdl-config can't be
-found in PATH. Please either install it, or configure qemu not to
-require sdl.
-ERROR: Execution of event handler 'check_sanity_eventhandler' failed
-ERROR: Command execution failed: Exited with 1
-\end{verbatim}
-\end{frame}
-\begin{frame}[fragile]
-
- \frametitle{disable sdl support in qemu}
-edit conf/local.conf:
-\begin{verbatim}
-# PACKAGECONFIG_pn-qemu-native = "sdl"
-# PACKAGECONFIG_pn-nativesdk-qemu = "sdl"
-# ASSUME_PROVIDED += "libsdl-native"
-\end{verbatim}
-\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"
-KERNEL_IMAGETYPE = "uImage"
-
-inherit kernel
-require recipes-kernel/linux/linux-dtb.inc
-require recipes-kernel/linux/setup-defconfig.inc
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{adding a kernel \#2}
-\begin{verbatim}
-COMPATILBE_MACHINE_beaglebone-black = "beaglebone-black"
-KERNEL_DEVICETREE_beaglebone-black = \
-"arch/arm/boot/dts/am335x-boneblack.dts"
-
-S = "${WORKDIR}/linux-${PV}"
-
-SRC_URI = " \
-https://www.kernel.org/pub/linux/kernel/v3.x/linux-${PV}.tar.xz \
-file://defconfig \
-"
-
-SRC_URI[md5sum] = "???"
-SRC_URI[sha256sum] = "???"
-
-KERNEL_EXTRA_ARGS += "LOADADDR=${UBOOT_ENTRYPOINT}"
-
-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-yocto"
-
-
-\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"
-\item setting DEFAULT\_PREFERENCE to "-1" makes the recipe unlikely to be used
- unless it is explicitly referenced.
-\item setting DEFAULT\_PREFERENCE to "1" makes it likely the recipe is used
-\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}
-
-\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}
-\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}
-\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{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}
+ \item Using BSP layers
+ \item Create layers \& recipes for own applications
+ \item Define a distribution
+ \item Create a customized image class
+ \item Build images
+\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}