SlideShare ist ein Scribd-Unternehmen logo
1 von 94
Downloaden Sie, um offline zu lesen
Buildroot vs Yocto:
Differences for Your Daily Job
Luca Ceresoli — AIM Sportline
luca@lucaceresoli.net
http://lucaceresoli.net
Linux-Lab 2018
About me
• Embedded Linux engineer
at AIM Sportline
• Kernel, drivers,
bootloader, FPGA,
build system
www.aim-sportline.com
• Open source enthusiast, contributor to Buildroot, the Linux
kernel and a few other projects
• Bergamo, Milan area, Italy
1
Introduction
This is not…
• This is not a tutorial
2
This is not…
• This is not a tutorial
• This is not a feature comparison, not a selection guide
2
This is not…
• This is not a tutorial
• This is not a feature comparison, not a selection guide
• If you need one:
• Buildroot vs. OpenEmbedded/Yocto: A Four Hands
Discussion,
Belloni and Petazzoni, ELC 2016 (slides and video online)
• http://www.jumpnowtek.com/linux/
Choosing-an-embedded-linux-build-system.html
• https://opensource.com/article/18/6/
embedded-linux-build-tools
2
This is not…
• This is not a tutorial
• This is not a feature comparison, not a selection guide
• If you need one:
• Buildroot vs. OpenEmbedded/Yocto: A Four Hands
Discussion,
Belloni and Petazzoni, ELC 2016 (slides and video online)
• http://www.jumpnowtek.com/linux/
Choosing-an-embedded-linux-build-system.html
• https://opensource.com/article/18/6/
embedded-linux-build-tools
• Fact: both tools have pros and cons
2
Similar…
In a nutshell:
a dependency graph
with actions to build each node.
3
…but different — based on different tools
Kconfig Make Bitbake
4
…but different — root filesystem VS distribution
Buildroot
Kernel Bootloader Root FS
Yocto
Packages (ipk, dpkg, rpm)
Kernel Bootloader Root FS
5
Contents
1 Introduction
2 Bootstrapping
3 Naming
4 Layers / external trees
5 Writing recipes
6 Building
7 Understanding what’s going on
8 Customizing the root filesystem
9 Tweaking recipes
10 Conclusions
6
Bootstrapping
Ingredients
• Get the sources
• git clone git://git.buildroot.net/buildroot; cd
buildroot
7
Ingredients
1. Get the Poky sources (bitbake, oe-core)
• git clone -b sumo git://git.yoctoproject.org/poky;
cd poky
2. You’ll probably need more recipes
• git clone -b sumo
git://git.openembedded.org/meta-openembedded
3. Additional layers can be useful
• SoC/board vendor BSP layer, additional software, …
• http://layers.openembedded.org
8
Configure
• Smooth start: find a defconfig for a similar board
• make list-defconfigs # minimal booting configs
• make similar_board_defconfig
• Or from scratch
• Find kernel and U-Boot sources that work for your SoC
• make menuconfig
• Target: architecture, CPU features
• Kernel: where to fetch it from, defconfig, dtbs
• U-Boot: where to fetch it from, defconfig
9
10
Configure
• . oe-init-build-env
• Creates and enters the build/ dir
• Smooth start: find a defconfig for a similar board
• ls conf/machine/ in your SoC vendor layer
• Set MACHINE ?= "<similar_machine>" in
conf/local.conf
11
Build
• make
• Without parameters builds “all”
12
Build
• bitbake <IMAGE>
• bitbake core-image-minimal
13
Naming
Building items
14
Package == Recipe
Rules to download and “build” a single program, library or other
(e.g. binutils, busybox, gcc, libxml2)
• Each package is a Make target
and has a Kconfig on/off knob
• make libxml2
• host-<PKG>: the same package
built for the development host
(native build)
• Each package is a Bitbake target
• bitbake libxml2
• <PKG>-native: the same
package built for the development
host (native build)
15
Step == Task
Each package requires several steps to be built
• No formal name, usually called just
steps
• source, extract, patch,
configure, build, install, …
• Each step is also a make target
• make libxml2-configure
host-binutils-build busybox
• The special <PKGNAME> make
target depends on all other normal
tasks required to ’build’ a recipe
• Called tasks
(often prefixed with do_)
• fetch, unpack, patch, configure,
compile, install, deploy, …
• First-class citizens in bitbake
• bitbake -c configure
libxml2 busybox
• The special build task depends on
all other normal tasks required to
’build’ a recipe
16
Default steps/tasks
install-target
build
configure
install-staging install-images
patch
extract
source
install
compile
configure
deploy
patch
unpack
fetch
17
Naming side-by-side
Package Recipe
Package Step Recipe Task
host-<PKG> <PKG>-native
pkg-generic.mk base.bbclass
source fetch
extract unpack
patch patch
configure configure
build compile
install-{target,staging} install
install-images deploy
18
Layers / external trees
Yocto: layers
The preferred way to add features: layers
conf/bblayers.conf
BBLAYERS ?= " 
/home/murray/devel/poky/meta 
/home/murray/devel/poky/meta-poky 
/home/murray/devel/poky/meta-yocto-bsp 
<...path to other layers...> 
"
19
Yocto: adding layers
BBLAYERS ?= " 
/home/murray/devel/poky/meta 
/home/murray/devel/poky/meta-poky 
/home/murray/devel/poky/meta-yocto-bsp 
+ ${TOPDIR}/../meta-my-soc-vendor 
+ ${TOPDIR}/../meta-openembedded/meta-oe 
"
• Suggestion: use relative paths
20
Yocto: .bbappend
• .bbappend files are appended to the .bb file while parsing
• Change variable values
• Append/prepend to tasks
• The resulting myrecipe is a concatenation of:
• <LAYER1>/*/*/myrecipe.bb
• <LAYER2>/*/*/myrecipe.bbappend
• <LAYER3>/*/*/myrecipe.bbappend
21
Yocto: issues with layers
• Some SoC vendor layers augment the buildsystem, at times
creating problems
• Conflict between layers (e.g. in gstreamer)
• Suggestion: add layers one by one, bottom-up, test each time
• Problems?
• Fix the offending code in your layer (.bbappend)
• disable the recipe (PNBLACKLIST) and provide an alternative
• Don’t use the layer, copy only what you need
22
Yocto: your top-level layer
• Add your top-level layer
• Your machine configuration
• Your proprietary packages
• .bbappends and other files to modify the behaviour of lower
layers
23
Buildroot: BR2_EXTERNAL
• BR2_EXTERNAL is technically similar to Yocto layers, but
simpler
• The goal is to add, not modify
• Typical use: add your own product customizations
• packages
• Kconfig options
• defconfigs
• boards
• patches
• …
• Need to fix/improve a Buildroot package?
• Suggested policy: do it in the Buildroot code, then submit
your improvements upstream
24
Buildroot: BR2_EXTERNAL
$ make BR2_EXTERNAL=~/myext:~/myext2 menuconfig
• The list of your externals is saved internally
(.output/.br-external.mk)
• The top-level Makefile will include each external Makefile
• The same for Config.in files
25
Writing recipes
Overall recipe directory layout
<BUILDROOT> <LAYER>
recipes-*package
*
myrecipe_1.0.bb
files
fix-bug.patch
mypackage.hash
mypackage.mk
Config.in
mypackage
0001-fix-bug.patch
26
A simple Yocto package: the .bb file
<MYLAYER>/recipes-app/corporate-apps/foo_1.0.bb
SRC_URI = "http://www.foo.org/download/foo-${PV}.tar.xz"
DEPENDS = "libbar-native libusb"
do_compile() {
oe_runmake all
}
do_install() {
install -D -m 0755 ${B}/foo ${D}${bindir}/foo
}
27
A simple Buildroot package: the makefile
package/foo/foo.mk
FOO_VERSION = 1.0
FOO_SITE = http://www.foo.org/download
FOO_DEPENDENCIES = host-libbar libusb
define FOO_BUILD_CMDS
$(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) all
endef
define FOO_INSTALL_TARGET_CMDS
$(INSTALL) -D -m 0755 $(@D)/foo $(TARGET_DIR)/usr/bin/foo
endef
$(eval $(generic-package))
28
A simple Buildroot package: Config.in
• Shows the package in the Kconfig interfaces
• Uses the Kconfig language
package/foo/Config.in
config BR2_PACKAGE_FOO
bool "foo"
select BR2_PACKAGE_LIBUSB
help
A brief description.
29
Yocto classes
• classes implement common features for reuse in recipes
• .bbclass files
• There are classes for the most common build tools: Autotools,
CMake
<MYLAYER>/recipes-app/corporate-apps/foo_1.0.bb
SRC_URI = "http://www.foo.org/download/foo-${PV}.tar.xz"
DEPENDS = "libbar-native libusb"
inherit autotools
30
Buildroot package infrastructures
• package infrastructures are classes of packages that use the
same build tool
• Autotools, CMake, Python, LuaRocks, Perl/CPAN …
• Most commands have a default
package/foo/foo.mk
FOO_VERSION = 1.0
FOO_SITE = http://www.foo.org/download
FOO_DEPENDENCIES = host-libbar libusb
$(eval $(autotools-package))
31
Yocto classes
• With classes the common do_<TASK> functions are already set
• Customizable via infrastructure-specific variables
EXTRA_OECONF += "--enable-warp-speed"
• Can be extended with
• do_<TASK>_prepend
• do_<TASK>_append
do_install_append() {
touch ${D}${sysconfdir}/foo.conf
}
32
Buildroot package infrastructures
• With package infrastructures FOO_<STEP>_CMDS are already
set
• Customizable via infrastructure-specific variables
FOO_CONF_OPTS = --enable-warp-speed
• To extend them define hooks
• FOO_PRE_<STEP>_HOOKS
• FOO_POST_<STEP>_HOOKS
define FOO_CREATE_CONF_FILE
touch $(TARGET_DIR)/etc/foo.conf
endef
FOO_POST_INSTALL_HOOKS += FOO_CREATE_CONF_FILE
33
Predefined variables
Lots of predefined variables can (and should) be user in rules. The
most widely used:
Buildroot Yocto
Package name <PKG>_NAME PN
Package raw name <PKG>_RAWNAME BPN
Package version <PKG>_VERSION PV
Source code dir <PKG>_SRCDIR S
Build dir <PKG>_BUILDDIR B
Install files in (*) TARGET_DIR D
Install images in (*) BINARIES_DIR DEPLOYDIR
* The final dirs in Buildroot, temp dirs in Yocto.
34
Adding patches
Buildroot Yocto
.patch file in package dir .patch file in recipe subdir (*)
<PKG>_PATCH = <URL> SRC_URI += <URL>
BR2_GLOBAL_PATCH_DIR tree Your layer
* Plus SRC_URI += "file://foo.patch"
(and FILESEXTRAPATHS_prepend = "<DIR>:")
35
Building
Invoking
Buildroot Yocto
make [all] bitbake <IMAGE>
make busybox bitbake busybox
make busybox-configure bitbake -c configure busybox
make busybox-reconfigure bitbake -C configure busybox
make clean bitbake -c clean world
make busybox-dirclean bitbake -c clean busybox
36
Tuning resource usage
Buildroot Yocto
BR2_JLEVEL=2 make PARALLEL_MAKE="-j 2" bitbake ...
— BB_NUMBER_THREADS=2 bitbake ...
Build options → Enable compiler cache —
— SSTATE_DIR ?= " /.sstate-cache"
37
Buildroot: out-of-tree builds
• make O=foo foo_defconfig
• make O=bar bar_defconfig
• cd foo; make
• Build in foo/* instead of output/*
38
Buildroot: out-of-tree builds
• make O=foo foo_defconfig
• make O=bar bar_defconfig
• cd foo; make
• Build in foo/* instead of output/*
• cd bar; make
• Can run in parallel
38
Yocto: multiple machines and images
• bitbake core-image-minimal
• bitbake my-image-huge
• Recycles common artifacts
39
Yocto: multiple machines and images
• bitbake core-image-minimal
• bitbake my-image-huge
• Recycles common artifacts
• MACHINE=another-board bitbake my-image-huge
• Remember to use ?= to set MACHINE in your conf file
39
Buildroot dependency tracking: stamp files
• Dependency tracking is at the core of Make (program → .o →
.c)
• Does not fit completely the needs of a buildsystem
• Internally Buildroot touches a stamp file after completing
each step
• An empty file
• Tracks successful step completion, not the rules that originated
it
• If the rules change, Buildroot is unaware
40
Buildroot dependency tracking: stamp files
• You need to manually trigger a rebuild when:
• You changed the configuation of the package or one of its
dependencies
• You’re developing the package and changed the rules (.mk,
patches…)
• How to rebuild
• The safe option: make clean; make
• If you know what you really need: make <PKG>-dirclean
<PKG>
• Or make <PKG>-reconfigure / make <PKG>-rebuild
41
Yocto: recipe hash
• Bitbake stores a hash for each task
• Hash content:
• All the recipe variables and task code (bitbake -e)
• Content of all files stored in SRC_URI
• Automatically detect recipe changes and rebuilds what’s
needed
• Result stores in the sstate cache for later reuse
42
Yocto: recipe hash
• Still want to force a task?
• bitbake -f -c configure <PKG>
• -f forces to run tasks even when not needed
43
Where are my output files?
43
Work directory layout
<TOP> <--CWD <TOP>
build <--CWD
output tmp
build work
<TUPLE>
busybox
1.27.2-r0
busybox-1.29.2 busybox-1.27.2
image
package
packages-split
build
44
Root filesystem generation
<TOP> <--CWD <TOP>
build <--CWD
output tmp
work
<MACHINE TUPLE>
core-image-minimal
1.0-r0
target rootfs
bin, usr...bin, usr...
45
Output directory layout
<TOP> <--CWD <TOP>
build <--CWD
output tmp
images
deploy
images
<MACHINE>
u.boot.*
*Image
<IMG>-<MACHINE>.<EXT>
*.dtb
rootfs.<EXT>
*Image
*.dtb
u-boot.*
sdcard.img
46
Understanding what’s going on
What will it build?
46
Buildroot: graph-depends
• make graph-depends
• Produces output/graphs/graph-depends.pdf
ALL
busybox host-dosfstools
host-genimage
host-mtools
host-patchelf
ifupdown-scripts initscripts
linux
skeleton toolchain
uboot
rootfs-ext2
rootfs-tar
host-lzip
host-skeleton
host-libconfuse
host-pkgconf
host-bisonhost-flex
host-kmod
host-m4
host-gettext
host-automakehost-libxml2
host-autoconf
host-libtool
skeleton-init-sysv
skeleton-init-common
toolchain-buildroot
host-gcc-final
uclibc
host-gcc-initial
linux-headers
host-binutils
host-mpc
host-mpfr
host-gmp
host-dtc
host-e2fsprogs rootfs-common
host-util-linux
host-zlib
host-libzlib
host-fakeroot
host-makedevshost-acl
host-attr
47
Buildroot: graph-depends
• Build a per-package graph: <PKG>-graph-depends
• Set BR2_GRAPH_DEPS_OPTS in the environment to control the
output
• BR2_GRAPH_DEPS_OPTS="--exclude=host" make
avahi-graph-depends
• Produces output/graphs/avahi-graph-depends.pdf
avahi
dbus libdaemon
expat
48
Yocto: taskexp
• Generating dot graphs not really usable
• Task Explorer: bitbake -g -u taskexp world
• Shows dependencies between tasks (not recipes)
49
What does it do?
What went wrong?
49
Buildroot: default output
$ make
...
>>> host-e2fsprogs 1.44.2 Extracting
xzcat /home/murray/src/e2fsprogs/e2fsprogs-1.44.2.tar.xz...
>>> host-e2fsprogs 1.44.2 Patching
>>> host-e2fsprogs 1.44.2 Configuring
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
...
• “>>>” marks the started tasks
• The whole output of each step follows
• Failure? Look at the last lines
50
Buildroot: concise output
$ ./utils/brmake
...
2018-10-06T16:15:58 >>> host-zlib Patching
2018-10-06T16:15:58 >>> host-zlib Configuring
2018-10-06T16:15:58 >>> host-zlib Building
2018-10-06T16:15:58 >>> host-zlib Installing to host directory
2018-10-06T16:15:58 >>> host-util-linux 2.32.1 Patching
...
• Adds step start time
• Verbose output saved in br.log
51
Yocto: default output
• The default output shows the current status, no logs
• Hides completed tasks
Currently 4 running tasks (119 of 2503) 4% |## |
0: glibc-initial-2.27-r0 do_fetch (pid 5216) 38% |############ | 4.09M/s
1: glibc-2.27-r0 do_fetch - 4s (pid 5261)
2: ncurses-native-6.0+20171125-r0 do_fetch (pid 6147) | <=> |
3: elfutils-native-0.170-r0 do_fetch (pid 7143) 11% |### | 2.49M/s
52
Yocto: concise “log” output
• To see the completed tasks:
• bitbake ... | cat
NOTE: Running task 119 of 2645 (.../binutils/binutils-cross_2.30.bb:do_unpack)
NOTE: Running task 232 of 2645 (virtual:native:...lzo/lzo_2.10.bb:do_compile)
NOTE: recipe binutils-cross-arm-2.30-r0: task do_unpack: Started
NOTE: recipe binutils-cross-arm-2.30-r0: task do_prepare_recipe_sysroot: Started
NOTE: recipe elfutils-native-0.170-r0: task do_prepare_recipe_sysroot: Started
NOTE: recipe lzo-native-2.10-r0: task do_compile: Started
NOTE: recipe elfutils-native-0.170-r0: task do_prepare_recipe_sysroot: Succeeded
NOTE: Running task 247 of 2645 (virtual:native:.../elfutils_0.170.bb:do_configure)
NOTE: recipe binutils-cross-arm-2.30-r0: task do_prepare_recipe_sysroot: Succeeded
53
Yocto: inspect build logs
• Failure?
• For each task a log file is saved
• in
tmp/work/<TUPLE>/<RECIPE>/<VERSION>/temp/log.do_<TASK>
• e.g.
tmp/work/x86_64-linux/gmp-native/6.1.2-r0/temp/log.do_configure
• Or re-run the failed task with verbose output to see its output
on your terminal
• bitbake -v -f -c configure gmp-native
54
What is it thinking?
54
Buildroot: printvars
• make -s printvars
• Print all variables
• make -s VARS=BUSYBOX_% printvars
• Only variables matching a pattern
• make -s RAW_VARS=YES printvars
• Print unexpanded values
• make -qp
• Print the whole Make database
• Variables (before expansion) and the file where they were set
• Rules (target + prerequisites + actions)
55
Yocto: bitbake -e
• bitbake -e
• Show the global environment
• Variables and the files where they were set
• bitbake -e <RECIPE>
• Show the per-recipe environment
• Variables and the files where they were set
• Tasks actions
56
Customizing the root filesystem
Buildroot: Kconfig
• The same configuration system as the kernel, Busybox,
U-Boot, Barebox…
• make menuconfig, make xconfig
• .config is your current configuration
• make savedefconfig updates your defconfig with the new
values
57
Yocto: .bb files
• Your “configuration” is in several .bb files.
• A common layout:
• Build options, toolchain, MACHINE: a conf file in your top layer
(or build/conf/local.conf)
• Target options, kernel and bootloader selection: in your layer
conf/machine/<MACHINE>.bb
• System configuration: various recipes, other places
• Packages to put in rootfs: image recipe (see later)
58
Buildroot: adding packages
• make menuconfig → Packages
• Search, add, remove, change packages
• make clean (if you changed or remove packages)
• make
59
Yocto: adding packages
• Find the package you need
• bitbake-layers show-recipes
• http://layers.openembedded.org/layerindex/branch/
master/recipes/
• Create your own image recipe
• Image = list of packages to but in rootfs (a subset of all the
packages)
60
Yocto: adding packages
• Create an image recipe
(<MYLAYER>/recipes-*/images/*-image-*.bb)
require recipes-core/images/core-image-minimal.bb
DESCRIPTION = "My own root filesystem"
LICENSE = "MIT"
IMAGE_FSTYPES = "tar.gz"
IMAGE_INSTALL += "htop packagegroup-debug"
• Package groups
(<MYLAYER>/recipes-*/packagegroups/packagegroup-*.bb)
inherit packagegroup
RDEPENDS_${PN} = "gdb strace"
61
Typical root filesystem customizations
• And embedded systems needs customizations
• High-level choices: init system, /dev management, locales…
• Creation of users, passwords, assorted files, …
• And many more
• Buildroot
• make menuconfig → System configuration
• Yocto
• Add appropriate lines to your conf, board or image files
• Search the Yocto reference manual
https://www.yoctoproject.org/docs/current/
ref-manual/ref-manual.html
• Grep the poky source code
62
Some system settings, side-by-side
Buildroot Yocto
System hostname hostname_pn-base-files = "mybox"
System banner DISTRO_NAME_pn-base-files = "Welcome",
DISTRO_VERSION_pn-base-files = ""
Init system VIRTUAL-RUNTIME_init_manager
/dev management VIRTUAL-RUNTIME_dev_manager
Root password IMAGE_FEATURES += "empty-root-password"
Users tables inherit extrausers;
EXTRA_USERS_PARAMS = "usermod -P 1876*18 root;"
63
Other rootfs customizations
• Buildroot: System configuration menu:
• Root filesystem overlay directories
• Post-build and post-image scripts
• Yocto
• ROOTFS_POSTPROCESS_COMMAND and
IMAGE_POSTPROCESS_COMMAND
64
Tweaking recipes
Configuring Kconfig-based packages
• Buildroot
• Based on kconfig-package
• Kconfig packages: at91bootstrap3, barebox, uboot, linux,
busybox, linux-backports, swupdate, uclibc, xvisor
• Yocto
• Inherit the obscure cml1 class
• Kconfig packages in the Poky layer: linux, busybox (not
U-Boot)
65
Configuring Kconfig-based packages
Description Buildroot Yocto
Enter menu make <PKG>-menuconfig bitbake -c menuconfig <RCP>
Save defconfig make <PKG>-savedefconfig bitbake -c savedefconfig <RCP>
Update defconfig make <PKG>-update-defconfig —
Extract fragment — bitbake -c diffconfig <RCP>
66
Yocto: (re)assigning variables
• Assignments
• F := "foo-${A}" — Immediate expansion
• F = "foo-${A}" — Expansion on usage
• Weak assignments: used for values the user is supposed to
customize
• Base layer .bb: VAR ??= "white"
• Middle layer .bbappend: VAR ?= "black"
• Top-level layer.bbappend: VAR = "green"
• The recipe will use VAR = "green"
• Append or prepend
• VAR += "val", VAR =+ "val" (adds spaces)
• VAR_append = "val", VAR_prepend = "val" (does not add
spaces)
• VAR_remove = "val"
67
Buildroot: (re)assigning variables
• It’s a Makefile, use the Make syntax
• Assignments
• F := "foo-$(VER)" — Immediate expansion
• F = "foo-$(VER)" — Expansion on usage
• Append or prepend
• VAR = "$(VAR) extra", VAR = "extra $(VAR)"
68
More string processing
• Buildroot
• Make has several functions for transforming text
• Example: VAR = $(filter-out bug, foo bug bar)
• Yocto
• If Bitbake is not enough, use Python
• PV_x = "${@'.'.join('${PV}'.split('.')[0:2] +
['x'])}"
”10.11.12” → ”10.11.x”
69
Yocto: changing task code
do_conf_append() {
echo CONFIG_ACS >>${D}/.config
}
do_install_prepend() {
mkdir -p ${D}${bindir}
}
• Append or prepend code
• Final task code =
concatenation of prepends + base + appends
• Don’t mix Bash and Python
70
Buildroot: changing task code
define FOO_ENABLE_ACS
echo CONFIG_ACS >>$(@D)/.config
endef
FOO_POST_CONFIGURE_HOOKS += FOO_ENABLE_ACS
define FOO_CREATE_BIN_DIR
mkdir -p $(TARGET_DIR)/bin
endef
FOO_PRE_INSTALL_HOOKS += FOO_CREATE_BIN_DIR
• Append or prepend code
• Final Make rule actions =
concatenation of pre-hooks + base + post-hooks
71
Conclusions
Thank you for your attention
Questions?
Luca Ceresoli
luca@lucaceresoli.net
http://lucaceresoli.net
© Copyright 2018, Luca Ceresoli. Slides released under
Creative Commons Attribution - Share Alike 3.0 License
https://creativecommons.org/licenses/by-sa/3.0/
72
Extra slides
Working with local sources
• Use sources from a local directory
• Not managed by the build system
• Useful during application development
• Buildroot
• <PKG>_OVERRIDE_SRCDIR=/my/src/tree make
• Skips source, extract, patch
• rsyncs from /my/src/tree before building
• Yocto
• inherit externalsrc
• EXTERNALSRC = "/my/src/tree"
• fetch, unpack, patch
• Points S to /my/src/tree

