SlideShare a Scribd company logo
1 of 85
Download to read offline
Yocto and IoT
A retrospective
Maciej BorzΔ™cki
FOSDEM 2016
● Working with embedded systems
since 2006
● Since 2013 at Open-RnD Sp. z o.o.
● Software Architect
IoT
The Internet of Things (IoT) is the network of physical objects,
devices, vehicles, buildings and other items which are
embedded with electronics, software, sensors, and network
connectivity, which enables these objects to collect and
exchange data.
(Wikipedia)
The Internet of Things (IoT) is the network of physical objects,
devices, vehicles, buildings and other items which are
embedded with electronics, software, sensors, and network
connectivity, which enables these objects to collect and
exchange data.
(Wikipedia)
Gartner's 2015 Hype Cycle for Emerging Technologies Identifies the Computing
Innovations That Organizations Should Monitor - https://www.gartner.
com/newsroom/id/3114217
Yocto
Taxonomy
● Yocto Project
β—‹ Umbrella project
● Poky
β—‹ Reference
distribution
● Bitbake
β—‹ Build tool
● OpenEmbedded
β—‹ Build system
β—‹ OE-core
β—‹ meta-oe
1. Grab code (git://git.yoctoproject.org/poky)
2. Setup environment:
$ source poky/oe-init-build-env qemu-x86
3. Build a reference image:
$ bitbake core-image-minimal
4. Wait...
5. Start QEMU with your image:
$ runqemu qemux86 core-image-minimal nographic
Yocto 101
Yocto 101 condt.
Yocto Project Reference Manual - https://www.yoctoproject.org/docs/2.1/ref-manual/ref-manual.html
OpenEmbedded Architecture
Most important pieces
● Machine
β—‹ Usually the target platform, examples: raspberrypi, beaglebone, genericx86-64
β—‹ Platform description - CPU, flash, boot devices, serial console
β—‹ Influences how packages are built and which ones may get installed
● Distro
β—‹ Policy and features at the distribution level, examples: poky, poky-tiny
β—‹ Influences how packages are built and which ones get installed
β—‹ X11 vs. wayland, init system, alsa & PulseAudio, OpenGL ..
● Image
β—‹ Predefined images: core-image-minimal
β—‹ System image features, influences which packages get installed
β—‹ debug-tweaks, dropbear vs. openssh
● Machine
β—‹ Usually the target platform, examples: raspberrypi, beaglebone, genericx86-64
β—‹ Platform description - CPU, flash, boot devices, serial console
β—‹ Influences how packages are built and which ones may get installed
● Distro
β—‹ Policy and features at the distribution level, examples: poky, poky-tiny
β—‹ Influences how packages are built and which ones get installed
β—‹ X11 vs. wayland, init system, alsa & PulseAudio, OpenGL ..
● Image
β—‹ Predefined images: core-image-minimal
β—‹ System image features, influences which packages get installed
β—‹ debug-tweaks, dropbear vs. openssh
conf/local.conf:
DISTRO = β€œpoky”
MACHINE = β€œbeaglebone”
$ bitbake core-image-minimal
Most important pieces
● layers
β—‹ recipes
β–  poky/meta/recipes-core/busybox/busybox_1.24.1.bb
β–  poky/meta/recipes-devtools/python/python_2.7.9.bb
β—‹ machines
β–  poky/meta-yocto-bsp/conf/machine/beaglebone.conf
β—‹ distributions
β–  poky/meta-yocto/conf/distro/poky.conf
● upon layers (mix and match layers)
β—‹ new recipes & extend existing ones
β–  meta-virtualization/recipes-core/busybox/busybox_%.bbappend - extends busybox
β—‹ even more machines
β–  meta-ti/conf/machine/beaglebone.conf
Code organization
● layers
β—‹ recipes
β–  poky/meta/recipes-core/busybox/busybox_1.24.1.bb
β–  poky/meta/recipes-devtools/python/python_2.7.9.bb
β—‹ machines
β–  poky/meta-yocto-bsp/conf/machine/beaglebone.conf
β—‹ distributions
β–  poky/meta-yocto/conf/distro/poky.conf
● upon layers (mix and match layers)
β—‹ new recipes & extend existing ones
β–  meta-virtualization/recipes-core/busybox/busybox_%.bbappend - extends busybox
β—‹ even more machines
β–  meta-ti/conf/machine/beaglebone.conf
$ bitbake-layers show-layers
$ bitbake-layers show-recipes
Code organization
● layers
β—‹ recipes
β–  poky/meta/recipes-core/busybox/busybox_1.24.1.bb
β–  poky/meta/recipes-devtools/python/python_2.7.9.bb
β—‹ machines
β–  poky/meta-yocto-bsp/conf/machine/beaglebone.conf
β—‹ distributions
β–  poky/meta-yocto/conf/distro/poky.conf
● upon layers (mix and match layers)
β—‹ new recipes & extend existing ones
β–  meta-virtualization/recipes-core/busybox/busybox_%.bbappend - extends busybox
β—‹ even more machines
β–  meta-ti/conf/machine/beaglebone.conf
$ bitbake-layers show-appends
Code organization
● layers
β—‹ recipes
β–  poky/meta/recipes-core/busybox/busybox_1.24.1.bb
β–  poky/meta/recipes-devtools/python/python_2.7.9.bb
β—‹ machines
β–  poky/meta-yocto-bsp/conf/machine/beaglebone.conf
β—‹ distributions
β–  poky/meta-yocto/conf/distro/poky.conf
● upon layers (mix and match layers)
β—‹ new recipes & extend existing ones
β–  meta-virtualization/recipes-core/busybox/busybox_%.bbappend - extends busybox
β—‹ even more machines
β–  meta-ti/conf/machine/beaglebone.conf
Code organization
poky
β”œβ”€β”€ bitbake
β”œβ”€β”€ documentation
β”œβ”€β”€ meta
β”œβ”€β”€ meta-selftest
β”œβ”€β”€ meta-skeleton
β”œβ”€β”€ meta-yocto
β”œβ”€β”€ meta-yocto-bsp
└── scripts
meta-ti
β”œβ”€β”€ conf
β”œβ”€β”€ licenses
β”œβ”€β”€ recipes-bsp
β”œβ”€β”€ recipes-connectivity
β”œβ”€β”€ recipes-core
β”œβ”€β”€ recipes-devtools
β”œβ”€β”€ recipes-graphics
β”œβ”€β”€ recipes-kernel
β”œβ”€β”€ recipes-ti
└── scripts
meta-openembedded
β”œβ”€β”€ contrib
β”œβ”€β”€ meta-efl
β”œβ”€β”€ meta-filesystems
β”œβ”€β”€ meta-gnome
β”œβ”€β”€ meta-gpe
β”œβ”€β”€ meta-initramfs
β”œβ”€β”€ meta-multimedia
β”œβ”€β”€ meta-networking
β”œβ”€β”€ meta-oe
β”œβ”€β”€ meta-perl
β”œβ”€β”€ meta-python
β”œβ”€β”€ meta-ruby
β”œβ”€β”€ meta-systemd
β”œβ”€β”€ meta-webserver
└── meta-xfce
Directory structure
Recipe
SUMMARY = "Simple helloworld application"
SECTION = "examples"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = "file://helloworld.c"
S = "${WORKDIR}"
do_compile() {
${CC} helloworld.c -o helloworld
}
do_install() {
install -d ${D}${bindir}
install -m 0755 helloworld ${D}${bindir}
}
Yocto at Open-RnD
● Previous experience with cross-compilation build systems
β—‹ Buildroot ~2007
β—‹ Custom solutions after that
● Maintenance headache
β—‹ Ill-configured vendor supplied SDKs
● QA & tracking
● Reinventing the wheel
β—‹ Is there any actual value in building from scratch?
● Gave Yocto a try
β—‹ ~80 commits
β—‹ 12 projects
Background
● ParkEasily
β—‹ Distributed monitoring of parking spots
● Sonda
β—‹ Athletic workout gadget
● Ros3D
β—‹ Remote control of a 3D camera rig
● Timeline
ParkEasily Sonda Ros3D
20162014
Projects
System Architecture
System Architecture
Prototype devices
● Started with a point release
β—‹ marked as stable release - must be good?
● Single layer with our packages - meta-openrnd
β—‹ 4 core recipes, 7 packages, 2 package groups, 2 platform glue packages, 3 images
● Platforms - BeagleBone Black, Raspberry PI (early prototyping)
● Couple of bbappends
● First upstream contributions - wic fixes, rabbitmq-c
● Custom distro - openrnd-poky-systemd
● Used layers: meta-{ti, raspberrypi, oe, networking, python}
Baby steps
● Tracking a point release
β—‹ Harder to contribute fixes
β—‹ More work backporting desired patches
● Single layer with our packages
β—‹ Reuse meta-openrnd for other projects
β—‹ Recipes changed by bbappends must exist
● Inflexible
Baby steps - what went bad?
● Branch off master with a very simple policy
β–  Preserve upstream branch names - easier tracking and syncing
β–  Simple naming scheme openrnd/master based on master
β–  Project branches parkeasily/master
β–  Periodic merge
● Layer split
β—‹ meta-openrnd & meta-parkeasily
Baby steps -solutions
Sonda
System Architecture
System Architecture
● Accelerometers
● Gyroscopes
● Heartbeat
● Position (10Hz)
● On board storage
● 3G connectivity
● STM32F1x
Workout gadget
● Storage
● Recharge station
● Firmware update
Data hub
● Project branching sonda/master
● Project layer
β—‹ 3 core recipes, 3 packages, some platform glue
● Single platform only - BeagleBone Black
● Very few *.bbappends
● More wic fixes
β—‹ MBR & multiple partitions
● Used layers: meta-{ti, oe}
Approach
● meta-openrnd
β—‹ Reuse some common recipes - ex. systemd-networkd default config
● meta-sonda
β—‹ Custom distribution sonda
β—‹ Override some default settings
β–  Use systemd as init
β–  Ship systemd-networkd
Layer organization
# short-description: Create SD card image for Sonda case appliance
# long-description: Creates a partitioned SD card image. Boot files
# are located in the first vfat partition. Usable in Sond case
# appliance.
part /boot --source bootimg-partition --ondisk mmcblk0 --fstype=vfat --label boot --active --
align 4 --size 16
part / --source rootfs --ondisk mmcblk0 --fstype=ext4 --label root --align 4
part /var/lib/sonda --ondisk mmcblk0 --fstype=ext4 --label sondadata --align 307200 --size 1024
System firmware image - wic
System Architecture
System Architecture
On the set
Stereoscopic Camera Rig
Rig Controller
Rig Controller - Mobile App
Rig Controller
Image Analyzer
● Most of source code is open source (MIT)
● Repositories
β—‹ https://github.com/open-rnd/ros3d-stream
β—‹ https://github.com/open-rnd/ros3d-dev-controller
β—‹ https://github.com/open-rnd/ros3d-upnp
β—‹ https://github.com/open-rnd/ros3d-platform-controller
β—‹ https://github.com/open-rnd/ros3d-www
Source Code
● Project branching ros3d/master
● Reused meta-openrnd
● Project layer
β—‹ 11 core recipes, 4 images, 4 additional recipes
● Number of platforms
β—‹ Wandboad Quad (meta-fsl-arm-extra) , GW5400 (meta-gateworks), QEMU
● Different target devices
β—‹ KR - Rig Controller
β—‹ AO - Image Analyzer
● SDK
Approach
● meta-openrnd
● meta-ros3d
β—‹ Ros3D package recipes & groups
β—‹ bbappends for common packages (avahi, gupnp, busybox, network-manager)
β—‹ Custom distros: ros3d-kr ros3d-ao
● meta-ros3d-kr-wandboard-bsp (Rig Controller on Wandboard Quad)
β—‹ kernel config
β—‹ LEDs dts patches
β—‹ keys dts patches
β—‹ udev rules
● meta-ros3d-ao-gateworks-bsp (Image Analyzer on GW5400)
β—‹ video pipeline stream config for ros3d-stream
β—‹ patches for gstreamer1.0-plugins-imx
β—‹ udev rules
Layers
● meta-openrnd
● meta-ros3d
β—‹ Ros3D package recipes & groups
β—‹ bbappends for common packages (avahi, gupnp, busybox, network-manager)
β—‹ Custom distros: ros3d-kr ros3d-ao
● meta-ros3d-kr-wandboard-bsp (Rig Controller on Wandboard Quad)
β—‹ kernel config
β—‹ LEDs dts patches
β—‹ keys dts patches
β—‹ udev rules
● meta-ros3d-ao-gateworks-bsp (Image Analyzer on GW5400)
β—‹ video pipeline stream config for ros3d-stream
β—‹ patches for gstreamer1.0-plugins-imx
β—‹ udev rules
Project layers
Layers
● meta-openrnd
● meta-ros3d
β—‹ Ros3D package recipes & groups
β—‹ bbappends for common packages (avahi, gupnp, busybox, network-manager)
β—‹ Custom distros: ros3d-kr ros3d-ao
● meta-ros3d-kr-wandboard-bsp (Rig Controller on Wandboard Quad)
β—‹ kernel config
β—‹ LEDs dts patches
β—‹ keys dts patches
β—‹ udev rules
● meta-ros3d-ao-gateworks-bsp (Image Analyzer on GW5400)
β—‹ video pipeline stream config for ros3d-stream
β—‹ patches for gstreamer1.0-plugins-imx
β—‹ udev rules
Hardware layers
Layers
Project layers
meta-ros3d/conf/distro/include/ros3d-common.inc:
TARGET_VENDOR = "-poky"
MAINTAINER = "Ros3D Project <ros3d@open-rnd.pl>"
LAYER_CONF_VERSION ?= "6"
# set preferred versions
PREFERRED_PROVIDER_udev ?= "systemd"
PREFERRED_PROVIDER_udev-utils ?= "systemd"
VIRTUAL-RUNTIME_init_manager = "systemd"
VIRTUAL-RUNTIME_initscripts = ""
DISTRO_FEATURES_append = " systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
# default to systemd-networkd & systemd-resolved
for network
PACKAGECONFIG_append_pn-systemd = " networkd
resolved"
# use ipk
PACKAGE_CLASSES = "package_ipk"
meta-ros3d/conf/distro/ros3d-kr.conf:
DISTRO = "ros3d-kr"
DISTRO_NAME = "Ros3D KR Baseline"
DISTRO_CODENAME ="ros3d-kr"
DISTRO_VERSION = "1.0+snapshot-${DATE}"
require conf/distro/include/ros3d-common.inc
DISTRO_FEATURES_append = " ros3d-kr"
DISTRO_FEATURES_remove = "x11 "
Distribution
meta-ros3d/conf/distro/include/ros3d-common.inc:
TARGET_VENDOR = "-poky"
MAINTAINER = "Ros3D Project <ros3d@open-rnd.pl>"
LAYER_CONF_VERSION ?= "6"
# set preferred versions
PREFERRED_PROVIDER_udev ?= "systemd"
PREFERRED_PROVIDER_udev-utils ?= "systemd"
VIRTUAL-RUNTIME_init_manager = "systemd"
VIRTUAL-RUNTIME_initscripts = ""
DISTRO_FEATURES_append = " systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
# default to systemd-networkd & systemd-resolved
for network
PACKAGECONFIG_append_pn-systemd = " networkd
resolved"
# use ipk
PACKAGE_CLASSES = "package_ipk"
meta-ros3d/conf/distro/ros3d-kr.conf:
DISTRO = "ros3d-kr"
DISTRO_NAME = "Ros3D KR Baseline"
DISTRO_CODENAME ="ros3d-kr"
DISTRO_VERSION = "1.0+snapshot-${DATE}"
require conf/distro/include/ros3d-common.inc
DISTRO_FEATURES_append = " ros3d-kr"
DISTRO_FEATURES_remove = "x11 "
If needed test for distro
features when building
common package
Distribution
Distribution - in recipe
do_install_append() {
...
# replace device.xml with target specific one
rm -f ${D}${datadir}/ros3d-upnp/device.xml
if ${@bb.utils.contains('DISTRO_FEATURES', 'ros3d-kr', 'true', 'false', d)}; then
install -m 0644 -t ${D}${datadir}/ros3d-upnp ${WORKDIR}/device-kr.xml
ln -s device-kr.xml ${D}${datadir}/ros3d-upnp/device.xml
fi
...
}
Distribution - in recipe
do_install_append() {
...
# replace device.xml with target specific one
rm -f ${D}${datadir}/ros3d-upnp/device.xml
if ${@bb.utils.contains('DISTRO_FEATURES', 'ros3d-kr', 'true', 'false', d)}; then
install -m 0644 -t ${D}${datadir}/ros3d-upnp ${WORKDIR}/device-kr.xml
ln -s device-kr.xml ${D}${datadir}/ros3d-upnp/device.xml
fi
...
}
Inline Python
mborzecki@comp_016_pc_buildenv:ros3d/ros3d-head/wandboard bitbake-layers show-layers
layer path priority
==========================================================================
meta-ros3d-kr-wandboard-bsp /home/mborzecki/yocto/ros3d/ros3d-head/meta-ros3d-kr-wandboard-bsp 6
meta-ros3d /home/mborzecki/yocto/ros3d/ros3d-head/meta-ros3d 7
meta-openrnd /home/mborzecki/yocto/ros3d/ros3d-head/meta-openrnd 6
meta-intel-iot-middleware /home/mborzecki/yocto/ros3d/ros3d-head/meta-intel-iot-middleware 8
meta-oe /home/mborzecki/yocto/ros3d/ros3d-head/meta-openembedded/meta-oe 6
meta-gnome /home/mborzecki/yocto/ros3d/ros3d-head/meta-openembedded/meta-gnome 7
meta-networking /home/mborzecki/yocto/ros3d/ros3d-head/meta-openembedded/meta-networking 5
meta-python /home/mborzecki/yocto/ros3d/ros3d-head/meta-openembedded/meta-python 7
meta-multimedia /home/mborzecki/yocto/ros3d/ros3d-head/meta-openembedded/meta-multimedia 6
meta-fsl-arm-extra /home/mborzecki/yocto/ros3d/ros3d-head/meta-fsl-arm-extra 4
meta-fsl-arm /home/mborzecki/yocto/ros3d/ros3d-head/meta-fsl-arm 5
meta-yocto-bsp /home/mborzecki/yocto/ros3d/ros3d-head/poky/meta-yocto-bsp 5
meta-yocto /home/mborzecki/yocto/ros3d/ros3d-head/poky/meta-yocto 5
meta /home/mborzecki/yocto/ros3d/ros3d-head/poky/meta 5
workspace /home/mborzecki/yocto/ros3d/ros3d-head/wandboard/workspace 99
Layers - Rig Controller
Custom machine - Rig Controller
#@TYPE: Machine
#@NAME: Ros3D Rig Controller based on Wandboard i.MX6 Wandboard Quad
#@SOC: i.MX6Q
#@DESCRIPTION: Machine configuration for Ros3D Rig Controller based on i.MX6 Wandboard Quad
#@MAINTAINER: Maciej Borzecki <maciej.borzecki@open-rnd.pl>
require conf/machine/wandboard-quad.conf
MACHINE_EXTRA_RRECOMMENDS += " 
bcm4329-nvram-config 
kr-leds 
kr-wandboard-keys 
kernel-devicetree 
"
#@TYPE: Machine
#@NAME: Ros3D Rig Controller based on Wandboard i.MX6 Wandboard Quad
#@SOC: i.MX6Q
#@DESCRIPTION: Machine configuration for Ros3D Rig Controller based on i.MX6 Wandboard Quad
#@MAINTAINER: Maciej Borzecki <maciej.borzecki@open-rnd.pl>
require conf/machine/wandboard-quad.conf
MACHINE_EXTRA_RRECOMMENDS += " 
bcm4329-nvram-config 
kr-leds 
kr-wandboard-keys 
kernel-devicetree 
"
Base on Wandboard Quad config
Custom machine - Rig Controller
#@TYPE: Machine
#@NAME: Ros3D Rig Controller based on Wandboard i.MX6 Wandboard Quad
#@SOC: i.MX6Q
#@DESCRIPTION: Machine configuration for Ros3D Rig Controller based on i.MX6 Wandboard Quad
#@MAINTAINER: Maciej Borzecki <maciej.borzecki@open-rnd.pl>
require conf/machine/wandboard-quad.conf
MACHINE_EXTRA_RRECOMMENDS += " 
bcm4329-nvram-config 
kr-leds 
kr-wandboard-keys 
kernel-devicetree 
"
udev glue
Custom machine - Rig Controller
Base on Wandboard Quad config
mborzecki@comp_016_pc_buildenv:ros3d/ros3d-head/gateworks bitbake-layers show-layers
layer path priority
==========================================================================
meta-ros3d-ao-gateworks-bsp /home/mborzecki/yocto/ros3d/ros3d-head/meta-ros3d-ao-gateworks-bsp 6
meta-ros3d /home/mborzecki/yocto/ros3d/ros3d-head/meta-ros3d 7
meta-openrnd /home/mborzecki/yocto/ros3d/ros3d-head/meta-openrnd 6
meta-intel-iot-middleware /home/mborzecki/yocto/ros3d/ros3d-head/meta-intel-iot-middleware 8
meta-oe /home/mborzecki/yocto/ros3d/ros3d-head/meta-openembedded/meta-oe 6
meta-networking /home/mborzecki/yocto/ros3d/ros3d-head/meta-openembedded/meta-networking 5
meta-python /home/mborzecki/yocto/ros3d/ros3d-head/meta-openembedded/meta-python 7
meta-multimedia /home/mborzecki/yocto/ros3d/ros3d-head/meta-openembedded/meta-multimedia 6
meta-gateworks /home/mborzecki/yocto/ros3d/ros3d-head/meta-gateworks 6
meta-fsl-arm-extra /home/mborzecki/yocto/ros3d/ros3d-head/meta-fsl-arm-extra 4
meta-fsl-arm /home/mborzecki/yocto/ros3d/ros3d-head/meta-fsl-arm 5
meta-yocto-bsp /home/mborzecki/yocto/ros3d/ros3d-head/poky/meta-yocto-bsp 5
meta-yocto /home/mborzecki/yocto/ros3d/ros3d-head/poky/meta-yocto 5
meta /home/mborzecki/yocto/ros3d/ros3d-head/poky/meta 5
workspace /home/mborzecki/yocto/ros3d/ros3d-head/gateworks/workspace 99
Layers - Image Analyzer
How did it work out?
● Flexible
● Easily exchange platforms
β—‹ Hassle free builds for QEMU and even for genericx86-64
● Clear separation between project and hardware
● Software configuration via files extremely convenient
β—‹ ros3d-stream pipeline different between platforms
● Packager friendly software
jhbuild
● Looking for a decent chroot-like development tools, alternatives?
β—‹ Bunch of custom scripts
β–  PKG_CONFIG_PATH, PATH, ACLOCAL_PATH, GI_TYPELIB_PATH, LD_PRELOAD,
LD_LIBRARY_PATH, PYTHONPATH, PERL5LIB, GST_PLUGIN_PATH, LDFLAGS,
CFLAGS, CXXFLAGS
β—‹ autotools? cmake? setuptools?
β—‹ Out of the source builds
β—‹ Confined chroot
β—‹ Code checkout
jhbuild
● Looking for a decent chroot-like development tools, alternatives?
β—‹ Bunch of custom scripts
β–  PKG_CONFIG_PATH, PATH, ACLOCAL_PATH, GI_TYPELIB_PATH, LD_PRELOAD,
LD_LIBRARY_PATH, PYTHONPATH, PERL5LIB, GST_PLUGIN_PATH, LDFLAGS,
CFLAGS, CXXFLAGS
β—‹ autotools? cmake? setuptools?
β—‹ Out of the source builds
β—‹ Confined chroot
β—‹ Code checkout
● Builds GNOME, Xorg, Mesa 3D
● https://github.com/bboozzoo/jhbuild-helper
jhbuild
jhbuildjhbuildrc
module
set
build
configure
staging
install root
jhbuild
$ tree install-root build-root/stream
checkout/stream
install-root
β”œβ”€β”€ bin
β”‚ └── ros3d-stream
β”œβ”€β”€ etc
β”‚ └── ros3d-stream
β”‚ └── ros3d-stream.conf
└── _jhbuild
β”œβ”€β”€ info
β”‚ └── ros3d-stream
└── manifests
└── ros3d-stream
build-root/stream
β”œβ”€β”€ config.log
β”œβ”€β”€ config.status
β”œβ”€β”€ libtool
β”œβ”€β”€ Makefile
β”œβ”€β”€ ros3d-stream
└── src
β”œβ”€β”€ ros3d_stream-config.o
β”œβ”€β”€ ros3d_stream-httpapi.o
β”œβ”€β”€ ros3d_stream-main.o
β”œβ”€β”€ ros3d_stream-stream-client.o
β”œβ”€β”€ ros3d_stream-stream-manager.o
β”œβ”€β”€ ros3d_stream-stream.o
└── ros3d_stream-zeroconf.o
jhbuildjhbuildrc
module
set
$ tree install-root build-root/stream
checkout/stream
install-root
β”œβ”€β”€ bin
β”‚ └── ros3d-stream
β”œβ”€β”€ etc
β”‚ └── ros3d-stream
β”‚ └── ros3d-stream.conf
└── _jhbuild
β”œβ”€β”€ info
β”‚ └── ros3d-stream
└── manifests
└── ros3d-stream
build-root/stream
β”œβ”€β”€ config.log
β”œβ”€β”€ config.status
β”œβ”€β”€ libtool
β”œβ”€β”€ Makefile
β”œβ”€β”€ ros3d-stream
└── src
β”œβ”€β”€ ros3d_stream-config.o
β”œβ”€β”€ ros3d_stream-httpapi.o
β”œβ”€β”€ ros3d_stream-main.o
β”œβ”€β”€ ros3d_stream-stream-client.o
β”œβ”€β”€ ros3d_stream-stream-manager.o
β”œβ”€β”€ ros3d_stream-stream.o
└── ros3d_stream-zeroconf.o
build
configure
staging
install root
jhbuild
All under a custom prefix
<?xml version="1.0"?><!--*- mode: nxml -*-->
<!DOCTYPE moduleset SYSTEM "moduleset.dtd">
<?xml-stylesheet type="text/xsl" href="moduleset.xsl"?>
<moduleset>
<!-- repositories -->
<!-- modules -->
</moduleset>
jhbuild - module set
<?xml version="1.0"?><!--*- mode: nxml -*-->
<!DOCTYPE moduleset SYSTEM "moduleset.dtd">
<?xml-stylesheet type="text/xsl" href="moduleset.xsl"?>
<moduleset>
<!-- repositories -->
<repository type="system" name="system" />
<repository type="git" href="ssh://git.open-rnd.net:29418/"
name="git-rnd" default="yes"/>
<!-- modules -->
</moduleset>
jhbuild - repositories
<?xml version="1.0"?><!--*- mode: nxml -*-->
<!DOCTYPE moduleset SYSTEM "moduleset.dtd">
<?xml-stylesheet type="text/xsl" href="moduleset.xsl"?>
<moduleset>
<!-- repositories -->
<repository type="system" name="system" />
<repository type="git" href="ssh://git.open-rnd.net:29418/"
name="git-rnd" default="yes"/>
<!-- modules -->
<systemmodule id="glib-2.0">
<pkg-config>glib-2.0.pc</pkg-config>
<branch repo="system" version="2.32"/>
</systemmodule>
<systemmodule id="gstreamer-1.0">
<pkg-config>gstreamer-1.0.pc</pkg-config>
<branch repo="system"/>
</systemmodule>
</moduleset>
jhbuild - modules
...
<autotools id="ros3d-stream"
autogen-sh="autoreconf">
<branch module="open-rnd.ros3d.stream"
checkoutdir="stream"/>
<dependencies>
<dep package="gstreamer-1.0" />
<dep package="libsoup-2.4" />
<dep package="glib-2.0" />
<dep package="gio-2.0" />
</dependencies>
</autotools>
...
jhbuild - modules
...
<autotools id="ros3d-stream"
autogen-sh="autoreconf">
<branch module="open-rnd.ros3d.stream"
checkoutdir="stream"/>
<dependencies>
<dep package="gstreamer-1.0" />
<dep package="libsoup-2.4" />
<dep package="glib-2.0" />
<dep package="gio-2.0" />
</dependencies>
</autotools>
...
$ jh sysdeps --install ros3d-stream
$ jh buildone ros3d-stream
$ jh build ros3d-stream
jhbuild - modules
...
<cmake id="red-rcp-api">
<branch module="open-rnd.ros3d.camera"
checkoutdir="camera"
revision="ros3d/master"
/>
<dependencies>
</dependencies>
</cmake>
...
jhbuild - modules
...
<distutils id="ros3d-dev-controller">
<branch module="open-rnd.ros3d.controler"
checkoutdir="dev-controller"/>
<dependencies>
<dep package="ros3d-servo" />
</dependencies>
</distutils>
...
jhbuild - modules
● Force proper build system tooling
β—‹ automake, cmake, setuptools
● Less packaging effort
β—‹ Early testing!!!
● Confined development root
β—‹ Libraries not present in your repositories
β—‹ Particular library versions
jhbuild
Vala
● High level, C# like syntax
● valac
β—‹ C# compiles to C with GObject, Glib, Gio
β—‹ C compiles with your favourite C compiler
● Zero overhead interfacing with C
● VAPI == C header
β—‹ Lets Vala know how to call C code
● autotools and Yocto support:
inherit autotools pkgconfig vala
β—‹ no extra configuration needed
● Broken VAPI autogeneration
β—‹ Why not ship VAPI files with source code?
Vala
● High level, C# like syntax
● valac
β—‹ C# compiles to C with GObject, Glib, Gio
β—‹ C compiles with your favourite C compiler
● Zero overhead interfacing with C
● VAPI == C header
β—‹ Lets Vala know how to call C code
● autotools and Yocto support:
inherit autotools pkgconfig vala
β—‹ no extra configuration needed
● Broken VAPI autogeneration
β—‹ Why not ship VAPI files with source code?
Vala
https://github.com/open-rnd/ros3d-stream
Valadoc
Conclusions
● Yocto worked out great
● Split layers
β—‹ Project specific functionality
β—‹ Platform dependent functionality
● Software configuration through files
● Packager friendly build systems
● Work close to the upstream
β—‹ Contribute your patches
● Do not be afraid of following development branches
Conclusions
Maciej BorzΔ™cki
maciej.borzecki@open-rnd.pl
Thank you
QUESTIONS? THOUGHTS? COMMENTS?
Feel free to contact us!
INFO@OPEN-RND.PL
WWW.OPEN-RND.pl
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}-${PV}:"
SRC_URI += "
file://0001-ARM-dts-wandboard-leds-for-Ros3D-KR-platform.patch 
file://0001-ARM-dts-wandboard-setup-GPIO-keys-for-Ros3D-KR-platf.patch 
file://0001-tty-serial-imx-register-LED-triggers.patch 
file://0002-usb-serial-register-LED-triggers-for-each-USB-serial.patch 
file://usbserial.cfg 
"
do_configure_prepend() {
cfgs="${@ ' '.join([n for n in src_patches(d, True) if n.endswith('.cfg')])}"
bbnote "configs: ${cfgs}"
if [ -n "${cfgs}" ]; then
for cfg in "${cfgs}"; do
bbnote "Applying config ${cfg}"
cat ${cfg} >> ${WORKDIR}/defconfig
done
fi
}
Tips - poor man’s kernel config fragments
● Cross-compilation toolchain
● Set of packages for host
β—‹ *-native
● Set of packages for the target
β—‹ one of RPM, DEB, IPK, tar.gz
● Root filesystem tree (core-image-minimal)
● Disk image
● SDK
Yocto 101 condt.
inherit autotools pkgconfig vala gitpkgv systemd
DESCRIPTION = "Ros3D Streaming Service"
LICENSE = "MIT"
SRC_URI = "
git://git.open-rnd.net:29418/open-rnd.ros3d.stream;
protocol=ssh 
file://ros3d-stream.service 
"
SRCREV = "${AUTOREV}"
PVBASE := "1.0"
PV = "${PVBASE}+gitr${SRCPV}"
PKGV = "${PVBASE}+gitr${GITPKGV}"
DEPENDS = "
glib-2.0 
libsoup-2.4 
gstreamer1.0 
avahi 
"
...
RDEPENDS_${PN} += " 
glib-2.0 
libsoup-2.4 
gstreamer1.0 
libavahi-gobject 
libavahi-client 
"
CONFFILES_${PN} += "
${sysconfdir}/ros3d-stream/ros3d-stream.conf 
"
S = "${WORKDIR}/git"
SYSTEMD_SERVICE_${PN} = "ros3d-stream.service"
do_install_append() {
# install systemd service files
install -d ${D}${systemd_unitdir}/system
install -m 0644 -t ${D}${systemd_unitdir}/system/ 
${WORKDIR}/ros3d-stream.service
}
Vala and Yocto

