diff options
| author | Manuel Traut <manut@linutronix.de> | 2016-05-18 09:44:42 +0200 |
|---|---|---|
| committer | Manuel Traut <manut@linutronix.de> | 2016-05-18 09:44:42 +0200 |
| commit | e11da41853ddb36745c68adaab352fbe00bebc16 (patch) | |
| tree | 6910e39f9f93b1622cc6692701ae42fd289e339a /distribution | |
| parent | 03566e0d038005ca58630c3decc1f5ae301a67a7 (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')
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} |