Weitere ähnliche Inhalte

Was ist angesagt?

Uboot startup sequence
Uboot startup sequenceUboot startup sequence
Uboot startup sequence
Houcheng Lin
 
U boot porting guide for SoC
U boot porting guide for SoCU boot porting guide for SoC
U boot porting guide for SoC
Macpaul Lin
 

Was ist angesagt? (20)

Yocto project
Yocto projectYocto project
Yocto project
 
Yocto - Embedded Linux Distribution Maker
Yocto - Embedded Linux Distribution MakerYocto - Embedded Linux Distribution Maker
Yocto - Embedded Linux Distribution Maker
 
淺談探索 Linux 系統設計之道
淺談探索 Linux 系統設計之道 淺談探索 Linux 系統設計之道
淺談探索 Linux 系統設計之道
 
from Source to Binary: How GNU Toolchain Works
from Source to Binary: How GNU Toolchain Worksfrom Source to Binary: How GNU Toolchain Works
from Source to Binary: How GNU Toolchain Works
 
How A Compiler Works: GNU Toolchain
How A Compiler Works: GNU ToolchainHow A Compiler Works: GNU Toolchain
How A Compiler Works: GNU Toolchain
 
Linux Device Tree
Linux Device TreeLinux Device Tree
Linux Device Tree
 
