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.tex1062
1 files changed, 18 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}