SlideShare a Scribd company logo
1 of 35
Download to read offline
Upgrading
buildroot based devices
with swupdate
Amarula Solutions BV
Angelo Compagnucci
angelo@amarulasolutions.com
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
$ whoami
Angelo Compagnucci
angelo@amarulasolutions.com
https://www.linkedin.com/in/compagnucciangelo/
Proud Buildroot contributor
Maintaining Mono package
Golang infrastructure
Passionate developer
Devops
Mostly proud of s3-pit-restore
And a reckless Enduro rider!
2
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Topics
1. How to use buildroot as a
base system for your
stack
2. An introduction to
swupdate and it’s fields
of use
3. An example of using
buildroot + swupdate to
update your stack.
3
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Part 1
How to use buildroot as a base
system for your stack
4
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Buildroot
Buildroot is a tool that simplifies and automates the process of
building a complete Linux system for an embedded system,
using cross-compilation.
In order to achieve this, Buildroot is able to generate a
cross-compilation toolchain, a root filesystem, a Linux kernel
image and a bootloader for your target.
Buildroot is written mainly in Kconfig and make.
You can find it at https://www.buildroot.org
5
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Buildroot usage
$ make help
Cleaning:
clean - delete all files
created by build
distclean - delete all
non-source files (including .config)
Build:
all - make world
toolchain - build toolchain
sdk - build relocatable
SDK
Configuration:
menuconfig - interactive
curses-based configurator
nconfig - interactive
ncurses-based configurator
xconfig - interactive Qt-based
configurator
gconfig - interactive
GTK-based configurator
[...]
6
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Buildroot daily routine
7
$ make qemu_arm_versatile_defconfig O=../br_qemu_arm
1. You are in your Buildroot source tree:
$ cd ../br_qemu_arm
$ make xconfig
2. Modify your configuration
$ make -l
3. Build your project:
$ make xconfig
$ make -l
$ make clean
4. Modify your configuration, rebuild, clean:
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
.config vs defconfig
8
#
# Automatically generated file; DO NOT EDIT.
# Buildroot 2018.11-rc1-00139-ge35fbc69f2
Configuration
#
BR2_HAVE_DOT_CONFIG=y
BR2_HOST_GCC_AT_LEAST_4_5=y
BR2_HOST_GCC_AT_LEAST_4_6=y
BR2_HOST_GCC_AT_LEAST_4_7=y
BR2_HOST_GCC_AT_LEAST_4_8=y
BR2_HOST_GCC_AT_LEAST_4_9=y
BR2_HOST_GCC_AT_LEAST_5=y
BR2_HOST_GCC_AT_LEAST_6=y
BR2_HOST_GCC_AT_LEAST_7=y
BR2_HOSTARCH_NEEDS_IA32_LIBS=y
#
# Target options
#
BR2_SOFT_FLOAT=y
BR2_ARCH_HAS_MMU_OPTIONAL=y
[...]
BR2_arm=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
BR2_SYSTEM_DHCP="eth0"
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_FAIL2BAN=y
BR2_TARGET_ROOTFS_EXT2=y
# BR2_TARGET_ROOTFS_TAR is not set
Always save your configuration!
$ make savedefconfig BR2_DEFCONFIG=yourdefconfigfile
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Adapt Buildroot to suit your needs
● Customization could be
○ BR2_*_CUSTOM_CONFIG_FILE
■ Ex: busybox.config
○ BR2_*_PRE/POST_*_SCRIPT
■ script used to customize
your image files
○ Custom users or devices
■ device_table.txt
○ Artifacts
■ Your own files
● Your own customizations should
be in a board directory!
9
$ ls board/example/board/
busybox.config
device_table.txt
linux.config
uboot.config
users_table.txt
[...]
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Adding packages
A package is defined by a folder in
package directory
Must contain:
● Config.in
● package makefile
● package hash
To be selectable in gui, an entry should
be present in package/Config.in
10
package/python-web2py/
|-- Config.in
|-- python-web2py.hash
|-- python-web2py.mk
|-- S51web2py
`-- web2py.service
source "package/python-web2py/Config.in"
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Commiting your customization
It’s not advisable to commit to the buildroot tree
11
Committing to the buildroot
tree is wrong:
● You are forking buildroot
● Bump to a new buildroot
version could be impossible
● Probably you end up with an
outdated buildroot version
● Licensing problems
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
BR2_EXTERNAL to the rescue
BR2_EXTERNAL
is a mechanism to store your own custom
packages, defconfigs and other artifacts
outside of the Buildroot source tree.
An external directory must contain:
● external.desc: which provides a name and a
description
● Config.in: configuration options that will be
included in menuconfig
● external.mk, will be included in the make
logic
12
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Your (more complicated) daily routine
13
$ make qemu_arm_versatile_defconfig O=../br_qemu_arm BR2_EXTERNAL=../br_external
2. You are in your Buildroot source tree:
$ cd ../br_qemu_arm
$ make xconfig
3. Modify your configuration
$ make -l
4. Build your project:
5. [...]
1. Configure your BR2_EXTERNAL
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Adding a Makefile to your project
14
$ make help
br-template help
Building
all - compiles everything
image - produces images files in out/images
update - produces an update swu file in out/update
Cleaning
clean - removes everything but keeps dl folder
distclean - reset the project to a clean state
Buildroot management
qemu_arm_versatile_custom [TARGET]
- calls TARGET on qemu_arm_versatile_custom buildroot makefile
qemu_arm_versatile_custom_recovery [TARGET]
- calls TARGET on qemu_arm_versatile_custom_recovery buildroot makefile
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Part 2
An introduction to swupdate and
it’s fields of use
15
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com 16
Updates?
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
SWUpdate to the rescue
17
SWUpdate is a Linux Update agent with the goal to provide an
efficient and safe way to update an embedded system.
SWUpdate supports local and remote updates, multiple update
strategies and it can be well integrated in the buildroot build
system.
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Tons of features
● Install on embedded media (eMMC, SD, Raw NAND, NOR
and SPI-NOR flashes)
● Allow delivery single image for multiple devices
● Multiple interfaces for getting software
○ local storage
○ integrated web server
○ integrated REST client connector to hawkBit
○ remote server download
● Software delivered as images, gzipped tarball, etc.
● Allow custom handlers for installing FPGA firmware,
microcontroller firmware via custom protocols.
● Power-Off safe
(from the official readme)
18
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Update medium
19
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Update strategies
20
Bootloader Kernel
1. Plain
2. Mixed A/B
3. Full A/B
Rootfs Data
Bootloader Kernel A Rootfs DataKernel B
Bootloader
A
Kernel A Rootfs A DataKernel B
Bootloader
B
Rootfs B
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Using a recovery
21
3. Mixed A/B + Recovery
Bootloader
A
Kernel Rootfs Data
Bootloader
B
Recovery
A
Recovery
B
Advantages of having a recovery:
● It’s always available
● You can switch into recovery mode if the system is bricked
● Easier to implement than a full A/B system
● It’s advisable to have a redundant bootloader
● It’s advisable to have a redundant recovery
● Recovery is loaded in memory and can self update
SPL
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Recovery
Built by buildroot through a custom
configuration
Should contain a minimal logic to
apply the update:
● Custom logic: you write your own
software (ex: detecting usb storage
and looking for a valid swu file)
● Web interface: you can run the
included webserver and waiting for
user interaction
● User interaction through screen:
use the recently introduced
SWUpdateGUI or write your own
22
BR2_PACKAGE_SWUPDATE=y
BR2_TARGET_ROOTFS_INITRAMFS=y
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
SPL
SPL (Secondary Program Loader)
● Minimal bootloader runnable from static RAM
● Con do al lot of initialization
○ Memory
○ Power
○ GPIO
● Can be used to implementd redundant bootloader
23
CONFIG_SPL=y
CONFIG_SPL_FRAMEWORK=y
CONFIG_SPL_GPIO_SUPPORT=y
CONFIG_SPL_LIBCOMMON_SUPPORT=y
CONFIG_SPL_LIBGENERIC_SUPPORT=y
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Redundancy
● U-boot redundancy
○ bootloader can be configured
for redundancy
○ You should have an SPL to really
implement bootloader
redundancy
● Recovery redundancy
○ Doubling the recovery
○ bootloader is responsible to
check if recovery is working else
switch to emergency copy
24
CONFIG_SYS_NAND_U_BOOT_LOCATIONS=y
CONFIG_SYS_NAND_U_BOOT_OFFS=
CONFIG_SYS_NAND_U_BOOT_OFFS_REDUND=
bootcmd_recovery = run recovery || run bootcmd_emergency
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
How to enter recovery mode
● User or system interaction
○ bootloader is responsible to
switch to recovery mode
● bootcount mechanism
○ bootloader sets a boot count
limit, boot count should be
zeroed by the operating system
○ u-boot has
CONFIG_BOOTCOUNT_LIMIT
■ bootcount
■ bootlimit
■ altbootcmd
25
Example:
$ fw_setenv recovery 1; reboot
uboot> env set recovery 1; boot
#!/bin/sh
#
# This service resets the
# bootcount u-boot variable to 0
#each time a successful
# boot happens.
#
case "$1" in
start)
printf "Starting the
bootcount service: "
fw_setenv bootcount 0
[...]
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
sw-description
Is the main file for
describing the update:
● images section
Update images for
system partitions
● files section
Custom files to be added to
a filesystem
● scripts
Scripts to be executed while
installing the update
● bootenv
Updates to the bootloader
environment
26
software =
{
version = "0.1.0";
description = "Firmware update for XXXXX Project";
hardware-compatibility: [ "1.0", "1.2", "1.3"];
images: (
{ filename = "rootfs.ubifs";
volume = "rootfs"; }
);
files: (
{ filename = "README";
path = "/README";
device = "/dev/mmcblk0p1";
filesystem = "vfat"; }
);
scripts: (
{ filename = "erase_data";
type = "shell"; },
);
bootenv: (
{ filename = "bootloader-env";
type = "bootloader"; },
);
}
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
swu file
Is the actual update file
● sw-description as first file
● other files following
● CPIO format
● Optional signature
27
CPIO header
sw-description
image file 1
[...]
image file n
file 1
[...]
file n
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Part 3
An example of using buildroot +
swupdate to update your stack
28
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Summarising up
1. Create your buildroot external tree
2. Adding your software
3. Modify your configuration
4. Do the same for the recovery
5. build, clean, rebuild
6. Move the artifacts somewhere
7. Build the swu update file
8. Redo
29
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Let’s automate it
$(BR2T_EXTERNAL)/external.desc:
@mkdir -p $(BR2T_EXTERNAL)
@mkdir -p $(BR2T_EXTERNAL)/board
@mkdir -p $(BR2T_EXTERNAL)/configs
@mkdir -p $(BR2T_EXTERNAL)/package
@echo '# Example: source "$(BR2T_EXTERNAL)/package/package1/Config.in"' > 
$(BR2T_EXTERNAL)/Config.in
@echo 'name: $(BR2T_NAME)' > $(BR2T_EXTERNAL)/external.desc
30
1. Preparing the BR2_EXTERNAL ...
2. Downloading Buildroot ...
$(BR2T_BR_DIR):
@mkdir -p $(BR2T_DL)
@wget -c https://buildroot.org/downloads/$(BR2T_BR_FILE) 
-O $(BR2T_DL)/$(BR2T_BR_FILE)
@tar axf $(BR2T_DL)/$(BR2T_BR_FILE) -C out
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Let’s automate it
$(BR2T_CONFIG): $(BR2T_BR_DIR) $(BR2T_EXTERNAL)/external.desc
$(MAKE) -C out/buildroot-$(BR2T_VERSION) O=../$(BR2T_DEFCONFIG) 
BR2_EXTERNAL=$(CURDIR)/$(BR2T_EXTERNAL) $(BR2T_DEFCONFIG)_defconfig
@mkdir -p $(BR2T_IMG_DIR)
$(BR2T_RECOVERY_CONFIG):
$(MAKE) -C out/buildroot-$(BR2T_VERSION) O=../$(BR2T_RECOVERY_DEFCONFIG) 
BR2_EXTERNAL=$(CURDIR)/$(BR2T_EXTERNAL) $(BR2T_RECOVERY_DEFCONFIG)_defconfig
31
3. Configuring build directories ...
4. Cleaning ...
clean:
rm $(BR2T_EXTERNAL)/external.desc
rm -rf $(BR2T_BR_DIR)
rm -rf out/$(BR2T_DEFCONFIG)
rm -rf out/$(BR2T_RECOVERY_DEFCONFIG)
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Let’s automate it
image: $(BR2T_CONFIG) $(BR2T_RECOVERY_CONFIG)
$(MAKE) -l -C out/$(BR2T_DEFCONFIG) source
$(MAKE) -l -C out/$(BR2T_RECOVERY_DEFCONFIG) source
$(MAKE) -l -C out/$(BR2T_DEFCONFIG)
$(MAKE) -l -C out/$(BR2T_RECOVERY_DEFCONFIG)
@for file in $(BR2T_IMAGE_FILES); do 
cp -v "$${file%%:*}" ${BR2T_IMG_DIR}/"$${file##*:}"; 
done
32
5. Building the images ...
6. Building the swu update file ...
recovery:
@rm -rf $(BR2T_TMP_DIR)
@mkdir -p $(BR2T_TMP_DIR)
@cp -v $(BR2T_IMG_DIR)/* $(BR2T_TMP_DIR)/
@cp -v $(BR2T_EXTERNAL)/$(BR2T_SWDESCRIPTION) $(BR2T_TMP_DIR)
@cd $(BR2T_TMP_DIR) && 
echo sw-description 
$$(find . -type f -name "*" ! -name "sw-description*") 
| tr " " "n" | 
cpio -ov -H crc > ../$(BR2T_NAME)_$(BR2T_ID).swu;
@rm -rf $(BR2T_TMP_DIR)
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
br-template
33
$ make help
br-template help
Building
all - compiles everything
image - produces images files in out/images
update - produces an update swu file in out/update
Cleaning
clean - removes everything but keeps dl folder
distclean - reset the project to a clean state
Buildroot management
qemu_arm_versatile_custom [TARGET]
- calls TARGET on qemu_arm_versatile_custom buildroot makefile
qemu_arm_versatile_custom_recovery [TARGET]
- calls TARGET on qemu_arm_versatile_custom_recovery buildroot makefile
Freely available at https://github.com/angeloc/br-template
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com
Resources
● https://buildroot.org
Main buildroot website
● http://bootlin.com/doc/training/buildroot/buildroot-slides.pdf
Buildroot training from Bootlin
● https://sbabic.github.io/swupdate/swupdate.html
Main swupdate documentation source
● http://events17.linuxfoundation.org/sites/events/files/slides/S
WUpdateELCE2017.pdf
Inspiring presentation from Stefano Babic
● https://www.eclipse.org/hawkbit/
IOT rollouts management GUI
34
Upgrading buildroot based devices with swupdate - www.amarulasolutions.com 35
Q/A
Thanks for your attention
Questions?

More Related Content

What's hot

Embedded Linux Quick Start Guide v1.5
Embedded Linux Quick Start Guide v1.5Embedded Linux Quick Start Guide v1.5
Embedded Linux Quick Start Guide v1.5Chris Simmonds
 
Linux field-update-2015
Linux field-update-2015Linux field-update-2015
Linux field-update-2015Chris Simmonds
 
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 SystemJian-Hong Pan
 
Accessing Hardware on Android
Accessing Hardware on AndroidAccessing Hardware on Android
Accessing Hardware on AndroidGary Bisson
 
A/B Linux updates with RAUC and meta-rauc-community: now & in the future
A/B Linux updates with RAUC and meta-rauc-community: now & in the futureA/B Linux updates with RAUC and meta-rauc-community: now & in the future
A/B Linux updates with RAUC and meta-rauc-community: now & in the futureLeon Anavi
 
Getting Started with Buildroot
Getting Started with BuildrootGetting Started with Buildroot
Getting Started with BuildrootTrevor Woerner
 
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 Projectlinuxlab_conf
 
Embedded Recipes 2018 - swupdate: update your embedded device - Charles-Anto...
Embedded Recipes 2018 -  swupdate: update your embedded device - Charles-Anto...Embedded Recipes 2018 -  swupdate: update your embedded device - Charles-Anto...
Embedded Recipes 2018 - swupdate: update your embedded device - Charles-Anto...Anne Nicolas
 
An Introduction to RISC-V bootflow
An Introduction to RISC-V bootflowAn Introduction to RISC-V bootflow
An Introduction to RISC-V bootflowAtish Patra
 
How to Choose a Software Update Mechanism for Embedded Linux Devices
How to Choose a Software Update Mechanism for Embedded Linux DevicesHow to Choose a Software Update Mechanism for Embedded Linux Devices
How to Choose a Software Update Mechanism for Embedded Linux DevicesLeon Anavi
 
From Android NDK To AOSP
From Android NDK To AOSPFrom Android NDK To AOSP
From Android NDK To AOSPMin-Yih Hsu
 
Quickboot on i.MX6
Quickboot on i.MX6Quickboot on i.MX6
Quickboot on i.MX6Gary Bisson
 
Introduction to yocto
Introduction to yoctoIntroduction to yocto
Introduction to yoctoAlex Gonzalez
 
U boot porting guide for SoC
U boot porting guide for SoCU boot porting guide for SoC
U boot porting guide for SoCMacpaul Lin
 
Arm device tree and linux device drivers
Arm device tree and linux device driversArm device tree and linux device drivers
Arm device tree and linux device driversHoucheng Lin
 
Yocto Project : Custom Embedded Linux Distribution
Yocto Project : Custom Embedded Linux DistributionYocto Project : Custom Embedded Linux Distribution
Yocto Project : Custom Embedded Linux Distributionemertxemarketing
 

What's hot (20)

Embedded Linux Quick Start Guide v1.5
Embedded Linux Quick Start Guide v1.5Embedded Linux Quick Start Guide v1.5
Embedded Linux Quick Start Guide v1.5
 
Linux field-update-2015
Linux field-update-2015Linux field-update-2015
Linux field-update-2015
 
A practical guide to buildroot
A practical guide to buildrootA practical guide to buildroot
A practical guide to buildroot
 
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
 
Yocto project
Yocto projectYocto project
Yocto project
 
Accessing Hardware on Android
Accessing Hardware on AndroidAccessing Hardware on Android
Accessing Hardware on Android
 
A/B Linux updates with RAUC and meta-rauc-community: now & in the future
A/B Linux updates with RAUC and meta-rauc-community: now & in the futureA/B Linux updates with RAUC and meta-rauc-community: now & in the future
A/B Linux updates with RAUC and meta-rauc-community: now & in the future
 
Getting Started with Buildroot
Getting Started with BuildrootGetting Started with Buildroot
Getting Started with Buildroot
 
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
 
Embedded Recipes 2018 - swupdate: update your embedded device - Charles-Anto...
Embedded Recipes 2018 -  swupdate: update your embedded device - Charles-Anto...Embedded Recipes 2018 -  swupdate: update your embedded device - Charles-Anto...
Embedded Recipes 2018 - swupdate: update your embedded device - Charles-Anto...
 
Git flow
Git flowGit flow
Git flow
 
An Introduction to RISC-V bootflow
An Introduction to RISC-V bootflowAn Introduction to RISC-V bootflow
An Introduction to RISC-V bootflow
 
How to Choose a Software Update Mechanism for Embedded Linux Devices
How to Choose a Software Update Mechanism for Embedded Linux DevicesHow to Choose a Software Update Mechanism for Embedded Linux Devices
How to Choose a Software Update Mechanism for Embedded Linux Devices
 
From Android NDK To AOSP
From Android NDK To AOSPFrom Android NDK To AOSP
From Android NDK To AOSP
 
Quickboot on i.MX6
Quickboot on i.MX6Quickboot on i.MX6
Quickboot on i.MX6
 
Introduction to yocto
Introduction to yoctoIntroduction to yocto
Introduction to yocto
 
U boot-boot-flow
U boot-boot-flowU boot-boot-flow
U boot-boot-flow
 
U boot porting guide for SoC
U boot porting guide for SoCU boot porting guide for SoC
U boot porting guide for SoC
 
Arm device tree and linux device drivers
Arm device tree and linux device driversArm device tree and linux device drivers
Arm device tree and linux device drivers
 
Yocto Project : Custom Embedded Linux Distribution
Yocto Project : Custom Embedded Linux DistributionYocto Project : Custom Embedded Linux Distribution
Yocto Project : Custom Embedded Linux Distribution
 

Similar to Upgrading embedded devices with Buildroot and SWUpdate

The Android Build System - Android Marshmallow
The Android Build System - Android MarshmallowThe Android Build System - Android Marshmallow
The Android Build System - Android MarshmallowRon Munitz
 
Embedded linux build systems
Embedded linux build systems  Embedded linux build systems
Embedded linux build systems Mender.io
 
The Deck by Phil Polstra GrrCON2012
The Deck by Phil Polstra GrrCON2012The Deck by Phil Polstra GrrCON2012
The Deck by Phil Polstra GrrCON2012Philip Polstra
 
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
 
Fast Paced Drupal 8: Accelerating Development with Composer, Drupal Console a...
Fast Paced Drupal 8: Accelerating Development with Composer, Drupal Console a...Fast Paced Drupal 8: Accelerating Development with Composer, Drupal Console a...
Fast Paced Drupal 8: Accelerating Development with Composer, Drupal Console a...Acquia
 
Magento Docker Setup.pdf
Magento Docker Setup.pdfMagento Docker Setup.pdf
Magento Docker Setup.pdfAbid Malik
 
Xgboost readthedocs-io-en-release 1.3.3
Xgboost readthedocs-io-en-release 1.3.3Xgboost readthedocs-io-en-release 1.3.3
Xgboost readthedocs-io-en-release 1.3.3Angie Ihirwe
 
Eclipse Con US 2013 - Buildroot Eclipse Bundle : A powerful IDE for Embedded ...
Eclipse Con US 2013 - Buildroot Eclipse Bundle : A powerful IDE for Embedded ...Eclipse Con US 2013 - Buildroot Eclipse Bundle : A powerful IDE for Embedded ...
Eclipse Con US 2013 - Buildroot Eclipse Bundle : A powerful IDE for Embedded ...melbats
 
Introduction to Git for Network Engineers (Lab Guide)
Introduction to Git for Network Engineers (Lab Guide)Introduction to Git for Network Engineers (Lab Guide)
Introduction to Git for Network Engineers (Lab Guide)Joel W. King
 
FOSDEM_2019_Buildroot_RISCV.pdf
FOSDEM_2019_Buildroot_RISCV.pdfFOSDEM_2019_Buildroot_RISCV.pdf
FOSDEM_2019_Buildroot_RISCV.pdfssuser30e7d2
 
DevFest 2022 - Cloud Workstation Introduction TaiChung
DevFest 2022 - Cloud Workstation Introduction TaiChungDevFest 2022 - Cloud Workstation Introduction TaiChung
DevFest 2022 - Cloud Workstation Introduction TaiChungKAI CHU CHUNG
 
Quick-Start Guide: Deploying Your Cloudian HyperStore Hybrid Storage Service
Quick-Start Guide: Deploying Your Cloudian HyperStore Hybrid Storage ServiceQuick-Start Guide: Deploying Your Cloudian HyperStore Hybrid Storage Service
Quick-Start Guide: Deploying Your Cloudian HyperStore Hybrid Storage ServiceCloudian
 
Edup wifi for raspberry zero
Edup wifi  for raspberry zeroEdup wifi  for raspberry zero
Edup wifi for raspberry zeroSoheilSabzevari2
 
A Step-By-Step Disaster Recovery Blueprint & Best Practices for Your NetBacku...
A Step-By-Step Disaster Recovery Blueprint & Best Practices for Your NetBacku...A Step-By-Step Disaster Recovery Blueprint & Best Practices for Your NetBacku...
A Step-By-Step Disaster Recovery Blueprint & Best Practices for Your NetBacku...Symantec
 
Android open source project build system phi innovations - android summit 2015
Android open source project build system   phi innovations - android summit 2015Android open source project build system   phi innovations - android summit 2015
Android open source project build system phi innovations - android summit 2015Rafael Coutinho
 
Hacking and Forensics on the Go - 44CON 2012
Hacking and Forensics on the Go - 44CON 2012Hacking and Forensics on the Go - 44CON 2012
Hacking and Forensics on the Go - 44CON 201244CON
 
Rejekts 24 EU No GitOps Pain, No Platform Gain
Rejekts 24 EU No GitOps Pain, No Platform GainRejekts 24 EU No GitOps Pain, No Platform Gain
Rejekts 24 EU No GitOps Pain, No Platform GainŁukasz Piątkowski
 

Similar to Upgrading embedded devices with Buildroot and SWUpdate (20)

The Android Build System - Android Marshmallow
The Android Build System - Android MarshmallowThe Android Build System - Android Marshmallow
The Android Build System - Android Marshmallow
 
Embedded linux build systems
Embedded linux build systems  Embedded linux build systems
Embedded linux build systems
 
Path to Surfdroid
Path to SurfdroidPath to Surfdroid
Path to Surfdroid
 
The Deck by Phil Polstra GrrCON2012
The Deck by Phil Polstra GrrCON2012The Deck by Phil Polstra GrrCON2012
The Deck by Phil Polstra GrrCON2012
 
olf10
olf10olf10
olf10
 
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
 
Fast Paced Drupal 8: Accelerating Development with Composer, Drupal Console a...
Fast Paced Drupal 8: Accelerating Development with Composer, Drupal Console a...Fast Paced Drupal 8: Accelerating Development with Composer, Drupal Console a...
Fast Paced Drupal 8: Accelerating Development with Composer, Drupal Console a...
 
Magento Docker Setup.pdf
Magento Docker Setup.pdfMagento Docker Setup.pdf
Magento Docker Setup.pdf
 
Xgboost readthedocs-io-en-release 1.3.3
Xgboost readthedocs-io-en-release 1.3.3Xgboost readthedocs-io-en-release 1.3.3
Xgboost readthedocs-io-en-release 1.3.3
 
Eclipse Con US 2013 - Buildroot Eclipse Bundle : A powerful IDE for Embedded ...
Eclipse Con US 2013 - Buildroot Eclipse Bundle : A powerful IDE for Embedded ...Eclipse Con US 2013 - Buildroot Eclipse Bundle : A powerful IDE for Embedded ...
Eclipse Con US 2013 - Buildroot Eclipse Bundle : A powerful IDE for Embedded ...
 
Introduction to Git for Network Engineers (Lab Guide)
Introduction to Git for Network Engineers (Lab Guide)Introduction to Git for Network Engineers (Lab Guide)
Introduction to Git for Network Engineers (Lab Guide)
 
FOSDEM_2019_Buildroot_RISCV.pdf
FOSDEM_2019_Buildroot_RISCV.pdfFOSDEM_2019_Buildroot_RISCV.pdf
FOSDEM_2019_Buildroot_RISCV.pdf
 
DevFest 2022 - Cloud Workstation Introduction TaiChung
DevFest 2022 - Cloud Workstation Introduction TaiChungDevFest 2022 - Cloud Workstation Introduction TaiChung
DevFest 2022 - Cloud Workstation Introduction TaiChung
 
Quick-Start Guide: Deploying Your Cloudian HyperStore Hybrid Storage Service
Quick-Start Guide: Deploying Your Cloudian HyperStore Hybrid Storage ServiceQuick-Start Guide: Deploying Your Cloudian HyperStore Hybrid Storage Service
Quick-Start Guide: Deploying Your Cloudian HyperStore Hybrid Storage Service
 
Edup wifi for raspberry zero
Edup wifi  for raspberry zeroEdup wifi  for raspberry zero
Edup wifi for raspberry zero
 
A Step-By-Step Disaster Recovery Blueprint & Best Practices for Your NetBacku...
A Step-By-Step Disaster Recovery Blueprint & Best Practices for Your NetBacku...A Step-By-Step Disaster Recovery Blueprint & Best Practices for Your NetBacku...
A Step-By-Step Disaster Recovery Blueprint & Best Practices for Your NetBacku...
 
Android open source project build system phi innovations - android summit 2015
Android open source project build system   phi innovations - android summit 2015Android open source project build system   phi innovations - android summit 2015
Android open source project build system phi innovations - android summit 2015
 
Polstra 44con2012
Polstra 44con2012Polstra 44con2012
Polstra 44con2012
 
Hacking and Forensics on the Go - 44CON 2012
Hacking and Forensics on the Go - 44CON 2012Hacking and Forensics on the Go - 44CON 2012
Hacking and Forensics on the Go - 44CON 2012
 
Rejekts 24 EU No GitOps Pain, No Platform Gain
Rejekts 24 EU No GitOps Pain, No Platform GainRejekts 24 EU No GitOps Pain, No Platform Gain
Rejekts 24 EU No GitOps Pain, No Platform Gain
 

More from linuxlab_conf

Jonathan Corbet - Keynote: The Kernel Report
Jonathan Corbet - Keynote: The Kernel ReportJonathan Corbet - Keynote: The Kernel Report
Jonathan Corbet - Keynote: The Kernel Reportlinuxlab_conf
 
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...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) pocketlinuxlab_conf
 
Jagan Teki - U-boot from scratch
Jagan Teki - U-boot from scratchJagan Teki - U-boot from scratch
Jagan Teki - U-boot from scratchlinuxlab_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 systemslinuxlab_conf
 
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 profitlinuxlab_conf
 
Jacopo Mondi - Complex cameras are complex
Jacopo Mondi - Complex cameras are complexJacopo Mondi - Complex cameras are complex
Jacopo Mondi - Complex cameras are complexlinuxlab_conf
 
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 protocollinuxlab_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 N2Nlinuxlab_conf
 
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 bugslinuxlab_conf
 
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...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
 
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 Golinuxlab_conf
 
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 Linuxlinuxlab_conf
 
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 ...linuxlab_conf
 
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 corruptionlinuxlab_conf
 
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 kvmlinuxlab_conf
 
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
 

More from linuxlab_conf (18)

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
 
Jagan Teki - U-boot from scratch
Jagan Teki - U-boot from scratchJagan Teki - U-boot from scratch
Jagan Teki - U-boot from scratch
 
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
 
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
 
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
 

Recently uploaded

The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfPower Karaoke
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
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
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
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.
 
software engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptxsoftware engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptxnada99848
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
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.
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
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
 
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
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 

Recently uploaded (20)

The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdf
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
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...
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
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
 
software engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptxsoftware engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptx
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
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 ...
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
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...
 
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...
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 

Upgrading embedded devices with Buildroot and SWUpdate

  • 1. Upgrading buildroot based devices with swupdate Amarula Solutions BV Angelo Compagnucci angelo@amarulasolutions.com
  • 2. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com $ whoami Angelo Compagnucci angelo@amarulasolutions.com https://www.linkedin.com/in/compagnucciangelo/ Proud Buildroot contributor Maintaining Mono package Golang infrastructure Passionate developer Devops Mostly proud of s3-pit-restore And a reckless Enduro rider! 2
  • 3. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Topics 1. How to use buildroot as a base system for your stack 2. An introduction to swupdate and it’s fields of use 3. An example of using buildroot + swupdate to update your stack. 3
  • 4. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Part 1 How to use buildroot as a base system for your stack 4
  • 5. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Buildroot Buildroot is a tool that simplifies and automates the process of building a complete Linux system for an embedded system, using cross-compilation. In order to achieve this, Buildroot is able to generate a cross-compilation toolchain, a root filesystem, a Linux kernel image and a bootloader for your target. Buildroot is written mainly in Kconfig and make. You can find it at https://www.buildroot.org 5
  • 6. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Buildroot usage $ make help Cleaning: clean - delete all files created by build distclean - delete all non-source files (including .config) Build: all - make world toolchain - build toolchain sdk - build relocatable SDK Configuration: menuconfig - interactive curses-based configurator nconfig - interactive ncurses-based configurator xconfig - interactive Qt-based configurator gconfig - interactive GTK-based configurator [...] 6
  • 7. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Buildroot daily routine 7 $ make qemu_arm_versatile_defconfig O=../br_qemu_arm 1. You are in your Buildroot source tree: $ cd ../br_qemu_arm $ make xconfig 2. Modify your configuration $ make -l 3. Build your project: $ make xconfig $ make -l $ make clean 4. Modify your configuration, rebuild, clean:
  • 8. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com .config vs defconfig 8 # # Automatically generated file; DO NOT EDIT. # Buildroot 2018.11-rc1-00139-ge35fbc69f2 Configuration # BR2_HAVE_DOT_CONFIG=y BR2_HOST_GCC_AT_LEAST_4_5=y BR2_HOST_GCC_AT_LEAST_4_6=y BR2_HOST_GCC_AT_LEAST_4_7=y BR2_HOST_GCC_AT_LEAST_4_8=y BR2_HOST_GCC_AT_LEAST_4_9=y BR2_HOST_GCC_AT_LEAST_5=y BR2_HOST_GCC_AT_LEAST_6=y BR2_HOST_GCC_AT_LEAST_7=y BR2_HOSTARCH_NEEDS_IA32_LIBS=y # # Target options # BR2_SOFT_FLOAT=y BR2_ARCH_HAS_MMU_OPTIONAL=y [...] BR2_arm=y BR2_TOOLCHAIN_EXTERNAL=y BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0" BR2_SYSTEM_DHCP="eth0" BR2_PACKAGE_PYTHON3=y BR2_PACKAGE_FAIL2BAN=y BR2_TARGET_ROOTFS_EXT2=y # BR2_TARGET_ROOTFS_TAR is not set Always save your configuration! $ make savedefconfig BR2_DEFCONFIG=yourdefconfigfile
  • 9. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Adapt Buildroot to suit your needs ● Customization could be ○ BR2_*_CUSTOM_CONFIG_FILE ■ Ex: busybox.config ○ BR2_*_PRE/POST_*_SCRIPT ■ script used to customize your image files ○ Custom users or devices ■ device_table.txt ○ Artifacts ■ Your own files ● Your own customizations should be in a board directory! 9 $ ls board/example/board/ busybox.config device_table.txt linux.config uboot.config users_table.txt [...]
  • 10. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Adding packages A package is defined by a folder in package directory Must contain: ● Config.in ● package makefile ● package hash To be selectable in gui, an entry should be present in package/Config.in 10 package/python-web2py/ |-- Config.in |-- python-web2py.hash |-- python-web2py.mk |-- S51web2py `-- web2py.service source "package/python-web2py/Config.in"
  • 11. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Commiting your customization It’s not advisable to commit to the buildroot tree 11 Committing to the buildroot tree is wrong: ● You are forking buildroot ● Bump to a new buildroot version could be impossible ● Probably you end up with an outdated buildroot version ● Licensing problems
  • 12. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com BR2_EXTERNAL to the rescue BR2_EXTERNAL is a mechanism to store your own custom packages, defconfigs and other artifacts outside of the Buildroot source tree. An external directory must contain: ● external.desc: which provides a name and a description ● Config.in: configuration options that will be included in menuconfig ● external.mk, will be included in the make logic 12
  • 13. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Your (more complicated) daily routine 13 $ make qemu_arm_versatile_defconfig O=../br_qemu_arm BR2_EXTERNAL=../br_external 2. You are in your Buildroot source tree: $ cd ../br_qemu_arm $ make xconfig 3. Modify your configuration $ make -l 4. Build your project: 5. [...] 1. Configure your BR2_EXTERNAL
  • 14. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Adding a Makefile to your project 14 $ make help br-template help Building all - compiles everything image - produces images files in out/images update - produces an update swu file in out/update Cleaning clean - removes everything but keeps dl folder distclean - reset the project to a clean state Buildroot management qemu_arm_versatile_custom [TARGET] - calls TARGET on qemu_arm_versatile_custom buildroot makefile qemu_arm_versatile_custom_recovery [TARGET] - calls TARGET on qemu_arm_versatile_custom_recovery buildroot makefile
  • 15. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Part 2 An introduction to swupdate and it’s fields of use 15
  • 16. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com 16 Updates?
  • 17. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com SWUpdate to the rescue 17 SWUpdate is a Linux Update agent with the goal to provide an efficient and safe way to update an embedded system. SWUpdate supports local and remote updates, multiple update strategies and it can be well integrated in the buildroot build system.
  • 18. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Tons of features ● Install on embedded media (eMMC, SD, Raw NAND, NOR and SPI-NOR flashes) ● Allow delivery single image for multiple devices ● Multiple interfaces for getting software ○ local storage ○ integrated web server ○ integrated REST client connector to hawkBit ○ remote server download ● Software delivered as images, gzipped tarball, etc. ● Allow custom handlers for installing FPGA firmware, microcontroller firmware via custom protocols. ● Power-Off safe (from the official readme) 18
  • 19. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Update medium 19
  • 20. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Update strategies 20 Bootloader Kernel 1. Plain 2. Mixed A/B 3. Full A/B Rootfs Data Bootloader Kernel A Rootfs DataKernel B Bootloader A Kernel A Rootfs A DataKernel B Bootloader B Rootfs B
  • 21. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Using a recovery 21 3. Mixed A/B + Recovery Bootloader A Kernel Rootfs Data Bootloader B Recovery A Recovery B Advantages of having a recovery: ● It’s always available ● You can switch into recovery mode if the system is bricked ● Easier to implement than a full A/B system ● It’s advisable to have a redundant bootloader ● It’s advisable to have a redundant recovery ● Recovery is loaded in memory and can self update SPL
  • 22. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Recovery Built by buildroot through a custom configuration Should contain a minimal logic to apply the update: ● Custom logic: you write your own software (ex: detecting usb storage and looking for a valid swu file) ● Web interface: you can run the included webserver and waiting for user interaction ● User interaction through screen: use the recently introduced SWUpdateGUI or write your own 22 BR2_PACKAGE_SWUPDATE=y BR2_TARGET_ROOTFS_INITRAMFS=y
  • 23. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com SPL SPL (Secondary Program Loader) ● Minimal bootloader runnable from static RAM ● Con do al lot of initialization ○ Memory ○ Power ○ GPIO ● Can be used to implementd redundant bootloader 23 CONFIG_SPL=y CONFIG_SPL_FRAMEWORK=y CONFIG_SPL_GPIO_SUPPORT=y CONFIG_SPL_LIBCOMMON_SUPPORT=y CONFIG_SPL_LIBGENERIC_SUPPORT=y
  • 24. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Redundancy ● U-boot redundancy ○ bootloader can be configured for redundancy ○ You should have an SPL to really implement bootloader redundancy ● Recovery redundancy ○ Doubling the recovery ○ bootloader is responsible to check if recovery is working else switch to emergency copy 24 CONFIG_SYS_NAND_U_BOOT_LOCATIONS=y CONFIG_SYS_NAND_U_BOOT_OFFS= CONFIG_SYS_NAND_U_BOOT_OFFS_REDUND= bootcmd_recovery = run recovery || run bootcmd_emergency
  • 25. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com How to enter recovery mode ● User or system interaction ○ bootloader is responsible to switch to recovery mode ● bootcount mechanism ○ bootloader sets a boot count limit, boot count should be zeroed by the operating system ○ u-boot has CONFIG_BOOTCOUNT_LIMIT ■ bootcount ■ bootlimit ■ altbootcmd 25 Example: $ fw_setenv recovery 1; reboot uboot> env set recovery 1; boot #!/bin/sh # # This service resets the # bootcount u-boot variable to 0 #each time a successful # boot happens. # case "$1" in start) printf "Starting the bootcount service: " fw_setenv bootcount 0 [...]
  • 26. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com sw-description Is the main file for describing the update: ● images section Update images for system partitions ● files section Custom files to be added to a filesystem ● scripts Scripts to be executed while installing the update ● bootenv Updates to the bootloader environment 26 software = { version = "0.1.0"; description = "Firmware update for XXXXX Project"; hardware-compatibility: [ "1.0", "1.2", "1.3"]; images: ( { filename = "rootfs.ubifs"; volume = "rootfs"; } ); files: ( { filename = "README"; path = "/README"; device = "/dev/mmcblk0p1"; filesystem = "vfat"; } ); scripts: ( { filename = "erase_data"; type = "shell"; }, ); bootenv: ( { filename = "bootloader-env"; type = "bootloader"; }, ); }
  • 27. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com swu file Is the actual update file ● sw-description as first file ● other files following ● CPIO format ● Optional signature 27 CPIO header sw-description image file 1 [...] image file n file 1 [...] file n
  • 28. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Part 3 An example of using buildroot + swupdate to update your stack 28
  • 29. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Summarising up 1. Create your buildroot external tree 2. Adding your software 3. Modify your configuration 4. Do the same for the recovery 5. build, clean, rebuild 6. Move the artifacts somewhere 7. Build the swu update file 8. Redo 29
  • 30. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Let’s automate it $(BR2T_EXTERNAL)/external.desc: @mkdir -p $(BR2T_EXTERNAL) @mkdir -p $(BR2T_EXTERNAL)/board @mkdir -p $(BR2T_EXTERNAL)/configs @mkdir -p $(BR2T_EXTERNAL)/package @echo '# Example: source "$(BR2T_EXTERNAL)/package/package1/Config.in"' > $(BR2T_EXTERNAL)/Config.in @echo 'name: $(BR2T_NAME)' > $(BR2T_EXTERNAL)/external.desc 30 1. Preparing the BR2_EXTERNAL ... 2. Downloading Buildroot ... $(BR2T_BR_DIR): @mkdir -p $(BR2T_DL) @wget -c https://buildroot.org/downloads/$(BR2T_BR_FILE) -O $(BR2T_DL)/$(BR2T_BR_FILE) @tar axf $(BR2T_DL)/$(BR2T_BR_FILE) -C out
  • 31. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Let’s automate it $(BR2T_CONFIG): $(BR2T_BR_DIR) $(BR2T_EXTERNAL)/external.desc $(MAKE) -C out/buildroot-$(BR2T_VERSION) O=../$(BR2T_DEFCONFIG) BR2_EXTERNAL=$(CURDIR)/$(BR2T_EXTERNAL) $(BR2T_DEFCONFIG)_defconfig @mkdir -p $(BR2T_IMG_DIR) $(BR2T_RECOVERY_CONFIG): $(MAKE) -C out/buildroot-$(BR2T_VERSION) O=../$(BR2T_RECOVERY_DEFCONFIG) BR2_EXTERNAL=$(CURDIR)/$(BR2T_EXTERNAL) $(BR2T_RECOVERY_DEFCONFIG)_defconfig 31 3. Configuring build directories ... 4. Cleaning ... clean: rm $(BR2T_EXTERNAL)/external.desc rm -rf $(BR2T_BR_DIR) rm -rf out/$(BR2T_DEFCONFIG) rm -rf out/$(BR2T_RECOVERY_DEFCONFIG)
  • 32. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Let’s automate it image: $(BR2T_CONFIG) $(BR2T_RECOVERY_CONFIG) $(MAKE) -l -C out/$(BR2T_DEFCONFIG) source $(MAKE) -l -C out/$(BR2T_RECOVERY_DEFCONFIG) source $(MAKE) -l -C out/$(BR2T_DEFCONFIG) $(MAKE) -l -C out/$(BR2T_RECOVERY_DEFCONFIG) @for file in $(BR2T_IMAGE_FILES); do cp -v "$${file%%:*}" ${BR2T_IMG_DIR}/"$${file##*:}"; done 32 5. Building the images ... 6. Building the swu update file ... recovery: @rm -rf $(BR2T_TMP_DIR) @mkdir -p $(BR2T_TMP_DIR) @cp -v $(BR2T_IMG_DIR)/* $(BR2T_TMP_DIR)/ @cp -v $(BR2T_EXTERNAL)/$(BR2T_SWDESCRIPTION) $(BR2T_TMP_DIR) @cd $(BR2T_TMP_DIR) && echo sw-description $$(find . -type f -name "*" ! -name "sw-description*") | tr " " "n" | cpio -ov -H crc > ../$(BR2T_NAME)_$(BR2T_ID).swu; @rm -rf $(BR2T_TMP_DIR)
  • 33. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com br-template 33 $ make help br-template help Building all - compiles everything image - produces images files in out/images update - produces an update swu file in out/update Cleaning clean - removes everything but keeps dl folder distclean - reset the project to a clean state Buildroot management qemu_arm_versatile_custom [TARGET] - calls TARGET on qemu_arm_versatile_custom buildroot makefile qemu_arm_versatile_custom_recovery [TARGET] - calls TARGET on qemu_arm_versatile_custom_recovery buildroot makefile Freely available at https://github.com/angeloc/br-template
  • 34. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com Resources ● https://buildroot.org Main buildroot website ● http://bootlin.com/doc/training/buildroot/buildroot-slides.pdf Buildroot training from Bootlin ● https://sbabic.github.io/swupdate/swupdate.html Main swupdate documentation source ● http://events17.linuxfoundation.org/sites/events/files/slides/S WUpdateELCE2017.pdf Inspiring presentation from Stefano Babic ● https://www.eclipse.org/hawkbit/ IOT rollouts management GUI 34
  • 35. Upgrading buildroot based devices with swupdate - www.amarulasolutions.com 35 Q/A Thanks for your attention Questions?