Uboot startup sequence
Uboot startup sequenceUboot startup sequence
Uboot startup sequence
 
Unix shell scripting basics
Unix shell scripting basicsUnix shell scripting basics
Unix shell scripting basics
 
U Boot or Universal Bootloader
U Boot or Universal BootloaderU Boot or Universal Bootloader
U Boot or Universal Bootloader
 
U boot porting guide for SoC
U boot porting guide for SoCU boot porting guide for SoC
U boot porting guide for SoC
 
Kernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven Rostedt
Kernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven RostedtKernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven Rostedt
Kernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven Rostedt
 
用十分鐘 向jserv學習作業系統設計
用十分鐘  向jserv學習作業系統設計用十分鐘  向jserv學習作業系統設計
用十分鐘 向jserv學習作業系統設計
 
Debugging linux kernel tools and techniques
Debugging linux kernel tools and  techniquesDebugging linux kernel tools and  techniques
Debugging linux kernel tools and techniques
 
Device Tree for Dummies (ELC 2014)
Device Tree for Dummies (ELC 2014)Device Tree for Dummies (ELC 2014)
Device Tree for Dummies (ELC 2014)
 
Linux Kernel Overview
Linux Kernel OverviewLinux Kernel Overview
Linux Kernel Overview
 
