[bootlin/training-materials updates] mahle: slides/sysdev-system-update: new chapter (220accaf)
Thomas Petazzoni
thomas.petazzoni at bootlin.com
Thu Feb 10 17:56:45 CET 2022
Repository : https://github.com/bootlin/training-materials
On branch : mahle
Link : https://github.com/bootlin/training-materials/commit/220accaf03a5fe60f8e691c275904d235f828951
>---------------------------------------------------------------
commit 220accaf03a5fe60f8e691c275904d235f828951
Author: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
Date: Thu Feb 10 17:56:45 2022 +0100
slides/sysdev-system-update: new chapter
In progress.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
>---------------------------------------------------------------
220accaf03a5fe60f8e691c275904d235f828951
mk/embedded-linux.mk | 3 +-
.../full-image-update-ro-rw.dia | 352 +++++++++++++
slides/sysdev-system-update/full-image-update.dia | 568 +++++++++++++++++++++
slides/sysdev-system-update/mender.png | Bin 0 -> 2495 bytes
slides/sysdev-system-update/rauc.png | Bin 0 -> 5168 bytes
.../sysdev-system-update/sysdev-system-update.tex | 236 +++++++++
6 files changed, 1157 insertions(+), 2 deletions(-)
diff --git a/mk/embedded-linux.mk b/mk/embedded-linux.mk
index cb32d5a8..a6d07c43 100644
--- a/mk/embedded-linux.mk
+++ b/mk/embedded-linux.mk
@@ -47,8 +47,7 @@ EMBEDDED_LINUX_SLIDES = \
sysdev-flash-filesystems-lab \
sysdev-embedded-linux \
sysdev-application-development \
- sysdev-realtime \
- sysdev-realtime-lab \
+ sysdev-system-update \
sysdev-references \
last-slides
diff --git a/slides/sysdev-system-update/full-image-update-ro-rw.dia b/slides/sysdev-system-update/full-image-update-ro-rw.dia
new file mode 100644
index 00000000..bd3ce52e
--- /dev/null
+++ b/slides/sysdev-system-update/full-image-update-ro-rw.dia
@@ -0,0 +1,352 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+ <dia:diagramdata>
+ <dia:attribute name="background">
+ <dia:color val="#ffffff"/>
+ </dia:attribute>
+ <dia:attribute name="pagebreak">
+ <dia:color val="#000099"/>
+ </dia:attribute>
+ <dia:attribute name="paper">
+ <dia:composite type="paper">
+ <dia:attribute name="name">
+ <dia:string>#Letter#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.5399999618530273"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.5399999618530273"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.5399999618530273"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.5399999618530273"/>
+ </dia:attribute>
+ <dia:attribute name="is_portrait">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="scaling">
+ <dia:real val="1"/>
+ </dia:attribute>
+ <dia:attribute name="fitto">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="grid">
+ <dia:composite type="grid">
+ <dia:attribute name="width_x">
+ <dia:real val="1"/>
+ </dia:attribute>
+ <dia:attribute name="width_y">
+ <dia:real val="1"/>
+ </dia:attribute>
+ <dia:attribute name="visible_x">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="visible_y">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:composite type="color"/>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#d8e5e5"/>
+ </dia:attribute>
+ <dia:attribute name="guides">
+ <dia:composite type="guides">
+ <dia:attribute name="hguides"/>
+ <dia:attribute name="vguides"/>
+ </dia:composite>
+ </dia:attribute>
+ </dia:diagramdata>
+ <dia:layer name="Background" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="33,23"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="32.95,22.95;73.05,30.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="33,23"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="40"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="33,23"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="32.95,22.95;37.05,30.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="33,23"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#6a8954"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#c5e387"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="35,26.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="33.2488,26.1275;36.7512,26.8725"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Bootloader#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font family="sans" style="0" name="Helvetica"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="0.80000000000000004"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="35,26.7216"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O1" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="37,23"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="36.95,22.95;55.05,30.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="37,23"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#5cacff"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#add8e6"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="55,23"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="54.95,22.95;73.05,30.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="55,23"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#868686"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#e5e5e5"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="46,26.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="41.095,24.1733;50.905,28.8267"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Root filesystem
+copy A
+(active)#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font family="sans" style="0" name="Helvetica"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="1.5874999389052391"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="46,25.3522"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O3" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="64,26.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="59.095,24.1733;68.905,28.8267"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Root filesystem
+copy B
+(inactive)#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font family="sans" style="0" name="Helvetica"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="1.5874999389052391"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="64,25.3522"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O4" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="73,23"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="72.95,22.95;81.05,30.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="73,23"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#d9cb2f"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#fff8a8"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="77,26.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="73.58,24.9671;80.42,28.0329"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Read-write
+user data#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font family="sans" style="0" name="Helvetica"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="1.5874999389052391"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="77,26.1459"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O7" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/sysdev-system-update/full-image-update.dia b/slides/sysdev-system-update/full-image-update.dia
new file mode 100644
index 00000000..f455fbe1
--- /dev/null
+++ b/slides/sysdev-system-update/full-image-update.dia
@@ -0,0 +1,568 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+ <dia:diagramdata>
+ <dia:attribute name="background">
+ <dia:color val="#ffffff"/>
+ </dia:attribute>
+ <dia:attribute name="pagebreak">
+ <dia:color val="#000099"/>
+ </dia:attribute>
+ <dia:attribute name="paper">
+ <dia:composite type="paper">
+ <dia:attribute name="name">
+ <dia:string>#Letter#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.5399999618530273"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.5399999618530273"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.5399999618530273"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.5399999618530273"/>
+ </dia:attribute>
+ <dia:attribute name="is_portrait">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="scaling">
+ <dia:real val="1"/>
+ </dia:attribute>
+ <dia:attribute name="fitto">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="grid">
+ <dia:composite type="grid">
+ <dia:attribute name="width_x">
+ <dia:real val="1"/>
+ </dia:attribute>
+ <dia:attribute name="width_y">
+ <dia:real val="1"/>
+ </dia:attribute>
+ <dia:attribute name="visible_x">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="visible_y">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:composite type="color"/>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#d8e5e5"/>
+ </dia:attribute>
+ <dia:attribute name="guides">
+ <dia:composite type="guides">
+ <dia:attribute name="hguides"/>
+ <dia:attribute name="vguides"/>
+ </dia:composite>
+ </dia:attribute>
+ </dia:diagramdata>
+ <dia:layer name="Background" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="33,23"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="32.95,22.95;73.05,30.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="33,23"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="40"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="33,23"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="32.95,22.95;37.05,30.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="33,23"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#6a8954"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#c5e387"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="35,26.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="33.2488,26.1275;36.7512,26.8725"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Bootloader#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font family="sans" style="0" name="Helvetica"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="0.80000000000000004"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="35,26.7216"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O1" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="37,23"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="36.95,22.95;55.05,30.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="37,23"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#5cacff"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#add8e6"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="55,23"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="54.95,22.95;73.05,30.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="55,23"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#868686"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#e5e5e5"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="46,26.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="41.095,24.1733;50.905,28.8267"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Root filesystem
+copy A
+(active)#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font family="sans" style="0" name="Helvetica"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="1.5874999389052391"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="46,25.3522"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O3" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="64,26.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="59.095,24.1733;68.905,28.8267"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Root filesystem
+copy B
+(inactive)#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font family="sans" style="0" name="Helvetica"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="1.5874999389052391"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="64,25.3522"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O4" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="33,34"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="32.95,33.95;73.05,41.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="33,34"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="40"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="33,34"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="32.95,33.95;37.05,41.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="33,34"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#6a8954"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#c5e387"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="35,37.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="33.2488,37.1275;36.7512,37.8725"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Bootloader#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font family="sans" style="0" name="Helvetica"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="0.80000000000000004"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="35,37.7216"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O8" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="37,34"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="36.95,33.95;43.05,41.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="37,34"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#868686"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#e5e5e5"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="43,34"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="42.95,33.95;73.05,41.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="43,34"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="30"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#5cacff"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#add8e6"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="40,37.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="37.7025,35.9671;42.2975,39.0329"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Rescue
+system#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font family="sans" style="0" name="Helvetica"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="1.5874999389052391"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="40,37.1459"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O10" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="58,37.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="54.4162,36.7608;61.5837,38.2392"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Full system#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font family="sans" style="0" name="Helvetica"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="1.5874999389052391"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="58,37.9397"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O11" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="54,31"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="51.0656,30.4251;56.9344,31.5749"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#A/B scheme#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font family="sans" style="8" name="Helvetica-Oblique"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="1.2347221747040749"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="54,31.342"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="54,42"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="48.1763,41.4251;59.8238,42.5749"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Rescue system scheme#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font family="sans" style="8" name="Helvetica-Oblique"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="1.2347221747040749"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="54,42.342"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/sysdev-system-update/mender.png b/slides/sysdev-system-update/mender.png
new file mode 100644
index 00000000..371fcc47
Binary files /dev/null and b/slides/sysdev-system-update/mender.png differ
diff --git a/slides/sysdev-system-update/rauc.png b/slides/sysdev-system-update/rauc.png
new file mode 100644
index 00000000..b38b97cd
Binary files /dev/null and b/slides/sysdev-system-update/rauc.png differ
diff --git a/slides/sysdev-system-update/sysdev-system-update.tex b/slides/sysdev-system-update/sysdev-system-update.tex
new file mode 100644
index 00000000..599a00a7
--- /dev/null
+++ b/slides/sysdev-system-update/sysdev-system-update.tex
@@ -0,0 +1,236 @@
+\section{System update}
+
+\begin{frame}{Why doing system updates?}
+ \begin{itemize}
+ \item A long time ago, embedded systems were reasonably simple,
+ their firmware was flashed once for all, and rarely updated.
+ \item Multiple factors existing now that require the ability of
+ doing system updates:
+ \begin{itemize}
+ \item Increased complexity $\rightarrow$ chance of bugs or issues
+ is higher
+ \item Connectivity $\rightarrow$ need to fix security
+ vulnerabilities
+ \item Features added to existing systems in the field
+ \end{itemize}
+ \item Integrating a {\em system update} mechanism should be done as
+ part of the initial project development
+ \item Today, deploying an embedded Linux system that doesn't have a
+ {\em system update} capability is a mistake
+ \end{itemize}
+\end{frame}
+
+\begin{frame}{Main approaches to system update}
+ There are different approaches to perform {\em system updates}:
+ \begin{enumerate}
+ \item Full image updates
+ \item Filesystem delta updates
+ \item Package based updates
+ \item Container based updates
+ \end{enumerate}
+
+ \begin{itemize}
+ \item Open-source solutions exist to implement each of those approaches
+ \item Some of those approaches can sometimes be combined into a single
+ system
+ \end{itemize}
+\end{frame}
+
+\begin{frame}{Full image update approaches}
+ \begin{columns}
+ \column{0.6\textwidth}
+ \begin{itemize}
+ \item Consists in deploying to devices a new complete image of the
+ system.
+ \item Simplest and safest approach: everything is updated at the
+ same time $\rightarrow$ guarantees that all components of the
+ system are consistent
+ \item Not possible to update the system while it is running
+ $\rightarrow$ two partionning approaches are commonly used:
+ \begin{enumerate}
+ \item {\em A/B scheme}: two full copies of the root filesystem,
+ alternating between active/inactive
+ \item {\em rescue system}: one full copy of the system, and one
+ smaller rescue system used to do the update
+ \end{enumerate}
+ \item Bootloader integration to switch between systems
+ \end{itemize}
+ \column{0.4\textwidth}
+ \includegraphics[width=\textwidth]{slides/sysdev-system-update/full-image-update.pdf}
+ \end{columns}
+\end{frame}
+
+\begin{frame}{Full image update: typical scenario}
+ With {\em A/B scheme}:
+ \begin{enumerate}
+ \item System runs from active copy A
+ \item An update is triggered, either by bringing an update image
+ locally (SD card, USB stick) or over the network
+ \item The update image is flashed/written on copy B, currently
+ inactive
+ \item If the flashing is successful, the bootloader configuration is
+ updated to mark copy B as the active copy
+ \item The system is rebooted, and boots on the new system installed
+ in copy B.
+ \item Watchdog used to detect non-functional system, and fallback to
+ the old copy.
+ \end{enumerate}
+\end{frame}
+
+\begin{frame}{Full image update: read-only rootfs and writable data}
+
+ \begin{itemize}
+ \item The full image update strategy implies a full rewrite of the
+ {\em root filesystem} $\rightarrow$ changes in the rootfs are lost
+ during an update
+ \item Typically, the root filesystem is read-only
+ \item A separate read/write partition is used to store user data and
+ configuration
+ \end{itemize}
+
+ \vspace{0.5cm}
+
+ \begin{center}
+ \includegraphics[width=0.7\textwidth]{slides/sysdev-system-update/full-image-update-ro-rw.pdf}
+ \end{center}
+
+\end{frame}
+
+\begin{frame}{Full image update: advantages/drawbacks}
+ \begin{itemize}
+ \item Advantages
+ \begin{itemize}
+ \item Simplicity
+ \item Consistency of the system state
+ \end{itemize}
+ \item Drawbacks
+ \begin{itemize}
+ \item Size of the update images: can be mitigated by splitting the
+ system into a {\em base part} and an {\em application part}
+ \item Possible limitations on the image size, if the full update
+ image needs to be downloaded before flashing
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}{swupdate}
+ \begin{itemize}
+ \item Initially developed by engineers from {\em Denx}, original
+ author of the {\em U-Boot} bootloader
+ \item Supports updating:
+ \begin{itemize}
+ \item From a local image
+ \item Through a built-in webserver to which an update image is
+ uploaded
+ \item Through {\em Eclipse Hawkbit}, web UI to deploy update
+ images to a fleet of devices
+ \end{itemize}
+ \item Integration with U-Boot, Grub or EFI variables
+ \item Supports signature and/or encryption of update images
+ \item Supported in:
+ \begin{itemize}
+ \item Buildroot
+ \item Yocto using \code{meta-swupdate},
+ \url{https://github.com/sbabic/meta-swupdate}
+ \end{itemize}
+ \item Implemented in C, lightweight
+ \item GPL-2.0 licensed
+ \item \url{https://sbabic.github.io/swupdate/swupdate.html}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}{RAUC}
+ \begin{columns}
+ \column{0.8\textwidth}
+ \begin{itemize}
+ \item Developed/maintained by {\em Pengutronix}, also the authors of
+ the {\em Barebox} bootloader
+ \item From a high-level perspective, fairly similar to {\em swupdate}
+ \item Supports updates from local media, over the network using
+ {\em Eclipse Hawkbit}
+ \item Integration with U-Boot, Barebox, Grub, EFI as bootloaders
+ \item Controllable through a D-Bus interface
+ \item Several security features
+ \item Supported in:
+ \begin{itemize}
+ \item Yocto using \code{meta-rauc}, \url{https://github.com/rauc/meta-rauc/}
+ \item Buildroot
+ \item PTXdist
+ \end{itemize}
+ \item LGPL-2.1 licensed
+ \item \url{https://rauc.io/}
+ \end{itemize}
+ \column{0.2\textwidth}
+ \includegraphics[width=\textwidth]{slides/sysdev-system-update/rauc.png}
+ \end{columns}
+\end{frame}
+
+\begin{frame}{Mender}
+ \begin{columns}
+ \column{0.8\textwidth}
+ \begin{itemize}
+ \item Open-source, but with a more commercial approach
+ \item Implemented in Go, client is more heavy than swupdate/RAUC
+ \item Management Web interface much more powerful and polished than
+ {\em Eclipse Hawkbit}
+ \begin{itemize}
+ \item SaaS commercial offering for hosting the management Web interface
+ \end{itemize}
+ \item Apache-2.0 licensed
+ \item \url{https://mender.io/}
+ \end{itemize}
+ \column{0.2\textwidth}
+ \includegraphics[width=\textwidth]{slides/sysdev-system-update/mender.png}
+ \end{columns}
+\end{frame}
+
+\begin{frame}{Filesystem delta updates: {\em libostree}}
+\end{frame}
+
+\begin{frame}{Package based updates}
+ \begin{itemize}
+ \item Principle is to rely on the package management system of a
+ Linux distribution
+ \item Traditional desktop/server Linux distributions: Debian,
+ Ubuntu, Fedora, etc.
+ \item Embedded build systems that generate binary packages:
+ Yocto/OpenEmbedded, OpenWrt, etc.
+ \item Generate new packages, push them to package repositories, and
+ use the package management system on the target to
+ download/install updated packages
+ \item Advantages: ability to update individual software components,
+ small download size
+ \item Drawbacks: partial system update $\rightarrow$ system can be
+ in a state that has never been tested, updates are not atomic
+ $\rightarrow$ potential for breakage if reboot during update
+ \end{itemize}
+\end{frame}
+
+\begin{frame}{Container based updates}
+\end{frame}
+
+\begin{frame}{References}
+ \begin{itemize}
+ \item Bootlin blog posts
+ \begin{itemize}
+ \item swupdate: \href{https://bootlin.com/blog/building-a-linux-system-for-the-stm32mp1-remote-firmware-updates/}{Building a Linux system for the STM32MP1: remote firmware updates}
+ \item RAUC: \href{https://bootlin.com/blog/another-system-update-adventure-with-rauc-barebox-yocto-project/}{Another system update adventure with RAUC, Barebox \& Yocto Project}
+ \item Mender: \href{https://bootlin.com/blog/mender-how-to-integrate-an-ota-updater/}{Mender: How to integrate an OTA updater}
+ \end{itemize}
+ \item Collection of {\em Embedded Linux Conference} talks on
+ firmware update: \url{https://elinux.org/Upgrades_Presentations}
+ \end{itemize}
+\end{frame}
+
+\setuplabframe
+{System update with {\em swupdate}}
+{
+ \begin{itemize}
+ \item Integrate {\em swupdate} into an embedded Linux system to
+ implement a full system update with A/B partitioning scheme
+ \item Adjust the partitioning and bootloader setup
+ \item Generate {\em swupdate} bundles
+ \item Test the deployment of {\em swupdate} bundles locally and over
+ the network
+ \end{itemize}
+}
More information about the training-materials-updates
mailing list