More Related Content

What's hot

Yocto - Embedded Linux Distribution Maker
Yocto - Embedded Linux Distribution MakerYocto - Embedded Linux Distribution Maker
Yocto - Embedded Linux Distribution MakerSherif Mousa
Β 
Eclipse IDE Yocto Plugin
Eclipse IDE Yocto PluginEclipse IDE Yocto Plugin
Eclipse IDE Yocto Plugincudma
Β 
Run Qt on Linux embedded systems using Yocto
Run Qt on Linux embedded systems using YoctoRun Qt on Linux embedded systems using Yocto
Run Qt on Linux embedded systems using YoctoMarco Cavallini
Β 
Building Emmbedded Linux with Yocto project
Building Emmbedded Linux with Yocto projectBuilding Emmbedded Linux with Yocto project
Building Emmbedded Linux with Yocto projecttwcoimbatore
Β 
Luca Ceresoli - Buildroot vs Yocto: Differences for Your Daily Job
Luca Ceresoli - Buildroot vs Yocto: Differences for Your Daily JobLuca Ceresoli - Buildroot vs Yocto: Differences for Your Daily Job
Luca Ceresoli - Buildroot vs Yocto: Differences for Your Daily Joblinuxlab_conf
Β 
Marco Cavallini @ LinuxLab 2018 : Workshop Yocto Project, an automatic genera...
Marco Cavallini @ LinuxLab 2018 : Workshop Yocto Project, an automatic genera...Marco Cavallini @ LinuxLab 2018 : Workshop Yocto Project, an automatic genera...
Marco Cavallini @ LinuxLab 2018 : Workshop Yocto Project, an automatic genera...Marco Cavallini
Β 
Creating new Tizen profiles using the Yocto Project
Creating new Tizen profiles  using the Yocto ProjectCreating new Tizen profiles  using the Yocto Project
Creating new Tizen profiles using the Yocto ProjectLeon Anavi
Β 
Autobuilder2 Yocto Project Summit Lyon 2019
Autobuilder2 Yocto Project Summit Lyon 2019Autobuilder2 Yocto Project Summit Lyon 2019
Autobuilder2 Yocto Project Summit Lyon 2019Marco Cavallini
Β 
Yocto Project Dev Day Prague 2017 - Advanced class - Kernel modules with eSDK
Yocto Project Dev Day Prague 2017 - Advanced class - Kernel modules with eSDKYocto Project Dev Day Prague 2017 - Advanced class - Kernel modules with eSDK
Yocto Project Dev Day Prague 2017 - Advanced class - Kernel modules with eSDKMarco Cavallini
Β 
Yocto Project - OSCON 7-17-2012
Yocto Project - OSCON 7-17-2012Yocto Project - OSCON 7-17-2012
Yocto Project - OSCON 7-17-2012Jeffrey Osier-Mixon
Β 
Embedded Linux primer
Embedded Linux primerEmbedded Linux primer
Embedded Linux primerDrew Fustini
Β 
Getting Started with Buildroot
Getting Started with BuildrootGetting Started with Buildroot
Getting Started with BuildrootTrevor Woerner
Β 
Why you should use the Yocto Project
Why you should use the Yocto ProjectWhy you should use the Yocto Project
Why you should use the Yocto Projectrossburton
Β 
Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !
Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !
Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !Pierre-jean Texier
Β 
Embedded Recipes 2017 - Introduction to Yocto Project/OpenEmbedded - Mylène J...
Embedded Recipes 2017 - Introduction to Yocto Project/OpenEmbedded - Mylène J...Embedded Recipes 2017 - Introduction to Yocto Project/OpenEmbedded - Mylène J...
Embedded Recipes 2017 - Introduction to Yocto Project/OpenEmbedded - Mylène J...Anne Nicolas
Β 
[Webinar] An Introduction to the Yocto Embedded Framework
[Webinar] An Introduction to the Yocto Embedded Framework[Webinar] An Introduction to the Yocto Embedded Framework
[Webinar] An Introduction to the Yocto Embedded FrameworkICS
Β 
Crafting GNU/Linux distributions for Embedded target from Scratch/Source
Crafting GNU/Linux distributions for Embedded target from Scratch/SourceCrafting GNU/Linux distributions for Embedded target from Scratch/Source
Crafting GNU/Linux distributions for Embedded target from Scratch/SourceSourabh Singh Tomar
Β 
Crafting GNU/ linux distributions for embedded target using Builroot
Crafting GNU/ linux distributions for embedded target using BuilrootCrafting GNU/ linux distributions for embedded target using Builroot
Crafting GNU/ linux distributions for embedded target using BuilrootSourabh Singh Tomar
Β 
Why kernelspace sucks?
Why kernelspace sucks?Why kernelspace sucks?
Why kernelspace sucks?OpenFest team
Β 