Launch the First Process in Linux System
Launch the First Process in Linux SystemLaunch the First Process in Linux System
Launch the First Process in Linux System
 
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...
 
semaphore & mutex.pdf
semaphore & mutex.pdfsemaphore & mutex.pdf
semaphore & mutex.pdf
 
SPI Drivers
SPI DriversSPI Drivers
SPI Drivers
 
Linux Initialization Process (1)
Linux Initialization Process (1)Linux Initialization Process (1)
Linux Initialization Process (1)
 

Ähnlich wie Luca Ceresoli - Buildroot vs Yocto: Differences for Your Daily Job

yocto_scale_handout-with-notes
yocto_scale_handout-with-notesyocto_scale_handout-with-notes
yocto_scale_handout-with-notes
Steve Arnold
 
Yocto: Training in English
Yocto: Training in EnglishYocto: Training in English
Yocto: Training in English
Otavio Salvador
 
DevHub 3 - Composer plus Magento
DevHub 3 - Composer plus MagentoDevHub 3 - Composer plus Magento
DevHub 3 - Composer plus Magento
Magento Dev
 
An Introduction to the Yocto Embedded Framework 2018
An Introduction to the Yocto Embedded Framework 2018An Introduction to the Yocto Embedded Framework 2018
An Introduction to the Yocto Embedded Framework 2018
ICS
 

Ähnlich wie Luca Ceresoli - Buildroot vs Yocto: Differences for Your Daily Job (20)

yocto_scale_handout-with-notes
yocto_scale_handout-with-notesyocto_scale_handout-with-notes
yocto_scale_handout-with-notes
 
Yocto Project introduction
Yocto Project introductionYocto Project introduction
Yocto Project introduction
 
Yocto: Training in English
Yocto: Training in EnglishYocto: Training in English
Yocto: Training in English
 
Yocto Project Kernel Lab, Hands-On
Yocto Project Kernel Lab, Hands-OnYocto Project Kernel Lab, Hands-On
Yocto Project Kernel Lab, Hands-On
 
Yocto Project : Custom Embedded Linux Distribution
Yocto Project : Custom Embedded Linux DistributionYocto Project : Custom Embedded Linux Distribution
Yocto Project : Custom Embedded Linux Distribution
 
Yocto Project Kernel Lab hands-on
Yocto Project Kernel Lab hands-onYocto Project Kernel Lab hands-on
Yocto Project Kernel Lab hands-on
 
Getting Started with EasyBuild - Tutorial Part 2
Getting Started with EasyBuild - Tutorial Part 2Getting Started with EasyBuild - Tutorial Part 2
Getting Started with EasyBuild - Tutorial Part 2
 
The Latest Status of CE Workgroup Shared Embedded Linux Distribution Project
 The Latest Status of CE Workgroup Shared Embedded Linux Distribution Project The Latest Status of CE Workgroup Shared Embedded Linux Distribution Project
The Latest Status of CE Workgroup Shared Embedded Linux Distribution Project
 
Buildroot easy embedded system
Buildroot easy embedded systemBuildroot easy embedded system
Buildroot easy embedded system
 
habitat at docker bud
habitat at docker budhabitat at docker bud
habitat at docker bud
 
Stefano Cordibella - An introduction to Yocto Project
Stefano Cordibella - An introduction to Yocto ProjectStefano Cordibella - An introduction to Yocto Project
Stefano Cordibella - An introduction to Yocto Project
 
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
 
DevHub 3 - Composer plus Magento
DevHub 3 - Composer plus MagentoDevHub 3 - Composer plus Magento
DevHub 3 - Composer plus Magento
 
Package management and creation in Gentoo Linux
Package management and creation in Gentoo LinuxPackage management and creation in Gentoo Linux
Package management and creation in Gentoo Linux
 
