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