What's hot (20)

Yocto - Embedded Linux Distribution Maker
Yocto - Embedded Linux Distribution MakerYocto - Embedded Linux Distribution Maker
Yocto - Embedded Linux Distribution Maker
Β 
Eclipse IDE Yocto Plugin
Eclipse IDE Yocto PluginEclipse IDE Yocto Plugin
Eclipse IDE Yocto Plugin
Β 
Run Qt on Linux embedded systems using Yocto
Run Qt on Linux embedded systems using YoctoRun Qt on Linux embedded systems using Yocto
Run Qt on Linux embedded systems using Yocto
Β 
Building Emmbedded Linux with Yocto project
Building Emmbedded Linux with Yocto projectBuilding Emmbedded Linux with Yocto project
Building Emmbedded Linux with Yocto project
Β 
Luca Ceresoli - Buildroot vs Yocto: Differences for Your Daily Job
Luca Ceresoli - Buildroot vs Yocto: Differences for Your Daily JobLuca Ceresoli - Buildroot vs Yocto: Differences for Your Daily Job
Luca Ceresoli - Buildroot vs Yocto: Differences for Your Daily Job
Β 
Marco Cavallini @ LinuxLab 2018 : Workshop Yocto Project, an automatic genera...
Marco Cavallini @ LinuxLab 2018 : Workshop Yocto Project, an automatic genera...Marco Cavallini @ LinuxLab 2018 : Workshop Yocto Project, an automatic genera...
Marco Cavallini @ LinuxLab 2018 : Workshop Yocto Project, an automatic genera...
Β 
Creating new Tizen profiles using the Yocto Project
Creating new Tizen profiles  using the Yocto ProjectCreating new Tizen profiles  using the Yocto Project
Creating new Tizen profiles using the Yocto Project
Β 
Autobuilder2 Yocto Project Summit Lyon 2019
Autobuilder2 Yocto Project Summit Lyon 2019Autobuilder2 Yocto Project Summit Lyon 2019
Autobuilder2 Yocto Project Summit Lyon 2019
Β 
Yocto Project Dev Day Prague 2017 - Advanced class - Kernel modules with eSDK
Yocto Project Dev Day Prague 2017 - Advanced class - Kernel modules with eSDKYocto Project Dev Day Prague 2017 - Advanced class - Kernel modules with eSDK
Yocto Project Dev Day Prague 2017 - Advanced class - Kernel modules with eSDK
Β 
Yocto Project - OSCON 7-17-2012
Yocto Project - OSCON 7-17-2012Yocto Project - OSCON 7-17-2012
Yocto Project - OSCON 7-17-2012
Β 
Embedded Linux primer
Embedded Linux primerEmbedded Linux primer
Embedded Linux primer
Β 
Getting Started with Buildroot
Getting Started with BuildrootGetting Started with Buildroot
Getting Started with Buildroot
Β 
Why you should use the Yocto Project
Why you should use the Yocto ProjectWhy you should use the Yocto Project
Why you should use the Yocto Project
Β 
Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !
Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !
Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !
Β 
Embedded Recipes 2017 - Introduction to Yocto Project/OpenEmbedded - Mylène J...
Embedded Recipes 2017 - Introduction to Yocto Project/OpenEmbedded - Mylène J...Embedded Recipes 2017 - Introduction to Yocto Project/OpenEmbedded - Mylène J...
Embedded Recipes 2017 - Introduction to Yocto Project/OpenEmbedded - Mylène J...
Β 
[Webinar] An Introduction to the Yocto Embedded Framework
[Webinar] An Introduction to the Yocto Embedded Framework[Webinar] An Introduction to the Yocto Embedded Framework
[Webinar] An Introduction to the Yocto Embedded Framework
Β 
A practical guide to buildroot
A practical guide to buildrootA practical guide to buildroot
A practical guide to buildroot
Β 
Crafting GNU/Linux distributions for Embedded target from Scratch/Source
Crafting GNU/Linux distributions for Embedded target from Scratch/SourceCrafting GNU/Linux distributions for Embedded target from Scratch/Source
Crafting GNU/Linux distributions for Embedded target from Scratch/Source
Β 
Crafting GNU/ linux distributions for embedded target using Builroot
Crafting GNU/ linux distributions for embedded target using BuilrootCrafting GNU/ linux distributions for embedded target using Builroot
Crafting GNU/ linux distributions for embedded target using Builroot
Β 
Why kernelspace sucks?
Why kernelspace sucks?Why kernelspace sucks?
Why kernelspace sucks?
Β 