[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
 
CMake - Introduction and best practices
CMake - Introduction and best practicesCMake - Introduction and best practices
CMake - Introduction and best practices
 
Building Embedded Linux UDOONEO
Building Embedded Linux UDOONEOBuilding Embedded Linux UDOONEO
Building Embedded Linux UDOONEO
 
An Introduction to the Yocto Embedded Framework 2018
An Introduction to the Yocto Embedded Framework 2018An Introduction to the Yocto Embedded Framework 2018
An Introduction to the Yocto Embedded Framework 2018
 
Embedded linux build systems
Embedded linux build systems  Embedded linux build systems
Embedded linux build systems
 
An Overview of the IHK/McKernel Multi-kernel Operating System
An Overview of the IHK/McKernel Multi-kernel Operating SystemAn Overview of the IHK/McKernel Multi-kernel Operating System
An Overview of the IHK/McKernel Multi-kernel Operating System
 

Mehr von linuxlab_conf

Bruno Verachten - The Android device farm that fits in a (cloudy) pocket
Bruno Verachten - The Android device farm that fits in a (cloudy) pocketBruno Verachten - The Android device farm that fits in a (cloudy) pocket
Bruno Verachten - The Android device farm that fits in a (cloudy) pocket
linuxlab_conf
 
Claudio Scordino - Handling mixed criticality on embedded multi-core systems
Claudio Scordino - Handling mixed criticality on embedded multi-core systemsClaudio Scordino - Handling mixed criticality on embedded multi-core systems
Claudio Scordino - Handling mixed criticality on embedded multi-core systems
linuxlab_conf
 
Jacopo Mondi - Complex cameras are complex
Jacopo Mondi - Complex cameras are complexJacopo Mondi - Complex cameras are complex
Jacopo Mondi - Complex cameras are complex
linuxlab_conf
 
Emanuele Faranda - Creating network overlays with IoT devices using N2N
Emanuele Faranda - Creating network overlays with IoT devices using N2NEmanuele Faranda - Creating network overlays with IoT devices using N2N
Emanuele Faranda - Creating network overlays with IoT devices using N2N
linuxlab_conf
 
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
 
Angelo Compagnucci - Upgrading buildroot based devices with swupdate
Angelo Compagnucci - Upgrading buildroot based devices with swupdateAngelo Compagnucci - Upgrading buildroot based devices with swupdate
Angelo Compagnucci - Upgrading buildroot based devices with swupdate
linuxlab_conf
 

Mehr von linuxlab_conf (17)

Jonathan Corbet - Keynote: The Kernel Report
Jonathan Corbet - Keynote: The Kernel ReportJonathan Corbet - Keynote: The Kernel Report
Jonathan Corbet - Keynote: The Kernel Report
 
Marco Cavallini - Yocto Project, an automatic generator of embedded Linux dis...
Marco Cavallini - Yocto Project, an automatic generator of embedded Linux dis...Marco Cavallini - Yocto Project, an automatic generator of embedded Linux dis...
Marco Cavallini - Yocto Project, an automatic generator of embedded Linux dis...
 
Bruno Verachten - The Android device farm that fits in a (cloudy) pocket
Bruno Verachten - The Android device farm that fits in a (cloudy) pocketBruno Verachten - The Android device farm that fits in a (cloudy) pocket
Bruno Verachten - The Android device farm that fits in a (cloudy) pocket
 
Claudio Scordino - Handling mixed criticality on embedded multi-core systems
Claudio Scordino - Handling mixed criticality on embedded multi-core systemsClaudio Scordino - Handling mixed criticality on embedded multi-core systems
Claudio Scordino - Handling mixed criticality on embedded multi-core systems
 
Andrea Righi - Spying on the Linux kernel for fun and profit
Andrea Righi - Spying on the Linux kernel for fun and profitAndrea Righi - Spying on the Linux kernel for fun and profit
Andrea Righi - Spying on the Linux kernel for fun and profit
 
Jacopo Mondi - Complex cameras are complex
Jacopo Mondi - Complex cameras are complexJacopo Mondi - Complex cameras are complex
Jacopo Mondi - Complex cameras are complex
 
Alessio Lama - Development and testing of a safety network protocol
Alessio Lama - Development and testing of a safety network protocolAlessio Lama - Development and testing of a safety network protocol
Alessio Lama - Development and testing of a safety network protocol
 
Emanuele Faranda - Creating network overlays with IoT devices using N2N
Emanuele Faranda - Creating network overlays with IoT devices using N2NEmanuele Faranda - Creating network overlays with IoT devices using N2N
Emanuele Faranda - Creating network overlays with IoT devices using N2N
 
Dario Faggioli - Virtualization in the age of speculative execution HW bugs
Dario Faggioli - Virtualization in the age of speculative execution HW bugsDario Faggioli - Virtualization in the age of speculative execution HW bugs
Dario Faggioli - Virtualization in the age of speculative execution HW bugs
 
Michele Dionisio & Pietro Lorefice - Developing and testing a device driver w...
Michele Dionisio & Pietro Lorefice - Developing and testing a device driver w...Michele Dionisio & Pietro Lorefice - Developing and testing a device driver w...
Michele Dionisio & Pietro Lorefice - Developing and testing a device driver w...
 
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...
 
Mirko Damiani - An Embedded soft real time distributed system in Go
Mirko Damiani - An Embedded soft real time distributed system in GoMirko Damiani - An Embedded soft real time distributed system in Go
Mirko Damiani - An Embedded soft real time distributed system in Go
 
Tommaso Cucinotta - Low-latency and power-efficient audio applications on Linux
Tommaso Cucinotta - Low-latency and power-efficient audio applications on LinuxTommaso Cucinotta - Low-latency and power-efficient audio applications on Linux
Tommaso Cucinotta - Low-latency and power-efficient audio applications on Linux
 
Angelo Compagnucci - Upgrading buildroot based devices with swupdate
Angelo Compagnucci - Upgrading buildroot based devices with swupdateAngelo Compagnucci - Upgrading buildroot based devices with swupdate
Angelo Compagnucci - Upgrading buildroot based devices with swupdate
 
Luca Cipriani - Control your Embedded Linux remotely by using MQTT and a web ...
Luca Cipriani - Control your Embedded Linux remotely by using MQTT and a web ...Luca Cipriani - Control your Embedded Linux remotely by using MQTT and a web ...
Luca Cipriani - Control your Embedded Linux remotely by using MQTT and a web ...
 
Davide Berardi - Linux hardening and security measures against Memory corruption
Davide Berardi - Linux hardening and security measures against Memory corruptionDavide Berardi - Linux hardening and security measures against Memory corruption
Davide Berardi - Linux hardening and security measures against Memory corruption
 
Luca Abeni - Real-Time Virtual Machines with Linux and kvm
Luca Abeni - Real-Time Virtual Machines with Linux and kvmLuca Abeni - Real-Time Virtual Machines with Linux and kvm
Luca Abeni - Real-Time Virtual Machines with Linux and kvm
 

Kürzlich hochgeladen

The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
masabamasaba
 

Kürzlich hochgeladen (20)

The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 

Luca Ceresoli - Buildroot vs Yocto: Differences for Your Daily Job

  • 1. Buildroot vs Yocto: Differences for Your Daily Job Luca Ceresoli — AIM Sportline luca@lucaceresoli.net http://lucaceresoli.net Linux-Lab 2018
  • 2. About me • Embedded Linux engineer at AIM Sportline • Kernel, drivers, bootloader, FPGA, build system www.aim-sportline.com • Open source enthusiast, contributor to Buildroot, the Linux kernel and a few other projects • Bergamo, Milan area, Italy 1
  • 4. This is not… • This is not a tutorial 2
  • 5. This is not… • This is not a tutorial • This is not a feature comparison, not a selection guide 2
  • 6. This is not… • This is not a tutorial • This is not a feature comparison, not a selection guide • If you need one: • Buildroot vs. OpenEmbedded/Yocto: A Four Hands Discussion, Belloni and Petazzoni, ELC 2016 (slides and video online) • http://www.jumpnowtek.com/linux/ Choosing-an-embedded-linux-build-system.html • https://opensource.com/article/18/6/ embedded-linux-build-tools 2
  • 7. This is not… • This is not a tutorial • This is not a feature comparison, not a selection guide • If you need one: • Buildroot vs. OpenEmbedded/Yocto: A Four Hands Discussion, Belloni and Petazzoni, ELC 2016 (slides and video online) • http://www.jumpnowtek.com/linux/ Choosing-an-embedded-linux-build-system.html • https://opensource.com/article/18/6/ embedded-linux-build-tools • Fact: both tools have pros and cons 2
  • 8. Similar… In a nutshell: a dependency graph with actions to build each node. 3
  • 9. …but different — based on different tools Kconfig Make Bitbake 4
  • 10. …but different — root filesystem VS distribution Buildroot Kernel Bootloader Root FS Yocto Packages (ipk, dpkg, rpm) Kernel Bootloader Root FS 5
  • 11. Contents 1 Introduction 2 Bootstrapping 3 Naming 4 Layers / external trees 5 Writing recipes 6 Building 7 Understanding what’s going on 8 Customizing the root filesystem 9 Tweaking recipes 10 Conclusions 6
  • 13. Ingredients • Get the sources • git clone git://git.buildroot.net/buildroot; cd buildroot 7
  • 14. Ingredients 1. Get the Poky sources (bitbake, oe-core) • git clone -b sumo git://git.yoctoproject.org/poky; cd poky 2. You’ll probably need more recipes • git clone -b sumo git://git.openembedded.org/meta-openembedded 3. Additional layers can be useful • SoC/board vendor BSP layer, additional software, … • http://layers.openembedded.org 8
  • 15. Configure • Smooth start: find a defconfig for a similar board • make list-defconfigs # minimal booting configs • make similar_board_defconfig • Or from scratch • Find kernel and U-Boot sources that work for your SoC • make menuconfig • Target: architecture, CPU features • Kernel: where to fetch it from, defconfig, dtbs • U-Boot: where to fetch it from, defconfig 9
  • 16. 10
  • 17. Configure • . oe-init-build-env • Creates and enters the build/ dir • Smooth start: find a defconfig for a similar board • ls conf/machine/ in your SoC vendor layer • Set MACHINE ?= "<similar_machine>" in conf/local.conf 11
  • 18. Build • make • Without parameters builds “all” 12
  • 19. Build • bitbake <IMAGE> • bitbake core-image-minimal 13
  • 22. Package == Recipe Rules to download and “build” a single program, library or other (e.g. binutils, busybox, gcc, libxml2) • Each package is a Make target and has a Kconfig on/off knob • make libxml2 • host-<PKG>: the same package built for the development host (native build) • Each package is a Bitbake target • bitbake libxml2 • <PKG>-native: the same package built for the development host (native build) 15
  • 23. Step == Task Each package requires several steps to be built • No formal name, usually called just steps • source, extract, patch, configure, build, install, … • Each step is also a make target • make libxml2-configure host-binutils-build busybox • The special <PKGNAME> make target depends on all other normal tasks required to ’build’ a recipe • Called tasks (often prefixed with do_) • fetch, unpack, patch, configure, compile, install, deploy, … • First-class citizens in bitbake • bitbake -c configure libxml2 busybox • The special build task depends on all other normal tasks required to ’build’ a recipe 16
  • 25. Naming side-by-side Package Recipe Package Step Recipe Task host-<PKG> <PKG>-native pkg-generic.mk base.bbclass source fetch extract unpack patch patch configure configure build compile install-{target,staging} install install-images deploy 18
  • 27. Yocto: layers The preferred way to add features: layers conf/bblayers.conf BBLAYERS ?= " /home/murray/devel/poky/meta /home/murray/devel/poky/meta-poky /home/murray/devel/poky/meta-yocto-bsp <...path to other layers...> " 19
  • 28. Yocto: adding layers BBLAYERS ?= " /home/murray/devel/poky/meta /home/murray/devel/poky/meta-poky /home/murray/devel/poky/meta-yocto-bsp + ${TOPDIR}/../meta-my-soc-vendor + ${TOPDIR}/../meta-openembedded/meta-oe " • Suggestion: use relative paths 20
  • 29. Yocto: .bbappend • .bbappend files are appended to the .bb file while parsing • Change variable values • Append/prepend to tasks • The resulting myrecipe is a concatenation of: • <LAYER1>/*/*/myrecipe.bb • <LAYER2>/*/*/myrecipe.bbappend • <LAYER3>/*/*/myrecipe.bbappend 21
  • 30. Yocto: issues with layers • Some SoC vendor layers augment the buildsystem, at times creating problems • Conflict between layers (e.g. in gstreamer) • Suggestion: add layers one by one, bottom-up, test each time • Problems? • Fix the offending code in your layer (.bbappend) • disable the recipe (PNBLACKLIST) and provide an alternative • Don’t use the layer, copy only what you need 22
  • 31. Yocto: your top-level layer • Add your top-level layer • Your machine configuration • Your proprietary packages • .bbappends and other files to modify the behaviour of lower layers 23
  • 32. Buildroot: BR2_EXTERNAL • BR2_EXTERNAL is technically similar to Yocto layers, but simpler • The goal is to add, not modify • Typical use: add your own product customizations • packages • Kconfig options • defconfigs • boards • patches • … • Need to fix/improve a Buildroot package? • Suggested policy: do it in the Buildroot code, then submit your improvements upstream 24
  • 33. Buildroot: BR2_EXTERNAL $ make BR2_EXTERNAL=~/myext:~/myext2 menuconfig • The list of your externals is saved internally (.output/.br-external.mk) • The top-level Makefile will include each external Makefile • The same for Config.in files 25
  • 35. Overall recipe directory layout <BUILDROOT> <LAYER> recipes-*package * myrecipe_1.0.bb files fix-bug.patch mypackage.hash mypackage.mk Config.in mypackage 0001-fix-bug.patch 26
  • 36. A simple Yocto package: the .bb file <MYLAYER>/recipes-app/corporate-apps/foo_1.0.bb SRC_URI = "http://www.foo.org/download/foo-${PV}.tar.xz" DEPENDS = "libbar-native libusb" do_compile() { oe_runmake all } do_install() { install -D -m 0755 ${B}/foo ${D}${bindir}/foo } 27
  • 37. A simple Buildroot package: the makefile package/foo/foo.mk FOO_VERSION = 1.0 FOO_SITE = http://www.foo.org/download FOO_DEPENDENCIES = host-libbar libusb define FOO_BUILD_CMDS $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) all endef define FOO_INSTALL_TARGET_CMDS $(INSTALL) -D -m 0755 $(@D)/foo $(TARGET_DIR)/usr/bin/foo endef $(eval $(generic-package)) 28
  • 38. A simple Buildroot package: Config.in • Shows the package in the Kconfig interfaces • Uses the Kconfig language package/foo/Config.in config BR2_PACKAGE_FOO bool "foo" select BR2_PACKAGE_LIBUSB help A brief description. 29
  • 39. Yocto classes • classes implement common features for reuse in recipes • .bbclass files • There are classes for the most common build tools: Autotools, CMake <MYLAYER>/recipes-app/corporate-apps/foo_1.0.bb SRC_URI = "http://www.foo.org/download/foo-${PV}.tar.xz" DEPENDS = "libbar-native libusb" inherit autotools 30
  • 40. Buildroot package infrastructures • package infrastructures are classes of packages that use the same build tool • Autotools, CMake, Python, LuaRocks, Perl/CPAN … • Most commands have a default package/foo/foo.mk FOO_VERSION = 1.0 FOO_SITE = http://www.foo.org/download FOO_DEPENDENCIES = host-libbar libusb $(eval $(autotools-package)) 31
  • 41. Yocto classes • With classes the common do_<TASK> functions are already set • Customizable via infrastructure-specific variables EXTRA_OECONF += "--enable-warp-speed" • Can be extended with • do_<TASK>_prepend • do_<TASK>_append do_install_append() { touch ${D}${sysconfdir}/foo.conf } 32
  • 42. Buildroot package infrastructures • With package infrastructures FOO_<STEP>_CMDS are already set • Customizable via infrastructure-specific variables FOO_CONF_OPTS = --enable-warp-speed • To extend them define hooks • FOO_PRE_<STEP>_HOOKS • FOO_POST_<STEP>_HOOKS define FOO_CREATE_CONF_FILE touch $(TARGET_DIR)/etc/foo.conf endef FOO_POST_INSTALL_HOOKS += FOO_CREATE_CONF_FILE 33
  • 43. Predefined variables Lots of predefined variables can (and should) be user in rules. The most widely used: Buildroot Yocto Package name <PKG>_NAME PN Package raw name <PKG>_RAWNAME BPN Package version <PKG>_VERSION PV Source code dir <PKG>_SRCDIR S Build dir <PKG>_BUILDDIR B Install files in (*) TARGET_DIR D Install images in (*) BINARIES_DIR DEPLOYDIR * The final dirs in Buildroot, temp dirs in Yocto. 34
  • 44. Adding patches Buildroot Yocto .patch file in package dir .patch file in recipe subdir (*) <PKG>_PATCH = <URL> SRC_URI += <URL> BR2_GLOBAL_PATCH_DIR tree Your layer * Plus SRC_URI += "file://foo.patch" (and FILESEXTRAPATHS_prepend = "<DIR>:") 35
  • 46. Invoking Buildroot Yocto make [all] bitbake <IMAGE> make busybox bitbake busybox make busybox-configure bitbake -c configure busybox make busybox-reconfigure bitbake -C configure busybox make clean bitbake -c clean world make busybox-dirclean bitbake -c clean busybox 36
  • 47. Tuning resource usage Buildroot Yocto BR2_JLEVEL=2 make PARALLEL_MAKE="-j 2" bitbake ... — BB_NUMBER_THREADS=2 bitbake ... Build options → Enable compiler cache — — SSTATE_DIR ?= " /.sstate-cache" 37
  • 48. Buildroot: out-of-tree builds • make O=foo foo_defconfig • make O=bar bar_defconfig • cd foo; make • Build in foo/* instead of output/* 38
  • 49. Buildroot: out-of-tree builds • make O=foo foo_defconfig • make O=bar bar_defconfig • cd foo; make • Build in foo/* instead of output/* • cd bar; make • Can run in parallel 38
  • 50. Yocto: multiple machines and images • bitbake core-image-minimal • bitbake my-image-huge • Recycles common artifacts 39
  • 51. Yocto: multiple machines and images • bitbake core-image-minimal • bitbake my-image-huge • Recycles common artifacts • MACHINE=another-board bitbake my-image-huge • Remember to use ?= to set MACHINE in your conf file 39
  • 52. Buildroot dependency tracking: stamp files • Dependency tracking is at the core of Make (program → .o → .c) • Does not fit completely the needs of a buildsystem • Internally Buildroot touches a stamp file after completing each step • An empty file • Tracks successful step completion, not the rules that originated it • If the rules change, Buildroot is unaware 40
  • 53. Buildroot dependency tracking: stamp files • You need to manually trigger a rebuild when: • You changed the configuation of the package or one of its dependencies • You’re developing the package and changed the rules (.mk, patches…) • How to rebuild • The safe option: make clean; make • If you know what you really need: make <PKG>-dirclean <PKG> • Or make <PKG>-reconfigure / make <PKG>-rebuild 41
  • 54. Yocto: recipe hash • Bitbake stores a hash for each task • Hash content: • All the recipe variables and task code (bitbake -e) • Content of all files stored in SRC_URI • Automatically detect recipe changes and rebuilds what’s needed • Result stores in the sstate cache for later reuse 42
  • 55. Yocto: recipe hash • Still want to force a task? • bitbake -f -c configure <PKG> • -f forces to run tasks even when not needed 43
  • 56. Where are my output files? 43
  • 57. Work directory layout <TOP> <--CWD <TOP> build <--CWD output tmp build work <TUPLE> busybox 1.27.2-r0 busybox-1.29.2 busybox-1.27.2 image package packages-split build 44
  • 58. Root filesystem generation <TOP> <--CWD <TOP> build <--CWD output tmp work <MACHINE TUPLE> core-image-minimal 1.0-r0 target rootfs bin, usr...bin, usr... 45
  • 59. Output directory layout <TOP> <--CWD <TOP> build <--CWD output tmp images deploy images <MACHINE> u.boot.* *Image <IMG>-<MACHINE>.<EXT> *.dtb rootfs.<EXT> *Image *.dtb u-boot.* sdcard.img 46
  • 61. What will it build? 46
  • 62. Buildroot: graph-depends • make graph-depends • Produces output/graphs/graph-depends.pdf ALL busybox host-dosfstools host-genimage host-mtools host-patchelf ifupdown-scripts initscripts linux skeleton toolchain uboot rootfs-ext2 rootfs-tar host-lzip host-skeleton host-libconfuse host-pkgconf host-bisonhost-flex host-kmod host-m4 host-gettext host-automakehost-libxml2 host-autoconf host-libtool skeleton-init-sysv skeleton-init-common toolchain-buildroot host-gcc-final uclibc host-gcc-initial linux-headers host-binutils host-mpc host-mpfr host-gmp host-dtc host-e2fsprogs rootfs-common host-util-linux host-zlib host-libzlib host-fakeroot host-makedevshost-acl host-attr 47
  • 63. Buildroot: graph-depends • Build a per-package graph: <PKG>-graph-depends • Set BR2_GRAPH_DEPS_OPTS in the environment to control the output • BR2_GRAPH_DEPS_OPTS="--exclude=host" make avahi-graph-depends • Produces output/graphs/avahi-graph-depends.pdf avahi dbus libdaemon expat 48
  • 64. Yocto: taskexp • Generating dot graphs not really usable • Task Explorer: bitbake -g -u taskexp world • Shows dependencies between tasks (not recipes) 49
  • 65. What does it do? What went wrong? 49
  • 66. Buildroot: default output $ make ... >>> host-e2fsprogs 1.44.2 Extracting xzcat /home/murray/src/e2fsprogs/e2fsprogs-1.44.2.tar.xz... >>> host-e2fsprogs 1.44.2 Patching >>> host-e2fsprogs 1.44.2 Configuring checking build system type... x86_64-pc-linux-gnu checking host system type... x86_64-pc-linux-gnu ... • “>>>” marks the started tasks • The whole output of each step follows • Failure? Look at the last lines 50
  • 67. Buildroot: concise output $ ./utils/brmake ... 2018-10-06T16:15:58 >>> host-zlib Patching 2018-10-06T16:15:58 >>> host-zlib Configuring 2018-10-06T16:15:58 >>> host-zlib Building 2018-10-06T16:15:58 >>> host-zlib Installing to host directory 2018-10-06T16:15:58 >>> host-util-linux 2.32.1 Patching ... • Adds step start time • Verbose output saved in br.log 51
  • 68. Yocto: default output • The default output shows the current status, no logs • Hides completed tasks Currently 4 running tasks (119 of 2503) 4% |## | 0: glibc-initial-2.27-r0 do_fetch (pid 5216) 38% |############ | 4.09M/s 1: glibc-2.27-r0 do_fetch - 4s (pid 5261) 2: ncurses-native-6.0+20171125-r0 do_fetch (pid 6147) | <=> | 3: elfutils-native-0.170-r0 do_fetch (pid 7143) 11% |### | 2.49M/s 52
  • 69. Yocto: concise “log” output • To see the completed tasks: • bitbake ... | cat NOTE: Running task 119 of 2645 (.../binutils/binutils-cross_2.30.bb:do_unpack) NOTE: Running task 232 of 2645 (virtual:native:...lzo/lzo_2.10.bb:do_compile) NOTE: recipe binutils-cross-arm-2.30-r0: task do_unpack: Started NOTE: recipe binutils-cross-arm-2.30-r0: task do_prepare_recipe_sysroot: Started NOTE: recipe elfutils-native-0.170-r0: task do_prepare_recipe_sysroot: Started NOTE: recipe lzo-native-2.10-r0: task do_compile: Started NOTE: recipe elfutils-native-0.170-r0: task do_prepare_recipe_sysroot: Succeeded NOTE: Running task 247 of 2645 (virtual:native:.../elfutils_0.170.bb:do_configure) NOTE: recipe binutils-cross-arm-2.30-r0: task do_prepare_recipe_sysroot: Succeeded 53
  • 70. Yocto: inspect build logs • Failure? • For each task a log file is saved • in tmp/work/<TUPLE>/<RECIPE>/<VERSION>/temp/log.do_<TASK> • e.g. tmp/work/x86_64-linux/gmp-native/6.1.2-r0/temp/log.do_configure • Or re-run the failed task with verbose output to see its output on your terminal • bitbake -v -f -c configure gmp-native 54
  • 71. What is it thinking? 54
  • 72. Buildroot: printvars • make -s printvars • Print all variables • make -s VARS=BUSYBOX_% printvars • Only variables matching a pattern • make -s RAW_VARS=YES printvars • Print unexpanded values • make -qp • Print the whole Make database • Variables (before expansion) and the file where they were set • Rules (target + prerequisites + actions) 55
  • 73. Yocto: bitbake -e • bitbake -e • Show the global environment • Variables and the files where they were set • bitbake -e <RECIPE> • Show the per-recipe environment • Variables and the files where they were set • Tasks actions 56
  • 74. Customizing the root filesystem
  • 75. Buildroot: Kconfig • The same configuration system as the kernel, Busybox, U-Boot, Barebox… • make menuconfig, make xconfig • .config is your current configuration • make savedefconfig updates your defconfig with the new values 57
  • 76. Yocto: .bb files • Your “configuration” is in several .bb files. • A common layout: • Build options, toolchain, MACHINE: a conf file in your top layer (or build/conf/local.conf) • Target options, kernel and bootloader selection: in your layer conf/machine/<MACHINE>.bb • System configuration: various recipes, other places • Packages to put in rootfs: image recipe (see later) 58
  • 77. Buildroot: adding packages • make menuconfig → Packages • Search, add, remove, change packages • make clean (if you changed or remove packages) • make 59
  • 78. Yocto: adding packages • Find the package you need • bitbake-layers show-recipes • http://layers.openembedded.org/layerindex/branch/ master/recipes/ • Create your own image recipe • Image = list of packages to but in rootfs (a subset of all the packages) 60
  • 79. Yocto: adding packages • Create an image recipe (<MYLAYER>/recipes-*/images/*-image-*.bb) require recipes-core/images/core-image-minimal.bb DESCRIPTION = "My own root filesystem" LICENSE = "MIT" IMAGE_FSTYPES = "tar.gz" IMAGE_INSTALL += "htop packagegroup-debug" • Package groups (<MYLAYER>/recipes-*/packagegroups/packagegroup-*.bb) inherit packagegroup RDEPENDS_${PN} = "gdb strace" 61
  • 80. Typical root filesystem customizations • And embedded systems needs customizations • High-level choices: init system, /dev management, locales… • Creation of users, passwords, assorted files, … • And many more • Buildroot • make menuconfig → System configuration • Yocto • Add appropriate lines to your conf, board or image files • Search the Yocto reference manual https://www.yoctoproject.org/docs/current/ ref-manual/ref-manual.html • Grep the poky source code 62
  • 81. Some system settings, side-by-side Buildroot Yocto System hostname hostname_pn-base-files = "mybox" System banner DISTRO_NAME_pn-base-files = "Welcome", DISTRO_VERSION_pn-base-files = "" Init system VIRTUAL-RUNTIME_init_manager /dev management VIRTUAL-RUNTIME_dev_manager Root password IMAGE_FEATURES += "empty-root-password" Users tables inherit extrausers; EXTRA_USERS_PARAMS = "usermod -P 1876*18 root;" 63
  • 82. Other rootfs customizations • Buildroot: System configuration menu: • Root filesystem overlay directories • Post-build and post-image scripts • Yocto • ROOTFS_POSTPROCESS_COMMAND and IMAGE_POSTPROCESS_COMMAND 64
  • 84. Configuring Kconfig-based packages • Buildroot • Based on kconfig-package • Kconfig packages: at91bootstrap3, barebox, uboot, linux, busybox, linux-backports, swupdate, uclibc, xvisor • Yocto • Inherit the obscure cml1 class • Kconfig packages in the Poky layer: linux, busybox (not U-Boot) 65
  • 85. Configuring Kconfig-based packages Description Buildroot Yocto Enter menu make <PKG>-menuconfig bitbake -c menuconfig <RCP> Save defconfig make <PKG>-savedefconfig bitbake -c savedefconfig <RCP> Update defconfig make <PKG>-update-defconfig — Extract fragment — bitbake -c diffconfig <RCP> 66
  • 86. Yocto: (re)assigning variables • Assignments • F := "foo-${A}" — Immediate expansion • F = "foo-${A}" — Expansion on usage • Weak assignments: used for values the user is supposed to customize • Base layer .bb: VAR ??= "white" • Middle layer .bbappend: VAR ?= "black" • Top-level layer.bbappend: VAR = "green" • The recipe will use VAR = "green" • Append or prepend • VAR += "val", VAR =+ "val" (adds spaces) • VAR_append = "val", VAR_prepend = "val" (does not add spaces) • VAR_remove = "val" 67
  • 87. Buildroot: (re)assigning variables • It’s a Makefile, use the Make syntax • Assignments • F := "foo-$(VER)" — Immediate expansion • F = "foo-$(VER)" — Expansion on usage • Append or prepend • VAR = "$(VAR) extra", VAR = "extra $(VAR)" 68
  • 88. More string processing • Buildroot • Make has several functions for transforming text • Example: VAR = $(filter-out bug, foo bug bar) • Yocto • If Bitbake is not enough, use Python • PV_x = "${@'.'.join('${PV}'.split('.')[0:2] + ['x'])}" ”10.11.12” → ”10.11.x” 69
  • 89. Yocto: changing task code do_conf_append() { echo CONFIG_ACS >>${D}/.config } do_install_prepend() { mkdir -p ${D}${bindir} } • Append or prepend code • Final task code = concatenation of prepends + base + appends • Don’t mix Bash and Python 70
  • 90. Buildroot: changing task code define FOO_ENABLE_ACS echo CONFIG_ACS >>$(@D)/.config endef FOO_POST_CONFIGURE_HOOKS += FOO_ENABLE_ACS define FOO_CREATE_BIN_DIR mkdir -p $(TARGET_DIR)/bin endef FOO_PRE_INSTALL_HOOKS += FOO_CREATE_BIN_DIR • Append or prepend code • Final Make rule actions = concatenation of pre-hooks + base + post-hooks 71
  • 92. Thank you for your attention Questions? Luca Ceresoli luca@lucaceresoli.net http://lucaceresoli.net © Copyright 2018, Luca Ceresoli. Slides released under Creative Commons Attribution - Share Alike 3.0 License https://creativecommons.org/licenses/by-sa/3.0/ 72
  • 94. Working with local sources • Use sources from a local directory • Not managed by the build system • Useful during application development • Buildroot • <PKG>_OVERRIDE_SRCDIR=/my/src/tree make • Skips source, extract, patch • rsyncs from /my/src/tree before building • Yocto • inherit externalsrc • EXTERNALSRC = "/my/src/tree" • fetch, unpack, patch • Points S to /my/src/tree