Viewers also liked

Open-RnD Embedded Offer
Open-RnD Embedded OfferOpen-RnD Embedded Offer
Open-RnD Embedded OfferOpen-RnD
Β 
ROS3D - Podsumowanie prac nad projektem
ROS3D - Podsumowanie prac nad projektemROS3D - Podsumowanie prac nad projektem
ROS3D - Podsumowanie prac nad projektemOpen-RnD
Β 
Open-RnD Mobile Offer
Open-RnD Mobile OfferOpen-RnD Mobile Offer
Open-RnD Mobile OfferOpen-RnD
Β 
Open-RnD Technologically Touched
Open-RnD Technologically TouchedOpen-RnD Technologically Touched
Open-RnD Technologically TouchedOpen-RnD
Β 
Open-RnD UX/UI Design
Open-RnD UX/UI DesignOpen-RnD UX/UI Design
Open-RnD UX/UI DesignOpen-RnD
Β 
Yocto bspγ‚’δ½œγ£γ¦γΏγŸ
Yocto bspγ‚’δ½œγ£γ¦γΏγŸYocto bspγ‚’δ½œγ£γ¦γΏγŸ
Yocto bspγ‚’δ½œγ£γ¦γΏγŸwata2ki
Β 
Yocto: Training in English
Yocto: Training in EnglishYocto: Training in English
Yocto: Training in EnglishOtavio Salvador
Β 
The internet of things in now , see how golang is a part of this evolution
The internet of things in now , see how golang is a part of this evolutionThe internet of things in now , see how golang is a part of this evolution
The internet of things in now , see how golang is a part of this evolutionYoni Davidson
Β 
Board support package_on_linux
Board support package_on_linuxBoard support package_on_linux
Board support package_on_linuxVandana Salve
Β 
Device tree support on arm linux
Device tree support on arm linuxDevice tree support on arm linux
Device tree support on arm linuxChih-Min Chao
Β 
Embedded Linux from Scratch to Yocto
Embedded Linux from Scratch to YoctoEmbedded Linux from Scratch to Yocto
Embedded Linux from Scratch to YoctoSherif Mousa
Β 
Open Source IoT Project Flogo - Introduction, Overview and Architecture
Open Source IoT Project Flogo - Introduction, Overview and ArchitectureOpen Source IoT Project Flogo - Introduction, Overview and Architecture
Open Source IoT Project Flogo - Introduction, Overview and ArchitectureKai WΓ€hner
Β 
Building Embedded Linux Full Tutorial for ARM
Building Embedded Linux Full Tutorial for ARMBuilding Embedded Linux Full Tutorial for ARM
Building Embedded Linux Full Tutorial for ARMSherif Mousa
Β 

Viewers also liked (13)

Open-RnD Embedded Offer
Open-RnD Embedded OfferOpen-RnD Embedded Offer
Open-RnD Embedded Offer
Β 
ROS3D - Podsumowanie prac nad projektem
ROS3D - Podsumowanie prac nad projektemROS3D - Podsumowanie prac nad projektem
ROS3D - Podsumowanie prac nad projektem
Β 
Open-RnD Mobile Offer
Open-RnD Mobile OfferOpen-RnD Mobile Offer
Open-RnD Mobile Offer
Β 
Open-RnD Technologically Touched
Open-RnD Technologically TouchedOpen-RnD Technologically Touched
Open-RnD Technologically Touched
Β 
Open-RnD UX/UI Design
Open-RnD UX/UI DesignOpen-RnD UX/UI Design
Open-RnD UX/UI Design
Β 
Yocto bspγ‚’δ½œγ£γ¦γΏγŸ
Yocto bspγ‚’δ½œγ£γ¦γΏγŸYocto bspγ‚’δ½œγ£γ¦γΏγŸ
Yocto bspγ‚’δ½œγ£γ¦γΏγŸ
Β 
Yocto: Training in English
Yocto: Training in EnglishYocto: Training in English
Yocto: Training in English
Β 
The internet of things in now , see how golang is a part of this evolution
The internet of things in now , see how golang is a part of this evolutionThe internet of things in now , see how golang is a part of this evolution
The internet of things in now , see how golang is a part of this evolution
Β 
Board support package_on_linux
Board support package_on_linuxBoard support package_on_linux
Board support package_on_linux
Β 
Device tree support on arm linux
Device tree support on arm linuxDevice tree support on arm linux
Device tree support on arm linux
Β 
Embedded Linux from Scratch to Yocto
Embedded Linux from Scratch to YoctoEmbedded Linux from Scratch to Yocto
Embedded Linux from Scratch to Yocto
Β 
Open Source IoT Project Flogo - Introduction, Overview and Architecture
Open Source IoT Project Flogo - Introduction, Overview and ArchitectureOpen Source IoT Project Flogo - Introduction, Overview and Architecture
Open Source IoT Project Flogo - Introduction, Overview and Architecture
Β 
Building Embedded Linux Full Tutorial for ARM
Building Embedded Linux Full Tutorial for ARMBuilding Embedded Linux Full Tutorial for ARM
Building Embedded Linux Full Tutorial for ARM
Β 

Similar to Yocto and IoT - a retrospective

Iot development from prototype to production
Iot development from prototype to productionIot development from prototype to production
Iot development from prototype to productionMender.io
Β 
Strategies for developing and deploying your embedded applications and images
Strategies for developing and deploying your embedded applications and imagesStrategies for developing and deploying your embedded applications and images
Strategies for developing and deploying your embedded applications and imagesMender.io
Β 
Dfrws eu 2014 rekall workshop
Dfrws eu 2014 rekall workshopDfrws eu 2014 rekall workshop
Dfrws eu 2014 rekall workshopTamas K Lengyel
Β 
OpenStack Cinder On-Boarding Education - Boston Summit - 2017
OpenStack Cinder On-Boarding Education - Boston Summit - 2017OpenStack Cinder On-Boarding Education - Boston Summit - 2017
OpenStack Cinder On-Boarding Education - Boston Summit - 2017Jay Bryant
Β 
Headless Android at AnDevCon3
Headless Android at AnDevCon3Headless Android at AnDevCon3
Headless Android at AnDevCon3Opersys inc.
Β 
IoT Development from Prototype to Production
IoT Development from Prototype to ProductionIoT Development from Prototype to Production
IoT Development from Prototype to ProductionMender.io
Β 
IoT: Contrasting Yocto/Buildroot to binary OSes
IoT: Contrasting Yocto/Buildroot to binary OSesIoT: Contrasting Yocto/Buildroot to binary OSes
IoT: Contrasting Yocto/Buildroot to binary OSesMender.io
Β 
Embedded linux build systems
Embedded linux build systems  Embedded linux build systems
Embedded linux build systems Mender.io
Β 
A million ways to provision embedded linux devices
A million ways to provision embedded linux devicesA million ways to provision embedded linux devices
A million ways to provision embedded linux devicesMender.io
Β 
Headless Android (Wearable DevCon 2014)
Headless Android (Wearable DevCon 2014)Headless Android (Wearable DevCon 2014)
Headless Android (Wearable DevCon 2014)Ron Munitz
Β 
Cinder Project On-Boarding - OpenInfra Summit Denver 2019
Cinder Project On-Boarding - OpenInfra Summit Denver 2019Cinder Project On-Boarding - OpenInfra Summit Denver 2019
Cinder Project On-Boarding - OpenInfra Summit Denver 2019Jay Bryant
Β 
Building android for the Cloud: Android as a Server (AnDevConBoston 2014)
Building android for the Cloud: Android as a Server (AnDevConBoston 2014)Building android for the Cloud: Android as a Server (AnDevConBoston 2014)
Building android for the Cloud: Android as a Server (AnDevConBoston 2014)Ron Munitz
Β 
Bringing Tizen to a Raspberry Pi 2 Near You
Bringing Tizen to a Raspberry Pi 2 Near YouBringing Tizen to a Raspberry Pi 2 Near You
Bringing Tizen to a Raspberry Pi 2 Near YouSamsung Open Source Group
Β 
LMG Lightning Talks - SFO17-205
LMG Lightning Talks - SFO17-205LMG Lightning Talks - SFO17-205
LMG Lightning Talks - SFO17-205Linaro
Β 
Building Android for the Cloud: Android as a Server (Mobile World Congress 2014)
Building Android for the Cloud: Android as a Server (Mobile World Congress 2014)Building Android for the Cloud: Android as a Server (Mobile World Congress 2014)
Building Android for the Cloud: Android as a Server (Mobile World Congress 2014)Ron Munitz
Β 
Valerio Di Giampietro - Introduction To IoT Reverse Engineering with an examp...
Valerio Di Giampietro - Introduction To IoT Reverse Engineering with an examp...Valerio Di Giampietro - Introduction To IoT Reverse Engineering with an examp...
Valerio Di Giampietro - Introduction To IoT Reverse Engineering with an examp...linuxlab_conf
Β 
Digital twins IoT - for industry 4.0 (meetup Wireless & Networks, Poznan 12.1...
Digital twins IoT - for industry 4.0 (meetup Wireless & Networks, Poznan 12.1...Digital twins IoT - for industry 4.0 (meetup Wireless & Networks, Poznan 12.1...
Digital twins IoT - for industry 4.0 (meetup Wireless & Networks, Poznan 12.1...Marcin Bielak
Β 
Elevate Your Enterprise Python and R AI, ML Software Strategy with Anaconda T...
Elevate Your Enterprise Python and R AI, ML Software Strategy with Anaconda T...Elevate Your Enterprise Python and R AI, ML Software Strategy with Anaconda T...
Elevate Your Enterprise Python and R AI, ML Software Strategy with Anaconda T...DevOps.com
Β 

Similar to Yocto and IoT - a retrospective (20)

IoT Session Thomas More
IoT Session Thomas MoreIoT Session Thomas More
IoT Session Thomas More
Β 
Cc internet of things @ Thomas More
Cc internet of things @ Thomas MoreCc internet of things @ Thomas More
Cc internet of things @ Thomas More
Β 
Iot development from prototype to production
Iot development from prototype to productionIot development from prototype to production
Iot development from prototype to production
Β 
Strategies for developing and deploying your embedded applications and images
Strategies for developing and deploying your embedded applications and imagesStrategies for developing and deploying your embedded applications and images
Strategies for developing and deploying your embedded applications and images
Β 
Dfrws eu 2014 rekall workshop
Dfrws eu 2014 rekall workshopDfrws eu 2014 rekall workshop
Dfrws eu 2014 rekall workshop
Β 
OpenStack Cinder On-Boarding Education - Boston Summit - 2017
OpenStack Cinder On-Boarding Education - Boston Summit - 2017OpenStack Cinder On-Boarding Education - Boston Summit - 2017
OpenStack Cinder On-Boarding Education - Boston Summit - 2017
Β 
Headless Android at AnDevCon3
Headless Android at AnDevCon3Headless Android at AnDevCon3
Headless Android at AnDevCon3
Β 
IoT Development from Prototype to Production
IoT Development from Prototype to ProductionIoT Development from Prototype to Production
IoT Development from Prototype to Production
Β 
IoT: Contrasting Yocto/Buildroot to binary OSes
IoT: Contrasting Yocto/Buildroot to binary OSesIoT: Contrasting Yocto/Buildroot to binary OSes
IoT: Contrasting Yocto/Buildroot to binary OSes
Β 
Embedded linux build systems
Embedded linux build systems  Embedded linux build systems
Embedded linux build systems
Β 
A million ways to provision embedded linux devices
A million ways to provision embedded linux devicesA million ways to provision embedded linux devices
A million ways to provision embedded linux devices
Β 
Headless Android (Wearable DevCon 2014)
Headless Android (Wearable DevCon 2014)Headless Android (Wearable DevCon 2014)
Headless Android (Wearable DevCon 2014)
Β 
Cinder Project On-Boarding - OpenInfra Summit Denver 2019
Cinder Project On-Boarding - OpenInfra Summit Denver 2019Cinder Project On-Boarding - OpenInfra Summit Denver 2019
Cinder Project On-Boarding - OpenInfra Summit Denver 2019
Β 
Building android for the Cloud: Android as a Server (AnDevConBoston 2014)
Building android for the Cloud: Android as a Server (AnDevConBoston 2014)Building android for the Cloud: Android as a Server (AnDevConBoston 2014)
Building android for the Cloud: Android as a Server (AnDevConBoston 2014)
Β 
Bringing Tizen to a Raspberry Pi 2 Near You
Bringing Tizen to a Raspberry Pi 2 Near YouBringing Tizen to a Raspberry Pi 2 Near You
Bringing Tizen to a Raspberry Pi 2 Near You
Β 
LMG Lightning Talks - SFO17-205
LMG Lightning Talks - SFO17-205LMG Lightning Talks - SFO17-205
LMG Lightning Talks - SFO17-205
Β 
Building Android for the Cloud: Android as a Server (Mobile World Congress 2014)
Building Android for the Cloud: Android as a Server (Mobile World Congress 2014)Building Android for the Cloud: Android as a Server (Mobile World Congress 2014)
Building Android for the Cloud: Android as a Server (Mobile World Congress 2014)
Β 
Valerio Di Giampietro - Introduction To IoT Reverse Engineering with an examp...
Valerio Di Giampietro - Introduction To IoT Reverse Engineering with an examp...Valerio Di Giampietro - Introduction To IoT Reverse Engineering with an examp...
Valerio Di Giampietro - Introduction To IoT Reverse Engineering with an examp...
Β 
Digital twins IoT - for industry 4.0 (meetup Wireless & Networks, Poznan 12.1...
Digital twins IoT - for industry 4.0 (meetup Wireless & Networks, Poznan 12.1...Digital twins IoT - for industry 4.0 (meetup Wireless & Networks, Poznan 12.1...
Digital twins IoT - for industry 4.0 (meetup Wireless & Networks, Poznan 12.1...
Β 
Elevate Your Enterprise Python and R AI, ML Software Strategy with Anaconda T...
Elevate Your Enterprise Python and R AI, ML Software Strategy with Anaconda T...Elevate Your Enterprise Python and R AI, ML Software Strategy with Anaconda T...
Elevate Your Enterprise Python and R AI, ML Software Strategy with Anaconda T...
Β 

Recently uploaded

The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
Β 
Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Intelisync
Β 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
Β 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
Β 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
Β 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
Β 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
Β 
(Genuine) Escort Service Lucknow | Starting β‚Ή,5K To @25k with A/C πŸ§‘πŸ½β€β€οΈβ€πŸ§‘πŸ» 89...
(Genuine) Escort Service Lucknow | Starting β‚Ή,5K To @25k with A/C πŸ§‘πŸ½β€β€οΈβ€πŸ§‘πŸ» 89...(Genuine) Escort Service Lucknow | Starting β‚Ή,5K To @25k with A/C πŸ§‘πŸ½β€β€οΈβ€πŸ§‘πŸ» 89...
(Genuine) Escort Service Lucknow | Starting β‚Ή,5K To @25k with A/C πŸ§‘πŸ½β€β€οΈβ€πŸ§‘πŸ» 89...gurkirankumar98700
Β 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
Β 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
Β 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
Β 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
Β 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
Β 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
Β 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
Β 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
Β 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
Β 
Russian Call Girls in Karol Bagh Aasnvi ➑️ 8264348440 πŸ’‹πŸ“ž Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➑️ 8264348440 πŸ’‹πŸ“ž Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➑️ 8264348440 πŸ’‹πŸ“ž Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➑️ 8264348440 πŸ’‹πŸ“ž Independent Escort S...soniya singh
Β 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
Β 

Recently uploaded (20)

The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
Β 
Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)
Β 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Β 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Β 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
Β 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Β 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
Β 
(Genuine) Escort Service Lucknow | Starting β‚Ή,5K To @25k with A/C πŸ§‘πŸ½β€β€οΈβ€πŸ§‘πŸ» 89...
(Genuine) Escort Service Lucknow | Starting β‚Ή,5K To @25k with A/C πŸ§‘πŸ½β€β€οΈβ€πŸ§‘πŸ» 89...(Genuine) Escort Service Lucknow | Starting β‚Ή,5K To @25k with A/C πŸ§‘πŸ½β€β€οΈβ€πŸ§‘πŸ» 89...
(Genuine) Escort Service Lucknow | Starting β‚Ή,5K To @25k with A/C πŸ§‘πŸ½β€β€οΈβ€πŸ§‘πŸ» 89...
Β 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Β 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
Β 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Β 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
Β 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Β 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
Β 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
Β 
Exploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the ProcessExploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the Process
Β 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
Β 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
Β 
Russian Call Girls in Karol Bagh Aasnvi ➑️ 8264348440 πŸ’‹πŸ“ž Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➑️ 8264348440 πŸ’‹πŸ“ž Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➑️ 8264348440 πŸ’‹πŸ“ž Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➑️ 8264348440 πŸ’‹πŸ“ž Independent Escort S...
Β 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Β 

Yocto and IoT - a retrospective

  • 1. Yocto and IoT A retrospective Maciej BorzΔ™cki FOSDEM 2016
  • 2. ● Working with embedded systems since 2006 ● Since 2013 at Open-RnD Sp. z o.o. ● Software Architect
  • 3.
  • 4. IoT
  • 5. The Internet of Things (IoT) is the network of physical objects, devices, vehicles, buildings and other items which are embedded with electronics, software, sensors, and network connectivity, which enables these objects to collect and exchange data. (Wikipedia)
  • 6. The Internet of Things (IoT) is the network of physical objects, devices, vehicles, buildings and other items which are embedded with electronics, software, sensors, and network connectivity, which enables these objects to collect and exchange data. (Wikipedia)
  • 7. Gartner's 2015 Hype Cycle for Emerging Technologies Identifies the Computing Innovations That Organizations Should Monitor - https://www.gartner. com/newsroom/id/3114217
  • 9. Taxonomy ● Yocto Project β—‹ Umbrella project ● Poky β—‹ Reference distribution ● Bitbake β—‹ Build tool ● OpenEmbedded β—‹ Build system β—‹ OE-core β—‹ meta-oe
  • 10. 1. Grab code (git://git.yoctoproject.org/poky) 2. Setup environment: $ source poky/oe-init-build-env qemu-x86 3. Build a reference image: $ bitbake core-image-minimal 4. Wait... 5. Start QEMU with your image: $ runqemu qemux86 core-image-minimal nographic Yocto 101
  • 12. Yocto Project Reference Manual - https://www.yoctoproject.org/docs/2.1/ref-manual/ref-manual.html OpenEmbedded Architecture
  • 13. Most important pieces ● Machine β—‹ Usually the target platform, examples: raspberrypi, beaglebone, genericx86-64 β—‹ Platform description - CPU, flash, boot devices, serial console β—‹ Influences how packages are built and which ones may get installed ● Distro β—‹ Policy and features at the distribution level, examples: poky, poky-tiny β—‹ Influences how packages are built and which ones get installed β—‹ X11 vs. wayland, init system, alsa & PulseAudio, OpenGL .. ● Image β—‹ Predefined images: core-image-minimal β—‹ System image features, influences which packages get installed β—‹ debug-tweaks, dropbear vs. openssh
  • 14. ● Machine β—‹ Usually the target platform, examples: raspberrypi, beaglebone, genericx86-64 β—‹ Platform description - CPU, flash, boot devices, serial console β—‹ Influences how packages are built and which ones may get installed ● Distro β—‹ Policy and features at the distribution level, examples: poky, poky-tiny β—‹ Influences how packages are built and which ones get installed β—‹ X11 vs. wayland, init system, alsa & PulseAudio, OpenGL .. ● Image β—‹ Predefined images: core-image-minimal β—‹ System image features, influences which packages get installed β—‹ debug-tweaks, dropbear vs. openssh conf/local.conf: DISTRO = β€œpoky” MACHINE = β€œbeaglebone” $ bitbake core-image-minimal Most important pieces
  • 15. ● layers β—‹ recipes β–  poky/meta/recipes-core/busybox/busybox_1.24.1.bb β–  poky/meta/recipes-devtools/python/python_2.7.9.bb β—‹ machines β–  poky/meta-yocto-bsp/conf/machine/beaglebone.conf β—‹ distributions β–  poky/meta-yocto/conf/distro/poky.conf ● upon layers (mix and match layers) β—‹ new recipes & extend existing ones β–  meta-virtualization/recipes-core/busybox/busybox_%.bbappend - extends busybox β—‹ even more machines β–  meta-ti/conf/machine/beaglebone.conf Code organization
  • 16. ● layers β—‹ recipes β–  poky/meta/recipes-core/busybox/busybox_1.24.1.bb β–  poky/meta/recipes-devtools/python/python_2.7.9.bb β—‹ machines β–  poky/meta-yocto-bsp/conf/machine/beaglebone.conf β—‹ distributions β–  poky/meta-yocto/conf/distro/poky.conf ● upon layers (mix and match layers) β—‹ new recipes & extend existing ones β–  meta-virtualization/recipes-core/busybox/busybox_%.bbappend - extends busybox β—‹ even more machines β–  meta-ti/conf/machine/beaglebone.conf $ bitbake-layers show-layers $ bitbake-layers show-recipes Code organization
  • 17. ● layers β—‹ recipes β–  poky/meta/recipes-core/busybox/busybox_1.24.1.bb β–  poky/meta/recipes-devtools/python/python_2.7.9.bb β—‹ machines β–  poky/meta-yocto-bsp/conf/machine/beaglebone.conf β—‹ distributions β–  poky/meta-yocto/conf/distro/poky.conf ● upon layers (mix and match layers) β—‹ new recipes & extend existing ones β–  meta-virtualization/recipes-core/busybox/busybox_%.bbappend - extends busybox β—‹ even more machines β–  meta-ti/conf/machine/beaglebone.conf $ bitbake-layers show-appends Code organization
  • 18. ● layers β—‹ recipes β–  poky/meta/recipes-core/busybox/busybox_1.24.1.bb β–  poky/meta/recipes-devtools/python/python_2.7.9.bb β—‹ machines β–  poky/meta-yocto-bsp/conf/machine/beaglebone.conf β—‹ distributions β–  poky/meta-yocto/conf/distro/poky.conf ● upon layers (mix and match layers) β—‹ new recipes & extend existing ones β–  meta-virtualization/recipes-core/busybox/busybox_%.bbappend - extends busybox β—‹ even more machines β–  meta-ti/conf/machine/beaglebone.conf Code organization
  • 19. poky β”œβ”€β”€ bitbake β”œβ”€β”€ documentation β”œβ”€β”€ meta β”œβ”€β”€ meta-selftest β”œβ”€β”€ meta-skeleton β”œβ”€β”€ meta-yocto β”œβ”€β”€ meta-yocto-bsp └── scripts meta-ti β”œβ”€β”€ conf β”œβ”€β”€ licenses β”œβ”€β”€ recipes-bsp β”œβ”€β”€ recipes-connectivity β”œβ”€β”€ recipes-core β”œβ”€β”€ recipes-devtools β”œβ”€β”€ recipes-graphics β”œβ”€β”€ recipes-kernel β”œβ”€β”€ recipes-ti └── scripts meta-openembedded β”œβ”€β”€ contrib β”œβ”€β”€ meta-efl β”œβ”€β”€ meta-filesystems β”œβ”€β”€ meta-gnome β”œβ”€β”€ meta-gpe β”œβ”€β”€ meta-initramfs β”œβ”€β”€ meta-multimedia β”œβ”€β”€ meta-networking β”œβ”€β”€ meta-oe β”œβ”€β”€ meta-perl β”œβ”€β”€ meta-python β”œβ”€β”€ meta-ruby β”œβ”€β”€ meta-systemd β”œβ”€β”€ meta-webserver └── meta-xfce Directory structure
  • 20. Recipe SUMMARY = "Simple helloworld application" SECTION = "examples" LICENSE = "MIT" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" SRC_URI = "file://helloworld.c" S = "${WORKDIR}" do_compile() { ${CC} helloworld.c -o helloworld } do_install() { install -d ${D}${bindir} install -m 0755 helloworld ${D}${bindir} }
  • 22. ● Previous experience with cross-compilation build systems β—‹ Buildroot ~2007 β—‹ Custom solutions after that ● Maintenance headache β—‹ Ill-configured vendor supplied SDKs ● QA & tracking ● Reinventing the wheel β—‹ Is there any actual value in building from scratch? ● Gave Yocto a try β—‹ ~80 commits β—‹ 12 projects Background
  • 23. ● ParkEasily β—‹ Distributed monitoring of parking spots ● Sonda β—‹ Athletic workout gadget ● Ros3D β—‹ Remote control of a 3D camera rig ● Timeline ParkEasily Sonda Ros3D 20162014 Projects
  • 24.
  • 28. ● Started with a point release β—‹ marked as stable release - must be good? ● Single layer with our packages - meta-openrnd β—‹ 4 core recipes, 7 packages, 2 package groups, 2 platform glue packages, 3 images ● Platforms - BeagleBone Black, Raspberry PI (early prototyping) ● Couple of bbappends ● First upstream contributions - wic fixes, rabbitmq-c ● Custom distro - openrnd-poky-systemd ● Used layers: meta-{ti, raspberrypi, oe, networking, python} Baby steps
  • 29. ● Tracking a point release β—‹ Harder to contribute fixes β—‹ More work backporting desired patches ● Single layer with our packages β—‹ Reuse meta-openrnd for other projects β—‹ Recipes changed by bbappends must exist ● Inflexible Baby steps - what went bad?
  • 30. ● Branch off master with a very simple policy β–  Preserve upstream branch names - easier tracking and syncing β–  Simple naming scheme openrnd/master based on master β–  Project branches parkeasily/master β–  Periodic merge ● Layer split β—‹ meta-openrnd & meta-parkeasily Baby steps -solutions
  • 31. Sonda
  • 34. ● Accelerometers ● Gyroscopes ● Heartbeat ● Position (10Hz) ● On board storage ● 3G connectivity ● STM32F1x Workout gadget
  • 35. ● Storage ● Recharge station ● Firmware update Data hub
  • 36. ● Project branching sonda/master ● Project layer β—‹ 3 core recipes, 3 packages, some platform glue ● Single platform only - BeagleBone Black ● Very few *.bbappends ● More wic fixes β—‹ MBR & multiple partitions ● Used layers: meta-{ti, oe} Approach
  • 37. ● meta-openrnd β—‹ Reuse some common recipes - ex. systemd-networkd default config ● meta-sonda β—‹ Custom distribution sonda β—‹ Override some default settings β–  Use systemd as init β–  Ship systemd-networkd Layer organization
  • 38. # short-description: Create SD card image for Sonda case appliance # long-description: Creates a partitioned SD card image. Boot files # are located in the first vfat partition. Usable in Sond case # appliance. part /boot --source bootimg-partition --ondisk mmcblk0 --fstype=vfat --label boot --active -- align 4 --size 16 part / --source rootfs --ondisk mmcblk0 --fstype=ext4 --label root --align 4 part /var/lib/sonda --ondisk mmcblk0 --fstype=ext4 --label sondadata --align 307200 --size 1024 System firmware image - wic
  • 39.
  • 45. Rig Controller - Mobile App
  • 48. ● Most of source code is open source (MIT) ● Repositories β—‹ https://github.com/open-rnd/ros3d-stream β—‹ https://github.com/open-rnd/ros3d-dev-controller β—‹ https://github.com/open-rnd/ros3d-upnp β—‹ https://github.com/open-rnd/ros3d-platform-controller β—‹ https://github.com/open-rnd/ros3d-www Source Code
  • 49. ● Project branching ros3d/master ● Reused meta-openrnd ● Project layer β—‹ 11 core recipes, 4 images, 4 additional recipes ● Number of platforms β—‹ Wandboad Quad (meta-fsl-arm-extra) , GW5400 (meta-gateworks), QEMU ● Different target devices β—‹ KR - Rig Controller β—‹ AO - Image Analyzer ● SDK Approach
  • 50. ● meta-openrnd ● meta-ros3d β—‹ Ros3D package recipes & groups β—‹ bbappends for common packages (avahi, gupnp, busybox, network-manager) β—‹ Custom distros: ros3d-kr ros3d-ao ● meta-ros3d-kr-wandboard-bsp (Rig Controller on Wandboard Quad) β—‹ kernel config β—‹ LEDs dts patches β—‹ keys dts patches β—‹ udev rules ● meta-ros3d-ao-gateworks-bsp (Image Analyzer on GW5400) β—‹ video pipeline stream config for ros3d-stream β—‹ patches for gstreamer1.0-plugins-imx β—‹ udev rules Layers
  • 51. ● meta-openrnd ● meta-ros3d β—‹ Ros3D package recipes & groups β—‹ bbappends for common packages (avahi, gupnp, busybox, network-manager) β—‹ Custom distros: ros3d-kr ros3d-ao ● meta-ros3d-kr-wandboard-bsp (Rig Controller on Wandboard Quad) β—‹ kernel config β—‹ LEDs dts patches β—‹ keys dts patches β—‹ udev rules ● meta-ros3d-ao-gateworks-bsp (Image Analyzer on GW5400) β—‹ video pipeline stream config for ros3d-stream β—‹ patches for gstreamer1.0-plugins-imx β—‹ udev rules Project layers Layers
  • 52. ● meta-openrnd ● meta-ros3d β—‹ Ros3D package recipes & groups β—‹ bbappends for common packages (avahi, gupnp, busybox, network-manager) β—‹ Custom distros: ros3d-kr ros3d-ao ● meta-ros3d-kr-wandboard-bsp (Rig Controller on Wandboard Quad) β—‹ kernel config β—‹ LEDs dts patches β—‹ keys dts patches β—‹ udev rules ● meta-ros3d-ao-gateworks-bsp (Image Analyzer on GW5400) β—‹ video pipeline stream config for ros3d-stream β—‹ patches for gstreamer1.0-plugins-imx β—‹ udev rules Hardware layers Layers Project layers
  • 53. meta-ros3d/conf/distro/include/ros3d-common.inc: TARGET_VENDOR = "-poky" MAINTAINER = "Ros3D Project <ros3d@open-rnd.pl>" LAYER_CONF_VERSION ?= "6" # set preferred versions PREFERRED_PROVIDER_udev ?= "systemd" PREFERRED_PROVIDER_udev-utils ?= "systemd" VIRTUAL-RUNTIME_init_manager = "systemd" VIRTUAL-RUNTIME_initscripts = "" DISTRO_FEATURES_append = " systemd" DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit" # default to systemd-networkd & systemd-resolved for network PACKAGECONFIG_append_pn-systemd = " networkd resolved" # use ipk PACKAGE_CLASSES = "package_ipk" meta-ros3d/conf/distro/ros3d-kr.conf: DISTRO = "ros3d-kr" DISTRO_NAME = "Ros3D KR Baseline" DISTRO_CODENAME ="ros3d-kr" DISTRO_VERSION = "1.0+snapshot-${DATE}" require conf/distro/include/ros3d-common.inc DISTRO_FEATURES_append = " ros3d-kr" DISTRO_FEATURES_remove = "x11 " Distribution
  • 54. meta-ros3d/conf/distro/include/ros3d-common.inc: TARGET_VENDOR = "-poky" MAINTAINER = "Ros3D Project <ros3d@open-rnd.pl>" LAYER_CONF_VERSION ?= "6" # set preferred versions PREFERRED_PROVIDER_udev ?= "systemd" PREFERRED_PROVIDER_udev-utils ?= "systemd" VIRTUAL-RUNTIME_init_manager = "systemd" VIRTUAL-RUNTIME_initscripts = "" DISTRO_FEATURES_append = " systemd" DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit" # default to systemd-networkd & systemd-resolved for network PACKAGECONFIG_append_pn-systemd = " networkd resolved" # use ipk PACKAGE_CLASSES = "package_ipk" meta-ros3d/conf/distro/ros3d-kr.conf: DISTRO = "ros3d-kr" DISTRO_NAME = "Ros3D KR Baseline" DISTRO_CODENAME ="ros3d-kr" DISTRO_VERSION = "1.0+snapshot-${DATE}" require conf/distro/include/ros3d-common.inc DISTRO_FEATURES_append = " ros3d-kr" DISTRO_FEATURES_remove = "x11 " If needed test for distro features when building common package Distribution
  • 55. Distribution - in recipe do_install_append() { ... # replace device.xml with target specific one rm -f ${D}${datadir}/ros3d-upnp/device.xml if ${@bb.utils.contains('DISTRO_FEATURES', 'ros3d-kr', 'true', 'false', d)}; then install -m 0644 -t ${D}${datadir}/ros3d-upnp ${WORKDIR}/device-kr.xml ln -s device-kr.xml ${D}${datadir}/ros3d-upnp/device.xml fi ... }
  • 56. Distribution - in recipe do_install_append() { ... # replace device.xml with target specific one rm -f ${D}${datadir}/ros3d-upnp/device.xml if ${@bb.utils.contains('DISTRO_FEATURES', 'ros3d-kr', 'true', 'false', d)}; then install -m 0644 -t ${D}${datadir}/ros3d-upnp ${WORKDIR}/device-kr.xml ln -s device-kr.xml ${D}${datadir}/ros3d-upnp/device.xml fi ... } Inline Python
  • 57. mborzecki@comp_016_pc_buildenv:ros3d/ros3d-head/wandboard bitbake-layers show-layers layer path priority ========================================================================== meta-ros3d-kr-wandboard-bsp /home/mborzecki/yocto/ros3d/ros3d-head/meta-ros3d-kr-wandboard-bsp 6 meta-ros3d /home/mborzecki/yocto/ros3d/ros3d-head/meta-ros3d 7 meta-openrnd /home/mborzecki/yocto/ros3d/ros3d-head/meta-openrnd 6 meta-intel-iot-middleware /home/mborzecki/yocto/ros3d/ros3d-head/meta-intel-iot-middleware 8 meta-oe /home/mborzecki/yocto/ros3d/ros3d-head/meta-openembedded/meta-oe 6 meta-gnome /home/mborzecki/yocto/ros3d/ros3d-head/meta-openembedded/meta-gnome 7 meta-networking /home/mborzecki/yocto/ros3d/ros3d-head/meta-openembedded/meta-networking 5 meta-python /home/mborzecki/yocto/ros3d/ros3d-head/meta-openembedded/meta-python 7 meta-multimedia /home/mborzecki/yocto/ros3d/ros3d-head/meta-openembedded/meta-multimedia 6 meta-fsl-arm-extra /home/mborzecki/yocto/ros3d/ros3d-head/meta-fsl-arm-extra 4 meta-fsl-arm /home/mborzecki/yocto/ros3d/ros3d-head/meta-fsl-arm 5 meta-yocto-bsp /home/mborzecki/yocto/ros3d/ros3d-head/poky/meta-yocto-bsp 5 meta-yocto /home/mborzecki/yocto/ros3d/ros3d-head/poky/meta-yocto 5 meta /home/mborzecki/yocto/ros3d/ros3d-head/poky/meta 5 workspace /home/mborzecki/yocto/ros3d/ros3d-head/wandboard/workspace 99 Layers - Rig Controller
  • 58. Custom machine - Rig Controller #@TYPE: Machine #@NAME: Ros3D Rig Controller based on Wandboard i.MX6 Wandboard Quad #@SOC: i.MX6Q #@DESCRIPTION: Machine configuration for Ros3D Rig Controller based on i.MX6 Wandboard Quad #@MAINTAINER: Maciej Borzecki <maciej.borzecki@open-rnd.pl> require conf/machine/wandboard-quad.conf MACHINE_EXTRA_RRECOMMENDS += " bcm4329-nvram-config kr-leds kr-wandboard-keys kernel-devicetree "
  • 59. #@TYPE: Machine #@NAME: Ros3D Rig Controller based on Wandboard i.MX6 Wandboard Quad #@SOC: i.MX6Q #@DESCRIPTION: Machine configuration for Ros3D Rig Controller based on i.MX6 Wandboard Quad #@MAINTAINER: Maciej Borzecki <maciej.borzecki@open-rnd.pl> require conf/machine/wandboard-quad.conf MACHINE_EXTRA_RRECOMMENDS += " bcm4329-nvram-config kr-leds kr-wandboard-keys kernel-devicetree " Base on Wandboard Quad config Custom machine - Rig Controller
  • 60. #@TYPE: Machine #@NAME: Ros3D Rig Controller based on Wandboard i.MX6 Wandboard Quad #@SOC: i.MX6Q #@DESCRIPTION: Machine configuration for Ros3D Rig Controller based on i.MX6 Wandboard Quad #@MAINTAINER: Maciej Borzecki <maciej.borzecki@open-rnd.pl> require conf/machine/wandboard-quad.conf MACHINE_EXTRA_RRECOMMENDS += " bcm4329-nvram-config kr-leds kr-wandboard-keys kernel-devicetree " udev glue Custom machine - Rig Controller Base on Wandboard Quad config
  • 61. mborzecki@comp_016_pc_buildenv:ros3d/ros3d-head/gateworks bitbake-layers show-layers layer path priority ========================================================================== meta-ros3d-ao-gateworks-bsp /home/mborzecki/yocto/ros3d/ros3d-head/meta-ros3d-ao-gateworks-bsp 6 meta-ros3d /home/mborzecki/yocto/ros3d/ros3d-head/meta-ros3d 7 meta-openrnd /home/mborzecki/yocto/ros3d/ros3d-head/meta-openrnd 6 meta-intel-iot-middleware /home/mborzecki/yocto/ros3d/ros3d-head/meta-intel-iot-middleware 8 meta-oe /home/mborzecki/yocto/ros3d/ros3d-head/meta-openembedded/meta-oe 6 meta-networking /home/mborzecki/yocto/ros3d/ros3d-head/meta-openembedded/meta-networking 5 meta-python /home/mborzecki/yocto/ros3d/ros3d-head/meta-openembedded/meta-python 7 meta-multimedia /home/mborzecki/yocto/ros3d/ros3d-head/meta-openembedded/meta-multimedia 6 meta-gateworks /home/mborzecki/yocto/ros3d/ros3d-head/meta-gateworks 6 meta-fsl-arm-extra /home/mborzecki/yocto/ros3d/ros3d-head/meta-fsl-arm-extra 4 meta-fsl-arm /home/mborzecki/yocto/ros3d/ros3d-head/meta-fsl-arm 5 meta-yocto-bsp /home/mborzecki/yocto/ros3d/ros3d-head/poky/meta-yocto-bsp 5 meta-yocto /home/mborzecki/yocto/ros3d/ros3d-head/poky/meta-yocto 5 meta /home/mborzecki/yocto/ros3d/ros3d-head/poky/meta 5 workspace /home/mborzecki/yocto/ros3d/ros3d-head/gateworks/workspace 99 Layers - Image Analyzer
  • 62. How did it work out? ● Flexible ● Easily exchange platforms β—‹ Hassle free builds for QEMU and even for genericx86-64 ● Clear separation between project and hardware ● Software configuration via files extremely convenient β—‹ ros3d-stream pipeline different between platforms ● Packager friendly software
  • 64. ● Looking for a decent chroot-like development tools, alternatives? β—‹ Bunch of custom scripts β–  PKG_CONFIG_PATH, PATH, ACLOCAL_PATH, GI_TYPELIB_PATH, LD_PRELOAD, LD_LIBRARY_PATH, PYTHONPATH, PERL5LIB, GST_PLUGIN_PATH, LDFLAGS, CFLAGS, CXXFLAGS β—‹ autotools? cmake? setuptools? β—‹ Out of the source builds β—‹ Confined chroot β—‹ Code checkout jhbuild
  • 65. ● Looking for a decent chroot-like development tools, alternatives? β—‹ Bunch of custom scripts β–  PKG_CONFIG_PATH, PATH, ACLOCAL_PATH, GI_TYPELIB_PATH, LD_PRELOAD, LD_LIBRARY_PATH, PYTHONPATH, PERL5LIB, GST_PLUGIN_PATH, LDFLAGS, CFLAGS, CXXFLAGS β—‹ autotools? cmake? setuptools? β—‹ Out of the source builds β—‹ Confined chroot β—‹ Code checkout ● Builds GNOME, Xorg, Mesa 3D ● https://github.com/bboozzoo/jhbuild-helper jhbuild
  • 66. jhbuildjhbuildrc module set build configure staging install root jhbuild $ tree install-root build-root/stream checkout/stream install-root β”œβ”€β”€ bin β”‚ └── ros3d-stream β”œβ”€β”€ etc β”‚ └── ros3d-stream β”‚ └── ros3d-stream.conf └── _jhbuild β”œβ”€β”€ info β”‚ └── ros3d-stream └── manifests └── ros3d-stream build-root/stream β”œβ”€β”€ config.log β”œβ”€β”€ config.status β”œβ”€β”€ libtool β”œβ”€β”€ Makefile β”œβ”€β”€ ros3d-stream └── src β”œβ”€β”€ ros3d_stream-config.o β”œβ”€β”€ ros3d_stream-httpapi.o β”œβ”€β”€ ros3d_stream-main.o β”œβ”€β”€ ros3d_stream-stream-client.o β”œβ”€β”€ ros3d_stream-stream-manager.o β”œβ”€β”€ ros3d_stream-stream.o └── ros3d_stream-zeroconf.o
  • 67. jhbuildjhbuildrc module set $ tree install-root build-root/stream checkout/stream install-root β”œβ”€β”€ bin β”‚ └── ros3d-stream β”œβ”€β”€ etc β”‚ └── ros3d-stream β”‚ └── ros3d-stream.conf └── _jhbuild β”œβ”€β”€ info β”‚ └── ros3d-stream └── manifests └── ros3d-stream build-root/stream β”œβ”€β”€ config.log β”œβ”€β”€ config.status β”œβ”€β”€ libtool β”œβ”€β”€ Makefile β”œβ”€β”€ ros3d-stream └── src β”œβ”€β”€ ros3d_stream-config.o β”œβ”€β”€ ros3d_stream-httpapi.o β”œβ”€β”€ ros3d_stream-main.o β”œβ”€β”€ ros3d_stream-stream-client.o β”œβ”€β”€ ros3d_stream-stream-manager.o β”œβ”€β”€ ros3d_stream-stream.o └── ros3d_stream-zeroconf.o build configure staging install root jhbuild All under a custom prefix
  • 68. <?xml version="1.0"?><!--*- mode: nxml -*--> <!DOCTYPE moduleset SYSTEM "moduleset.dtd"> <?xml-stylesheet type="text/xsl" href="moduleset.xsl"?> <moduleset> <!-- repositories --> <!-- modules --> </moduleset> jhbuild - module set
  • 69. <?xml version="1.0"?><!--*- mode: nxml -*--> <!DOCTYPE moduleset SYSTEM "moduleset.dtd"> <?xml-stylesheet type="text/xsl" href="moduleset.xsl"?> <moduleset> <!-- repositories --> <repository type="system" name="system" /> <repository type="git" href="ssh://git.open-rnd.net:29418/" name="git-rnd" default="yes"/> <!-- modules --> </moduleset> jhbuild - repositories
  • 70. <?xml version="1.0"?><!--*- mode: nxml -*--> <!DOCTYPE moduleset SYSTEM "moduleset.dtd"> <?xml-stylesheet type="text/xsl" href="moduleset.xsl"?> <moduleset> <!-- repositories --> <repository type="system" name="system" /> <repository type="git" href="ssh://git.open-rnd.net:29418/" name="git-rnd" default="yes"/> <!-- modules --> <systemmodule id="glib-2.0"> <pkg-config>glib-2.0.pc</pkg-config> <branch repo="system" version="2.32"/> </systemmodule> <systemmodule id="gstreamer-1.0"> <pkg-config>gstreamer-1.0.pc</pkg-config> <branch repo="system"/> </systemmodule> </moduleset> jhbuild - modules
  • 71. ... <autotools id="ros3d-stream" autogen-sh="autoreconf"> <branch module="open-rnd.ros3d.stream" checkoutdir="stream"/> <dependencies> <dep package="gstreamer-1.0" /> <dep package="libsoup-2.4" /> <dep package="glib-2.0" /> <dep package="gio-2.0" /> </dependencies> </autotools> ... jhbuild - modules
  • 72. ... <autotools id="ros3d-stream" autogen-sh="autoreconf"> <branch module="open-rnd.ros3d.stream" checkoutdir="stream"/> <dependencies> <dep package="gstreamer-1.0" /> <dep package="libsoup-2.4" /> <dep package="glib-2.0" /> <dep package="gio-2.0" /> </dependencies> </autotools> ... $ jh sysdeps --install ros3d-stream $ jh buildone ros3d-stream $ jh build ros3d-stream jhbuild - modules
  • 75. ● Force proper build system tooling β—‹ automake, cmake, setuptools ● Less packaging effort β—‹ Early testing!!! ● Confined development root β—‹ Libraries not present in your repositories β—‹ Particular library versions jhbuild
  • 76. Vala
  • 77. ● High level, C# like syntax ● valac β—‹ C# compiles to C with GObject, Glib, Gio β—‹ C compiles with your favourite C compiler ● Zero overhead interfacing with C ● VAPI == C header β—‹ Lets Vala know how to call C code ● autotools and Yocto support: inherit autotools pkgconfig vala β—‹ no extra configuration needed ● Broken VAPI autogeneration β—‹ Why not ship VAPI files with source code? Vala
  • 78. ● High level, C# like syntax ● valac β—‹ C# compiles to C with GObject, Glib, Gio β—‹ C compiles with your favourite C compiler ● Zero overhead interfacing with C ● VAPI == C header β—‹ Lets Vala know how to call C code ● autotools and Yocto support: inherit autotools pkgconfig vala β—‹ no extra configuration needed ● Broken VAPI autogeneration β—‹ Why not ship VAPI files with source code? Vala https://github.com/open-rnd/ros3d-stream
  • 81. ● Yocto worked out great ● Split layers β—‹ Project specific functionality β—‹ Platform dependent functionality ● Software configuration through files ● Packager friendly build systems ● Work close to the upstream β—‹ Contribute your patches ● Do not be afraid of following development branches Conclusions
  • 82. Maciej BorzΔ™cki maciej.borzecki@open-rnd.pl Thank you QUESTIONS? THOUGHTS? COMMENTS? Feel free to contact us! INFO@OPEN-RND.PL WWW.OPEN-RND.pl
  • 83. FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}-${PV}:" SRC_URI += " file://0001-ARM-dts-wandboard-leds-for-Ros3D-KR-platform.patch file://0001-ARM-dts-wandboard-setup-GPIO-keys-for-Ros3D-KR-platf.patch file://0001-tty-serial-imx-register-LED-triggers.patch file://0002-usb-serial-register-LED-triggers-for-each-USB-serial.patch file://usbserial.cfg " do_configure_prepend() { cfgs="${@ ' '.join([n for n in src_patches(d, True) if n.endswith('.cfg')])}" bbnote "configs: ${cfgs}" if [ -n "${cfgs}" ]; then for cfg in "${cfgs}"; do bbnote "Applying config ${cfg}" cat ${cfg} >> ${WORKDIR}/defconfig done fi } Tips - poor man’s kernel config fragments
  • 84. ● Cross-compilation toolchain ● Set of packages for host β—‹ *-native ● Set of packages for the target β—‹ one of RPM, DEB, IPK, tar.gz ● Root filesystem tree (core-image-minimal) ● Disk image ● SDK Yocto 101 condt.
  • 85. inherit autotools pkgconfig vala gitpkgv systemd DESCRIPTION = "Ros3D Streaming Service" LICENSE = "MIT" SRC_URI = " git://git.open-rnd.net:29418/open-rnd.ros3d.stream; protocol=ssh file://ros3d-stream.service " SRCREV = "${AUTOREV}" PVBASE := "1.0" PV = "${PVBASE}+gitr${SRCPV}" PKGV = "${PVBASE}+gitr${GITPKGV}" DEPENDS = " glib-2.0 libsoup-2.4 gstreamer1.0 avahi " ... RDEPENDS_${PN} += " glib-2.0 libsoup-2.4 gstreamer1.0 libavahi-gobject libavahi-client " CONFFILES_${PN} += " ${sysconfdir}/ros3d-stream/ros3d-stream.conf " S = "${WORKDIR}/git" SYSTEMD_SERVICE_${PN} = "ros3d-stream.service" do_install_append() { # install systemd service files install -d ${D}${systemd_unitdir}/system install -m 0644 -t ${D}${systemd_unitdir}/system/ ${WORKDIR}/ros3d-stream.service } Vala and Yocto