[FE training-materials-updates] Added kernel training slides
michael.opdenacker at free-electrons.com
michael.opdenacker at free-electrons.com
Tue May 29 13:30:23 CEST 2012
- Log -----------------------------------------------------------------
http://git.free-electrons.com/training-materials/commit/?id=34fc769eed2ed5152ab6218720beacebcccd2501
commit 34fc769eed2ed5152ab6218720beacebcccd2501
Author: Michael Opdenacker <michael.opdenacker at free-electrons.com>
Date: Tue May 29 13:29:55 2012 +0200
Added kernel training slides
Converted to LaTeX by Maxime Ripard
diff --git a/Makefile b/Makefile
index 76dac79..3ee3b0e 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# Required packages (tested on Ubuntu 11.10):
+# Required packages (tested on Ubuntu 12.04):
# inkscape texlive-latex-base texlive-font-utils dia python-pygments
# Needed tools
@@ -11,6 +11,63 @@ EPSTOPDF = epstopdf
UPPERCASE = $(shell echo $1 | tr "[:lower:]" "[:upper:]")
# List of slides for the different courses
+
+KERNEL_SLIDES = \
+ kernel-introduction-title \
+ sysdev-linux-intro-features \
+ sysdev-linux-intro-versioning \
+ kernel-introduction-lab \
+ kernel-embedded-linux-usage-title \
+ sysdev-linux-intro-sources \
+ kernel-source-code-title \
+ kernel-source-code-drivers \
+ kernel-source-code-layout \
+ kernel-source-code-management \
+ kernel-source-code-lab-source-code \
+ sysdev-linux-intro-configuration \
+ sysdev-linux-intro-compilation \
+ sysdev-linux-intro-cross-compilation \
+ kernel-source-code-lab-module \
+ sysdev-linux-intro-modules \
+ kernel-driver-development-title \
+ kernel-driver-development-modules \
+ kernel-driver-development-lab-modules \
+ kernel-driver-development-memory \
+ kernel-driver-development-general-apis \
+ kernel-driver-development-io-memory \
+ kernel-driver-development-lab-io-memory \
+ sysdev-root-filesystem-device-files \
+ kernel-driver-development-character-drivers \
+ kernel-driver-development-lab-character-drivers \
+ kernel-driver-development-processes \
+ kernel-driver-development-sleeping \
+ kernel-driver-development-interrupts \
+ kernel-driver-development-lab-interrupts \
+ kernel-driver-development-concurrency \
+ kernel-driver-development-lab-locking \
+ kernel-driver-development-debugging \
+ kernel-driver-development-lab-debugging \
+ kernel-driver-development-mmap \
+ kernel-driver-development-dma \
+ kernel-driver-development-architecture-drivers \
+ kernel-serial-drivers-title \
+ kernel-serial-drivers-content \
+ kernel-serial-drivers-lab \
+ kernel-init-title \
+ kernel-init-content \
+ kernel-porting-title \
+ kernel-porting-content \
+ kernel-power-management-title \
+ kernel-power-management-content \
+ kernel-power-management-lab \
+ kernel-resources-title \
+ kernel-resources-advice \
+ kernel-resources-references \
+ kernel-git-title \
+ kernel-git-content \
+ kernel-git-lab \
+ last-slides
+
SYSDEV_SLIDES = sysdev-intro \
sysdev-dev-environment \
sysdev-toolchains-title \
@@ -295,6 +352,7 @@ help:
@echo " full-sysdev-labs.pdf Complete labs for the 'sysdev' course"
@echo " full-kernel-labs.pdf Complete labs for the 'kernel' course"
@echo " full-sysdev-slides.pdf Complete slides for the 'sysdev' course"
+ @echo " full-kernel-slides.pdf Complete slides for the 'kernel' course"
@echo " <some-chapter>-slides.pdf Slides for a particular chapter in slides/"
@echo
@echo " <some-chapter>-labs.pdf Labs for a particular chapter in labs/"
diff --git a/slides/kernel-driver-development-architecture-drivers/driver-architecture.dia b/slides/kernel-driver-development-architecture-drivers/driver-architecture.dia
new file mode 100644
index 0000000..875a646
--- /dev/null
+++ b/slides/kernel-driver-development-architecture-drivers/driver-architecture.dia
@@ -0,0 +1,613 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,2.95;13.05,5.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9.5,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.71125,3.62625;11.2888,4.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Application#</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="9.5,4.22125"/>
+ </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="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,6.95;13.05,9.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9.5,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.6075,7.22625;11.3925,8.77375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#System Call
+Interface#</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="9.5,7.82125"/>
+ </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="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9.5,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.1382,4.95;9.8618,7.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="9.5,5"/>
+ <dia:point val="9.5,7"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="6"/>
+ <dia:connection handle="1" to="O2" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,10.95;13.05,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,11"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9.5,12"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.73,11.6263;11.27,12.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Framework#</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="9.5,12.2213"/>
+ </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="O5" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,14.95;13.05,17.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,15"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </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="9.5,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.515,15.6263;10.485,16.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Driver#</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="9.5,16.2213"/>
+ </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:object type="Standard - Box" version="0" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,18.95;13.05,21.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,19"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9.5,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.95375,19.6262;11.0463,20.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Hardware#</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="9.5,20.2212"/>
+ </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="O9" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="3,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.95,17.95;16.05,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="3,18"/>
+ <dia:point val="16,18"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="dashlength">
+ <dia:real val="0.50000000000000011"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="3,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.95,5.95;16.05,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="3,6"/>
+ <dia:point val="16,6"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="dashlength">
+ <dia:real val="0.50000000000000011"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9.5,9.04956"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.1382,8.99956;9.8618,11.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="9.5,9.04956"/>
+ <dia:point val="9.5,11"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="8"/>
+ <dia:connection handle="1" to="O5" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9.5,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.1382,12.95;9.8618,15.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="9.5,13"/>
+ <dia:point val="9.5,15"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O5" connection="6"/>
+ <dia:connection handle="1" to="O7" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9.5,17"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.1382,16.95;9.8618,19.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="9.5,17"/>
+ <dia:point val="9.5,19"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O7" connection="6"/>
+ <dia:connection handle="1" to="O9" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="15,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15,4.405;18.3375,5.1525"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Userspace#</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="15,5"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="15,12"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15,11.5982;17.0312,12.4018"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Kernel#</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="15,12.2119"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </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/kernel-driver-development-architecture-drivers/frameworks.dia b/slides/kernel-driver-development-architecture-drivers/frameworks.dia
new file mode 100644
index 0000000..df6c207
--- /dev/null
+++ b/slides/kernel-driver-development-architecture-drivers/frameworks.dia
@@ -0,0 +1,1779 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="4,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.95,1.95;11.05,4.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="4,2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7.5,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.71125,2.62625;9.28875,3.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Application#</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="7.5,3.22125"/>
+ </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="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.95,1.95;24.05,4.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="16,2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.2112,2.62625;21.7888,3.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Application#</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="20,3.22125"/>
+ </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="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.95,1.95;36.05,4.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="29,2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32.5,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.7112,2.62625;34.2888,3.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Application#</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="32.5,3.22125"/>
+ </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="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="2,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="1.95,5.95;38.05,8.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="2,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="36"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="16.5725,6.62625;23.4275,7.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#System Call Interface#</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="20,7.22125"/>
+ </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="O6" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7.5,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.45,3.95;20.3618,6.1118"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="7.5,4"/>
+ <dia:point val="7.5,5"/>
+ <dia:point val="20,5"/>
+ <dia:point val="20,6"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="6"/>
+ <dia:connection handle="1" to="O6" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32.5,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.6382,3.95;32.55,6.1118"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="32.5,4"/>
+ <dia:point val="32.5,5"/>
+ <dia:point val="20,5"/>
+ <dia:point val="20,6"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O4" connection="6"/>
+ <dia:connection handle="1" to="O6" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.6382,3.95;20.3618,6.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="20,4"/>
+ <dia:point val="20,6"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="6"/>
+ <dia:connection handle="1" to="O6" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="2,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="1.95,9.95;8.05,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="2,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="5,11.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.42,10.7263;6.58,12.2737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Character
+Driver#</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="5,11.3213"/>
+ </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 - Box" version="0" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.95,9.95;15.05,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="9,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,11.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.0488,10.7263;13.9512,12.2737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Framebuffer
+Core#</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="12,11.3213"/>
+ </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="O13" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="22.95,9.95;30.05,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="23,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26.5,11.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="25.7587,10.7263;27.2413,12.2737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#TTY
+Core#</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="26.5,11.3213"/>
+ </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="O15" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.95,9.95;22.05,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="16,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O18">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,11.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.2587,10.7263;19.7413,12.2737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#V4L
+Core#</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="19,11.3213"/>
+ </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="O17" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O19">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.95,9.95;38.05,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="31,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O20">
+ <dia:attribute name="obj_pos">
+ <dia:point val="34.5,11.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="33.6337,10.7263;35.3663,12.2737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Block
+Core#</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="34.5,11.3213"/>
+ </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="O19" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O21">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.6382,7.95;5.3618,10.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="5,8"/>
+ <dia:point val="5,10"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O11" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O22">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.6382,7.95;12.3618,10.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="12,8"/>
+ <dia:point val="12,10"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O13" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O23">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.6382,7.95;19.3618,10.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="19,8"/>
+ <dia:point val="19,10"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O17" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O24">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.95,14.95;15.05,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="9,15"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O25">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,16.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.0488,15.7262;13.9512,17.2737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Framebuffer
+Driver#</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="12,16.3212"/>
+ </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="O24" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O26">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.6382,12.95;12.3618,15.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="12,13"/>
+ <dia:point val="12,15"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O13" connection="6"/>
+ <dia:connection handle="1" to="O24" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O27">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.95,14.95;22.05,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="16,15"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O28">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,16.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.015,15.7262;19.985,17.2737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#V4L
+Driver#</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="19,16.3212"/>
+ </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="O27" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O29">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="22.95,14.95;26.05,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="23,15"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O30">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.95,14.95;30.05,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="27,15"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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 - ZigZagLine" version="1" id="O31">
+ <dia:attribute name="obj_pos">
+ <dia:point val="25,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="24.95,7.95;26.8618,10.1118"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="25,8"/>
+ <dia:point val="25,9"/>
+ <dia:point val="26.5,9"/>
+ <dia:point val="26.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O15" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O32">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.95,14.95;34.05,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="31,15"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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 - Box" version="0" id="O33">
+ <dia:attribute name="obj_pos">
+ <dia:point val="35,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="34.95,14.95;38.05,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="35,15"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O34">
+ <dia:attribute name="obj_pos">
+ <dia:point val="28.5,16.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="27.5938,15.7262;29.4062,17.2737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Serial
+Core#</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="28.5,16.3212"/>
+ </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="O30" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O35">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32.5,16.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.7587,15.7262;33.2413,17.2737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#IDE
+Core#</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="32.5,16.3212"/>
+ </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="O32" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O36">
+ <dia:attribute name="obj_pos">
+ <dia:point val="36.5,16.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="35.7587,15.7262;37.2413,17.2737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#SCSI
+Core#</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="36.5,16.3212"/>
+ </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="O33" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O37">
+ <dia:attribute name="obj_pos">
+ <dia:point val="24.5,16.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="23.515,15.7262;25.485,17.2737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#TTY
+Driver#</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="24.5,16.3212"/>
+ </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="O29" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O38">
+ <dia:attribute name="obj_pos">
+ <dia:point val="33,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="32.95,7.95;34.8618,10.1118"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="33,8"/>
+ <dia:point val="33,9"/>
+ <dia:point val="34.5,9"/>
+ <dia:point val="34.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O19" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O39">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.6382,12.95;19.3618,15.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="19,13"/>
+ <dia:point val="19,15"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O17" connection="6"/>
+ <dia:connection handle="1" to="O27" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O40">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26.5,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="24.1382,12.95;26.55,15.1118"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="26.5,13"/>
+ <dia:point val="26.5,14"/>
+ <dia:point val="24.5,14"/>
+ <dia:point val="24.5,15"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O15" connection="6"/>
+ <dia:connection handle="1" to="O29" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O41">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26.5,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.45,12.95;28.8618,15.1118"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="26.5,13"/>
+ <dia:point val="26.5,14"/>
+ <dia:point val="28.5,14"/>
+ <dia:point val="28.5,15"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O15" connection="6"/>
+ <dia:connection handle="1" to="O30" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O42">
+ <dia:attribute name="obj_pos">
+ <dia:point val="34.5,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="32.1382,12.95;34.55,15.1118"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="34.5,13"/>
+ <dia:point val="34.5,14"/>
+ <dia:point val="32.5,14"/>
+ <dia:point val="32.5,15"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O19" connection="6"/>
+ <dia:connection handle="1" to="O32" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O43">
+ <dia:attribute name="obj_pos">
+ <dia:point val="34.5,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="34.45,12.95;36.8618,15.1118"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="34.5,13"/>
+ <dia:point val="34.5,14"/>
+ <dia:point val="36.5,14"/>
+ <dia:point val="36.5,15"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O19" connection="6"/>
+ <dia:connection handle="1" to="O33" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O44">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.95,19.95;30.05,23.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="27,20"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O45">
+ <dia:attribute name="obj_pos">
+ <dia:point val="28.5,21.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="27.515,20.7263;29.485,22.2737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Serial
+Driver#</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="28.5,21.3212"/>
+ </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="O44" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O46">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.95,19.95;34.05,23.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="31,20"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O47">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32.5,21.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.515,20.7263;33.485,22.2737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#IDE
+Driver#</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="32.5,21.3212"/>
+ </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="O46" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O48">
+ <dia:attribute name="obj_pos">
+ <dia:point val="35,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="34.95,19.95;38.05,23.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="35,20"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O49">
+ <dia:attribute name="obj_pos">
+ <dia:point val="36.5,21.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="35.2463,20.3263;37.7538,22.6738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#USB
+Storage
+Driver#</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="36.5,20.9213"/>
+ </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="O48" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O50">
+ <dia:attribute name="obj_pos">
+ <dia:point val="36.5,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="36.1382,17.95;36.8618,20.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="36.5,18"/>
+ <dia:point val="36.5,20"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O33" connection="6"/>
+ <dia:connection handle="1" to="O48" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O51">
+ <dia:attribute name="obj_pos">
+ <dia:point val="28.5,18.0492"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.1382,17.9992;28.8618,20.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="28.5,18.0492"/>
+ <dia:point val="28.5,20"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O30" connection="8"/>
+ <dia:connection handle="1" to="O44" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O52">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32.5,18.0492"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="32.1382,17.9992;32.8618,20.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="32.5,18.0492"/>
+ <dia:point val="32.5,20"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O32" connection="8"/>
+ <dia:connection handle="1" to="O46" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-architecture-drivers/kernel-driver-development-architecture-drivers.tex b/slides/kernel-driver-development-architecture-drivers/kernel-driver-development-architecture-drivers.tex
new file mode 100644
index 0000000..2ffbe6c
--- /dev/null
+++ b/slides/kernel-driver-development-architecture-drivers/kernel-driver-development-architecture-drivers.tex
@@ -0,0 +1,918 @@
+\subsection{Kernel Architecture for Device Drivers}
+
+\begin{frame}
+ \frametitle{Kernel and Device Drivers}
+ \begin{center}
+ \includegraphics[height=0.8\textheight]{slides/kernel-driver-development-architecture-drivers/driver-architecture.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Kernel and Device Drivers}
+ \begin{itemize}
+ \item Many device drivers are not implemented directly as character
+ drivers
+ \item They are implemented under a \emph{framework}, specific to a
+ given device type (framebuffer, V4L, serial, etc.)
+ \begin{itemize}
+ \item The framework allows to factorize the common parts of
+ drivers for the same type of devices
+ \item From userspace, they are still seen as character devices by
+ the applications
+ \item The framework allows to provide a coherent userspace
+ interface (\code{ioctl}, etc.) for every type of device,
+ regardless of the driver
+ \end{itemize}
+ \item The device drivers rely on the \emph{bus infrastructure} to
+ enumerate the devices and communicate with them.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Kernel Frameworks}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-architecture-drivers/frameworks.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Example: Framebuffer Framework}
+ \begin{itemize}
+ \item Kernel option \code{CONFIG_FB}
+ \begin{itemize}
+ \item \code{menuconfig FB}
+ \begin{itemize}
+ \item \code{tristate "Support for frame buffer devices"}
+ \end{itemize}
+ \end{itemize}
+ \item Implemented in \code{drivers/video/}
+ \begin{itemize}
+ \item \code{fb.c}, \code{fbmem.c}, \code{fbmon.c},
+ \code{fbcmap.c}, \code{fbsysfs.c}, \code{modedb.c},
+ \code{fbcvt.c}
+ \end{itemize}
+ \item Implements a single character driver and defines the
+ user/kernel API
+ \begin{itemize}
+ \item First part of \code{include/linux/fb.h}
+ \end{itemize}
+ \item Defines the set of operations a framebuffer driver must
+ implement and helper functions for the drivers
+ \begin{itemize}
+ \item \code{struct fb_ops}
+ \item Second part of \code{include/linux/fb.h} (in
+ \code{ifdef __KERNEL__})
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Framebuffer Driver Skeleton}
+ \begin{itemize}
+ \item Skeleton driver in \code{drivers/video/skeletonfb.c}
+ \item Implements the set of framebuffer specific operations defined
+ by the \code{struct fb_ops} structure
+ \end{itemize}
+ \begin{columns}
+ \column{0.45\textwidth}
+ \begin{itemize}
+ \item \code{xxxfb_open()}
+ \item \code{xxxfb_read()}
+ \item \code{xxxfb_write()}
+ \item \code{xxxfb_release()}
+ \item \code{xxxfb_checkvar()}
+ \item \code{xxxfb_setpar()}
+ \item \code{xxxfb_setcolreg()}
+ \item \code{xxxfb_blank()}
+ \item \code{xxxfb_pan_display()}
+ \end{itemize}
+ \column{0.45\textwidth}
+ \begin{itemize}
+ \item \code{xxxfb_fillrect()}
+ \item \code{xxxfb_copyarea()}
+ \item \code{xxxfb_imageblit()}
+ \item \code{xxxfb_cursor()}
+ \item \code{xxxfb_rotate()}
+ \item \code{xxxfb_sync()}
+ \item \code{xxxfb_ioctl()}
+ \item \code{xxxfb_mmap()}
+ \end{itemize}
+ \end{columns}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Framebuffer Driver Skeleton}
+ \begin{itemize}
+ \item After the implementation of the operations, definition of a
+ \code{struct fb_ops} structure
+ \begin{minted}[fontsize=\scriptsize]{c}
+static struct fb_ops xxxfb_ops = {
+ .owner = THIS_MODULE,
+ .fb_open = xxxfb_open,
+ .fb_read = xxxfb_read,
+ .fb_write = xxxfb_write,
+ .fb_release = xxxfb_release,
+ .fb_check_var = xxxfb_check_var,
+ .fb_set_par = xxxfb_set_par,
+ .fb_setcolreg = xxxfb_setcolreg,
+ .fb_blank = xxxfb_blank,
+ .fb_pan_display = xxxfb_pan_display,
+ .fb_fillrect = xxxfb_fillrect, /* Needed !!! */
+ .fb_copyarea = xxxfb_copyarea, /* Needed !!! */
+ .fb_imageblit = xxxfb_imageblit, /* Needed !!! */
+ .fb_cursor = xxxfb_cursor, /* Optional !!! */
+ .fb_rotate = xxxfb_rotate,
+ .fb_sync = xxxfb_sync,
+ .fb_ioctl = xxxfb_ioctl,
+ .fb_mmap = xxxfb_mmap,
+};
+ \end{minted}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Framebuffer Driver Skeleton}
+ \begin{itemize}
+ \item In the \code{probe()} function, registration of the
+ framebuffer device and operations
+ \begin{minted}[fontsize=\footnotesize]{c}
+static int __devinit xxxfb_probe (struct pci_dev *dev,
+ const struct pci_device_id *ent)
+{
+ struct fb_info *info;
+ [...]
+ info = framebuffer_alloc(sizeof(struct xxx_par), device);
+ [...]
+ info->fbops = &xxxfb_ops;
+ [...]
+ if (register_framebuffer(info) > 0)
+ return -EINVAL;
+ [...]
+}
+ \end{minted}
+ \item \code{register_framebuffer()} will create the character device
+ that can be used by userspace applications with the generic
+ framebuffer API.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Unified Device Model}
+ \begin{itemize}
+ \item The 2.6 kernel included a significant new feature: a unified
+ device model
+ \item Instead of having different ad-hoc mechanisms in the various
+ subsystems, the device model unifies the description of the
+ devices and their topology
+ \begin{itemize}
+ \item Minimization of code duplication
+ \item Common facilities (reference counting, event notification,
+ power management, etc.)
+ \item Enumerate the devices view their interconnections, link the
+ devices to their buses and drivers, etc.
+ \end{itemize}
+ \item Understanding the device model is necessary to understand how
+ device drivers fit into the Linux kernel architecture.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Bus Drivers}
+ \begin{itemize}
+ \item The first component of the device model is the bus driver
+ \begin{itemize}
+ \item One bus driver for each type of bus: USB, PCI, SPI, MMC,
+ I2C, etc.
+ \end{itemize}
+ \item It is responsible for
+ \begin{itemize}
+ \item Registering the bus type (\code{struct bus_type})
+ \item Allowing the registration of adapter drivers (USB
+ controllers, I2C adapters, etc.), able of detecting the
+ connected devices, and providing a communication mechanism with
+ the devices
+ \item Allowing the registration of device drivers (USB devices,
+ I2C devices, PCI devices, etc.), managing the devices
+ \item Matching the device drivers against the devices detected by
+ the adapter drivers.
+ \item Provides an API to both adapter drivers and device drivers
+ \item Defining driver and device specific structure, typically
+ \code{xxx_driver} and \code{xxx_device}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Example: USB Bus 1/2}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-architecture-drivers/usb-bus.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Example: USB Bus 2/2}
+ \begin{itemize}
+ \item Core infrastructure (bus driver)
+ \begin{itemize}
+ \item \code{drivers/usb/core}
+ \item The \code{bus_type} is defined in
+ \code{drivers/usb/core/driver.c} and registered in
+ \code{drivers/usb/core/usb.c}
+ \end{itemize}
+ \item Adapter drivers
+ \begin{itemize}
+ \item \code{drivers/usb/host}
+ \item For EHCI, UHCI, OHCI, XHCI, and their implementations on
+ various systems (Atmel, IXP, Xilinx, OMAP, Samsung, PXA, etc.)
+ \end{itemize}
+ \item Device drivers
+ \begin{itemize}
+ \item Everywhere in the kernel tree, classified by their type
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Example of Device Driver}
+ \begin{itemize}
+ \item To illustrate how drivers are implemented to work with the
+ device model, we will study the source code of a driver for a USB
+ network card
+ \begin{itemize}
+ \item It is USB device, so it has to be a USB device driver
+ \item It is a network device, so it has to be a network device
+ \item Most drivers rely on a bus infrastructure (here, USB) and
+ register themselves in a framework (here, network)
+ \end{itemize}
+ \item We will only look at the device driver side, and not the
+ adapter driver side
+ \item The driver we will look at is \code{drivers/net/usb/rtl8150.c}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Device Identifiers}
+ \begin{itemize}
+ \item Defines the set of devices that this driver can manage, so
+ that the USB core knows for which devices this driver should be
+ used
+ \item The \code{MODULE_DEVICE_TABLE} macro allows \code{depmod} to
+ extract at compile time the relation between device identifiers
+ and drivers, so that drivers can be loaded automatically by
+ udev. See \code{/lib/modules/$(uname -r)/modules.{alias,usbmap}}
+ \end{itemize}
+ \begin{minted}[fontsize=\footnotesize]{c}
+static struct usb_device_id rtl8150_table[] = {
+ { USB_DEVICE(VENDOR_ID_REALTEK, PRODUCT_ID_RTL8150) },
+ { USB_DEVICE(VENDOR_ID_MELCO, PRODUCT_ID_LUAKTX) },
+ { USB_DEVICE(VENDOR_ID_MICRONET, PRODUCT_ID_SP128AR) },
+ { USB_DEVICE(VENDOR_ID_LONGSHINE, PRODUCT_ID_LCS8138TX) },
+ { USB_DEVICE(VENDOR_ID_OQO, PRODUCT_ID_RTL8150) },
+ { USB_DEVICE(VENDOR_ID_ZYXEL, PRODUCT_ID_PRESTIGE) },
+ {}
+};
+MODULE_DEVICE_TABLE(usb, rtl8150_table);
+ \end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Instantiation of usb\_driver}
+ \begin{itemize}
+ \item \code{struct usb_driver} is a structure defined by the USB
+ core. Each USB device driver must instantiate it, and register
+ itself to the USB core using this structure
+ \item This structure inherits from struct driver, which is defined
+ by the device model.
+ \end{itemize}
+ \begin{minted}{c}
+static struct usb_driver rtl8150_driver = {
+ .name = "rtl8150",
+ .probe = rtl8150_probe,
+ .disconnect = rtl8150_disconnect,
+ .id_table = rtl8150_table,
+ .suspend = rtl8150_suspend,
+ .resume = rtl8150_resume };
+ \end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Driver (Un)Registration}
+ \begin{itemize}
+ \item When the driver is loaded or unloaded, it must register or
+ unregister itself from the USB core
+ \item Done using \code{usb_register()} and \code{usb_deregister()},
+ provided by the USB core.
+ \end{itemize}
+\begin{minted}{c}
+static int __init usb_rtl8150_init(void)
+{
+ return usb_register(&rtl8150_driver);
+}
+
+static void __exit usb_rtl8150_exit(void)
+{
+ usb_deregister(&rtl8150_driver);
+}
+
+module_init(usb_rtl8150_init);
+module_exit(usb_rtl8150_exit);
+\end{minted}
+\end{frame}
+
+\begin{frame}
+ \frametitle{At Initialization}
+ \begin{itemize}
+ \item The USB adapter driver that corresponds to the USB controller
+ of the system registers itself to the USB core
+ \item The rtl8150 USB device driver registers itself to the USB core
+ \begin{center}
+ \includegraphics[height=0.4\textheight]{slides/kernel-driver-development-architecture-drivers/usb-registering.pdf}
+ \end{center}
+ \item The USB core now knows the association between the
+ vendor/product IDs of rtl8150 and the \code{usb_driver} structure
+ of this driver
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{When a Device is Detected}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-architecture-drivers/usb-detection.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Probe Method}
+ \begin{itemize}
+ \item The \code{probe()} method receives as argument a structure
+ describing the device, usually specialized by the bus
+ infrastructure (\code{pci_dev}, \code{usb_interface}, etc.)
+ \item This function is responsible for
+ \begin{itemize}
+ \item Initializing the device, mapping I/O memory, registering the
+ interrupt handlers. The bus infrastructure provides methods to
+ get the addresses, interrupt numbers and other device-specific
+ information.
+ \item Registering the device to the proper kernel framework, for
+ example the network infrastructure.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Probe Method Example}
+\begin{minted}[fontsize=\small]{c}
+static int rtl8150_probe(struct usb_interface *intf,
+ const struct usb_device_id *id)
+{
+ rtl8150_t *dev;
+ struct net_device *netdev;
+
+ netdev = alloc_etherdev(sizeof(rtl8150_t));
+ [...]
+ dev = netdev_priv(netdev);
+ tasklet_init(&dev->tl, rx_fixup, (unsigned long)dev);
+ spin_lock_init(&dev->rx_pool_lock);
+ [...]
+ netdev->netdev_ops = &rtl8150_netdev_ops;
+ alloc_all_urbs(dev);
+ [...]
+ usb_set_intfdata(intf, dev);
+ SET_NETDEV_DEV(netdev, &intf->dev);
+ register_netdev(netdev);
+
+ return 0;
+}
+\end{minted}
+\end{frame}
+
+\begin{frame}
+ \frametitle{The Model is Recursive}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-architecture-drivers/recursive-model.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{sysfs}
+ \begin{itemize}
+ \item The bus, device, drivers, etc. structures are internal to the
+ kernel
+ \item The \code{sysfs} virtual filesystem offers a mechanism to
+ export such information to userspace
+ \item Used for example by udev to provide automatic module loading,
+ firmware loading, device file creation, etc.
+ \item \code{sysfs} is usually mounted in /sys
+ \begin{itemize}
+ \item \code{/sys/bus/} contains the list of buses
+ \item \code{/sys/devices/} contains the list of devices
+ \item \code{/sys/class} enumerates devices by class (net, input,
+ block...), whatever the bus they are connected to. Very useful!
+ \end{itemize}
+ \item Take your time to explore \code{/sys} on your workstation.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Platform Devices}
+ \begin{itemize}
+ \item On embedded systems, devices are often not connected through a
+ bus allowing enumeration, hotplugging, and providing unique
+ identifiers for devices.
+ \item However, we still want the devices to be part of the device
+ model.
+ \item The solution to this is the \emph{platform driver} /
+ \emph{platform device} infrastructure.
+ \item The platform devices are the devices that are directly
+ connected to the CPU, without any kind of bus.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Implementation of the Platform Driver}
+ \begin{itemize}
+ \item The driver implements a \code{struct platform_driver}
+ structure (example taken from \code{drivers/serial/imx.c})
+ \begin{minted}[fontsize=\footnotesize]{c}
+static struct platform_driver serial_imx_driver = {
+ .probe = serial_imx_probe,
+ .remove = serial_imx_remove,
+ .driver = {
+ .name = "imx-uart",
+ .owner = THIS_MODULE,
+ },
+};
+ \end{minted}
+\item And registers its driver to the platform driver infrastructure
+ \begin{minted}[fontsize=\footnotesize]{c}
+static int __init imx_serial_init(void) {
+ ret = platform_driver_register(&serial_imx_driver);
+}
+
+static void __exit imx_serial_cleanup(void) {
+ platform_driver_unregister(&serial_imx_driver);
+}
+ \end{minted}
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Platform Device Instantiation 1/2}
+ \begin{itemize}
+ \item As platform devices cannot be detected dynamically, they are
+ defined statically
+ \begin{itemize}
+ \item By direct instantiation of \code{struct platform_device}
+ structures, as done on some ARM platforms. Definition done in
+ the board-specific or SoC specific code.
+ \item By using a \emph{device tree}, as done on Power PC (and on
+ some ARM platforms) from which \code{struct platform_device}
+ structures are created
+ \end{itemize}
+ \item Example on ARM, where the instantiation is done in
+ \code{arch/arm/mach-imx/mx1ads.c}
+\begin{minted}[fontsize=\footnotesize]{c}
+static struct platform_device imx_uart1_device = {
+ .name = "imx-uart",
+ .id = 0,
+ .num_resources = ARRAY_SIZE(imx_uart1_resources),
+ .resource = imx_uart1_resources,
+ .dev = {
+ .platform_data = &uart_pdata,
+ }
+};
+\end{minted}
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Platform device instantiation 2/2}
+ \begin{itemize}
+ \item The device is part of a list
+ \begin{minted}[fontsize=\footnotesize]{c}
+static struct platform_device *devices[] __initdata = {
+ &cs89x0_device,
+ &imx_uart1_device,
+ &imx_uart2_device,
+};
+ \end{minted}
+ \item And the list of devices is added to the system during
+ board initialization
+ \begin{minted}[fontsize=\footnotesize]{c}
+static void __init mx1ads_init(void)
+{
+ [...]
+ platform_add_devices(devices, ARRAY_SIZE(devices));
+}
+
+MACHINE_START(MX1ADS, "Freescale MX1ADS")
+ [...]
+ .init_machine = mx1ads_init,
+MACHINE_END
+ \end{minted}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{The Resource Mechanism}
+ \begin{itemize}
+ \item Each device managed by a particular driver typically uses
+ different hardware resources: addresses for the I/O registers, DMA
+ channels, IRQ lines, etc.
+ \item Such information can be represented using the
+ \code{struct resource}, and an array of \code{struct resource} is
+ associated to a \code{platform_device}
+ \item Allows a driver to be instantiated for multiple devices
+ functioning similarly, but with different addresses, IRQs, etc.
+ \end{itemize}
+ \begin{minted}[fontsize=\scriptsize]{c}
+static struct resource imx_uart1_resources[] = {
+ [0] = {
+ .start = 0x00206000,
+ .end = 0x002060FF,
+ .flags = IORESOURCE_MEM,
+ },
+ [1] = {
+ .start = (UART1_MINT_RX),
+ .end = (UART1_MINT_RX),
+ .flags = IORESOURCE_IRQ,
+ },
+};
+ \end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Using Resources}
+ \begin{itemize}
+ \item When a \code{platform_device} is added to the system using
+ \code{platform_add_device()}, the \code{probe()} method of the
+ platform driver gets called
+ \item This method is responsible for initializing the hardware,
+ registering the device to the proper framework (in our case, the
+ serial driver framework)
+ \item The platform driver has access to the I/O resources:
+ \begin{minted}[fontsize=\footnotesize]{c}
+res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+base = ioremap(res->start, PAGE_SIZE);
+sport->rxirq = platform_get_irq(pdev, 0);
+ \end{minted}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{platform\_data Mechanism}
+ \begin{itemize}
+ \item In addition to the well-defined resources, many drivers
+ require driver-specific information for each platform device
+ \item Such information can be passed using the \code{platform_data}
+ field of the struct device (from which
+ \code{struct platform_device} inherits)
+ \item As it is a \code{void *} pointer, it can be used to pass any
+ type of information.
+ \begin{itemize}
+ \item Typically, each driver defines a structure to pass
+ information through \code{platform_data}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{platform\_data example 1/2}
+ \begin{itemize}
+ \item The i.MX serial port driver defines the following structure to
+ be passed through \code{platform_data}
+
+ \begin{minted}[fontsize=\footnotesize]{c}
+struct imxuart_platform_data {
+ int (*init)(struct platform_device *pdev);
+ void (*exit)(struct platform_device *pdev);
+ unsigned int flags;
+ void (*irda_enable)(int enable);
+ unsigned int irda_inv_rx:1;
+ unsigned int irda_inv_tx:1;
+ unsigned short transceiver_delay;
+};
+ \end{minted}
+ \item The MX1ADS board code instantiates such a structure
+ \begin{minted}[fontsize=\footnotesize]{c}
+static struct imxuart_platform_data uart1_pdata = {
+ .flags = IMXUART_HAVE_RTSCTS,
+};
+ \end{minted}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{platform\_data Example 2/2}
+ \begin{itemize}
+ \item The \code{uart_pdata} structure is associated to the
+ \code{platform_device} in the MX1ADS board file (the real code is
+ slightly more complicated)
+ \begin{minted}[fontsize=\scriptsize]{c}
+struct platform_device mx1ads_uart1 = {
+ .name = "imx-uart",
+ .dev {
+ .platform_data = &uart1_pdata,
+ },
+ .resource = imx_uart1_resources,
+ [...]
+};
+ \end{minted}
+ \item The driver can access the platform data:
+ \begin{minted}[fontsize=\scriptsize]{c}
+static int serial_imx_probe(struct platform_device *pdev)
+{
+ struct imxuart_platform_data *pdata;
+ pdata = pdev->dev.platform_data;
+ if (pdata && (pdata->flags & IMXUART_HAVE_RTSCTS))
+ sport->have_rtscts = 1;
+ [...]
+}
+ \end{minted}
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Driver-specific Data Structure}
+ \begin{itemize}
+ \item Each \emph{framework} defines a structure that a device driver
+ must register to be recognized as a device in this framework
+ \begin{itemize}
+ \item \code{uart_port} for serial port, \code{netdev} for network
+ devices, \code{fb_info} for framebuffers, etc.
+ \end{itemize}
+ \item In addition to this structure, the driver usually needs to
+ store additional information about its device
+ \item This is typically done
+ \begin{itemize}
+ \item By subclassing the appropriate framework structure
+ \item Or by storing a reference to the appropriate framework
+ structure
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Driver-specific Data Structure Examples}
+ \begin{itemize}
+ \item i.MX serial driver: \code{imx_port} is a subclass of
+ \code{uart_port}
+ \begin{minted}[fontsize=\scriptsize]{c}
+struct imx_port {
+ struct uart_port port;
+ struct timer_list timer;
+ unsigned int old_status;
+ int txirq, rxirq, rtsirq;
+ unsigned int have_rtscts:1;
+ [...]
+};
+ \end{minted}
+ \item rtl8150 network driver: \code{rtl8150} has a reference to
+ \code{net_device}
+ \begin{minted}[fontsize=\scriptsize]{c}
+struct rtl8150 {
+ unsigned long flags;
+ struct usb_device *udev;
+ struct tasklet_struct tl;
+ struct net_device *netdev;
+ [...]
+};
+ \end{minted}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Link Between Structures 1/3}
+ \begin{itemize}
+ \item The framework typically contains a \code{struct device *}
+ pointer that the driver must point to the corresponding struct
+ device
+ \begin{itemize}
+ \item It's the relation between the logical device (for example a
+ network interface) and the physical device (for example the USB
+ network adapter)
+ \end{itemize}
+ \item The device structure also contains a \code{void *} pointer
+ that the driver can freely use.
+ \begin{itemize}
+ \item It's often use to link back the device to the higher-level
+ structure from the framework.
+ \item It allows, for example, from the \code{platform_device}
+ structure, to find the structure describing the logical device
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Link Between Structures 2/3}
+ \begin{columns}
+ \column{0.7\textwidth}
+ \begin{minted}[fontsize=\tiny]{c}
+static int serial_imx_probe(struct platform_device *pdev)
+{
+ struct imx_port *sport;
+ [...]
+ /* setup the link between uart_port and the struct
+ * device inside the platform_device */
+ sport->port.dev = &pdev->dev;
+ [...]
+ /* setup the link between the struct device inside
+ * the platform device to the imx_port structure */
+ platform_set_drvdata(pdev, &sport->port);
+ [...]
+ uart_add_one_port(&imx_reg, &sport->port);
+}
+
+static int serial_imx_remove(struct platform_device *pdev)
+{
+ /* retrieve the imx_port from the platform_device */
+ struct imx_port *sport = platform_get_drvdata(pdev);
+ [...]
+ uart_remove_one_port(&imx_reg, &sport->port);
+ [...]
+}
+ \end{minted}
+ \column{0.3\textwidth}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-architecture-drivers/link-structures-imx.pdf}
+ \end{center}
+ \end{columns}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Link Between Structures 3/3}
+ \begin{columns}
+ \column{0.7\textwidth}
+ \begin{minted}[fontsize=\tiny]{c}
+static int rtl8150_probe(struct usb_interface *intf,
+ const struct usb_device_id *id)
+{
+ rtl8150_t *dev;
+ struct net_device *netdev;
+
+ netdev = alloc_etherdev(sizeof(rtl8150_t));
+ dev = netdev_priv(netdev);
+
+ usb_set_intfdata(intf, dev);
+ SET_NETDEV_DEV(netdev, &intf->dev);
+
+ [...]
+}
+
+static void rtl8150_disconnect(struct usb_interface *intf)
+{
+ rtl8150_t *dev = usb_get_intfdata(intf);
+
+ [...]
+}
+ \end{minted}
+ \column{0.3\textwidth}
+ \begin{center}
+ \includegraphics[height=0.8\textheight]{slides/kernel-driver-development-architecture-drivers/link-structures-netdev.pdf}
+ \end{center}
+ \end{columns}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Example of Another Non-Dynamic Bus: SPI}
+ \begin{itemize}
+ \item SPI is called non-dynamic as it doesn't support runtime
+ enumeration of devices: the system needs to know which devices are
+ on which SPI bus, and at which location
+ \item The SPI infrastructure in the kernel is in \code{drivers/spi}
+ \begin{itemize}
+ \item \code{drivers/spi/spi.c} is the core, which implements the
+ \code{struct bus_type} for spi
+ \begin{itemize}
+ \item It allows registration of adapter drivers using
+ \code{spi_register_master()}, and registration of device
+ drivers using \code{spi_register_driver()}
+ \end{itemize}
+ \item \code{drivers/spi/} contains many adapter drivers, for
+ various platforms: Atmel, OMAP, Xilinx, Samsung, etc.
+ \begin{itemize}
+ \item Most of them are \code{platform_drivers} or
+ \code{of_platform_drivers}, \code{one pci_driver}, one
+ \code{amba_driver}, one \code{partport_driver}
+ \end{itemize}
+ \item \code{drivers/spi/spidev.c} provides an infrastructure to
+ access SPI bus from userspace
+ \item SPI device drivers are present all over the kernel tree
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{SPI Components}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-architecture-drivers/spi-components.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{SPI AT91 SoC Code: at91sam9260\_devices 1/2}
+ \begin{minted}[fontsize=\scriptsize]{c}
+static struct resource spi0_resources[] = {
+ [0] = {
+ .start = AT91SAM9260_BASE_SPI0,
+ .end = AT91SAM9260_BASE_SPI0 + SZ_16K - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ [1] = {
+ .start = AT91SAM9260_ID_SPI0,
+ .end = AT91SAM9260_ID_SPI0,
+ .flags = IORESOURCE_IRQ,
+ },
+};
+
+static struct platform_device at91sam9260_spi0_device = {
+ .name = "atmel_spi",
+ .id = 0,
+ .dev = {
+ .dma_mask = &spi_dmamask,
+ .coherent_dma_mask = DMA_BIT_MASK(32),
+ },
+ .resource = spi0_resources,
+ .num_resources = ARRAY_SIZE(spi0_resources),
+};
+ \end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{SPI AT91 SoC Code: at91sam9260\_devices 2/2}
+ \begin{itemize}
+ \item Registration of SPI devices with
+ \code{spi_register_board_info()}, registration of SPI adapter with
+ \code{platform_device_register()}
+ \begin{minted}[fontsize=\scriptsize]{c}
+void __init at91_add_device_spi(struct spi_board_info *devices,
+ int nr_devices)
+{
+ [...]
+ spi_register_board_info(devices, nr_devices);
+
+ /* Configure SPI bus(es) */
+ if (enable_spi0) {
+ at91_set_A_periph(AT91_PIN_PA0, 0); /* SPI0_MISO */
+ at91_set_A_periph(AT91_PIN_PA1, 0); /* SPI0_MOSI */
+ at91_set_A_periph(AT91_PIN_PA2, 0); /* SPI1_SPCK */
+
+ at91_clock_associate("spi0_clk", &at91sam9260_spi0_device.dev,
+ "spi_clk");
+ platform_device_register(&at91sam9260_spi0_device);
+ }
+
+ [...]
+}
+ \end{minted}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{AT91RM9200DK Board Code for SPI}
+ \begin{itemize}
+ \item One \code{spi_board_info} structure for each SPI device
+ connected to the system.
+ \begin{minted}[fontsize=\tiny]{c}
+static struct spi_board_info dk_spi_devices[] = {
+ {
+ /* DataFlash chip */
+ .modalias = "mtd_dataflash",
+ .chip_select = 0,
+ .max_speed_hz = 15 * 1000 * 1000,
+ },
+ {
+ /* UR6HCPS2-SP40 PS2-to-SPI adapter */
+ .modalias = "ur6hcps2",
+ .chip_select = 1,
+ .max_speed_hz = 250 * 1000,
+ },
+ [...]
+};
+
+static void __init dk_board_init(void)
+{
+ [...]
+ at91_add_device_spi(dk_spi_devices, ARRAY_SIZE(dk_spi_devices));
+ [..]
+}
+ \end{minted}
+ \item Taken from \code{arch/arm/mach-at91/board-dk.c}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{References}
+ \begin{itemize}
+ \item Kernel documentation
+ \begin{itemize}
+ \item \code{Documentation/driver-model/}
+ \item \code{Documentation/filesystems/sysfs.txt}
+ \end{itemize}
+ \item The kernel source code
+ \begin{itemize}
+ \item Full of examples of other drivers!
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
diff --git a/slides/kernel-driver-development-architecture-drivers/link-structures-imx.dia b/slides/kernel-driver-development-architecture-drivers/link-structures-imx.dia
new file mode 100644
index 0000000..e841fe7
--- /dev/null
+++ b/slides/kernel-driver-development-architecture-drivers/link-structures-imx.dia
@@ -0,0 +1,586 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,5.95;12.05,14.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#cc1f1a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffacac"/>
+ </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="5,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,5.95;12.05,8.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#cc1f1a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffacac"/>
+ </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="8.5,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.09375,6.62625;9.90625,7.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#imx_port#</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="8.5,7.22125"/>
+ </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="6,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,8.95;11.05,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </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="6,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,8.95;11.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8.5,9.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.02875,9.12625;9.97125,9.87375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#uart_port#</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="8.5,9.72125"/>
+ </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="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,17"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,16.95;12.05,24.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,17"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </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 - Box" version="0" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,14.95;12.05,17.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,15"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8.5,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.92625,15.6263;11.0738,16.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#platform_device#</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="8.5,16.2213"/>
+ </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:object type="Standard - Box" version="0" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,18.95;11.05,22.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,19"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,17.95;11.05,19.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8.5,18.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.44625,18.1262;9.55375,18.8737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#device#</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="8.5,18.7212"/>
+ </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="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8.5,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.67625,19;10.3238,20.5475"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#void *
+driver_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="0.80000000000000004"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="8.5,19.595"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O9" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.95,5.6382;6.05,19.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="6,19"/>
+ <dia:point val="3,19"/>
+ <dia:point val="3,6"/>
+ <dia:point val="5,6"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O9" connection="0"/>
+ <dia:connection handle="1" to="O1" connection="0"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.95,10.95;6.1118,18.3618"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="6,11"/>
+ <dia:point val="4,11"/>
+ <dia:point val="4,18"/>
+ <dia:point val="6,18"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O3" connection="3"/>
+ <dia:connection handle="1" to="O10" connection="0"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8.5,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.25875,10.6263;10.7413,11.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#struct device*#</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="8.5,11.2213"/>
+ </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:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-architecture-drivers/link-structures-netdev.dia b/slides/kernel-driver-development-architecture-drivers/link-structures-netdev.dia
new file mode 100644
index 0000000..72ec8b3
--- /dev/null
+++ b/slides/kernel-driver-development-architecture-drivers/link-structures-netdev.dia
@@ -0,0 +1,657 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,1"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,0.95;12.05,8.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,1"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </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="#cc1f1a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffacac"/>
+ </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="5,1"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,0.95;12.05,3.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,1"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#cc1f1a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffacac"/>
+ </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="8.5,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.055,1.59822;9.96369,2.40178"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#rtl8150_t#</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="8.5,2.21191"/>
+ </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="5,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,8.95;12.05,14.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="5"/>
+ </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="5,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,8.95;12.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8.5,9.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.38375,9.12625;9.61625,9.87375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#netdev#</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="8.5,9.72125"/>
+ </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="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,17"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,16.95;12.05,24.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,17"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </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 - Box" version="0" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,14.95;12.05,17.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,15"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8.5,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.92625,15.6263;11.0738,16.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#platform_device#</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="8.5,16.2213"/>
+ </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:object type="Standard - Box" version="0" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,18.95;11.05,22.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,19"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,17.95;11.05,19.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8.5,18.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.44625,18.1262;9.55375,18.8737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#device#</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="8.5,18.7212"/>
+ </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="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8.5,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.67625,19;10.3238,20.5475"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#void *
+driver_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="0.80000000000000004"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="8.5,19.595"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O9" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.95,0.638197;6.05,19.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="6,19"/>
+ <dia:point val="3,19"/>
+ <dia:point val="3,1"/>
+ <dia:point val="5,1"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O9" connection="0"/>
+ <dia:connection handle="1" to="O1" connection="0"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8.5,4.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.2675,3.905;8.5,4.6525"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#netdev#</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="8.5,4.5"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,4.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.9,4.45;5.1118,9.3618"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="5,4.5"/>
+ <dia:point val="3.95,4.5"/>
+ <dia:point val="3.95,9"/>
+ <dia:point val="5,9"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="3"/>
+ <dia:connection handle="1" to="O4" connection="0"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8.5,11.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.6975,10.8863;8.51869,11.6899"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#dev #</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="8.5,11.5"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O3" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,11.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.9,11.45;6.1118,18.3618"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="5,11.5"/>
+ <dia:point val="3.95,11.5"/>
+ <dia:point val="3.95,18"/>
+ <dia:point val="6,18"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O3" connection="3"/>
+ <dia:connection handle="1" to="O10" connection="0"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-architecture-drivers/recursive-model.dia b/slides/kernel-driver-development-architecture-drivers/recursive-model.dia
new file mode 100644
index 0000000..f67e480
--- /dev/null
+++ b/slides/kernel-driver-development-architecture-drivers/recursive-model.dia
@@ -0,0 +1,1797 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,18.95;16.05,21.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,19"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="11"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10.5,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.53,19.6262;13.47,20.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#PCI Adapter Driver#</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="10.5,20.2212"/>
+ </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="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,14.95;16.05,17.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,15"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="11"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10.5,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.14625,15.6263;11.8537,16.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#PCI Core#</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="10.5,16.2213"/>
+ </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="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10.5,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.1382,16.8882;10.8618,19.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="10.5,19"/>
+ <dia:point val="10.5,17"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="1"/>
+ <dia:connection handle="1" to="O2" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="2,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="1.95,10.95;10.05,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="2,11"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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 - Box" version="0" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.95,10.95;19.05,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="11,11"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#efb9ff"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,12"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.205,11.2263;8.795,12.7737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#ALSA Driver
+PCI Device Driver#</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="6,11.8213"/>
+ </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="O5" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="15,12"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.8837,11.2263;18.1163,12.7737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#USB Adapter Driver
+PCI Device Driver#</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="15,11.8213"/>
+ </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="O6" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10.5,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.45,12.8882;15.3618,15.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="10.5,15"/>
+ <dia:point val="10.5,14"/>
+ <dia:point val="15,14"/>
+ <dia:point val="15,13"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="1"/>
+ <dia:connection handle="1" to="O6" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10.5,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.6382,12.8882;10.55,15.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="10.5,15"/>
+ <dia:point val="10.5,14"/>
+ <dia:point val="6,14"/>
+ <dia:point val="6,13"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="1"/>
+ <dia:connection handle="1" to="O5" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.95,6.95;26.05,9.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="11,7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="15"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="18.5,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="17,7.62625;20,8.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#USB Core#</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="18.5,8.22125"/>
+ </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 - Box" version="0" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.95,2.95;18.05,5.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="11,3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#cc1f1a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffacac"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.95,2.95;26.05,5.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="19,3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22.5,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.5188,3.22625;25.4813,4.77375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#I2C Adapter Driver
+USB Device Driver#</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="22.5,3.82125"/>
+ </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="O14" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14.5,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.5587,3.22625;17.4413,4.77375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Network Driver
+USB Device Driver#</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="14.5,3.82125"/>
+ </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="O13" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="15,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14.95,8.8882;18.8618,11.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="15,11"/>
+ <dia:point val="15,10"/>
+ <dia:point val="18.5,10"/>
+ <dia:point val="18.5,9"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O6" connection="1"/>
+ <dia:connection handle="1" to="O11" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O18">
+ <dia:attribute name="obj_pos">
+ <dia:point val="18.5,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14.1382,4.8882;18.55,7.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="18.5,7"/>
+ <dia:point val="18.5,6"/>
+ <dia:point val="14.5,6"/>
+ <dia:point val="14.5,5"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O11" connection="1"/>
+ <dia:connection handle="1" to="O13" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O19">
+ <dia:attribute name="obj_pos">
+ <dia:point val="18.5,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.45,4.8882;22.8618,7.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="18.5,7"/>
+ <dia:point val="18.5,6"/>
+ <dia:point val="22.5,6"/>
+ <dia:point val="22.5,5"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O11" connection="1"/>
+ <dia:connection handle="1" to="O14" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O20">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,-1"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.95,-1.05;26.05,1.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="19,-1"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O21">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22.5,0"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.135,-0.37375;23.865,0.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#I2C Core#</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="22.5,0.22125"/>
+ </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="O20" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O22">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,-5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.95,-5.05;26.05,-2.95"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="19,-5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O23">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22.5,-4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.6938,-4.77375;25.3063,-3.22625"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Char Driver
+I2C Device Driver#</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="22.5,-4.17875"/>
+ </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="O22" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O24">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,-9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.95,-9.05;26.05,-6.95"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="19,-9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O25">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22.5,-8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="20.3125,-8.77375;24.6875,-7.22625"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Char Driver
+Infrastructure#</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="22.5,-8.17875"/>
+ </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="O24" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O26">
+ <dia:attribute name="obj_pos">
+ <dia:point val="2,-9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="1.95,-9.05;10.05,-6.95"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="2,-9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O27">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,-8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.17375,-8.37375;6.82625,-7.62625"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#ALSA#</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="6,-7.77875"/>
+ </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="O26" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O28">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11,-9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.95,-9.05;18.05,-6.95"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="11,-9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O29">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14.5,-8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.1762,-8.37375;16.8238,-7.62625"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Network Stack#</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="14.5,-7.77875"/>
+ </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="O28" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O30">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.6382,-7.1118;6.3618,11.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="6,11"/>
+ <dia:point val="6,-7"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O5" connection="1"/>
+ <dia:connection handle="1" to="O26" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O31">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14.5,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14.1382,-7.1118;14.8618,3.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="14.5,3"/>
+ <dia:point val="14.5,-7"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O13" connection="1"/>
+ <dia:connection handle="1" to="O28" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O32">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22.5,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="22.1382,0.888197;22.8618,3.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="22.5,3"/>
+ <dia:point val="22.5,1"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O14" connection="1"/>
+ <dia:connection handle="1" to="O20" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O33">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22.5,-1"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="22.1382,-3.1118;22.8618,-0.95"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="22.5,-1"/>
+ <dia:point val="22.5,-3"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O20" connection="1"/>
+ <dia:connection handle="1" to="O22" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O34">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22.5,-5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="22.1382,-7.1118;22.8618,-4.95"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="22.5,-5"/>
+ <dia:point val="22.5,-7"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O22" connection="1"/>
+ <dia:connection handle="1" to="O24" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O35">
+ <dia:attribute name="obj_pos">
+ <dia:point val="28,-9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="27.9,-9.1;41.1,-0.9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="28,-9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="13"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.20000000298023224"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O36">
+ <dia:attribute name="obj_pos">
+ <dia:point val="34.5,-5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="33.3062,-5.37375;35.6938,-4.62625"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#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="0.80000000000000004"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="34.5,-4.77875"/>
+ </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="O35" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O37">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,-4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.95,-4.05;35.05,-1.95"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="29,-4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O38">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32,-3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="29.9025,-3.37375;34.0975,-2.62625"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#PCI Controler#</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="32,-2.77875"/>
+ </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="O37" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O39">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32,-2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.95,-2.05;32.05,5.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="32,-2"/>
+ <dia:point val="32,5"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O37" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O40">
+ <dia:attribute name="obj_pos">
+ <dia:point val="34,0"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="33.95,-0.05;40.05,2.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="34,0"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O41">
+ <dia:attribute name="obj_pos">
+ <dia:point val="37,1"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="34.7938,0.62625;39.2063,1.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Sound Device#</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="37,1.22125"/>
+ </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="O40" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O42">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32,1"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.95,0.95;34.05,1.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="32,1"/>
+ <dia:point val="34,1"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O40" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O43">
+ <dia:attribute name="obj_pos">
+ <dia:point val="34,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="33.95,2.95;40.05,5.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="34,3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#efb9ff"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O44">
+ <dia:attribute name="obj_pos">
+ <dia:point val="37,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="34.7563,3.62625;39.2437,4.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#USB Controler#</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="37,4.22125"/>
+ </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="O43" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O45">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.95,3.95;34.05,4.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="32,4"/>
+ <dia:point val="34,4"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O43" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O46">
+ <dia:attribute name="obj_pos">
+ <dia:point val="37,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="36.95,4.95;37.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="37,5"/>
+ <dia:point val="37,10"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O43" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O47">
+ <dia:attribute name="obj_pos">
+ <dia:point val="39,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="38.95,7.95;43.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="39,8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#cc1f1a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffacac"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O48">
+ <dia:attribute name="obj_pos">
+ <dia:point val="41,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="39.6788,8.22625;42.3212,9.77375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#USB Net
+Device#</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="41,8.82125"/>
+ </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="O47" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O49">
+ <dia:attribute name="obj_pos">
+ <dia:point val="37,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="36.95,8.95;39.05,9.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="37,9"/>
+ <dia:point val="39,9"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O47" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O50">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.95,5.95;35.05,8.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="29,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O51">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.515,6.22625;33.485,7.77375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#I2C
+Controler#</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="32,6.82125"/>
+ </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="O50" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O52">
+ <dia:attribute name="obj_pos">
+ <dia:point val="37,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="34.95,6.95;37.05,7.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="37,7"/>
+ <dia:point val="35,7"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O50" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O53">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.95,7.95;32.05,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="32,8"/>
+ <dia:point val="32,13"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#5cacff"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O50" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O54">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.95,10.95;29.05,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="22,11"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O55">
+ <dia:attribute name="obj_pos">
+ <dia:point val="25.5,12"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="22.685,11.6263;28.315,12.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#I2C Thermometer#</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="25.5,12.2213"/>
+ </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="O54" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O56">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,12"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.95,11.95;32.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="29,12"/>
+ <dia:point val="32,12"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#5cacff"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O54" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-architecture-drivers/spi-components.dia b/slides/kernel-driver-development-architecture-drivers/spi-components.dia
new file mode 100644
index 0000000..12a1c92
--- /dev/null
+++ b/slides/kernel-driver-development-architecture-drivers/spi-components.dia
@@ -0,0 +1,1710 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="2,17"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="1.95,16.95;43.05,22.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="2,17"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="41"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="5"/>
+ </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="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="3,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.95,17.95;12.05,21.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="3,18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7.5,19.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.9025,18.3263;11.0975,20.6738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#drivers/spi/atmel_spi.c
+SPI Adapter Driver
+platform_driver#</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="7.5,18.9213"/>
+ </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="13,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.95,17.95;22.05,21.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="13,18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="17.5,19.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="13.5137,18.3263;21.4862,20.6738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#drivers/spi/amba-pl022.c
+SPI Adapter Driver
+amba_driver#</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="17.5,18.9213"/>
+ </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 - Box" version="0" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="33,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="32.95,17.95;42.05,21.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="33,18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="37.5,19.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="34.2313,18.3263;40.7688,20.6738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#drivers/spi/spi_imx.c
+SPI Adapter Driver
+platform_driver#</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="37.5,18.9213"/>
+ </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="O5" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="22.95,17.95;32.05,21.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="23,18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27.5,19.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="23.3425,18.3263;31.6575,20.6738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#drivers/spi/mpc52xx_spi.c
+SPI Adapter Driver
+of_platform_driver#</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="27.5,18.9213"/>
+ </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:object type="Standard - Text" version="1" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="43,22"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="36.565,21.2525;43,22"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#SPI Adapter Drivers #</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="43,21.8475"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="7"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="2,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="1.95,12.95;43.05,15.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="2,13"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="41"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22.5,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.9812,13.2263;25.0187,14.7737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#SPI Core
+drivers/spi/spi.c#</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="22.5,13.8213"/>
+ </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 - ZigZagLine" version="1" id="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7.5,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.45,14.8882;11.3618,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="7.5,18"/>
+ <dia:point val="7.5,16.5"/>
+ <dia:point val="11,16.5"/>
+ <dia:point val="11,15"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O1" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="17.5,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="17.45,14.8882;21.3618,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="17.5,18"/>
+ <dia:point val="17.5,16.5"/>
+ <dia:point val="21,16.5"/>
+ <dia:point val="21,15"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O3" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27.5,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="23.6382,14.8882;27.55,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="27.5,18"/>
+ <dia:point val="27.5,16.5"/>
+ <dia:point val="24,16.5"/>
+ <dia:point val="24,15"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O7" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="37.5,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="33.6382,14.8882;37.55,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="37.5,18"/>
+ <dia:point val="37.5,16.5"/>
+ <dia:point val="34,16.5"/>
+ <dia:point val="34,15"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O5" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="2,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="1.95,4.95;43.05,11.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="2,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="41"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="6"/>
+ </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="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,5.95;10.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#cc1f1a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffacac"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O18">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.95,5.95;18.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="11,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#cc1f1a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffacac"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O19">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.95,5.95;25.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="19,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#cc1f1a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffacac"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O20">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="25.95,5.95;32.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="26,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#cc1f1a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffacac"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O21">
+ <dia:attribute name="obj_pos">
+ <dia:point val="33,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="32.95,5.95;38.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="33,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#cc1f1a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffacac"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O22">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7.5,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.49,6.42625;9.51,9.57375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#rtc-ds1305.c
+drivers/rtc
+RTC Driver
+spi_driver#</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="7.5,7.02125"/>
+ </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="O17" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O23">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14.5,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.3163,6.42625;17.6837,9.57375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#m25p80.c
+drivers/mtd/devices
+MTD Driver
+spi_driver#</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="14.5,7.02125"/>
+ </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="O18" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O24">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="20.0912,6.42625;23.9087,9.57375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#mc33880.c
+drivers/gpio
+GPIO Driver
+spi_driver#</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="22,7.02125"/>
+ </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="O19" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O25">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.5763,6.42625;31.4238,9.57375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#mcp251x.c
+drivers/net/can
+CAN Driver
+spi_driver#</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="29,7.02125"/>
+ </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="O20" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O26">
+ <dia:attribute name="obj_pos">
+ <dia:point val="35.5,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="33.75,6.42625;37.25,9.57375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#spidev.c
+drivers/spi
+char driver
+spi_driver#</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.5,7.02125"/>
+ </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="O21" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O27">
+ <dia:attribute name="obj_pos">
+ <dia:point val="43,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="36.915,10.2525;43,11"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#SPI Device Drivers #</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="43,10.8475"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O16" connection="7"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O28">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22.5,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.6382,9.8882;22.55,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="22.5,13"/>
+ <dia:point val="22.5,11.5"/>
+ <dia:point val="22,11.5"/>
+ <dia:point val="22,10"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O10" connection="1"/>
+ <dia:connection handle="1" to="O19" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O29">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="25.95,9.93845;29.3618,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="26,13"/>
+ <dia:point val="26,11.5251"/>
+ <dia:point val="29,11.5251"/>
+ <dia:point val="29,10.0503"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O20" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O30">
+ <dia:attribute name="obj_pos">
+ <dia:point val="33,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="32.95,9.8882;35.8618,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="33,13"/>
+ <dia:point val="33,11.5"/>
+ <dia:point val="35.5,11.5"/>
+ <dia:point val="35.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O21" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O31">
+ <dia:attribute name="obj_pos">
+ <dia:point val="18,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14.1382,9.8882;18.05,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="18,13"/>
+ <dia:point val="18,11.5"/>
+ <dia:point val="14.5,11.5"/>
+ <dia:point val="14.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O18" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O32">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.1382,9.8882;11.05,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="11,13"/>
+ <dia:point val="11,11.5"/>
+ <dia:point val="7.5,11.5"/>
+ <dia:point val="7.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O17" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O33">
+ <dia:attribute name="obj_pos">
+ <dia:point val="2,-1"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="1.95,-1.05;43.05,3.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="2,-1"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="41"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </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="O34">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,0"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,-0.05;10.05,2.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,0"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O35">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7.5,1"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.73,0.22625;9.27,1.77375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#RTC
+Framework#</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="7.5,0.82125"/>
+ </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="O34" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O36">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11,0"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.95,-0.05;18.05,2.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="11,0"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O37">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14.5,1"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.9112,0.62625;17.0887,1.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#MTD Framework#</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="14.5,1.22125"/>
+ </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="O36" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O38">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,0"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.95,-0.05;25.05,2.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="19,0"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O39">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22,1"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.3412,0.62625;24.6587,1.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#GPIO Framework#</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="22,1.22125"/>
+ </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="O38" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O40">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,0"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="25.95,-0.05;32.05,2.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="26,0"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O41">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,1"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.4462,0.62625;31.5538,1.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#CAN Framework#</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="29,1.22125"/>
+ </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="O40" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O42">
+ <dia:attribute name="obj_pos">
+ <dia:point val="33,0"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="32.95,-0.05;38.05,2.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="33,0"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O43">
+ <dia:attribute name="obj_pos">
+ <dia:point val="35.5,1"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="33.66,0.22625;37.34,1.77375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Char Driver
+Framework#</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.5,0.82125"/>
+ </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="O42" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O44">
+ <dia:attribute name="obj_pos">
+ <dia:point val="43,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="36.71,2.2525;43,3"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Kernel Frameworks #</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="43,2.8475"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O33" connection="7"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O45">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7.5,5.95508"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.1382,1.8882;7.8618,6.00508"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="7.5,5.95508"/>
+ <dia:point val="7.5,2"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O17" connection="8"/>
+ <dia:connection handle="1" to="O34" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O46">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14.5,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14.1382,1.8882;14.8618,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="14.5,6"/>
+ <dia:point val="14.5,2"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O18" connection="1"/>
+ <dia:connection handle="1" to="O36" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O47">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.6382,1.8882;22.3618,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="22,6"/>
+ <dia:point val="22,2"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O19" connection="1"/>
+ <dia:connection handle="1" to="O38" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O48">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.6382,1.8882;29.3618,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="29,6"/>
+ <dia:point val="29,2"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O20" connection="1"/>
+ <dia:connection handle="1" to="O40" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O49">
+ <dia:attribute name="obj_pos">
+ <dia:point val="35.5,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="35.1382,1.8882;35.8618,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="35.5,6"/>
+ <dia:point val="35.5,2"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O21" connection="1"/>
+ <dia:connection handle="1" to="O42" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-architecture-drivers/usb-bus.dia b/slides/kernel-driver-development-architecture-drivers/usb-bus.dia
new file mode 100644
index 0000000..c25d6d0
--- /dev/null
+++ b/slides/kernel-driver-development-architecture-drivers/usb-bus.dia
@@ -0,0 +1,1595 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="3,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.95,4.95;34.05,7.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="3,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="31"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#cc1f1a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffacac"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="18.5,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="13.2875,5.22625;23.7125,6.77375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#USB Core
+Registers the bus_type structure#</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="18.5,5.82125"/>
+ </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="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="3,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.95,8.95;8.05,11.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="3,9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.47,9.22625;7.53,10.7737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#USB Adapter
+driver A#</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="5.5,9.82125"/>
+ </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="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.95,8.95;14.05,11.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="9,9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.47,9.22625;13.53,10.7737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#USB Adapter
+driver B#</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="11.5,9.82125"/>
+ </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="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="17,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="16.95,8.95;22.05,11.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="17,9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#efb9ff"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="17.645,9.19822;21.3737,10.8018"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#USB Device
+driver 1#</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="19.5,9.81191"/>
+ </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="O6" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="22.95,8.95;28.05,11.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="23,9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="25.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="23.645,9.19822;27.3737,10.8018"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#USB Device
+driver 2#</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="25.5,9.81191"/>
+ </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="29,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.95,8.95;34.05,11.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="29,9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="29.645,9.22625;33.355,10.7737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#USB Device
+driver 3#</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="31.5,9.82125"/>
+ </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 - Box" version="0" id="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.95,13.95;17.05,22.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="10,14"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="8"/>
+ </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="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13.5,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.3063,17.6262;14.6938,18.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#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="0.80000000000000004"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="13.5,18.2212"/>
+ </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="O12" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.95,14.95;16.05,17.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="13,15"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.95,18.95;16.05,21.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="13,19"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14.5,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="13.6387,15.6263;15.3613,16.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#USB1#</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="14.5,16.2213"/>
+ </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="O14" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14.5,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="13.6387,19.6262;15.3613,20.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#USB2#</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="14.5,20.2212"/>
+ </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="O15" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O18">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11.5,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.45,10.95;13.1118,16.3618"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="11.5,11"/>
+ <dia:point val="11.5,16"/>
+ <dia:point val="13,16"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O4" connection="6"/>
+ <dia:connection handle="1" to="O14" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O19">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5.5,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.45,10.95;13.1118,20.3618"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="5.5,11"/>
+ <dia:point val="5.5,20"/>
+ <dia:point val="13,20"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="6"/>
+ <dia:connection handle="1" to="O15" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O20">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11.5,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.1382,6.95;13.3618,9.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="11.5,9"/>
+ <dia:point val="11.5,8"/>
+ <dia:point val="13,8"/>
+ <dia:point val="13,7"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O4" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O21">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5.5,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.1382,6.95;7.3618,9.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="5.5,9"/>
+ <dia:point val="5.5,8"/>
+ <dia:point val="7,8"/>
+ <dia:point val="7,7"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O22">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.6382,6.95;31.3618,9.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="31,9"/>
+ <dia:point val="31,8"/>
+ <dia:point val="29,8"/>
+ <dia:point val="29,7"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O23">
+ <dia:attribute name="obj_pos">
+ <dia:point val="25.5,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="23.6382,6.95;25.8618,9.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="25.5,9"/>
+ <dia:point val="25.5,8"/>
+ <dia:point val="24,8"/>
+ <dia:point val="24,7"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O8" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O24">
+ <dia:attribute name="obj_pos">
+ <dia:point val="18,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="17.6382,6.95;19.8618,9.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="18,7"/>
+ <dia:point val="18,8"/>
+ <dia:point val="19.5,8"/>
+ <dia:point val="19.5,9"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O6" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O25">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.95,15.95;35.05,16.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="16,16"/>
+ <dia:point val="35,16"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#5cacff"/>
+ </dia:attribute>
+ <dia:attribute name="line_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O14" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O26">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.95,19.95;35.05,20.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="16,20"/>
+ <dia:point val="35,20"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#6a8954"/>
+ </dia:attribute>
+ <dia:attribute name="line_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O15" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O27">
+ <dia:attribute name="obj_pos">
+ <dia:point val="18,17"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="17.95,16.95;22.05,19.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="18,17"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#efb9ff"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O28">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.1288,17.6262;20.8712,18.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#DEV3#</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="20,18.2212"/>
+ </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="O27" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O29">
+ <dia:attribute name="obj_pos">
+ <dia:point val="30,17"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="29.95,16.95;34.05,19.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="30,17"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O30">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.1288,17.6262;32.8713,18.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#DEV5#</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="32,18.2212"/>
+ </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="O29" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O31">
+ <dia:attribute name="obj_pos">
+ <dia:point val="24,17"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="23.95,16.95;28.05,19.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="24,17"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O32">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="25.1288,17.6262;26.8712,18.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#DEV4#</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="26,18.2212"/>
+ </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="O31" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O33">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.95,18.95;20.05,20.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="20,19"/>
+ <dia:point val="20,20"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#6a8954"/>
+ </dia:attribute>
+ <dia:attribute name="line_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O34">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="25.95,18.95;26.05,20.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="26,19"/>
+ <dia:point val="26,20"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#6a8954"/>
+ </dia:attribute>
+ <dia:attribute name="line_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O31" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O35">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.95,18.95;32.05,20.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="32,19"/>
+ <dia:point val="32,20"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#6a8954"/>
+ </dia:attribute>
+ <dia:attribute name="line_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O29" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O36">
+ <dia:attribute name="obj_pos">
+ <dia:point val="21,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="20.95,12.95;25.05,15.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="21,13"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#efb9ff"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O37">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="22.1288,13.6263;23.8712,14.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#DEV1#</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="23,14.2213"/>
+ </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="O36" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O38">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.95,12.95;31.05,15.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="27,13"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O39">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.1288,13.6263;29.8712,14.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#DEV2#</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="29,14.2213"/>
+ </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="O38" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O40">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="22.95,14.95;23.05,16.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="23,15"/>
+ <dia:point val="23,16"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#5cacff"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O36" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O41">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.95,14.95;29.05,16.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="29,15"/>
+ <dia:point val="29,16"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#5cacff"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O38" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O42">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19.5,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.45,10.95;23.3618,13.0615"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="19.5,11"/>
+ <dia:point val="19.5,11.9749"/>
+ <dia:point val="23,11.9749"/>
+ <dia:point val="23,12.9497"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O6" connection="6"/>
+ <dia:connection handle="1" to="O36" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O43">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19.5,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.45,10.95;20.3618,17.1118"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="19.5,11"/>
+ <dia:point val="19.5,14"/>
+ <dia:point val="20,14"/>
+ <dia:point val="20,17"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O6" connection="6"/>
+ <dia:connection handle="1" to="O27" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O44">
+ <dia:attribute name="obj_pos">
+ <dia:point val="25.5,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="25.45,10.95;26.3618,17.0615"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="25.5,11"/>
+ <dia:point val="25.5,13.9749"/>
+ <dia:point val="26,13.9749"/>
+ <dia:point val="26,16.9497"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O8" connection="6"/>
+ <dia:connection handle="1" to="O31" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O45">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31.5,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.6382,10.95;31.55,13.1118"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="31.5,11"/>
+ <dia:point val="31.5,12"/>
+ <dia:point val="29,12"/>
+ <dia:point val="29,13"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O10" connection="6"/>
+ <dia:connection handle="1" to="O38" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O46">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31.5,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.45,10.95;32.3618,17.0622"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="31.5,11"/>
+ <dia:point val="31.5,12"/>
+ <dia:point val="32,12"/>
+ <dia:point val="32,16.9504"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O10" connection="6"/>
+ <dia:connection handle="1" to="O29" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-architecture-drivers/usb-detection.dia b/slides/kernel-driver-development-architecture-drivers/usb-detection.dia
new file mode 100644
index 0000000..886eb90
--- /dev/null
+++ b/slides/kernel-driver-development-architecture-drivers/usb-detection.dia
@@ -0,0 +1,423 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,3.95;23.05,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.5,4.62625;15.5,5.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#USB Core#</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="14,5.22125"/>
+ </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="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,9.95;12.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.4925,10.6263;10.5075,11.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#ohci-at91#</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="9,11.2213"/>
+ </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="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.95,9.95;22.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="16,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="17.84,10.6263;20.16,11.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#rtl8150#</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="19,11.2213"/>
+ </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 - Line" version="0" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.6382,5.8882;9.3618,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="9,10"/>
+ <dia:point val="9,6"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.6382,5.8882;19.3618,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="19,10"/>
+ <dia:point val="19,6"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O4" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.59,6.42625;8,9.57375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Step 1: a new
+USB device is
+detected with
+ID X:Y#</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="8,7.02125"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </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="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="24,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="24,2.82625;32.35,5.17375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Step 2: USB core looks
+up the registered IDs, and
+finds the matching driver#</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="24,3.42125"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </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="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="21,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21,6.42625;30.91,9.57375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Step 3: The USB core calls
+the probe method of the
+usb_driver structure registered
+by the rtl8150 driver#</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="21,7.02125"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </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/kernel-driver-development-architecture-drivers/usb-registering.dia b/slides/kernel-driver-development-architecture-drivers/usb-registering.dia
new file mode 100644
index 0000000..6d67c84
--- /dev/null
+++ b/slides/kernel-driver-development-architecture-drivers/usb-registering.dia
@@ -0,0 +1,382 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,3.95;23.05,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.5,4.62625;15.5,5.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#USB Core#</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="14,5.22125"/>
+ </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="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,9.95;12.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.4925,10.6263;10.5075,11.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#ohci-at91#</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="9,11.2213"/>
+ </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="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.95,9.95;22.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="16,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="17.84,10.6263;20.16,11.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#rtl8150#</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="19,11.2213"/>
+ </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 - Line" version="0" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.6382,5.8882;9.3618,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="9,10"/>
+ <dia:point val="9,6"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.6382,5.8882;19.3618,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="19,10"/>
+ <dia:point val="19,6"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O4" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="20,7.62625;24.4325,8.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#usb_register()#</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="20,8.22125"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </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="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.3425,7.62625;8,8.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#usb_add_hcd()#</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="8,8.22125"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </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/kernel-driver-development-character-drivers/copy-to-from-user.dia b/slides/kernel-driver-development-character-drivers/copy-to-from-user.dia
new file mode 100644
index 0000000..ddd2e1f
--- /dev/null
+++ b/slides/kernel-driver-development-character-drivers/copy-to-from-user.dia
@@ -0,0 +1,687 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:group>
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.95,7.95;20.05,26.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="12,8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="18"/>
+ </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="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.95,1.95;20.05,8.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="12,2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.95,7.95;22.05,8.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="10,8"/>
+ <dia:point val="22,8"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#cc1f1a"/>
+ </dia:attribute>
+ </dia:object>
+ </dia:group>
+ <dia:object type="Standard - Box" version="0" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.95,13.95;20.05,15.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="12,14"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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 - Box" version="0" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.95,3.95;20.05,5.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="12,4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#efb9ff"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,14.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.95,4.1382;12.1118,14.55"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="12,14.5"/>
+ <dia:point val="9,14.5"/>
+ <dia:point val="9,4.5"/>
+ <dia:point val="12,4.5"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O3" connection="3"/>
+ <dia:connection handle="1" to="O4" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,4.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.8882,4.45;23.05,14.8618"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="20,4.5"/>
+ <dia:point val="23,4.5"/>
+ <dia:point val="23,14.5"/>
+ <dia:point val="20,14.5"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O4" connection="4"/>
+ <dia:connection handle="1" to="O3" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="25,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.9,1.93292;25.0671,4.57"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="25,2"/>
+ <dia:point val="20,4.5"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O4" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26,1.50625;30.4525,2.49375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#void *from#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="26,2.29375"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </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="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="27,17.5063;33.2925,18.4938"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#void __user *to#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="27,18.2938"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.9034,14.4308;26.0684,18.0684"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="26,18"/>
+ <dia:point val="20,14.5"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O3" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="24,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="24,8.4075;30.68,9.5925"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#copy_to_user#</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.2699999511241913"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="24,9.3525"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </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="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.6675,1.46922;6.02469,2.53078"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#void *to#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="6,2.28141"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.93292,1.93292;12.1,4.57"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="7,2"/>
+ <dia:point val="12,4.5"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O4" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="-0.025,8.36306;8.02962,9.63694"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#copy_from_user#</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.2699999511241913"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="8,9.33769"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </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="5,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="-2.4125,17.4692;5.02469,18.5308"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#void __user *from#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="5,18.2814"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.93162,14.4308;12.0966,18.0684"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="6,18"/>
+ <dia:point val="12,14.5"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O3" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="13.5312,1.0125;18.4688,2"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#0xFFFFFFFF#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="16,1.8"/>
+ </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="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O1" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O18">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,26"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="13.3313,26;18.6688,26.9875"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#0x00000000#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="16,26.7875"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O19">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="13.305,8;18.695,8.9875"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#0xC0000000#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="16,8.7875"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-character-drivers/kernel-driver-development-character-drivers.tex b/slides/kernel-driver-development-character-drivers/kernel-driver-development-character-drivers.tex
new file mode 100644
index 0000000..d6c512a
--- /dev/null
+++ b/slides/kernel-driver-development-character-drivers/kernel-driver-development-character-drivers.tex
@@ -0,0 +1,635 @@
+\subsection{Character drivers}
+
+\begin{frame}
+ \frametitle{Usefulness of character drivers}
+ \begin{itemize}
+ \item Except for storage device drivers, most drivers for devices
+ with input and output flows are implemented as character drivers.
+ \item So, most drivers you will face will be character drivers.
+ \item You will regret if you sleep during this part!
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Creating a Character Driver 1/2}
+ \begin{itemize}
+ \item User-space needs
+ \begin{itemize}
+ \item The name of a device file in \code{/dev} to interact with
+ the device driver through regular file operations (open, read,
+ write, close...)
+ \end{itemize}
+ \item The kernel needs
+ \begin{itemize}
+ \item To know which driver is in charge of device files with a
+ given major / minor number pair
+ \item For a given driver, to have handlers (\emph{file
+ operations}) to execute when user-space opens, reads, writes
+ or closes the device file.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+
+\begin{frame}
+ \frametitle{Creating a Character Driver 2/2}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-character-drivers/user-kernel-exchanges.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Implementing a character driver}
+ \begin{itemize}
+ \item Four major steps
+ \begin{itemize}
+ \item Implement operations corresponding to the system calls an
+ application can apply to a file: \emph{file operations}
+ \item Define a \code{file_operations} structure associating function
+ pointers to their implementation in your driver
+ \item Reserve a set of major and minors for your driver
+ \item Tell the kernel to associate the reserved major and minor to
+ your file operations
+ \end{itemize}
+ \item This is a very common design scheme in the Linux kernel
+ \begin{itemize}
+ \item A common kernel infrastructure defines a set of operations
+ to be implemented by a driver and functions to register your
+ driver
+ \item Your driver only needs to implement this set of well-defined
+ operations
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{File operations 1/3}
+ \begin{itemize}
+ \item Before registering character devices, you have to define
+ \code{file_operations} (called \emph{fops}) for the device files.
+ \item The \code{file_operations} structure is generic to all files
+ handled by the Linux kernel. It contains many operations that
+ aren't needed for character drivers.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{File operations 2/3}
+ \begin{itemize}
+ \item Here are the most important operations for a character
+ driver. All of them are optional.
+ \end{itemize}
+\begin{minted}{c}
+struct file_operations {
+ ssize_t (*read) (struct file *, char __user *,
+ size_t, loff_t *);
+ ssize_t (*write) (struct file *, const char __user *,
+ size_t, loff_t *);
+ long (*unlocked_ioctl) (struct file *, unsigned int,
+ unsigned long);
+ int (*mmap) (struct file *, struct vm_area_struct *);
+ int (*open) (struct inode *, struct file *);
+ int (*release) (struct inode *, struct file *);
+};
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{open() and release()}
+ \begin{itemize}
+ \item \mint{c}+int foo_open(struct inode *i, struct file *f)+
+ \begin{itemize}
+ \item Called when user-space opens the device file.
+ \item \code{inode} is a structure that uniquely represent a file
+ in the system (be it a regular file, a directory, a symbolic
+ link, a character or block device)
+ \item \code{file} is a structure created every time a file is
+ opened. Several file structures can point to the same
+ \code{inode} structure.
+ \begin{itemize}
+ \item Contains information like the current position, the
+ opening mode, etc.
+ \item Has a \code{void *private_data} pointer that one can
+ freely use.
+ \item A pointer to the file structure is passed to all other
+ operations
+ \end{itemize}
+ \end{itemize}
+ \item \mint{c}+int foo_release(struct inode *i, struct file *f)+
+ \begin{itemize}
+ \item Called when user-space closes the file.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{read()}
+ \begin{itemize}
+ \item \mint{c}+ssize_t foo_read(struct file *f, __user char *buf,+
+ \mint{c}+size_t sz, loff_t *off)+
+ \begin{itemize}
+ \item Called when user-space uses the \code{read()} system call on
+ the device.
+ \item Must read data from the device, write at most \code{sz}
+ bytes in the user-space buffer \code{buf}, and update the
+ current position in the file \code{off}. \code{f} is a pointer
+ to the same file structure that was passed in the \code{open()}
+ operation
+ \item Must return the number of bytes read.
+ \item On UNIX, \code{read()} operations typically block when there
+ isn't enough data to read from the device
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{write()}
+ \begin{itemize}
+ \item \mint{c}+ssize_t foo_write(struct file *f,+
+ \mint{c}+__user const char *buf, size_t sz, loff_t *off)+
+ \begin{itemize}
+ \item Called when user-space uses the \code{write()} system call
+ on the device
+ \item The opposite of \code{read}, must read at most \code{sz}
+ bytes from \code{buf}, write it to the device, update \code{off}
+ and return the number of bytes written.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Exchanging data with user-space 1/3}
+ \begin{itemize}
+ \item Kernel code isn't allowed to directly access user-space
+ memory, using \code{memcpy} or direct pointer dereferencing
+ \begin{itemize}
+ \item Doing so does not work on some architectures
+ \item If the address passed by the application was invalid, the
+ application would segfault.
+ \end{itemize}
+ \item To keep the kernel code portable and have proper error
+ handling, your driver must use special kernel functions to
+ exchange data with user-space.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Exchanging data with user-space 2/3}
+ \begin{itemize}
+ \item A single value
+ \begin{itemize}
+ \item \code{get_user(v, p);}
+ \begin{itemize}
+ \item The kernel variable \code{v} gets the value pointed by the
+ user-space pointer \code{p}
+ \end{itemize}
+ \item \code{put_user(v, p);}
+ \begin{itemize}
+ \item The value pointed by the user-space pointer \code{p} is
+ set to the contents of the kernel variable \code{v}.
+ \end{itemize}
+ \end{itemize}
+ \item A buffer
+ \begin{itemize}
+ \item \mint{c}+unsigned long copy_to_user(void __user *to,+
+ \mint{c}+const void *from, unsigned long n);+
+ \item \mint{c}+unsigned long copy_from_user(void *to,+
+ \mint{c}+const void __user *from, unsigned long n);+
+ \end{itemize}
+ \item The return value must be checked. Zero on success, non-zero on
+ failure. If non-zero, the convention is to return -\code{EFAULT}.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Exchanging data with user-space 3/3}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-character-drivers/copy-to-from-user.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Zero copy access to user memory}
+ \begin{itemize}
+ \item Having to copy data to our from an intermediate kernel buffer
+ is expensive.
+ \item \emph{Zero copy} options are possible:
+ \begin{itemize}
+ \item \code{mmap()} system call to allow user space to directly
+ access memory mapped I/O space (covered in the \code{mmap()}
+ section).
+ \item \code{get_user_pages()} to get a mapping to user pages
+ without having to copy them. See \url{http://j.mp/oPW6Fb}
+ (Kernel API doc). This API is more complex to use though.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Read Operation Example}
+\begin{minted}[fontsize=\tiny]{c}
+static ssize_t
+acme_read(struct file *file, char __user * buf, size_t count, loff_t * ppos)
+{
+ /* The acme_buf address corresponds to a device I/O memory area */
+ /* of size acme_bufsize, obtained with ioremap() */
+ int remaining_size, transfer_size;
+
+ remaining_size = acme_bufsize - (int)(*ppos);
+ /* bytes left to transfer */
+ if (remaining_size == 0) {
+ /* All read, returning 0 (End Of File) */
+ return 0;
+ }
+
+ /* Size of this transfer */
+ transfer_size = min_t(int, remaining_size, count);
+
+ if (copy_to_user
+ (buf /* to */ , acme_buf + *ppos /* from */ , transfer_size)) {
+ return -EFAULT;
+ } else { /* Increase the position in the open file */
+ *ppos += transfer_size;
+ return transfer_size;
+ }
+}
+\end{minted}
+Piece of code available at \url{http://free-electrons.com/doc/c/acme.c}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Write Operation Example}
+\begin{minted}[fontsize=\tiny]{c}
+static ssize_t
+acme_write(struct file *file, const char __user *buf, size_t count,
+ loff_t *ppos)
+{
+ int remaining_bytes;
+
+ /* Number of bytes not written yet in the device */
+ remaining_bytes = acme_bufsize - (*ppos);
+
+ if (count > remaining_bytes) {
+ /* Can't write beyond the end of the device */
+ return -EIO;
+ }
+
+ if (copy_from_user(acme_buf + *ppos /*to*/ , buf /*from*/ , count)) {
+ return -EFAULT;
+ } else {
+ /* Increase the position in the open file */
+ *ppos += count;
+ return count;
+ }
+}
+\end{minted}
+Piece of code available at \url{http://free-electrons.com/doc/c/acme.c}
+\end{frame}
+
+
+\begin{frame}[fragile]
+ \frametitle{unlocked\_ioctl()}
+ \begin{itemize}
+ \item \mint{c}+long unlocked_ioctl(struct file *f,+
+ \mint{c}+unsigned int cmd, unsigned long arg)+
+ \begin{itemize}
+ \item Associated to the \code{ioctl()} system call.
+ \item Called unlocked because it doesn't hold the Big Kernel Lock.
+ \item Allows to extend the driver capabilities beyond the limited
+ read/write API.
+ \item For example: changing the speed of a serial port, setting
+ video output format, querying a device serial number...
+ \item \code{cmd} is a number identifying the operation to perform
+ \item \code{arg} is the optional argument passed as third argument
+ of the \code{ioctl()} system call. Can be an integer, an
+ address, etc.
+ \item The semantic of \code{cmd} and \code{arg} is
+ driver-specific.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{ioctl() example: kernel side}
+\begin{minted}[fontsize=\tiny]{c}
+static long phantom_ioctl(struct file *file, unsigned int cmd,
+ unsigned long arg)
+{
+ struct phm_reg r;
+ void __user *argp = (void __user *)arg;
+
+ switch (cmd) {
+ case PHN_SET_REG:
+ if (copy_from_user(&r, argp, sizeof(r)))
+ return -EFAULT;
+ /* Do something */
+ break;
+ case PHN_GET_REG:
+ if (copy_to_user(argp, &r, sizeof(r)))
+ return -EFAULT;
+ /* Do something */
+ break;
+ default:
+ return -ENOTTY;
+ }
+
+ return 0; }
+\end{minted}
+Selected excerpt from \code{drivers/misc/phantom.c}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Ioctl() Example: Application Side}
+\begin{minted}{c}
+int main(void)
+{
+ int fd, ret;
+ struct phm_reg reg;
+
+ fd = open("/dev/phantom");
+ assert(fd > 0);
+
+ reg.field1 = 42;
+ reg.field2 = 67;
+
+ ret = ioctl(fd, PHN_SET_REG, & reg);
+ assert(ret == 0);
+
+ return 0;
+}
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{File Operations Definition: Example 3/3}
+ \begin{itemize}
+ \item Defining a \code{file_operations} structure:
+\begin{minted}{c}
+#include <linux/fs.h>
+static struct file_operations acme_fops =
+{
+ .owner = THIS_MODULE,
+ .read = acme_read,
+ .write = acme_write,
+};
+\end{minted}
+ \item You just need to supply the functions you implemented!
+ Defaults for other functions (such as open, release...) are fine
+ if you do not implement anything special.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{dev\_t data type}
+ \begin{itemize}
+ \item Kernel data type to represent a major / minor number pair
+ \begin{itemize}
+ \item Also called a \emph{device number}.
+ \item Defined in \code{linux/kdev_t.h}
+ \item Linux 2.6: 32 bit size (major: 12 bits, minor: 20 bits)
+ \item Macro to compose the device number
+ \begin{itemize}
+ \item \code{MKDEV(int major, int minor);}
+ \end{itemize}
+ \item Macro to extract the minor and major numbers:
+ \begin{itemize}
+ \item \code{MAJOR(dev_t dev);}
+ \item \code{MINOR(dev_t dev);}
+ \end{itemize}
+ \end{itemize}
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Registering device numbers 1/2}
+\begin{minted}[fontsize=\small]{c}
+#include <linux/fs.h>
+int register_chrdev_region(
+ dev_t from, /* Starting device number */
+ unsigned count, /* Number of device numbers */
+ const char *name); /* Registered name */
+\end{minted}
+Returns 0 if the allocation was successful.\\
+Example
+\begin{minted}[fontsize=\small]{c}
+static dev_t acme_dev = MKDEV(202, 128);
+
+if (register_chrdev_region(acme_dev, acme_count, "acme")) {
+ pr_err("Failed to allocate device number\n");
+...
+\end{minted}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Registering device numbers 2/2}
+ \begin{itemize}
+ \item If you don't have fixed device numbers assigned to your driver
+ \begin{itemize}
+ \item Better not to choose arbitrary ones. There could be
+ conflicts with other drivers.
+ \item The kernel API offers an \code{alloc_chrdev_region} function
+ to have the kernel allocate free ones for you. You can find the
+ allocated major number in \code{/proc/devices}.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Information on registered devices: /proc/devices}
+\begin{verbatim}
+Character devices:
+ 1 mem
+ 4 tty
+ 4 ttyS
+ 5 /dev/tty
+ 5 /dev/console
+...
+
+Block devices:
+ 1 ramdisk
+ 7 loop
+ 8 sd
+ 9 md
+ 11 sr
+179 mmc
+254 mdp
+...
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Character device registration 1/2}
+ \begin{itemize}
+ \item The kernel represents character drivers with a cdev structure
+ \item Declare this structure globally (within your module):
+\begin{minted}{c}
+#include <linux/cdev.h>
+
+static struct cdev acme_cdev;
+\end{minted}
+ \item In the init function, initialize the structure:
+\begin{minted}{c}
+cdev_init(&acme_cdev, &acme_fops);
+\end{minted}
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Character device registration 2/2}
+ \begin{itemize}
+ \item Then, now that your structure is ready, add it to the system:
+\begin{minted}[fontsize=\small]{c}
+int cdev_add(
+ struct cdev *p, /* Character device structure */
+ dev_t dev, /* Starting device major/minor */
+ unsigned count); /* Number of devices */
+\end{minted}
+ \item After this function call, the kernel knows the association
+ between the major/minor numbers and the file operations. Your device
+ is ready to be used!
+ \item Example (continued):
+\end{itemize}
+\begin{minted}[fontsize=\small]{c}
+if (cdev_add(&acme_cdev, acme_dev, acme_count)) {
+ printk (KERN_ERR "Char driver registration failed\n");
+ ...
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Character device unregistration}
+ \begin{itemize}
+ \item First delete your character device
+ \begin{itemize}
+ \item \mint{c}+void cdev_del(struct cdev *p);+
+ \end{itemize}
+ \item Then, and only then, free the device number
+ \begin{itemize}
+ \item \mint{c}+void unregister_chrdev_region(dev_t from, unsigned count);+
+ \end{itemize}
+ \item Example (continued):
+\begin{minted}{c}
+cdev_del(&acme_cdev);
+unregister_chrdev_region(acme_dev, acme_count);
+\end{minted}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Linux error codes}
+ \begin{itemize}
+ \item The kernel convention for error management is
+ \begin{itemize}
+ \item Return 0 on success
+ \item Return a negative error code on failure
+ \end{itemize}
+ \item Error codes
+ \begin{itemize}
+ \item \code{include/asm-generic/errno-base.h}
+ \item \code{include/asm-generic/errno.h}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Char driver example summary 1/4}
+\begin{minted}[fontsize=\small]{c}
+static void *acme_buf;
+static int acme_bufsize = 8192;
+
+static int acme_count = 1;
+static dev_t acme_dev = MKDEV(202, 128);
+
+static struct cdev acme_cdev;
+
+static ssize_t acme_read(...) {...}
+static ssize_t acme_write(...) {...}
+
+static const struct file_operations acme_fops = {
+ .owner = THIS_MODULE,
+ .read = acme_read,
+ .write = acme_write,
+};
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Char driver example summary 2/4}
+\begin{minted}[fontsize=\tiny]{c}
+static int __init acme_init(void)
+{
+ int err;
+ acme_buf = ioremap(ACME_PHYS, acme_bufsize);
+
+ if (!acme_buf) {
+ err = -ENOMEM;
+ goto err_exit;
+ }
+
+ if (register_chrdev_region(acme_dev, acme_count, "acme")) {
+ err = -ENODEV;
+ goto err_free_buf;
+ }
+
+ cdev_init(&acme_cdev, &acme_fops);
+
+ if (cdev_add(&acme_cdev, acme_dev, acme_count)) {
+ err = -ENODEV;
+ goto err_dev_unregister;
+ }
+
+ return 0;
+
+ err_dev_unregister:
+ unregister_chrdev_region(acme_dev, acme_count);
+ err_free_buf:
+ iounmap(acme_buf);
+ err_exit:
+ return err;
+}
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Character Driver Example Summary 3/4}
+\begin{minted}[fontsize=\small]{c}
+static void __exit acme_exit(void)
+{
+ cdev_del(&acme_cdev);
+ unregister_chrdev_region(acme_dev, acme_count);
+ iounmap(acme_buf);
+}
+
+module_init(acme_init);
+module_exit(acme_exit);
+\end{minted}
+\end{frame}
+
+\begin{frame}
+\frametitle{Character Driver Example Summary 4/4}
+ \begin{itemize}
+ \item Kernel: Character Device Writer
+ \begin{itemize}
+ \item Define the file operations callbacks for the device file:
+ read, write, ioctl, ...
+ \item In the module init function, reserve major and minor numbers
+ with \code{register_chrdev_region()}, init a \code{cdev}
+ structure with your file operations and add it to the system
+ with \code{cdev_add()}.
+ \end{itemize}
+ \item User-space: system administration
+ \begin{itemize}
+ \item Load the character driver module
+ \item Create device files with matching major and minor numbers if
+ needed. The device file is ready to use!
+ \end{itemize}
+ \item User-space: system user
+ \begin{itemize}
+ \item Open the device file, read, write, or send ioctl's to it.
+ \end{itemize}
+ \item Kernel
+ \begin{itemize}
+ \item Executes the corresponding file operations
+ \end{itemize}
+ \end{itemize}
+\end{frame}
diff --git a/slides/kernel-driver-development-character-drivers/user-kernel-exchanges.dia b/slides/kernel-driver-development-character-drivers/user-kernel-exchanges.dia
new file mode 100644
index 0000000..52d1d64
--- /dev/null
+++ b/slides/kernel-driver-development-character-drivers/user-kernel-exchanges.dia
@@ -0,0 +1,903 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.95,4.95;27.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="12,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="15"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="5"/>
+ </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 - Box" version="0" id="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.95,6.95;19.05,9.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="13,7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.95,6.95;26.05,9.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="20,7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,12"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.95,11.95;27.05,14.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="12,12"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="15"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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 - Line" version="0" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.95,14.95;29.05,15.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="10,15"/>
+ <dia:point val="29,15"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#cc1f1a"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.95,15.95;27.05,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="12,16"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="15"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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 - Box" version="0" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.95,19.95;27.05,25.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="12,20"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="15"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="5"/>
+ </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 - Box" version="0" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13,21"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.95,20.95;19.05,23.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="13,21"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#efb9ff"/>
+ </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="20,21"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.95,20.95;26.05,23.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="20,21"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#efb9ff"/>
+ </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="16,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="13.5175,7.50625;18.4825,8.49375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Read Buffer#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="16,8.29375"/>
+ </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 - Text" version="1" id="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="20.4838,7.50625;25.5162,8.49375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Write String#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="23,8.29375"/>
+ </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="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19.5,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="17.295,5;21.705,5.9875"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Userspace#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="19.5,5.7875"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19.5,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="17.77,12.5062;21.23,13.4938"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#/dev/foo#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="19.5,13.2937"/>
+ </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 - Line" version="0" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.8502,8.93675;23.0632,12.1061"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="23,9"/>
+ <dia:point val="22,12"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.9368,8.93675;17.1498,12.1061"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="16,9"/>
+ <dia:point val="17,12"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O1" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="17,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="16.6382,13.95;17.3618,16.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="17,14"/>
+ <dia:point val="17,16"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.6382,13.95;22.3618,16.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="22,14"/>
+ <dia:point val="22,16"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="17,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.8502,17.9368;17.0632,21.1061"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="17,18"/>
+ <dia:point val="16,21"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O7" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O18">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.9368,17.9368;23.1498,21.1061"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="22,18"/>
+ <dia:point val="23,21"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O8" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O19">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19.5,17"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="16.7288,16.5063;22.2713,17.4938"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Major / Minor#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="19.5,17.2938"/>
+ </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="O5" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O20">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,22"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="13.1337,21.5063;18.8663,22.4938"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Read Handler#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="16,22.2938"/>
+ </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:object type="Standard - Text" version="1" id="O21">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,22"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="20.08,21.5063;25.92,22.4938"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Write Handler#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="23,22.2938"/>
+ </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 - Text" version="1" id="O22">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19.5,25"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.1713,24.0125;20.8287,25"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Kernel#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="19.5,24.8"/>
+ </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="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O6" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O23">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="25.8882,7.95;30.05,22.3618"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="26,8"/>
+ <dia:point val="30,8"/>
+ <dia:point val="30,22"/>
+ <dia:point val="26,22"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#6a8954"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="4"/>
+ <dia:connection handle="1" to="O8" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O24">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13,22"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.95,7.6382;13.1118,22.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="13,22"/>
+ <dia:point val="9,22"/>
+ <dia:point val="9,8"/>
+ <dia:point val="13,8"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#6a8954"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O7" connection="3"/>
+ <dia:connection handle="1" to="O1" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O25">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31,14.5062;37.68,15.4938"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#copy_from_user#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="31,15.2937"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </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="O26">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.44,14.5062;8,15.4938"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#copy_to_user#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="8,15.2937"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </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/kernel-driver-development-concurrency/concurrency-protection.dia b/slides/kernel-driver-development-concurrency/concurrency-protection.dia
new file mode 100644
index 0000000..3629935
--- /dev/null
+++ b/slides/kernel-driver-development-concurrency/concurrency-protection.dia
@@ -0,0 +1,766 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,2.95;11.05,5.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8.5,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.98125,3.62625;10.0188,4.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Process 1#</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="8.5,4.22125"/>
+ </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="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="21,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="20.95,2.95;26.05,5.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="21,3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23.5,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.9812,3.62625;25.0188,4.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Process 2#</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="23.5,4.22125"/>
+ </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="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.95,7.95;19.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="13,8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="13.9612,8.62625;18.0388,9.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Acquire Lock#</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="16,9.22125"/>
+ </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 - ZigZagLine" version="1" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.95,3.95;13.1118,8.3618"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="11,4"/>
+ <dia:point val="12,4"/>
+ <dia:point val="12,8"/>
+ <dia:point val="13,8"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="4"/>
+ <dia:connection handle="1" to="O4" connection="0"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="21,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.8882,3.95;21.05,8.3618"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="21,4"/>
+ <dia:point val="20,4"/>
+ <dia:point val="20,8"/>
+ <dia:point val="19,8"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="3"/>
+ <dia:connection handle="1" to="O4" connection="2"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="17,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="16.95,12.95;25.05,15.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="17,13"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.95,12.95;15.05,15.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="7,13"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.7525,13.6263;14.2475,14.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Critical code section#</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="11,14.2213"/>
+ </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="O9" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.6382,9.95;16.05,13.1118"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="16,10"/>
+ <dia:point val="16,11.5"/>
+ <dia:point val="11,11.5"/>
+ <dia:point val="11,13"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O4" connection="6"/>
+ <dia:connection handle="1" to="O9" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.95,9.95;21.3618,13.1118"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="16,10"/>
+ <dia:point val="16,11.5"/>
+ <dia:point val="21,11.5"/>
+ <dia:point val="21,13"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O4" connection="6"/>
+ <dia:connection handle="1" to="O8" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="25,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.8882,8.6382;26.1,14.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="25,14"/>
+ <dia:point val="26.05,14"/>
+ <dia:point val="26.05,9"/>
+ <dia:point val="19,9"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O8" connection="4"/>
+ <dia:connection handle="1" to="O4" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="21,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.1075,13.6263;23.8925,14.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Wait Lock Release#</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="21,14.2213"/>
+ </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 - Text" version="1" id="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="20,10.3863;22.1237,11.1899"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Failure#</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="20,11"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.4225,10.405;12,11.1525"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Success#</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="12,11"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="27,10.6263;29.96,11.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Try Again#</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="27,11.2213"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O18">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.95,17.95;20.05,20.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="12,18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O19">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="13.915,18.6262;18.085,19.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Release Lock#</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="16,19.2212"/>
+ </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="O18" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O20">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.95,14.95;16.3618,18.0615"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="11,15"/>
+ <dia:point val="11,16.4749"/>
+ <dia:point val="16,16.4749"/>
+ <dia:point val="16,17.9497"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O9" connection="6"/>
+ <dia:connection handle="1" to="O18" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-concurrency/deadlock-same-lock.dia b/slides/kernel-driver-development-concurrency/deadlock-same-lock.dia
new file mode 100644
index 0000000..f5d05da
--- /dev/null
+++ b/slides/kernel-driver-development-concurrency/deadlock-same-lock.dia
@@ -0,0 +1,345 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.95,9.95;16.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="10,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.2925,10.6263;14.7075,11.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Get Lock 1#</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="13,11.2213"/>
+ </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="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.6382,6.95;13.3618,10.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="13,7"/>
+ <dia:point val="13,10"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O0" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.95,9.95;26.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="20,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="20.2138,10.6263;25.7863,11.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Call to Function 2#</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="23,11.2213"/>
+ </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 - Box" version="0" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.95,14.95;26.05,17.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="20,15"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="20.615,15.6263;25.385,16.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Wait for Lock 1#</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="23,16.2213"/>
+ </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="O5" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.95,10.6382;20.1118,11.3618"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="16,11"/>
+ <dia:point val="20,11"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="4"/>
+ <dia:connection handle="1" to="O3" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,12"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="22.6382,11.95;23.3618,15.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="23,12"/>
+ <dia:point val="23,15"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O3" connection="6"/>
+ <dia:connection handle="1" to="O5" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-concurrency/deadlock-two-locks.dia b/slides/kernel-driver-development-concurrency/deadlock-two-locks.dia
new file mode 100644
index 0000000..aafcc28
--- /dev/null
+++ b/slides/kernel-driver-development-concurrency/deadlock-two-locks.dia
@@ -0,0 +1,437 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.95,5.95;14.05,8.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="8,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.2925,6.62625;12.7075,7.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Get Lock 1#</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="11,7.22125"/>
+ </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="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.95,10.95;14.05,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="8,11"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11,12"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.2925,11.6263;12.7075,12.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Get Lock 2#</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="11,12.2213"/>
+ </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="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.95,5.95;26.05,8.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="20,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.2925,6.62625;24.7075,7.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Get Lock 2#</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="23,7.22125"/>
+ </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="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.95,10.95;26.05,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="20,11"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,12"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.2925,11.6263;24.7075,12.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Get Lock 1#</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="23,12.2213"/>
+ </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="O6" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="22.6382,2.95;23.3618,6.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="23,3"/>
+ <dia:point val="23,6"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O4" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="22.6382,7.95;23.3618,11.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="23,8"/>
+ <dia:point val="23,11"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O4" connection="6"/>
+ <dia:connection handle="1" to="O6" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.6382,7.95;11.3618,11.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="11,8"/>
+ <dia:point val="11,11"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="6"/>
+ <dia:connection handle="1" to="O2" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.6382,2.95;11.3618,6.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="11,3"/>
+ <dia:point val="11,6"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O0" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-concurrency/kernel-driver-development-concurrency.tex b/slides/kernel-driver-development-concurrency/kernel-driver-development-concurrency.tex
new file mode 100644
index 0000000..6803c25
--- /dev/null
+++ b/slides/kernel-driver-development-concurrency/kernel-driver-development-concurrency.tex
@@ -0,0 +1,321 @@
+\subsection{Concurrent Access to Resources}
+
+\begin{frame}
+ \frametitle{Sources of concurrency issues}
+ \begin{itemize}
+ \item In terms of concurrency, the kernel has the same constraint
+ has a multi- threaded program: all its state is global and visible
+ in all executions contexts
+ \item Concurrency arises because of
+ \begin{itemize}
+ \item \emph{Interrupts}, which interrupts the current thread to
+ execute an interrupt handler. They may be using shared
+ resources.
+ \item \emph{Kernel preemption}, if enabled, causes the kernel to
+ switch from the execution of one system call to another. They
+ may be using shared resources.
+ \item \emph{Multiprocessing}, in which case code is really
+ executed in parallel on different processors, and they may be
+ using shared resources as well.
+ \end{itemize}
+ \item The solution is to keep as much local state as possible and
+ for the shared resources, use locking.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Concurrency protection with locks}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-concurrency/concurrency-protection.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Linux mutexes}
+ \begin{itemize}
+ \item The main locking primitive since Linux 2.6.16.
+ \item The kernel used to have semaphores only, and mutexes have been
+ introduced as a simplification of binary semaphores.
+ \item The process requesting the lock blocks when the lock is
+ already held. Mutexes can therefore only be used in contexts
+ where sleeping is allowed.
+ \item Mutex definition:
+ \begin{itemize}
+ \item \mint{c}+#include <linux/mutex.h>+
+ \end{itemize}
+ \item Initializing a mutex statically:
+ \begin{itemize}
+ \item \mint{c}+DEFINE_MUTEX(name);+
+ \end{itemize}
+ \item Or initializing a mutex dynamically:
+ \begin{itemize}
+ \item \mint{c}+void mutex_init(struct mutex *lock);+
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Locking and Unlocking Mutexes 1/2}
+ \begin{itemize}
+ \item \mint{c}+void mutex_lock(struct mutex *lock);+
+ \begin{itemize}
+ \item Tries to lock the mutex, sleeps otherwise.
+ \item Caution: can't be interrupted, resulting in processes you
+ cannot kill!
+ \end{itemize}
+ \item \mint{c}+int mutex_lock_killable(struct mutex *lock);+
+ \begin{itemize}
+ \item Same, but can be interrupted by a fatal (SIGKILL) signal. If
+ interrupted, returns a non zero value and doesn't hold the
+ lock. Test the return value!!!
+ \end{itemize}
+ \item \mint{c}+int mutex_lock_interruptible(struct mutex *lock);+
+ \begin{itemize}
+ \item Same, but can be interrupted by any signal.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Locking and Unlocking Mutexes 2/2}
+ \begin{itemize}
+ \item \mint{c}+int mutex_trylock(struct mutex *lock);+
+ \begin{itemize}
+ \item Never waits. Returns a non zero value if the mutex is not
+ available.
+ \end{itemize}
+ \item \mint{c}+int mutex_is_locked(struct mutex *lock);+
+ \begin{itemize}
+ \item Just tells whether the mutex is locked or not.
+ \end{itemize}
+ \item \mint{c}+void mutex_unlock(struct mutex *lock);+
+ \begin{itemize}
+ \item Releases the lock. Do it as soon as you leave the critical
+ section.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Spinlocks}
+ \begin{itemize}
+ \item Locks to be used for code that is not allowed to sleep
+ (interrupt handlers), or that doesn't want to sleep (critical
+ sections). Be very careful not to call functions which can sleep!
+ \item Originally intended for multiprocessor systems
+ \item Spinlocks never sleep and keep spinning in a loop until the
+ lock is available.
+ \item Spinlocks cause kernel preemption to be disabled on the CPU
+ executing them.
+ \item The critical section protected by a spinlock is not allowed to
+ sleep.
+ \end{itemize}
+ \begin{center}
+ \includegraphics[width=0.4\textwidth]{slides/kernel-driver-development-concurrency/spinlock.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Initializing Spinlocks}
+ \begin{itemize}
+ \item Statically
+ \begin{itemize}
+ \item \mint{c}+DEFINE_SPINLOCK(my_lock);+
+ \end{itemize}
+ \item Dynamically
+ \begin{itemize}
+ \item \mint{c}+void spin_lock_init(spinlock_t *lock);+
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Using Spinlocks 1/2}
+ \begin{itemize}
+ \item Several variants, depending on where the spinlock is called:
+ \begin{itemize}
+ \item \mint{c}+void spin_lock(spinlock_t *lock);+
+ \item \mint{c}+void spin_unlock(spinlock_t *lock);+
+ \begin{itemize}
+ \item Doesn't disable interrupts. Used for locking in process
+ context (critical sections in which you do not want to sleep).
+ \end{itemize}
+ \item \mint{c}+void spin_lock_irqsave(spinlock_t *lock,+
+ \mint{c}+unsigned long flags);+
+ \item \mint{c}+void spin_unlock_irqrestore(spinlock_t *lock,+
+ \mint{c}+unsigned long flags);+
+ \begin{itemize}
+ \item Disables / restores IRQs on the local CPU.
+ \item Typically used when the lock can be accessed in both process
+ and interrupt context, to prevent preemption by interrupts.
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+\begin{frame}[fragile]
+ \frametitle{Using Spinlocks 2/2}
+ \begin{itemize}
+ \item \mint{c}+void spin_lock_bh(spinlock_t *lock);+
+ \item \mint{c}+void spin_unlock_bh(spinlock_t *lock);+
+ \begin{itemize}
+ \item Disables software interrupts, but not hardware ones.
+ \item Useful to protect shared data accessed in process context
+ and in a soft interrupt (\emph{bottom half}).
+ \item No need to disable hardware interrupts in this case.
+ \end{itemize}
+ \item Note that reader / writer spinlocks also exist.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Spinlock example}
+ \begin{itemize}
+ \item Spinlock structure embedded into \code{uart_port}
+ \begin{minted}{c}
+struct uart_port {
+ spinlock_t lock;
+ /* Other fields */
+};
+ \end{minted}
+ \item Spinlock taken/released with protection against interrupts
+ \begin{minted}{c}
+static unsigned int ulite_tx_empty
+ (struct uart_port *port) {
+ unsigned long flags;
+
+ spin_lock_irqsave(&port->lock, flags);
+ /* Do something */
+ spin_unlock_irqrestore(&port->lock, flags);
+}
+ \end{minted}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Deadlock Situations}
+ \begin{itemize}
+ \item They can lock up your system. Make sure they never happen!
+ \item Don't call a function that can try to get access to the same
+ lock
+ \begin{center}
+ \includegraphics[height=0.3\textheight]{slides/kernel-driver-development-concurrency/deadlock-same-lock.pdf}
+ \end{center}
+ \item Holding multiple locks is risky!
+ \begin{center}
+ \includegraphics[height=0.3\textheight]{slides/kernel-driver-development-concurrency/deadlock-two-locks.pdf}
+ \end{center}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Kernel lock validator}
+ \begin{itemize}
+ \item From Ingo Molnar and Arjan van de Ven
+ \begin{itemize}
+ \item Adds instrumentation to kernel locking code
+ \item Detect violations of locking rules during system life, such
+ as:
+ \begin{itemize}
+ \item Locks acquired in different order (keeps track of locking
+ sequences and compares them).
+ \item Spinlocks acquired in interrupt handlers and also in
+ process context when interrupts are enabled.
+ \end{itemize}
+ \item Not suitable for production systems but acceptable overhead
+ in development.
+ \end{itemize}
+ \item See \code{Documentation/lockdep-design.txt} for details
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Alternatives to Locking}
+ \begin{itemize}
+ \item As we have just seen, locking can have a strong negative
+ impact on system performance. In some situations, you could do
+ without it.
+ \begin{itemize}
+ \item By using lock-free algorithms like \emph{Read Copy Update}
+ (RCU).
+ \item RCU API available in the kernel (See
+ \url{http://en.wikipedia.org/wiki/RCU}).
+ \item When available, use atomic operations.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Atomic Variables 1/2}
+ \begin{itemize}
+ \item Useful when the shared resource is an integer value
+ \item Even an instruction like \code{n++} is not guaranteed to be
+ atomic on all processors!
+ \item Atomic operations definitions
+ \begin{itemize}
+ \item \mint{c}+#include <asm/atomic.h>+
+ \end{itemize}
+ \item \code{atomic_t}
+ \begin{itemize}
+ \item Contains a signed integer (at least 24 bits)
+ \end{itemize}
+ \item Atomic operations (main ones)
+ \begin{itemize}
+ \item Set or read the counter:
+ \begin{itemize}
+ \item \mint{c}+void atomic_set(atomic_t *v, int i);+
+ \item \mint{c}+int atomic_read(atomic_t *v);+
+ \end{itemize}
+ \item Operations without return value:
+ \begin{itemize}
+ \item \mint{c}+void atomic_inc(atomic_t *v);+
+ \item \mint{c}+void atomic_dec(atomic_t *v);+
+ \item \mint{c}+void atomic_add(int i, atomic_t *v);+
+ \item \mint{c}+void atomic_sub(int i, atomic_t *v);+
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Atomic Variables 2/2}
+ \begin{itemize}
+ \item Similar functions testing the result:
+ \begin{itemize}
+ \item \mint{c}+int atomic_inc_and_test(...);+
+ \item \mint{c}+int atomic_dec_and_test(...);+
+ \item \mint{c}+int atomic_sub_and_test(...);+
+ \end{itemize}
+ \item Functions returning the new value:
+ \begin{itemize}
+ \item \mint{c}+int atomic_inc_and_return(...);+
+ \item \mint{c}+int atomic_dec_and_return(...);+
+ \item \mint{c}+int atomic_add_and_return(...);+
+ \item \mint{c}+int atomic_sub_and_return(...);+
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Atomic Bit Operations}
+ \begin{itemize}
+ \item Supply very fast, atomic operations
+ \item On most platforms, apply to an unsigned long type.
+ \item Apply to a void type on a few others.
+ \item Set, clear, toggle a given bit:
+ \begin{itemize}
+ \item \mint{c}+void set_bit(int nr, unsigned long * addr);+
+ \item \mint{c}+void clear_bit(int nr, unsigned long * addr);+
+ \item \mint{c}+void change_bit(int nr, unsigned long * addr);+
+ \end{itemize}
+ \item Test bit value:
+ \begin{itemize}
+ \item \mint{c}+int test_bit(int nr, unsigned long *addr);+
+ \end{itemize}
+ \item Test and modify (return the previous value):
+ \begin{itemize}
+ \item \mint{c}+int test_and_set_bit(...);+
+ \item \mint{c}+int test_and_clear_bit(...);+
+ \item \mint{c}+int test_and_change_bit(...);+
+ \end{itemize}
+ \end{itemize}
+\end{frame}
diff --git a/slides/kernel-driver-development-concurrency/spinlock.dia b/slides/kernel-driver-development-concurrency/spinlock.dia
new file mode 100644
index 0000000..3e81a32
--- /dev/null
+++ b/slides/kernel-driver-development-concurrency/spinlock.dia
@@ -0,0 +1,193 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.95,3.95;12.05,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="7,4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9.5,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.155,4.62625;10.845,5.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Spinlock#</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="9.5,5.22125"/>
+ </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="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Arc" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.95,3.20403;15.05,6.71667"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="12,6"/>
+ <dia:point val="12,4"/>
+ </dia:attribute>
+ <dia:attribute name="curve_distance">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="7"/>
+ <dia:connection handle="1" to="O0" connection="2"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12,2.405;16.1775,3.1525"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Still Locked ?#</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="12,3"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-debugging/kernel-driver-development-debugging.tex b/slides/kernel-driver-development-debugging/kernel-driver-development-debugging.tex
new file mode 100644
index 0000000..91f6906
--- /dev/null
+++ b/slides/kernel-driver-development-debugging/kernel-driver-development-debugging.tex
@@ -0,0 +1,415 @@
+\subsection{Debugging and tracing}
+
+\begin{frame}
+ \frametitle{Debugging Using Messages}
+ \begin{itemize}
+ \item Three APIs are available
+ \begin{itemize}
+ \item The old \code{printk()}, no longer recommended for new debugging
+ messages
+ \item The \code{pr_*()} family of functions : \code{pr_emerg()},
+ \code{pr_alert()}, \code{pr_crit()}, \code{pr_err()},
+ \code{pr_warning()}, \code{pr_notice()}, \code{pr_info()},
+ \code{pr_cont()} and the special \code{pr_debug()}
+ \begin{itemize}
+ \item They take a classic format string with arguments
+ \item defined in \code{include/linux/printk.h}
+ \end{itemize}
+ \item The \code{dev_*()} family of functions : \code{dev_emerg()},
+ \code{dev_alert()}, \code{dev_crit()}, \code{dev_err()},
+ \code{dev_warning()}, \code{dev_notice()}, \code{dev_info()} and
+ the special \code{dev_dbg()}
+ \begin{itemize}
+ \item They take a pointer to \code{struct device} as first
+ argument (covered later), and then a format string with
+ arguments
+ \item defined in \code{include/linux/device.h}
+ \item To be used in drivers integrated with the Linux device
+ model
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{pr\_debug() and dev\_dbg()}
+ \begin{itemize}
+ \item When the kernel is compiled with \code{CONFIG_DEBUG}, all
+ those messages are compiled and printed at the debug level with
+ \code{printk}
+ \item When the kernel is compiled with \code{CONFIG_DYNAMIC_DEBUG},
+ then those messages can dynamically be enabled on a per-file,
+ per-module or per-message basis
+ \begin{itemize}
+ \item See \code{Documentation/dynamic-debug-howto.txt} for details
+ \item Very powerful feature to only get the debug messages you're
+ interested in.
+ \end{itemize}
+ \item When neither \code{CONFIG_DEBUG} nor
+ \code{CONFIG_DYNAMIC_DEBUG} are enabled, those messages are not
+ compiled in.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Configuring The Priority}
+ \begin{itemize}
+ \item Each message is associated to a priority, ranging from 0 for
+ emergency to 7 for debug.
+ \item All the messages, regardless of their priority, are stored in
+ the kernel log ring buffer
+ \begin{itemize}
+ \item Typically accessed using the \code{dmesg} command
+ \end{itemize}
+ \item Some of the messages may appear on the console, depending on
+ their priority and the configuration of
+ \begin{itemize}
+ \item The \code{loglevel} kernel parameter, which defines the
+ priority above which messages are displayed on the console. See
+ \code{Documentation/kernel-parameters.txt} for details.
+ \item The value of \code{/proc/sys/kernel/printk}, which allows to
+ change at runtime the priority above which messages are
+ displayed on the console. See
+ \code{Documentation/sysctl/kernel.txt} for details.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{DebugFS}
+ \begin{itemize}
+ \item A virtual filesystem to export debugging information to
+ user-space.
+ \begin{itemize}
+ \item Kernel configuration: \code{DEBUG_FS}
+ \begin{itemize}
+ \item \code{Kernel hacking -> Debug Filesystem}
+ \end{itemize}
+ \item The debugging interface disappears when Debugfs is
+ configured out.
+ \item You can mount it as follows:
+ \begin{itemize}
+ \item \code{sudo mount -t debugfs none /sys/kernel/debug}
+ \end{itemize}
+ \item First described on \url{http://lwn.net/Articles/115405/}
+ \item API documented in the Linux Kernel Filesystem API:
+ \begin{itemize}
+ \item \url{http://free-electrons.com/kerneldoc/latest/DocBook/filesystems/index.html}
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{DebugFS API}
+ \begin{itemize}
+ \item Create a sub-directory for your driver:
+ \begin{itemize}
+ \item \mint{c}+struct dentry *debugfs_create_dir(const char *name,+
+ \mint{c}+struct dentry *parent);+
+ \begin{itemize}
+ \item \code{u} for decimal representation
+ \item \code{x} for hexadecimal representation
+ \end{itemize}
+ \end{itemize}
+ \item Expose an integer as a file in debugfs:
+ \begin{itemize}
+ \item \mint{c}+struct dentry *debugfs_create_{u,x}{8,16,32}+
+ \mint{c}+(const char *name, mode_t mode, struct dentry *parent,+
+ \mint{c}+u8 *value);+
+ \end{itemize}
+ \item Expose a binary blob as a file in debugfs:
+ \begin{itemize}
+ \item \mint{c}+struct dentry *debugfs_create_blob(const char *name,+
+ \mint{c}+mode_t mode, struct dentry *parent,+
+ \mint{c}+struct debugfs_blob_wrapper *blob);+
+ \end{itemize}
+ \item Also possible to support writable debugfs file or customize
+ the output using the more generic \code{debugfs_create_file()}
+ function.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Deprecated Debugging Mechanisms}
+ \begin{itemize}
+ \item Some additional debugging mechanisms, whose usage is now
+ considered deprecated
+ \begin{itemize}
+ \item Adding special \code{ioctl()} commands for debugging
+ purposes. debugfs is preferred.
+ \item Adding special entries in the proc filesystem. debugfs is
+ preferred.
+ \item Adding special entries in the sysfs filesystem. debugfs is
+ preferred.
+ \item Using \code{printk()}. The \code{pr_*()} and \code{dev_*()}
+ functions are preferred.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Using Magic SysRq}
+ \begin{itemize}
+ \item Allows to run multiple debug / rescue commands even when the
+ kernel seems to be in deep trouble
+ \begin{itemize}
+ \item On PC: \code{[Alt]} + \code{[SysRq]} + \code{<character>}
+ \item On embedded: break character on the serial line +
+ \code{<character>}
+ \end{itemize}
+ \item Example commands:
+ \begin{itemize}
+ \item \code{n}: makes RT processes nice-able.
+ \item \code{t}: shows the kernel stack of all sleeping processes
+ \item \code{w}: shows the kernel stack of all running processes
+ \item \code{b}: reboot the system
+ \item You can even register your own!
+ \end{itemize}
+ \item Detailed in \code{Documentation/sysrq.txt}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{kgdb - A Kernel Debugger}
+ \begin{itemize}
+ \item The execution of the kernel is fully controlled by \code{gdb}
+ from another machine, connected through a serial line.
+ \item Can do almost everything, including inserting breakpoints in
+ interrupt handlers.
+ \item Feature included in standard Linux since 2.6.26 (x86 and
+ sparc). arm, mips and ppc support merged in 2.6.27.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Using kgdb 1/2}
+ \begin{itemize}
+ \item Details available in the kernel documentation:
+ \url{http://free-electrons.com/kerneldoc/latest/DocBook/kgdb/}
+ \item Recommended to turn on \code{CONFIG_FRAME_POINTER} to aid in
+ producing more reliable stack backtraces in gdb.
+ \item You must include a kgdb I/O driver. One of them is kgdb over
+ serial console (\code{kgdboc}: kgdb over console, enabled by
+ \code{CONFIG_KGDB_SERIAL_CONSOLE})
+ \item Configure \code{kgdboc} at boot time by passing to the kernel:
+ \begin{itemize}
+ \item \code{kgdboc=<tty-device>,<bauds>}.
+ \item For example: \code{kgdboc=ttyS0,115200}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Using kgdb 2/2}
+ \begin{itemize}
+ \item Then also pass \code{kgdbwait} to the kernel: it makes kgdb
+ wait for a debugger connection.
+ \item Boot your kernel, and when the console is initialized,
+ interrupt the kernel with \code{Alt} + \code{SyrRq} + \code{g}.
+ \item On your workstation, start gdb as follows:
+ \begin{itemize}
+ \item \code{gdb ./vmlinux}
+ \item \code{(gdb) set remotebaud 115200}
+ \item \code{(gdb) target remote /dev/ttyS0}
+ \end{itemize}
+ \item Once connected, you can debug a kernel the way you would debug
+ an application program.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Debugging with a JTAG Interface}
+ \begin{itemize}
+ \item Two types of JTAG dongles
+ \begin{itemize}
+ \item Those offering a gdb compatible interface, over a serial
+ port or an Ethernet connexion. Gdb can directly connect to them.
+ \item Those not offering a gdb compatible interface are generally
+ supported by OpenOCD (Open On Chip Debugger):
+ \url{http://openocd.sourceforge.net/}
+ \begin{itemize}
+ \item OpenOCD is the bridge between the gdb debugging language
+ and the JTAG-dongle specific language
+ \item See the very complete documentation:
+ \url{http://openocd.sourceforge.net/documentation/online-docs/}
+ \item For each board, you'll need an OpenOCD configuration file
+ (ask your supplier)
+ \end{itemize}
+ \end{itemize}
+ \item See very useful details on using Eclipse / gcc / gdb / OpenOCD
+ on Windows:
+ \begin{itemize}
+ \item \url{http://www2.amontec.com/sdk4arm/ext/jlynch-tutorial-20061124.pdf}
+ \item \url{http://www.yagarto.de/howto/yagarto2/}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{More Kernel Debugging Tips}
+ \begin{itemize}
+ \item Enable \code{CONFIG_KALLSYMS_ALL}
+ \begin{itemize}
+ \item \code{General Setup -> Configure standard kernel features}
+ \item To get oops messages with symbol names instead of raw addresses
+ \item This obsoletes the \code{ksymoops} tool
+ \end{itemize}
+ \item If your kernel doesn't boot yet or hangs without any message,
+ you can activate the low-level debugging option
+ (\code{Kernel Hacking} section, only available on \code{arm} and
+ \code{unicore32}): \code{CONFIG_DEBUG_LL=y}
+ \item Techniques to locate the C instruction which caused an oops
+ \begin{itemize}
+ \item \url{http://kerneltrap.org/node/3648}
+ \end{itemize}
+ \item More about kernel debugging in the free Linux Device Drivers book
+ \begin{itemize}
+ \item \url{http://lwn.net/images/pdf/LDD3/ch04.pdf}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Kernel Crash Analysis with kexec/kdump}
+ \begin{columns}
+ \column{0.6\textwidth}
+ \begin{itemize}
+ \item \code{kexec} system call: makes it possible to call a new
+ kernel, without rebooting and going through the BIOS / firmware.
+ \item Idea: after a kernel panic, make the kernel automatically
+ execute a new, clean kernel from a reserved location in RAM, to
+ perform post-mortem analysis of the memory of the crashed
+ kernel.
+ \item See \code{Documentation/kdump/kdump.txt} in the kernel
+ sources for details.
+ \end{itemize}
+ \column{0.4\textwidth}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-debugging/kexec.pdf}
+ \end{columns}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Tracing with SystemTap}
+ \begin{itemize}
+ \item \url{http://sourceware.org/systemtap/}
+ \begin{itemize}
+ \item Infrastructure to add instrumentation to a running kernel:
+ trace functions, read and write variables, follow pointers,
+ gather statistics...
+ \item Eliminates the need to modify the kernel sources to add
+ one's own instrumentation to investigated a functional or
+ performance problem.
+ \item Uses a simple scripting language.
+ \item Several example scripts and probe points are available.
+ \item Based on the \code{Kprobes} instrumentation infrastructure.
+ \item See \code{Documentation/kprobes.txt} in kernel sources.
+ \item Now supported on most popular CPUs.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+
+
+\begin{frame}[fragile]
+ \frametitle{SystemTap Script Example 1/3}
+\begin{verbatim}
+#! /usr/bin/env stap
+# Using statistics and maps to examine kernel memory
+# allocations
+
+global kmalloc
+
+probe kernel.function("__kmalloc") {
+ kmalloc[execname()] <<< $size
+}
+
+# Exit after 10 seconds
+probe timer.ms(10000) {
+ exit()
+}
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{SystemTap Script Example 2/3}
+{\footnotesize
+\begin{verbatim}
+probe end {
+ foreach ([name] in kmalloc) {
+ printf("Allocations for %s\n", name)
+ printf("Count: %d allocations\n", @count(kmalloc[name]))
+ printf("Sum: %d Kbytes\n", @sum(kmalloc[name])/1024)
+ printf("Average: %d bytes\n", @avg(kmalloc[name]))
+ printf("Min: %d bytes\n", @min(kmalloc[name]))
+ printf("Max: %d bytes\n", @max(kmalloc[name]))
+ print("\nAllocations by size in bytes\n")
+ print(@hist_log(kmalloc[name]))
+ printf("-------------------------------------------\n\n")
+ }
+}
+\end{verbatim}
+}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{SystemTap Script Example 3/3}
+{\small
+\begin{verbatim}
+#! /usr/bin/env stap
+# Logs each file read performed by each process
+
+probe kernel.function ("vfs_read")
+{
+ dev_nr = $file->f_dentry->d_inode->i_sb->s_dev
+ inode_nr = $file->f_dentry->d_inode->i_ino
+ printf ("%s(%d) %s 0x%x/%d\n",
+ execname(), pid(), probefunc(), dev_nr, inode_nr)
+}
+\end{verbatim}
+}
+Nice tutorial on \url{http://sources.redhat.com/systemtap/tutorial.pdf}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Kernel Markers}
+ \begin{itemize}
+ \item Capability to add static markers to kernel code.
+ \item Almost no impact on performance, until the marker is
+ dynamically enabled, by inserting a probe kernel module.
+ \item Useful to insert trace points that won't be impacted by
+ changes in the Linux kernel sources.
+ \item See marker and probe example in \code{samples/markers} in the
+ kernel sources.
+ \item See \url{http://en.wikipedia.org/wiki/Kernel_marker}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{LTTng}
+ \begin{itemize}
+ \item \url{http://lttng.org}
+ \begin{itemize}
+ \item The successor of the Linux Trace Toolkit (LTT)
+ \item Toolkit allowing to collect and analyze tracing information
+ from the kernel, based on kernel markers and kernel tracepoints.
+ \item So far, based on kernel patches, but doing its best to use
+ in-tree solutions, and to be merged in the future.
+ \item Very precise timestamps, very little overhead.
+ \item Useful documentation on \url{http://lttng.org/documentation}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{LTTV}
+ \begin{itemize}
+ \item Viewer for LTTng traces
+ \begin{itemize}
+ \item Support for huge traces (tested with 15 GB ones)
+ \item Can combine multiple tracefiles in a single view.
+ \item Graphical or text interface
+ \end{itemize}
+ \item See \url{http://lttng.org/files/lttv-doc/user_guide/}
+ \end{itemize}
+\end{frame}
diff --git a/slides/kernel-driver-development-debugging/kexec.dia b/slides/kernel-driver-development-debugging/kexec.dia
new file mode 100644
index 0000000..5bb8fb3
--- /dev/null
+++ b/slides/kernel-driver-development-debugging/kexec.dia
@@ -0,0 +1,438 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.95,2.95;11.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="7,3"/>
+ </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="#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="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,6.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.5425,5.72625;10.4575,7.27375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Standard
+Kernel#</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="9,6.32125"/>
+ </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="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.95,9.95;11.05,17.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="7,10"/>
+ </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="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,13.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.94625,12.7263;10.0538,14.2737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Debug
+Kernel#</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="9,13.3213"/>
+ </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="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7,17"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.95,16.95;11.05,35.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="7,17"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="18"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </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="9,26"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.77125,25.2263;10.2287,26.7737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Regular
+RAM#</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="9,25.8212"/>
+ </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 - Text" version="1" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="13,6.82625;18.2725,9.17375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Step 1 : Copy
+debug kernel
+to reserved RAM#</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="13,7.42125"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11,6.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.8882,6.45;12.1,10.3618"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="11,6.5"/>
+ <dia:point val="12.05,6.5"/>
+ <dia:point val="12.05,10"/>
+ <dia:point val="11,10"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="4"/>
+ <dia:connection handle="1" to="O0" connection="7"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.9,8.95;7.1118,13.8618"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="7,9"/>
+ <dia:point val="5.95,9"/>
+ <dia:point val="5.95,13.5"/>
+ <dia:point val="7,13.5"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O2" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="0.2975,8.82625;5,11.1738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Step 2 : Kernel
+Panic. kexec
+debug kernel#</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="5,9.42125"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </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="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12,15.405;18.335,16.9525"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Step 3: Analyze
+crashed kernel RAM#</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="12,16"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-dma/dma-integration.dia b/slides/kernel-driver-development-dma/dma-integration.dia
new file mode 100644
index 0000000..8c34e94
--- /dev/null
+++ b/slides/kernel-driver-development-dma/dma-integration.dia
@@ -0,0 +1,548 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,3.95;11.05,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.35,4.62625;8.65,5.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#CPU#</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="8,5.22125"/>
+ </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="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,7.95;11.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.13875,8.62625;9.86125,9.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Data Cache#</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="8,9.22125"/>
+ </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="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.95,5.95;8.05,8.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="8,6"/>
+ <dia:point val="8,8"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="6"/>
+ <dia:connection handle="1" to="O2" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="17,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="16.95,7.95;23.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="17,8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.2587,8.62625;20.7413,9.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#DMA#</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="20,9.22125"/>
+ </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="O5" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="3,12"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.95,11.95;25.05,14.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="3,12"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="22"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#efb9ff"/>
+ </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="14,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="13.4113,12.6263;14.5888,13.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Bus#</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="14,13.2213"/>
+ </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:object type="Standard - Box" version="0" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="4,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.95,15.95;12.05,20.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="4,16"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </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="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.6975,17.6262;9.3025,18.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Memory#</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="8,18.2212"/>
+ </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="O9" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.95,15.95;24.05,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="16,16"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="20,17"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.3813,16.6262;21.6188,17.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Peripheral#</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="20,17.2212"/>
+ </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 - Line" version="0" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.95,9.95;8.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="8,10"/>
+ <dia:point val="8,12"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.95,9.95;20.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="20,10"/>
+ <dia:point val="20,12"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O5" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.95,13.95;20.05,16.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="20,14"/>
+ <dia:point val="20,16"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O11" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.95,13.95;8.05,16.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="8,14"/>
+ <dia:point val="8,16"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O9" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-dma/kernel-driver-development-dma.tex b/slides/kernel-driver-development-dma/kernel-driver-development-dma.tex
new file mode 100644
index 0000000..a3d36e7
--- /dev/null
+++ b/slides/kernel-driver-development-dma/kernel-driver-development-dma.tex
@@ -0,0 +1,227 @@
+\subsection{DMA}
+
+\begin{frame}
+ \frametitle{DMA Integration}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-dma/dma-integration.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Constraints with a DMA}
+ \begin{itemize}
+ \item A DMA deals with physical addresses, so:
+ \begin{itemize}
+ \item Programming a DMA requires retrieving a physical address at
+ some point (virtual addresses are usually used)
+ \item The memory accessed by the DMA shall be physically
+ contiguous
+ \end{itemize}
+ \item The CPU can access memory through a data cache
+ \begin{itemize}
+ \item Using the cache can be more efficient (faster accesses to
+ the cache than the bus)
+ \item But the DMA does not access to the CPU cache, so one need to
+ take care of cache coherency (cache content vs memory content)
+ \item Either flush or invalidate the cache lines corresponding to
+ the buffer accessed by DMA and processor at strategic times
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{DMA Memory Constraints}
+ \begin{itemize}
+ \item Need to use contiguous memory in physical space.
+ \item Can use any memory allocated by \code{kmalloc} (up to 128 KB)
+ or \code{__get_free_pages} (up to 8MB).
+ \item Can use block I/O and networking buffers, designed to support
+ DMA.
+ \item Can not use vmalloc memory (would have to setup DMA on each
+ individual physical page).
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Reserving Memory for DMA}
+ \begin{itemize}
+ \item To make sure you've got enough RAM for big DMA transfers...
+ \item Example assuming you have 32 MB of RAM, and need 2 MB for DMA:
+ \begin{itemize}
+ \item Boot your kernel with \code{mem=30}
+ \item The kernel will just use the first 30 MB of RAM.
+ \item Driver code can now reclaim the 2 MB left:
+ \begin{minted}{c}
+dmabuf = ioremap (
+ 0x1e00000, /* Start: 30 MB */
+ 0x200000 /* Size: 2 MB */
+);
+ \end{minted}
+ \item You can also use \code{mem=} to reserve specific RAM areas
+ for specific devices
+ (DSP, video device...).
+ \item Panda board example:
+ \begin{itemize}
+ \item \code{mem=456M at 0x80000000}, \code{mem=512M at 0xA0000000}
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Memory Synchronization Issues}
+ \begin{itemize}
+ \item Memory caching could interfere with DMA
+ \begin{itemize}
+ \item Before DMA to device
+ \begin{itemize}
+ \item Need to make sure that all writes to DMA buffer are
+ committed.
+ \end{itemize}
+ \item After DMA from device
+ \begin{itemize}
+ \item Before drivers read from DMA buffer, need to make sure
+ that memory caches are flushed.
+ \end{itemize}
+ \item Bidirectional DMA
+ \begin{itemize}
+ \item Need to flush caches before and after the DMA transfer.
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Linux DMA API}
+ \begin{itemize}
+ \item The kernel DMA utilities can take care of:
+ \begin{itemize}
+ \item Either allocating a buffer in a cache coherent area,
+ \item Or making sure caches are flushed when required,
+ \item Managing the DMA mappings and IOMMU (if any).
+ \item See \code{Documentation/DMA-API.txt} for details about the
+ Linux DMA generic API.
+ \item Most subsystems (such as PCI or USB) supply their own DMA
+ API, derived from the generic one. May be sufficient for most
+ needs.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Coherent or Streaming DMA Mappings}
+ \begin{itemize}
+ \item Coherent mappings
+ \begin{itemize}
+ \item The kernel allocates a suitable buffer and sets the mapping
+ for the driver.
+ \item Can simultaneously be accessed by the CPU and device.
+ \item So, has to be in a cache coherent memory area.
+ \item Usually allocated for the whole time the module is loaded.
+ \item Can be expensive to setup and use on some platforms.
+ \end{itemize}
+ \item Streaming mappings
+ \begin{itemize}
+ \item The kernel just sets the mapping for a buffer provided by
+ the driver.
+ \item Use a buffer already allocated by the driver.
+ \item Mapping set up for each transfer. Keeps DMA registers free
+ on the hardware.
+ \item Some optimizations also available.
+ \item The recommended solution.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Allocating Coherent Mappings}
+ \begin{itemize}
+ \item The kernel takes care of both buffer allocation and mapping
+ \end{itemize}
+\begin{minted}[fontsize=\small]{c}
+#include <asm/dma-mapping.h>
+
+void * /* Output: buffer address */
+ dma_alloc_coherent(
+ struct device *dev, /* device structure */
+ size_t size, /* Needed buffer size in bytes */
+ dma_addr_t *handle, /* Output: DMA bus address */
+ gfp_t gfp /* Standard GFP flags */
+);
+
+void dma_free_coherent(struct device *dev,
+ size_t size, void *cpu_addr, dma_addr_t handle);
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Setting up streaming mappings}
+ \begin{itemize}
+ \item Works on buffers already allocated by the driver
+ \end{itemize}
+\begin{minted}[fontsize=\small]{c}
+#include <linux/dmapool.h>
+
+dma_addr_t dma_map_single(
+ struct device *, /* device structure */
+ void *, /* input: buffer to use */
+ size_t, /* buffer size */
+ enum dma_data_direction /* Either DMA_BIDIRECTIONAL,
+ * DMA_TO_DEVICE or
+ * DMA_FROM_DEVICE */
+);
+
+void dma_unmap_single(struct device *dev, dma_addr_t handdle,
+ size_t size, enum dma_data_direction dir);
+\end{minted}
+\end{frame}
+
+\begin{frame}
+ \frametitle{DMA Streaming Mapping Notes}
+ \begin{itemize}
+ \item When the mapping is active: only the device should access the
+ buffer (potential cache issues otherwise).
+ \item The CPU can access the buffer only after unmapping! Use
+ locking to prevent CPU access to the buffer.
+ \item Another reason: if required, this API can create an
+ intermediate bounce buffer (used if the given buffer is not usable
+ for DMA).
+ \item The Linux API also supports scatter / gather DMA streaming
+ mappings.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{DMA summary}
+ \begin{itemize}
+ \item Most drivers can use the specific API provided by their
+ subsystem: USB, PCI, SCSI... Otherwise they can use the Linux
+ generic API:
+ \item Coherent mappings
+ \begin{itemize}
+ \item DMA buffer allocated by the kernel
+ \item Set up for the whole module life
+ \item Can be expensive. Not recommended.
+ \item Let both the CPU and device access the buffer at the same
+ time.
+ \item Main functions:
+ \begin{itemize}
+ \item \code{dma_alloc_coherent}
+ \item \code{dma_free_coherent}
+ \end{itemize}
+ \end{itemize}
+ \item Streaming mappings
+ \begin{itemize}
+ \item DMA buffer allocated by the driver
+ \item Set up for each transfer
+ \item Cheaper. Saves DMA registers.
+ \item Only the device can access the buffer when the mapping is
+ active.
+ \item Main functions:
+ \begin{itemize}
+ \item \code{dma_map_single}
+ \item \code{dma_unmap_single}
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
diff --git a/slides/kernel-driver-development-general-apis/kernel-driver-development-general-apis.tex b/slides/kernel-driver-development-general-apis/kernel-driver-development-general-apis.tex
new file mode 100644
index 0000000..f334c4f
--- /dev/null
+++ b/slides/kernel-driver-development-general-apis/kernel-driver-development-general-apis.tex
@@ -0,0 +1,101 @@
+\subsection{Useful general-purpose kernel APIs}
+
+\begin{frame}
+ \frametitle{Memory/string utilities}
+ \begin{itemize}
+ \item In \code{linux/string.h}
+ \begin{itemize}
+ \item Memory-related: \code{memset}, \code{memcpy},
+ \code{memmove}, \code{memscan}, \code{memcmp}, \code{memchr}
+ \item String-related: \code{strcpy}, \code{strcat}, \code{strcmp},
+ \code{strchr}, \code{strrchr}, \code{strlen} and variants
+ \item Allocate and copy a string: \code{kstrdup}, \code{kstrndup}
+ \item Allocate and copy a memory area: \code{kmemdup}
+ \end{itemize}
+ \item In \code{linux/kernel.h}
+ \begin{itemize}
+ \item String to int conversion: \code{simple_strtoul},
+ \code{simple_strtol}, \code{simple_strtoull},
+ \code{simple_strtoll}
+ \item Other string functions: \code{sprintf}, \code{sscanf}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Linked lists}
+ \begin{itemize}
+ \item Convenient linked-list facility in \code{linux/list.h}
+ \begin{itemize}
+ \item Used in thousands of places in the kernel
+ \end{itemize}
+ \item Add a \code{struct list_head} member to the structure whose
+ instances will be part of the linked list. It is usually named
+ \code{node} when each instance needs to only be part of a single
+ list.
+ \item Define the list with the \code{LIST_HEAD} macro for a global
+ list, or define a \code{struct list_head} element and initialize
+ it with \code{INIT_LIST_HEAD} for lists embedded in a structure.
+ \item Then use the \code{list_*()} API to manipulate the list
+ \begin{itemize}
+ \item Add elements: \code{list_add()}, \code{list_add_tail()}
+ \item Remove, move or replace elements: \code{list_del()},
+ \code{list_move()}, \code{list_move_tail()},
+ \code{list_replace()}
+ \item Test the list: \code{list_empty()}
+ \item Iterate over the list: \code{list_for_each_*()} family of macros
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Linked Lists Examples 1/3}
+ \begin{itemize}
+ \item From \code{include/linux/atmel_tc.h}
+\begin{minted}{c}
+/*
+ * Definition of a list element, with a
+ * struct list_head member
+ */
+struct atmel_tc
+{
+ /* some members */
+ struct list_head node;
+};
+\end{minted}
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Linked Lists Examples 2/3}
+ \begin{itemize}
+ \item From \code{drivers/misc/atmel_tclib.c}
+ \end{itemize}
+\begin{minted}[fontsize=\small]{c}
+/* Define the global list */
+static LIST_HEAD(tc_list);
+
+struct atmel_tc *atmel_tc_alloc(unsigned block,
+ const char *name)
+{
+ struct atmel_tc *tc;
+ /* Iterate over the list elements */
+ list_for_each_entry(tc, &tc_list, node) {
+ /* Do something with tc */
+ }
+ [...]
+}
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Linked Lists Example 3/3}
+\begin{minted}[fontsize=\small]{c}
+static int __init tc_probe(struct platform_device *pdev) {
+ struct atmel_tc *tc;
+ tc = kzalloc(sizeof(struct atmel_tc), GFP_KERNEL);
+ /* Add an element to the list */
+ list_add_tail(&tc->node, &tc_list);
+}
+\end{minted}
+\end{frame}
diff --git a/slides/kernel-driver-development-interrupts/kernel-driver-development-interrupts.tex b/slides/kernel-driver-development-interrupts/kernel-driver-development-interrupts.tex
new file mode 100644
index 0000000..bd29519
--- /dev/null
+++ b/slides/kernel-driver-development-interrupts/kernel-driver-development-interrupts.tex
@@ -0,0 +1,292 @@
+\subsection{Interrupt Management}
+
+\begin{frame}[fragile]
+ \frametitle{Registering an interrupt handler 1/2}
+ \begin{itemize}
+ \item Defined in \code{include/linux/interrupt.h}
+ \begin{itemize}
+ \item \mint{c}+int request_irq(unsigned int irq,+
+ \mint{c}+irq_handler_t handler, unsigned long irq_flags,+
+ \mint{c}+const char *devname, void *dev_id);+
+ \begin{itemize}
+ \item \code{irq} is the requested IRQ channel
+ \item \code{handler} is a pointer to the IRQ handler
+ \item \code{irq_flags} are option masks (see next slide)
+ \item \code{devname} is the registered name
+ \item \code{dev_id} is a pointer to some data. It cannot be NULL
+ as it is used as an identifier for \code{free_irq} when using
+ shared IRQs.
+ \end{itemize}
+ \item \mint{c}+void free_irq(unsigned int irq, void *dev_id);+
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Registering an interrupt handler 2/2}
+ \begin{itemize}
+ \item Main \code{irq_flags} bit values (can be combined, none is
+ fine too)
+ \begin{itemize}
+ \item \code{IRQF_SHARED}
+ \begin{itemize}
+ \item The interrupt channel can be shared by several
+ devices. Requires a hardware status register telling whether
+ an IRQ was raised or not.
+ \end{itemize}
+ \item \code{IRQF_SAMPLE_RANDOM}
+ \begin{itemize}
+ \item Use the IRQ arrival time to feed the kernel random number
+ generator.
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Interrupt handler constraints}
+ \begin{itemize}
+ \item No guarantee in which address space the system will be in when
+ the interrupt occurs: can't transfer data to and from user space
+ \item Interrupt handler execution is managed by the CPU, not by the
+ scheduler. Handlers can't run actions that may sleep, because
+ there is nothing to resume their execution. In particular, need to
+ allocate memory with \code{GFP_ATOMIC}.
+ \item Interrupt handlers are run with all interrupts disabled (since
+ 2.6.36). Therefore, they have to complete their job quickly
+ enough, to avoiding blocking interrupts for too long.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{/proc/interrupts on a Panda board}
+\begin{verbatim}
+ CPU0 CPU1
+39: 4 0 GIC TWL6030-PIH
+41: 0 0 GIC l3-dbg-irq
+42: 0 0 GIC l3-app-irq
+43: 0 0 GIC prcm
+44: 20294 0 GIC DMA
+52: 0 0 GIC gpmc
+...
+IPI0: 0 0 Timer broadcast interrupts
+IPI1: 23095 25663 Rescheduling interrupts
+IPI2: 0 0 Function call interrupts
+IPI3: 231 173 Single function call interrupts
+IPI4: 0 0 CPU stop interrupts
+LOC: 196407 136995 Local timer interrupts
+Err: 0
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Interrupt handler prototype}
+ \begin{itemize}
+ \item \mint{c}+irqreturn_t foo_interrupt(int irq, void *dev_id)+
+ \begin{itemize}
+ \item \code{irq}, the IRQ number
+ \item \code{dev_id}, the opaque pointer passed at
+ \code{request_irq()}
+ \end{itemize}
+ \item Return value
+ \begin{itemize}
+ \item \code{IRQ_HANDLED}: recognized and handled interrupt
+ \item \code{IRQ_NONE}: not on a device managed by the
+ module. Useful to share interrupt channels and/or report
+ spurious interrupts to the kernel.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Typical interrupt handler's job}
+ \begin{itemize}
+ \item Acknowledge the interrupt to the device (otherwise no more
+ interrupts will be generated, or the interrupt will keep firing
+ over and over again)
+ \item Read/write data from/to the device
+ \item Wake up any waiting process waiting for the completion of an
+ operation, typically using wait queues
+ \code{wake_up_interruptible(&module_queue);}
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Threaded interrupts}
+ \begin{itemize}
+ \item In 2.6.30, support for threaded interrupts has been added to
+ the Linux kernel
+ \begin{itemize}
+ \item The interrupt handler is executed inside a thread.
+ \item Allows to block during the interrupt handler, which is often
+ needed for I2C/SPI devices as the interrupt handler needs to
+ communicate with them.
+ \item Allows to set a priority for the interrupt handler
+ execution, which is useful for real-time usage of Linux
+ \end{itemize}
+ \item \mint{c}+int request_threaded_irq(unsigned int irq,+
+ \mint{c}+irq_handler_t handler, irq_handler_t thread_fn,+
+ \mint{c}+unsigned long flags, const char *name, void *dev);+
+ \begin{itemize}
+ \item \code{handler}, ``hard IRQ'' handler
+ \item \code{thread\_fn}, executed in a thread
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Top half and bottom half processing}
+ \begin{itemize}
+ \item Splitting the execution of interrupt handlers in 2 parts
+ \begin{itemize}
+ \item Top half
+ \begin{itemize}
+ \item This is the real interrupt handler, which should complete
+ as quickly as possible since all interrupts are disabled. If
+ possible, take the data out of the device and schedule a
+ bottom half to handle it.
+ \end{itemize}
+ \item Bottom half
+ \begin{itemize}
+ \item Is the general Linux name for various mechanisms which
+ allow to postpone the handling of interrupt-related
+ work. Implemented in Linux as softirqs, tasklets or
+ workqueues.
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Top half and bottom half diagram}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-interrupts/thread-halves.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Softirqs}
+ \begin{itemize}
+ \item Softirqs are a form of bottom half processing
+ \item The softirqs handlers are executed with all interrupts
+ enabled, and a given softirq handler can run simultaneously on
+ multiple CPUs
+ \item They are executed once all interrupt handlers have completed,
+ before the kernel resumes scheduling processes, so sleeping is not
+ allowed.
+ \item The number of softirqs is fixed in the system, so softirqs are
+ not directly used by drivers, but by complete kernel subsystems
+ (network, etc.)
+ \item The list of softirqs is defined in
+ \code{include/linux/interrupt.h}: \code{HI}, \code{TIMER},
+ \code{NET_TX}, \code{NET_RX}, \code{BLOCK}, \code{BLOCK_IOPOLL},
+ \code{TASKLET}, \code{SCHED}, \code{HRTIMER}, \code{RCU}
+ \item The \code{HI} and \code{TASKLET} softirqs are used to execute
+ tasklets
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Tasklets}
+ \begin{itemize}
+ \item Tasklets are executed within the \code{HI} and \code{TASKLET}
+ softirqs. They are executed with all interrupts enabled, but a
+ given tasklet is guaranteed to execute on a single CPU at a time.
+ \item A tasklet can be declared statically with the
+ \code{DECLARE_TASKLET()} macro or dynamically with the
+ \code{tasklet_init()} function. A tasklet is simply implemented as
+ a function. Tasklets can easily be used by individual device
+ drivers, as opposed to softirqs.
+ \item The interrupt handler can schedule the execution of a tasklet
+ with
+ \begin{itemize}
+ \item \code{tasklet_schedule()} to get it executed in the
+ \code{TASKLET} softirq
+ \item \code{tasklet_hi_schedule()} to get it executed in the
+ \code{HI} softirq (higher priority)
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Tasklet Example: simplified atmel\_serial.c 1/2}
+\begin{minted}[fontsize=\small]{c}
+/* The tasklet function */
+static void atmel_tasklet_func(unsigned long data) {
+ struct uart_port *port = (struct uart_port *)data;
+ [...]
+}
+
+/* Registering the tasklet */
+init function(...) {
+ [...]
+ tasklet_init(&atmel_port->tasklet,
+ atmel_tasklet_func,(unsigned long)port);
+ [...]
+}
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Tasklet Example: simplified atmel\_serial.c 2/2}
+\begin{minted}[fontsize=\small]{c}
+/* Removing the tasklet */
+cleanup function(...) {
+ [...]
+ tasklet_kill(&atmel_port->tasklet);
+ [...]
+}
+
+/* Triggering execution of the tasklet */
+somewhere function(...) {
+ tasklet_schedule(&atmel_port->tasklet);
+}
+\end{minted}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Workqueues}
+ \begin{itemize}
+ \item Workqueues are a general mechanism for deferring work. It is
+ not limited in usage to handling interrupts.
+ \item The function registered as workqueue is executed in a thread,
+ which means :
+ \begin{itemize}
+ \item All interrupts are enabled
+ \item Sleeping is allowed
+ \end{itemize}
+ \item A workqueue is registered with \code{INIT_WORK} and typically
+ triggered with \code{queue_work()}
+ \item The complete API, in \code{include/linux/workqueue.h} provides
+ many other possibilities (creating its own workqueue threads,
+ etc.)
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Interrupt management summary}
+ \begin{itemize}
+ \item Device driver
+ \begin{itemize}
+ \item When the device file is first opened, register an interrupt
+ handler for the device's interrupt channel.
+ \end{itemize}
+ \item Interrupt handler
+ \begin{itemize}
+ \item Called when an interrupt is raised.
+ \item Acknowledge the interrupt
+ \item If needed, schedule a tasklet taking care of handling
+ data. Otherwise, wake up processes waiting for the data.
+ \end{itemize}
+ \item Tasklet
+ \begin{itemize}
+ \item Process the data
+ \item Wake up processes waiting for the data
+ \end{itemize}
+ \item Device driver
+ \begin{itemize}
+ \item When the device is no longer opened by any process,
+ unregister the interrupt handler.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
diff --git a/slides/kernel-driver-development-interrupts/thread-halves.dia b/slides/kernel-driver-development-interrupts/thread-halves.dia
new file mode 100644
index 0000000..15d558d
--- /dev/null
+++ b/slides/kernel-driver-development-interrupts/thread-halves.dia
@@ -0,0 +1,961 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.95,7.95;17.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="12,8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </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="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.95,7.95;32.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="27,8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </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 - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.95,7.95;27.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="22,8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </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 - Box" version="0" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="17,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="16.95,7.95;22.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="17,8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </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="32,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.95,7.95;37.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="32,8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </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 - Box" version="0" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="37,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="36.95,7.95;42.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="37,8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </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 - Line" version="0" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.85,9.85;12.15,10.15"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="9,10"/>
+ <dia:point val="12,10"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_width">
+ <dia:real val="0.30000001192092896"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O0" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="42,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="41.85,9.41459;46.3354,10.5854"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="42,10"/>
+ <dia:point val="46,10"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_width">
+ <dia:real val="0.30000001192092896"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O5" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14.5,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="13.0538,8;15.9463,8.8575"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Handler#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="14.5,8.6825"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="13.5225,10;15.4775,10.7475"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#IRQ12#</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="14.5,10.595"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19.5,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.0323,8;20.9462,8.92181"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Handler#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="19.5,8.70394"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O3" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.5225,10;20.4962,10.8036"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#IRQ42#</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="19.5,10.6137"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O3" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="24.5,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="23.2963,8;25.7252,8.92181"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Softirq#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="24.5,8.70394"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29.5,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.2748,8;30.7037,8.92181"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Softirq#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="29.5,8.70394"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O1" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="34.5,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="33.2748,8;35.7037,8.92181"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Softirq#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="34.5,8.70394"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O4" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="24.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="24.1638,10;24.8362,10.7475"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#HI#</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="24.5,10.595"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.2613,10;30.7387,10.7475"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#NET_RX#</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="29.5,10.595"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O1" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="34.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="33.1175,10;35.8825,10.7475"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#TASKLET#</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="34.5,10.595"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O4" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O18">
+ <dia:attribute name="obj_pos">
+ <dia:point val="39.5,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="38.1063,8;40.9152,8.92181"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Process#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="39.5,8.70394"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O5" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O19">
+ <dia:attribute name="obj_pos">
+ <dia:point val="39.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="38.995,10;40.005,10.7475"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#foo#</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="39.5,10.595"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O5" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O20">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.6382,4.95;10.3618,9.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="10,5"/>
+ <dia:point val="10,9"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O21">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.30875,1.65403;11.6913,4.34597"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#IRQ12
+is
+triggered#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="10,2.33653"/>
+ </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="O22">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.3087,1.62187;15.7127,4.37813"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#IRQ42
+is
+triggered#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="14,2.32581"/>
+ </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 - Line" version="0" id="O23">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="13.6382,4.95;14.3618,7.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="14,5"/>
+ <dia:point val="14,7"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O24">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.6382,12.8882;22.3618,16.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="22,16"/>
+ <dia:point val="22,13"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O25">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.0138,16.1954;25.9863,19.8046"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Once all IRQ
+handlers have been
+executed, softirqs are
+executed#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="22,16.8779"/>
+ </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 - Line" version="0" id="O26">
+ <dia:attribute name="obj_pos">
+ <dia:point val="37,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="36.6382,4.95;37.3618,7.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="37,5"/>
+ <dia:point val="37,7"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O27">
+ <dia:attribute name="obj_pos">
+ <dia:point val="37,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.6425,1.65403;42.3575,4.34597"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Once all softirqs are finished,
+control is given back to the
+scheduler#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="37,2.33653"/>
+ </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/kernel-driver-development-io-memory/ioremap.dia b/slides/kernel-driver-development-io-memory/ioremap.dia
new file mode 100644
index 0000000..600a1d5
--- /dev/null
+++ b/slides/kernel-driver-development-io-memory/ioremap.dia
@@ -0,0 +1,832 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Line" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,10.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.935,4.38299;31.1038,10.565"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="16,10.5"/>
+ <dia:point val="31,4.5"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O10" connection="4"/>
+ <dia:connection handle="1" to="O12" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.9314,6.9314;31.0686,16.0686"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="16,16"/>
+ <dia:point val="31,7"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="dashlength">
+ <dia:real val="0.50000000000000011"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O6" connection="2"/>
+ <dia:connection handle="1" to="O13" connection="0"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.9314,9.9314;31.0686,19.0686"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="16,19"/>
+ <dia:point val="31,10"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="dashlength">
+ <dia:real val="0.50000000000000011"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O6" connection="7"/>
+ <dia:connection handle="1" to="O13" connection="5"/>
+ </dia:connections>
+ </dia:object>
+ <dia:group>
+ <dia:object type="Standard - Box" version="0" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.95,4.95;16.05,21.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="9,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="16"/>
+ </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="9,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.95,6.95;16.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="9,7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.95,10.95;16.05,14.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="9,11"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.95,15.95;16.05,19.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="9,16"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12.5,8.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.0725,7.9075;13.9275,9.0925"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#MMIO#</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.2699999511241913"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="12.5,8.8525"/>
+ </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 - Text" version="1" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12.5,12.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.2763,11.9075;14.7238,13.0925"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#registers#</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.2699999511241913"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="12.5,12.8525"/>
+ </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="O5" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12.5,17.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.3812,16.9075;13.6187,18.0925"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#RAM#</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.2699999511241913"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="12.5,17.8525"/>
+ </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="O6" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.95,9.95;16.05,11.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="9,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#efb9ff"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ </dia:group>
+ <dia:group>
+ <dia:object type="Standard - Box" version="0" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.95,1.95;38.05,25.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="31,2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="23"/>
+ </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="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.95,3.95;38.05,5.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="31,4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#efb9ff"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.95,6.95;38.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="31,7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="41,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="39.4025,5.4075;42.5975,6.5925"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Kernel#</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.2699999511241913"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="41,6.3525"/>
+ </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="41,17"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="39.8425,16.3631;42.1871,17.6369"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#User#</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.2699999511241913"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="41,17.3377"/>
+ </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 - Box" version="0" id="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.95,9.95;38.05,25.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="31,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="15"/>
+ </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 - Line" version="0" id="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="30,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="29.95,9.95;39.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="30,10"/>
+ <dia:point val="39,10"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#cc1f1a"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O18">
+ <dia:attribute name="obj_pos">
+ <dia:point val="34.5,8.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="33.3516,7.86306;35.6187,9.13694"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#RAM#</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.2699999511241913"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="34.5,8.83769"/>
+ </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="O13" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ </dia:group>
+ <dia:object type="Standard - Text" version="1" id="O19">
+ <dia:attribute name="obj_pos">
+ <dia:point val="18,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18,6.3175;22.1475,7.175"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#0xFFEBC00#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="18,7"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O20">
+ <dia:attribute name="obj_pos">
+ <dia:point val="18,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.9307,6.93178;18.0682,10.5971"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="18,7"/>
+ <dia:point val="16,10.5"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O10" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O21">
+ <dia:attribute name="obj_pos">
+ <dia:point val="24,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.2975,2.3175;24,3.175"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#0xCDEFA000#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="24,3"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O22">
+ <dia:attribute name="obj_pos">
+ <dia:point val="24,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="23.9406,2.94063;31.1093,4.72558"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="24,3"/>
+ <dia:point val="31,4.5"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O12" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O23">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12.5,21"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.89906,21;16.0763,23.1199"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Physical Memory
+Address Space#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="12.5,21.8122"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O3" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O24">
+ <dia:attribute name="obj_pos">
+ <dia:point val="34.5,25"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.26,25;37.7647,27.1199"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Virtual Memory
+Address Space#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="34.5,25.8122"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O11" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-io-memory/kernel-driver-development-io-memory.tex b/slides/kernel-driver-development-io-memory/kernel-driver-development-io-memory.tex
new file mode 100644
index 0000000..89e1daf
--- /dev/null
+++ b/slides/kernel-driver-development-io-memory/kernel-driver-development-io-memory.tex
@@ -0,0 +1,262 @@
+\subsection{I/O Memory and Ports}
+
+\begin{frame}
+ \frametitle{Port I/O vs. Memory-Mapped I/O}
+ \begin{itemize}
+ \item MMIO
+ \begin{itemize}
+ \item Same address bus to address memory and I/O devices
+ \item Access to the I/O devices using regular instructions
+ \item Most widely used I/O method across the different
+ architectures supported by Linux
+ \end{itemize}
+ \item PIO
+ \begin{itemize}
+ \item Different address spaces for memory and I/O devices
+ \item Uses a special class of CPU instructions to access I/O
+ devices
+ \item Example on x86: IN and OUT instructions
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{MMIO vs PIO}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-io-memory/mmio-vs-pio.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Requesting I/O ports}
+ \begin{itemize}
+ \item Tells the kernel which driver is using which I/O ports
+ \item Allows to prevent other drivers from using the same I/O ports,
+ but is purely voluntary.
+ \item
+\begin{minted}{c}
+struct resource *request_region(
+ unsigned long start,
+ unsigned long len,
+ char *name);
+\end{minted}
+ \item Tries to reserve the given region and returns NULL if unsuccessful.
+ \item \code{request_region(0x0170, 8, "ide1");}
+ \item
+\begin{minted}{c}
+void release_region(
+ unsigned long start,
+ unsigned long len);
+\end{minted}
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{\code{/proc/ioports} example (x86)}
+\begin{verbatim}
+0000-001f : dma1
+0020-0021 : pic1
+0040-0043 : timer0
+0050-0053 : timer1
+0070-0077 : rtc
+0080-008f : dma page reg
+00a0-00a1 : pic2
+00c0-00df : dma2
+00f0-00ff : fpu
+0170-0177 : ide1
+01f0-01f7 : ide0
+0376-0376 : ide1
+03f6-03f6 : ide0
+03f8-03ff : serial
+0800-087f : 0000:00:1f.0
+...
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Accessing I/O ports}
+ \begin{itemize}
+ \item Functions to read/write bytes (\code{b}), word (\code{w}) and longs (\code{l}) to I/O ports:
+ \begin{itemize}
+ \item \mint{c}+unsigned in[bwl](unsigned long *addr)+
+ \item \mint{c}+void out[bwl](unsigned port, unsigned long *addr)+
+ \end{itemize}
+ \item And the strings variants: often more efficient than the
+ corresponding C loop, if the processor supports such operations!
+ \begin{itemize}
+ \item \mint{c}+void ins[bwl](unsigned port, void *addr,+
+ \mint{c}+unsigned long count)+
+ \item \mint{c}+void outs[bwl](unsigned port, void *addr,+
+ \mint{c}+unsigned long count)+
+ \end{itemize}
+ \item Examples
+ \begin{itemize}
+ \item read 8 bits
+ \begin{itemize}
+ \item \mint{c}|oldlcr = inb(baseio + UART_LCR)|
+ \end{itemize}
+ \item write 8 bits
+ \begin{itemize}
+ \item \mint{c}|outb(MOXA_MUST_ENTER_ENCHANCE, baseio + UART_LCR)|
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Requesting I/O memory}
+ \begin{itemize}
+ \item Functions equivalent to \code{request_region()} and
+ \code{release_region()}, but for I/O memory.
+ \item
+\begin{minted}{c}
+struct resource *request_mem_region(
+ unsigned long start,
+ unsigned long len,
+ char *name);
+\end{minted}
+ \item
+\begin{minted}{c}
+void release_mem_region(
+ unsigned long start,
+ unsigned long len);
+ \end{minted}
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{/proc/iomem example}
+\begin{verbatim}
+00000000-0009efff : System RAM
+0009f000-0009ffff : reserved
+000a0000-000bffff : Video RAM area
+000c0000-000cffff : Video ROM
+000f0000-000fffff : System ROM
+00100000-3ffadfff : System RAM
+00100000-0030afff : Kernel code
+0030b000-003b4bff : Kernel data
+3ffae000-3fffffff : reserved
+40000000-400003ff : 0000:00:1f.1
+40001000-40001fff : 0000:02:01.0
+40400000-407fffff : PCI CardBus \#03
+40800000-40bfffff : PCI CardBus \#03
+a0000000-a0000fff : pcmcia\_socket0
+e8000000-efffffff : PCI Bus \#01
+...
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Mapping I/O memory in virtual memory}
+ \begin{itemize}
+ \item Load/store instructions work with virtual addresses
+ \item To access I/O memory, drivers need to have a virtual address
+ that the processor can handle, because I/O memory is not mapped by
+ default in virtual memory.
+ \item The \code{ioremap} functions satisfy this need:
+\begin{minted}{c}
+#include <asm/io.h>
+
+void *ioremap(unsigned long phys_addr,
+ unsigned long size);
+void iounmap(void *address);
+\end{minted}
+ \item Caution: check that ioremap doesn't return a NULL address!
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{ioremap()}
+ \begin{center}
+ \includegraphics[height=0.75\textheight]{slides/kernel-driver-development-io-memory/ioremap.pdf}\\
+ \code{ioremap(0xFFEBC00, 4096) = 0xCDEFA000}
+ \end{center}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Accessing MMIO devices}
+ \begin{itemize}
+ \item Directly reading from or writing to addresses returned by
+ \code{ioremap} (\emph{pointer dereferencing}) may not work on some
+ architectures.
+ \item To do PCI-style, little-endian accesses, conversion being done
+ automatically
+\begin{minted}{c}
+unsigned read[bwl](void *addr);
+void write[bwl](unsigned val, void *addr);
+\end{minted}
+ \item To do raw access, without endianness conversion
+\begin{minted}{c}
+unsigned __raw_read[bwl](void *addr);
+void __raw_write[bwl](unsigned val, void *addr);
+\end{minted}
+ \item Example
+ \begin{itemize}
+ \item 32 bits write
+\begin{minted}{c}
+__raw_writel(1 << KS8695_IRQ_UART_TX,
+ membase + KS8695_INTST);
+\end{minted}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{New API for mixed accesses}
+ \begin{itemize}
+ \item A new API allows to write drivers that can work on either
+ devices accessed over PIO or MMIO. A few drivers use it, but there
+ doesn't seem to be a consensus in the kernel community around it.
+ \item Mapping
+ \begin{itemize}
+ \item For PIO: \code{ioport_map()} and \code{ioport_unmap()}. They
+ don't really map, but they return a special iomem cookie.
+ \item For MMIO: \code{ioremap()} and \code{iounmap()}. As usual.
+ \end{itemize}
+ \item Access, works both on addresses or cookies returned by
+ \code{ioport_map()} and \code{ioremap()}
+ \begin{itemize}
+ \item \code{ioread[8/16/32]()} and \code{iowrite[8/16/32]} for
+ single access
+ \item \code{ioread_rep[8/16/32]()} and
+ \code{iowrite_rep[8/16/32]()} for repeated accesses
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Avoiding I/O access issues}
+ \begin{itemize}
+ \item Caching on I/O ports or memory already disabled
+ \item Use the macros, they do the right thing for your architecture
+ \item The compiler and/or CPU can reorder memory accesses, which
+ might cause troubles for your devices is they expect one register
+ to be read/written before another one.
+ \begin{itemize}
+ \item Memory barriers are available to prevent this reordering
+ \item \code{rmb()} is a read memory barrier, prevents reads to
+ cross the barrier
+ \item \code{wmb()} is a write memory barrier
+ \item \code{mb()} is a read-write memory barrier
+ \end{itemize}
+ \item Starts to be a problem with CPUs that reorder instructions and
+ SMP.
+ \item See \code{Documentation/memory-barriers.txt} for details
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{/dev/mem}
+ \begin{itemize}
+ \item Used to provide user-space applications with direct access to
+ physical addresses.
+ \item Usage: open \code{/dev/mem} and read or write at given offset.
+ What you read or write is the value at the corresponding physical
+ address.
+ \item Used by applications such as the X server to write directly to
+ device memory.
+ \item On x86, arm, tile, unicore32, s390:
+ \code{CONFIG_STRICT_DEVMEM} option to restrict \code{/dev/mem}
+ non-RAM addresses, for security reasons (Linux 3.3 status).
+\end{itemize}
+\end{frame}
diff --git a/slides/kernel-driver-development-io-memory/mmio-vs-pio.dia b/slides/kernel-driver-development-io-memory/mmio-vs-pio.dia
new file mode 100644
index 0000000..c77194e
--- /dev/null
+++ b/slides/kernel-driver-development-io-memory/mmio-vs-pio.dia
@@ -0,0 +1,366 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.95,2.95;13.05,11.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="7,3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </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="7,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.95,3.95;13.05,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="7,4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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 - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.95,7.95;13.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="7,8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.51375,4.62625;12.4863,5.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#MMIO Registers#</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="10,5.22125"/>
+ </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 - Text" version="1" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.295,8.62625;10.705,9.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#RAM#</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="10,9.22125"/>
+ </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="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="21,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="20.95,7.95;27.05,11.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="21,8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#efb9ff"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="24,9.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.8738,9.12625;26.1262,9.87375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#PIO Registers#</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="24,9.72125"/>
+ </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="O5" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.20375,11;14.7963,13.3475"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Physical Memory
+address space, accessed with
+normal load/store instructions#</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="10,11.595"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="24,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.4575,11;29.5425,12.5475"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Separate I/O address space,
+accessed with specific instructions#</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="24,11.595"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O5" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-lab-character-drivers/kernel-driver-development-lab-character-drivers.tex b/slides/kernel-driver-development-lab-character-drivers/kernel-driver-development-lab-character-drivers.tex
new file mode 100644
index 0000000..e923ebb
--- /dev/null
+++ b/slides/kernel-driver-development-lab-character-drivers/kernel-driver-development-lab-character-drivers.tex
@@ -0,0 +1,13 @@
+\setuplabframe
+{Character Drivers}
+{
+ \begin{itemize}
+ \item Writing a simple character driver, to write data to the serial
+ port.
+ \item On your workstation, checking that transmitted data is
+ received correctly.
+ \item Exchanging data between userspace and kernel space.
+ \item Practicing with the character device driver API.
+ \item Using kernel standard error codes.
+ \end{itemize}
+}
diff --git a/slides/kernel-driver-development-lab-debugging/kernel-driver-development-lab-debugging.tex b/slides/kernel-driver-development-lab-debugging/kernel-driver-development-lab-debugging.tex
new file mode 100644
index 0000000..78a62b7
--- /dev/null
+++ b/slides/kernel-driver-development-lab-debugging/kernel-driver-development-lab-debugging.tex
@@ -0,0 +1,12 @@
+\setuplabframe
+{Kernel debugging}
+{
+ \begin{itemize}
+ \item Use the dynamic printk feature.
+ \item Add debugfs entries
+ \item Load a broken driver and see it crash
+ \item Analyze the error information dumped by the kernel.
+ \item Disassemble the code and locate the exact C instruction which
+ caused the failure.
+ \end{itemize}
+}
diff --git a/slides/kernel-driver-development-lab-interrupts/kernel-driver-development-lab-interrupts.tex b/slides/kernel-driver-development-lab-interrupts/kernel-driver-development-lab-interrupts.tex
new file mode 100644
index 0000000..769cc15
--- /dev/null
+++ b/slides/kernel-driver-development-lab-interrupts/kernel-driver-development-lab-interrupts.tex
@@ -0,0 +1,11 @@
+\setuplabframe
+{Interrupts}
+{
+ \begin{itemize}
+ \item Adding read capability to the character driver developed
+ earlier.
+ \item Register an interrupt handler.
+ \item Waiting for data to be available in the read file operation.
+ \item Waking up the code when data is available from the device.
+ \end{itemize}
+}
diff --git a/slides/kernel-driver-development-lab-io-memory/kernel-driver-development-lab-io-memory.tex b/slides/kernel-driver-development-lab-io-memory/kernel-driver-development-lab-io-memory.tex
new file mode 100644
index 0000000..1df779c
--- /dev/null
+++ b/slides/kernel-driver-development-lab-io-memory/kernel-driver-development-lab-io-memory.tex
@@ -0,0 +1,11 @@
+\setuplabframe
+{I/O Memory and Ports}
+{
+ \begin{itemize}
+ \item Make a remote connection to your board through ssh
+ \item Access to the system console through the network
+ \item Reserve the I/O memory addresses used by the serial port
+ \item Read device registers and write data to them, to send
+ characters on the serial port
+ \end{itemize}
+}
diff --git a/slides/kernel-driver-development-lab-locking/kernel-driver-development-lab-locking.tex b/slides/kernel-driver-development-lab-locking/kernel-driver-development-lab-locking.tex
new file mode 100644
index 0000000..ece2b0e
--- /dev/null
+++ b/slides/kernel-driver-development-lab-locking/kernel-driver-development-lab-locking.tex
@@ -0,0 +1,8 @@
+\setuplabframe
+{Locking}
+{
+ \begin{itemize}
+ \item Add locking to the driver to prevent concurrent accesses to
+ shared resources
+ \end{itemize}
+}
diff --git a/slides/kernel-driver-development-lab-modules/kernel-driver-development-lab-modules.tex b/slides/kernel-driver-development-lab-modules/kernel-driver-development-lab-modules.tex
new file mode 100644
index 0000000..4d376a5
--- /dev/null
+++ b/slides/kernel-driver-development-lab-modules/kernel-driver-development-lab-modules.tex
@@ -0,0 +1,9 @@
+\setuplabframe
+{Writing Modules}
+{
+ \begin{itemize}
+ \item Create, compile and load your first module
+ \item Add module parameters
+ \item Access kernel internals from your module
+ \end{itemize}
+}
diff --git a/slides/kernel-driver-development-memory/allocators.dia b/slides/kernel-driver-development-memory/allocators.dia
new file mode 100644
index 0000000..65469ad
--- /dev/null
+++ b/slides/kernel-driver-development-memory/allocators.dia
@@ -0,0 +1,724 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.95,4.95;37.05,8.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="8,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="29"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22.5,6.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="17.8375,5.9075;27.1625,7.0925"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Some Kernel Code#</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.2699999511241913"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="22.5,6.8525"/>
+ </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="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.95,9.95;18.05,14.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="8,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#efb9ff"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.95,15.95;24.05,22.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="8,16"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="16"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="6"/>
+ </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 - Box" version="0" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8,24"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.95,23.95;37.05,27.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="8,24"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="29"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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 - Box" version="0" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.95,10.95;37.05,15.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="27,11"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13,12"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.37625,11.0125;16.6238,12"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#kmalloc allocator#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="13,11.8"/>
+ </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="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13,12"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.97375,12;17.0262,13.5475"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Uses a set of anonymous
+SLAB caches#</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="13,12.595"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.6382,7.95;13.3618,10.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="13,8"/>
+ <dia:point val="13,10"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O2" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.6382,7.95;32.3618,11.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="32,8"/>
+ <dia:point val="32,11"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O5" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.6382,7.95;20.3618,16.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="20,8"/>
+ <dia:point val="20,16"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.6382,13.95;13.3618,16.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="13,14"/>
+ <dia:point val="13,16"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="25.6382,7.95;26.3618,24.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="26,8"/>
+ <dia:point val="26,24"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.6382,14.95;32.3618,24.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="32,15"/>
+ <dia:point val="32,24"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O5" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,22"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.6382,21.95;16.3618,24.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="16,22"/>
+ <dia:point val="16,24"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O3" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.8703,16.8801;19.105,19"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#SLAB Allocator
+#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="16,17.6923"/>
+ </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="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O3" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.6725,19;23.3275,21.3475"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Allows to create caches, each cache storing
+objects of the same size. Size can be lower or
+greater than a page size.#</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="16,19.595"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O3" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.3412,12.0125;35.6587,13"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#vmalloc Allocator#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="32,12.8"/>
+ </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="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O5" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O18">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="27.7937,13;36.2062,14.5475"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Non-physically contiguous
+memory#</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="32,13.595"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O5" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O19">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22.5,25.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.465,24.5125;25.535,25.5"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Page Allocator#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="22.5,25.3"/>
+ </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="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O4" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O20">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22.5,25.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.3338,25.5;34.6662,26.2475"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Allows to allocate contiguous areas of physical pages (4k, 8k, 16k, 32k, etc)#</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="22.5,26.095"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O4" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-memory/kernel-driver-development-memory.tex b/slides/kernel-driver-development-memory/kernel-driver-development-memory.tex
new file mode 100644
index 0000000..11330f7
--- /dev/null
+++ b/slides/kernel-driver-development-memory/kernel-driver-development-memory.tex
@@ -0,0 +1,368 @@
+\subsection{Memory Management}
+
+\begin{frame}
+ \frametitle{Physical and Virtual Memory}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-memory/mmu.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Virtual Memory Organization}
+ \begin{columns}
+ \column{0.3\textwidth}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-memory/memory-organization.pdf}
+ \column{0.7\textwidth}
+ \begin{itemize}
+ \item 1GB reserved for kernel-space
+ \item Contains kernel code and core data structures, identical in
+ all address spaces
+ \item Most memory can be a direct mapping of physical memory at a
+ fixed offset
+ \item Complete 3GB exclusive mapping available for each user-space
+ process
+ \item Process code and data (program, stack, ...)
+ \item Memory-mapped files
+ \item Not necessarily mapped to physical memory (demand fault
+ paging used for dynamic mapping to physical memory pages)
+ \item Differs from one address space to another
+ \end{itemize}
+ \end{columns}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Physical / virtual memory mapping}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-memory/memory-mapping.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Accessing more physical memory}
+ \begin{itemize}
+ \item Only less than 1GB memory addressable directly through kernel
+ virtual address space
+ \item If more physical memory is present on the platform, part of
+ the memory will not be accessible by kernel space, but can be used
+ by user-space
+ \item To allow the kernel to access more physical memory:
+ \begin{itemize}
+ \item Change 1GB/3GB memory split (2GB/2GB)
+ (\code{CONFIG_VMSPLIT_3G)} $\Rightarrow$ reduces total memory
+ available for each process
+ \item Change for a 64 bit architecture ;-) See
+ \code{Documentation/x86/x86_64/mm.txt} for an example.
+ \item Activate \emph{highmem} support if available for your
+ architecture:
+ \begin{itemize}
+ \item Allows kernel to map parts of its non-directly accessible
+ memory
+ \item Mapping must be requested explicitly
+ \item Limited addresses ranges reserved for this usage
+ \end{itemize}
+ \end{itemize}
+ \item See \url{http://lwn.net/Articles/75174/} for useful
+ explanations
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Accessing even more physical memory!}
+ \begin{itemize}
+ \item If your 32 bit platform hosts more than 4GB, they just cannot
+ be mapped
+ \item The PAE (Physical Address Expansion) may be supported by your
+ architecture
+ \item Adds some address extension bits used to index memory areas
+ \item Allows accessing up to 64 GB of physical memory by 4 GB pages
+ \item Note that each user-space process is still limited to a 3 GB
+ memory space
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Notes on user-space memory}
+ \begin{itemize}
+ \item New user-space memory is allocated either from the already
+ allocated process memory, or using the mmap system call
+ \item Note that memory allocated may not be physically allocated:
+ \begin{itemize}
+ \item Kernel uses demand fault paging to allocate the physical
+ page (the physical page is allocated when access to the virtual
+ address generates a page fault)
+ \item ... or may have been swapped out, which also induces a page
+ fault
+ \end{itemize}
+ \item User space memory allocation is allowed to over-commit memory
+ (more than available physical memory) $\Rightarrow$ can lead to
+ out of memory
+ \item OOM killer kicks in and selects a process to kill to retrieve
+ some memory. That's better than letting the system freeze.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Back to kernel memory}
+ \begin{itemize}
+ \item Kernel memory allocators (see following slides) allocate
+ physical pages, and kernel allocated memory cannot be swapped out,
+ so no fault handling required for kernel memory.
+ \item Most kernel memory allocation functions also return a kernel
+ virtual address to be used within the kernel space.
+ \item Kernel memory low-level allocator manages pages. This is the
+ finest granularity (usually 4 kB, architecture dependent).
+ \item However, the kernel memory management handles smaller memory
+ allocations through its allocator (see slabs / SLUB allocator â
+ used by kmalloc).
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Allocators in the Kernel}
+ \begin{center}
+ \includegraphics[height=0.85\textheight]{slides/kernel-driver-development-memory/allocators.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Page Allocator}
+ \begin{itemize}
+ \item Appropriate for medium-size allocations
+ \item A page is usually 4K, but can be made greater in some
+ architectures (sh, mips: 4, 8, 16 or 64K, but not configurable in
+ x86 or arm).
+ \item Buddy allocator strategy, so only allocations of power of two
+ number of pages are possible: 1 page, 2 pages, 4 pages, 8 pages,
+ 16 pages, etc.
+ \item Typical maximum size is 8192 KB, but it might depend on the
+ kernel configuration.
+ \item The allocated area is virtually contiguous (of course), but
+ also physically contiguous. It is allocated in the identity-mapped
+ part of the kernel memory space.
+ \begin{itemize}
+ \item This means that large areas may not be available or hard to
+ retrieve due to physical memory fragmentation.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Page Allocator API}
+ \begin{itemize}
+ \item \mint{c}+unsigned long get_zeroed_page(int flags)+
+ \begin{itemize}
+ \item Returns the virtual address of a free page, initialized to
+ zero
+ \end{itemize}
+ \item \mint{c}+unsigned long __get_free_page(int flags)+
+ \begin{itemize}
+ \item Same, but doesn't initialize the contents
+ \end{itemize}
+ \item \mint{c}+unsigned long __get_free_pages(int flags,+
+ \mint{c}+unsigned int order)+
+ \begin{itemize}
+ \item Returns the starting virtual address of an area of several
+ contiguous pages in physical RAM, with order being
+ \code{log2(number_of_pages)}.Can be computed
+ from the size with the \code{get_order()} function.
+ \end{itemize}
+ \item \mint{c}+void free_page(unsigned long addr)+
+ \begin{itemize}
+ \item Frees one page.
+ \end{itemize}
+ \item \mint{c}+void free_pages(unsigned long addr,+
+ \mint{c}+unsigned int order)+
+ \begin{itemize}
+ \item Frees multiple pages. Need to use the same order as in
+ allocation.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Page Allocator Flags}
+ \begin{itemize}
+ \item The most common ones are:
+ \begin{itemize}
+ \item \code{GFP_KERNEL}
+ \begin{itemize}
+ \item Standard kernel memory allocation. The allocation may
+ block in order to find enough available memory. Fine for most
+ needs, except in interrupt handler context.
+ \end{itemize}
+ \item \code{GFP_ATOMIC}
+ \begin{itemize}
+ \item RAM allocated from code which is not allowed to block
+ (interrupt handlers or critical sections). Never blocks,
+ allows to access emergency pools, but can fail if no free
+ memory is readily available.
+ \end{itemize}
+ \item \code{GFP_DMA}
+ \begin{itemize}
+ \item Allocates memory in an area of the physical memory usable
+ for DMA transfers.
+ \end{itemize}
+ \item Others are defined in \code{include/linux/gfp.h}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{SLAB Allocator 1/2}
+ \begin{itemize}
+ \item The SLAB allocator allows to create caches, which contains a
+ set of objects of the same size
+ \item The object size can be smaller or greater than the page size
+ \item The SLAB allocator takes care of growing or reducing the size
+ of the cache as needed, depending on the number of allocated
+ objects. It uses the page allocator to allocate and free pages.
+ \item SLAB caches are used for data structures that are present in
+ many many instances in the kernel: directory entries, file
+ objects, network packet descriptors, process descriptors, etc.
+ \begin{itemize}
+ \item See \code{/proc/slabinfo}
+ \end{itemize}
+ \item They are rarely used for individual drivers.
+ \item See \code{include/linux/slab.h} for the API
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{SLAB Allocator 2/2}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-memory/slab-allocator.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Different SLAB Allocators}
+ \begin{itemize}
+ \item There are three different, but API compatible, implementations of
+ a SLAB allocator in the Linux kernel. A particular implementation
+ is chosen at configuration time.
+ \begin{itemize}
+ \item SLAB: original, well proven allocator in Linux 2.6.
+ \item SLOB: much simpler. More space efficient but doesn't scale
+ well. Saves a few hundreds of KB in small systems (depends on
+ \code{CONFIG_EXPERT})
+ \item SLUB: the new default allocator since 2.6.23, simpler than
+ SLAB, scaling much better (in particular for huge systems) and
+ creating less fragmentation.
+ \end{itemize}
+ \end{itemize}
+ \begin{center}
+ \includegraphics[height=0.3\textheight]{slides/kernel-driver-development-memory/slab-screenshot.png}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{kmalloc Allocator}
+ \begin{itemize}
+ \item The kmalloc allocator is the general purpose memory allocator
+ in the Linux kernel, for objects from 8 bytes to 128 KB
+ \item For small sizes, it relies on generic SLAB caches, named
+ kmalloc-XXX in \code{/proc/slabinfo}
+ \item For larger sizes, it relies on the page allocator
+ \item The allocated area is guaranteed to be physically contiguous
+ \item The allocated area size is rounded up to the next power of two
+ size (while using the SLAB allocator directly allows to have more
+ flexibility)
+ \item It uses the same flags as the page allocator (\code{GFP_KERNEL},
+ \code{GFP_ATOMIC}, \code{GFP_DMA}, etc.) with the same semantics.
+ \item Should be used as the primary allocator unless there is a
+ strong reason to use another one.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{kmalloc API 1/2}
+ \begin{itemize}
+ \item \mint{c}+#include <linux/slab.h>+
+ \item \mint{c}+void *kmalloc(size_t size, int flags);+
+ \begin{itemize}
+ \item Allocate size bytes, and return a pointer to the area
+ (virtual address)
+ \item \code{size}: number of bytes to allocate
+ \item \code{flags}: same flags as the page allocator
+ \end{itemize}
+ \item \mint{c}+void kfree (const void *objp);+
+ \begin{itemize}
+ \item Free an allocated area
+ \end{itemize}
+ \item Example: (\code{drivers/infiniband/core/cache.c})
+ \end{itemize}
+\begin{minted}{c}
+struct ib_update_work *work;
+work = kmalloc(sizeof *work, GFP_ATOMIC);
+...
+kfree(work);
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{kmalloc API 2/2}
+ \begin{itemize}
+ \item \mint{c}+void *kzalloc(size_t size, gfp_t flags);+
+ \begin{itemize}
+ \item Allocates a zero-initialized buffer
+ \end{itemize}
+ \item \mint{c}+void *kcalloc(size_t n, size_t size, gfp_t flags);+
+ \begin{itemize}
+ \item Allocates memory for an array of n elements of size size,
+ and zeroes its contents.
+ \end{itemize}
+ \item \mint{c}+void *krealloc(const void *p, size_t new_size,+
+ \mint{c}+gfp_t flags);+
+ \begin{itemize}
+ \item Changes the size of the buffer pointed by \code{p} to
+ \code{new_size}, by reallocating a new buffer and copying the
+ data, unless the \code{new_size} fits within the alignment of
+ the existing buffer.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{vmalloc Allocator}
+ \begin{itemize}
+ \item The vmalloc allocator can be used to obtain virtually
+ contiguous memory zones, but not physically contiguous. The
+ requested memory size is rounded up to the next page.
+ \item The allocated area is in the kernel space part of the address
+ space, but outside of the identically-mapped area
+ \item Allocations of fairly large areas is possible, since physical
+ memory fragmentation is not an issue, but areas cannot be used for
+ DMA, as DMA usually requires physically contiguous buffers.
+ \item API in \code{include/linux/vmalloc.h}
+ \begin{itemize}
+ \item \mint{c}+void *vmalloc(unsigned long size);+
+ \begin{itemize}
+ \item Returns a virtual address
+ \end{itemize}
+ \item \mint{c}+void vfree(void *addr);+
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Kernel memory debugging}
+ \begin{itemize}
+ \item Debugging features available since 2.6.31
+ \begin{itemize}
+ \item \code{Kmemcheck}
+ \begin{itemize}
+ \item Dynamic checker for access to uninitialized memory.
+ \item Only available on x86 so far (Linux 3.3 status), but will
+ help to improve architecture independent code anyway.
+ \item See \code{Documentation/kmemcheck.txt} for details.
+ \end{itemize}
+ \item \code{Kmemleak}
+ \begin{itemize}
+ \item Dynamic checker for memory leaks
+ \item This feature is available for all architectures.
+ \item See \code{Documentation/kmemleak.txt} for details.
+ \end{itemize}
+ \end{itemize}
+ \item Both have a significant overhead. Only use them in development!
+ \end{itemize}
+\end{frame}
diff --git a/slides/kernel-driver-development-memory/memory-mapping.dia b/slides/kernel-driver-development-memory/memory-mapping.dia
new file mode 100644
index 0000000..c76f799
--- /dev/null
+++ b/slides/kernel-driver-development-memory/memory-mapping.dia
@@ -0,0 +1,746 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="15,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14.95,6.95;19.05,11.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="15,7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3.9999999999999991"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#cc1f1a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffacac"/>
+ </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="15,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14.95,10.95;19.05,20.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="15,11"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="9"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#efb9ff"/>
+ </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="17,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.9938,8.62625;18.0063,9.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Kernel#</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="17,9.22125"/>
+ </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="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="15,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.07,6.2525;15,7"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#0xFFFFFFFF #</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="15,6.8475"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="0"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="15,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.71,10.6263;15,11.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#0xC0000000 #</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="15,11.2213"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="5"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="15,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.75,20;15,20.7475"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#0x00000000 #</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="15,20.595"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O1" connection="5"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="17,15.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.4825,15.1263;18.5175,15.8738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Process n#</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="17,15.7213"/>
+ </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="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="28,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="27.95,5.95;38.05,21.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="28,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="15"/>
+ </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="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.95,6.95;37.05,9.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="29,7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="33,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.1412,7.62625;34.8588,8.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#I/O Memory#</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="33,8.22125"/>
+ </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="29,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.95,9.95;37.05,20.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="29,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="10"/>
+ </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="30,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="29.95,10.95;36.05,14.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="30,11"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="30,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="29.95,13.95;36.05,17.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="30,14"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="30,17"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="29.95,16.95;36.05,19.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="30,17"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="33,12.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.3463,12.1263;35.6538,12.8738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#ZONE_HIGHMEM#</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="33,12.7213"/>
+ </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="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="33,15.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.5375,15.1263;35.4625,15.8738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#ZONE_NORMAL#</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="33,15.7213"/>
+ </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="O12" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="33,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.185,17.6262;34.815,18.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#ZONE_DMA#</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="33,18.2212"/>
+ </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="O13" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="33,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="32.295,10;33.705,10.7475"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#RAM#</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="33,10.595"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O10" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O18">
+ <dia:attribute name="obj_pos">
+ <dia:point val="33,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.0337,5.0125;37.9663,6"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Physical Address Space#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="33,5.8"/>
+ </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="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O7" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O19">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.9453,7.94527;29.0547,9.05473"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="19,8"/>
+ <dia:point val="29,9"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="dashlength">
+ <dia:real val="0.50000000000000011"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O8" connection="5"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O20">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.95,6.95;29.05,7.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="19,7"/>
+ <dia:point val="29,7"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="dashlength">
+ <dia:real val="0.50000000000000011"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O8" connection="0"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O21">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.9322,7.93216;30.0678,14.0678"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="19,8"/>
+ <dia:point val="30,14"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="dashlength">
+ <dia:real val="0.50000000000000011"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O12" connection="0"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O22">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.9302,10.9302;30.0698,19.0698"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="19,11"/>
+ <dia:point val="30,19"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="dashlength">
+ <dia:real val="0.50000000000000011"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O13" connection="5"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-memory/memory-organization.dia b/slides/kernel-driver-development-memory/memory-organization.dia
new file mode 100644
index 0000000..2bef191
--- /dev/null
+++ b/slides/kernel-driver-development-memory/memory-organization.dia
@@ -0,0 +1,305 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="13.95,5.95;18.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="14,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#cc1f1a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffacac"/>
+ </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="14,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="13.95,9.95;18.05,20.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="14,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="10"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#efb9ff"/>
+ </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="16,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14.9938,7.62625;17.0063,8.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Kernel#</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="16,8.22125"/>
+ </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="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.07,5.2525;14,6"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#0xFFFFFFFF #</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="14,5.8475"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="0"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.71,9.62625;14,10.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#0xC0000000 #</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="14,10.2213"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="5"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.75,20;14,20.7475"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#0x00000000 #</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="14,20.595"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O1" connection="5"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14.4825,14.6263;17.5175,15.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Process n#</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="16,15.2213"/>
+ </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:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-memory/mmu.dia b/slides/kernel-driver-development-memory/mmu.dia
new file mode 100644
index 0000000..a49ddef
--- /dev/null
+++ b/slides/kernel-driver-development-memory/mmu.dia
@@ -0,0 +1,1348 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,4.95;14.05,26.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="21"/>
+ </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 - Box" version="0" id="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,5.95;13.05,8.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,8.95;13.05,11.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,12"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,11.95;13.05,14.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,12"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="6,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,15.95;13.05,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,16"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,19.95;13.05,22.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,20"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,23"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,22.95;13.05,25.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,23"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9.5,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.33625,6.62625;11.6638,7.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#I/O Memory 3#</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="9.5,7.22125"/>
+ </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 - Text" version="1" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.33625,9.62625;11.6638,10.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#I/O Memory 2#</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="9.5,10.2213"/>
+ </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="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9.5,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.33625,12.6263;11.6638,13.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#I/O Memory 1#</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="9.5,13.2213"/>
+ </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="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9.5,17"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.6625,16.6262;10.3375,17.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Flash#</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="9.5,17.2212"/>
+ </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 - Text" version="1" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9.5,21"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.49,20.6262;10.51,21.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#RAM 1#</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="9.5,21.2212"/>
+ </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="O5" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9.5,24"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.49,23.6262;10.51,24.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#RAM 0#</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="9.5,24.2212"/>
+ </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:attribute name="fill_color">
+ <dia:color val="#ffffff"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O6" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9.5,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.53375,4.0125;14.4663,5"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Physical Address Space#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="9.5,4.8"/>
+ </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="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="18,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="17.95,12.95;23.05,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="18,13"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="5"/>
+ </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="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20.5,15.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.46,15.0062;21.54,15.9938"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#MMU#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="20.5,15.7937"/>
+ </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="O14" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.95,12.95;32.05,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="27,13"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="5"/>
+ </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="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29.5,15.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.64,14.9692;30.3847,16.0308"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#CPU#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="29.5,15.7814"/>
+ </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="O16" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O18">
+ <dia:attribute name="obj_pos">
+ <dia:point val="18,15.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="13.8882,15.1382;18.05,15.8618"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="18,15.5"/>
+ <dia:point val="14,15.5"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O14" connection="3"/>
+ <dia:connection handle="1" to="O0" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O19">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,15.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="22.8882,15.1382;27.05,15.8618"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="27,15.5"/>
+ <dia:point val="23,15.5"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O16" connection="3"/>
+ <dia:connection handle="1" to="O14" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O20">
+ <dia:attribute name="obj_pos">
+ <dia:point val="41,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="40.95,2.95;44.05,5.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="41,3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#cc1f1a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffacac"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O21">
+ <dia:attribute name="obj_pos">
+ <dia:point val="41,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="40.95,4.95;44.05,11.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="41,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O22">
+ <dia:attribute name="obj_pos">
+ <dia:point val="44,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="44,3.62625;46.215,4.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string># Kernel#</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="44,4.22125"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O20" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O23">
+ <dia:attribute name="obj_pos">
+ <dia:point val="41,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="37.07,2.2525;41,3"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#0xFFFFFFFF #</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="41,2.8475"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O20" connection="0"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O24">
+ <dia:attribute name="obj_pos">
+ <dia:point val="41,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="36.71,4.62625;41,5.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#0xC0000000 #</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="41,5.22125"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O20" connection="5"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O25">
+ <dia:attribute name="obj_pos">
+ <dia:point val="41,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="36.75,11;41,11.7475"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#0x00000000 #</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="41,11.595"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O21" connection="5"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O26">
+ <dia:attribute name="obj_pos">
+ <dia:point val="44,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="44,7.62625;47.24,8.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string># Process 1#</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="44,8.22125"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O21" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O27">
+ <dia:attribute name="obj_pos">
+ <dia:point val="41,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.8882,3.95;41.05,15.8618"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="41,4"/>
+ <dia:point val="36.5,4"/>
+ <dia:point val="36.5,15.5"/>
+ <dia:point val="32,15.5"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O20" connection="3"/>
+ <dia:connection handle="1" to="O16" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O28">
+ <dia:attribute name="obj_pos">
+ <dia:point val="41,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.8882,7.95;41.05,15.8618"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="41,8"/>
+ <dia:point val="36.5,8"/>
+ <dia:point val="36.5,15.5"/>
+ <dia:point val="32,15.5"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O21" connection="3"/>
+ <dia:connection handle="1" to="O16" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O29">
+ <dia:attribute name="obj_pos">
+ <dia:point val="41,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="40.95,19.95;44.05,22.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="41,20"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#cc1f1a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffacac"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O30">
+ <dia:attribute name="obj_pos">
+ <dia:point val="41,22"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="40.95,21.95;44.05,28.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="41,22"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#efb9ff"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O31">
+ <dia:attribute name="obj_pos">
+ <dia:point val="44,21"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="44,20.6262;46.215,21.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string># Kernel#</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="44,21.2212"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O29" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O32">
+ <dia:attribute name="obj_pos">
+ <dia:point val="41,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="37.07,19.2525;41,20"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#0xFFFFFFFF #</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="41,19.8475"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O29" connection="0"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O33">
+ <dia:attribute name="obj_pos">
+ <dia:point val="41,22"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="36.71,21.6262;41,22.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#0xC0000000 #</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="41,22.2212"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O29" connection="5"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O34">
+ <dia:attribute name="obj_pos">
+ <dia:point val="41,28"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="36.75,28;41,28.7475"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#0x00000000 #</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="41,28.595"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O30" connection="5"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O35">
+ <dia:attribute name="obj_pos">
+ <dia:point val="44,25"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="44,24.6262;47.24,25.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string># Process 2#</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="44,25.2212"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O30" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O36">
+ <dia:attribute name="obj_pos">
+ <dia:point val="41,21"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.8882,15.1382;41.05,21.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="41,21"/>
+ <dia:point val="36.5,21"/>
+ <dia:point val="36.5,15.5"/>
+ <dia:point val="32,15.5"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O29" connection="3"/>
+ <dia:connection handle="1" to="O16" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O37">
+ <dia:attribute name="obj_pos">
+ <dia:point val="41,25"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.8882,15.1382;41.05,25.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="41,25"/>
+ <dia:point val="36.5,25"/>
+ <dia:point val="36.5,15.5"/>
+ <dia:point val="32,15.5"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O30" connection="3"/>
+ <dia:connection handle="1" to="O16" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O38">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14,5;17.9487,5.80356"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string># 0xFFFFFFFF#</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="14,5.61369"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="2"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O39">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14,26"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14,25.2525;18.25,26"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string># 0x00000000#</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="14,25.8475"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="7"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-memory/slab-allocator.dia b/slides/kernel-driver-development-memory/slab-allocator.dia
new file mode 100644
index 0000000..fdd3768
--- /dev/null
+++ b/slides/kernel-driver-development-memory/slab-allocator.dia
@@ -0,0 +1,1979 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="4,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.95,2.95;52.05,14.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="4,3"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="48"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="11"/>
+ </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 - Box" version="0" id="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="15,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14.95,3.95;22.05,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="15,4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="9"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.95,4.95;21.05,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="19,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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 - Box" version="0" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.95,4.95;18.05,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="16,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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="16,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.95,8.95;18.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="16,9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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 - Box" version="0" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.95,6.95;18.05,8.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="16,7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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 - Box" version="0" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.95,6.95;21.05,8.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="19,7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.95,8.95;21.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="19,9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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 - Box" version="0" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.95,10.95;18.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="16,11"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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 - Box" version="0" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.95,10.95;21.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="19,11"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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 - Box" version="0" id="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,3.95;12.05,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="9"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </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="9,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.95,4.95;11.05,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="9,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,4.95;8.05,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,8.95;8.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,6.95;8.05,8.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.95,6.95;11.05,8.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="9,7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.95,8.95;11.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="9,9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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 - Box" version="0" id="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,10.95;8.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,11"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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 - Box" version="0" id="O18">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.95,10.95;11.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="9,11"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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 - Box" version="0" id="O19">
+ <dia:attribute name="obj_pos">
+ <dia:point val="25,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="24.95,3.95;32.05,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="25,4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="9"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O20">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.95,4.95;31.05,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="29,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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="O21">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="25.95,4.95;28.05,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="26,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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="O22">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="25.95,8.95;28.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="26,9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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="O23">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="25.95,6.95;28.05,8.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="26,7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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="O24">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.95,6.95;31.05,8.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="29,7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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="O25">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.95,8.95;31.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="29,9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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 - Box" version="0" id="O26">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="25.95,10.95;28.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="26,11"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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 - Box" version="0" id="O27">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.95,10.95;31.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="29,11"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="1"/>
+ </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 - Line" version="0" id="O28">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,8.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.95,8.1382;15.1118,8.8618"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="12,8.5"/>
+ <dia:point val="15,8.5"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O10" connection="4"/>
+ <dia:connection handle="1" to="O1" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O29">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22,8.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.95,8.1382;25.1118,8.8618"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="22,8.5"/>
+ <dia:point val="25,8.5"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O1" connection="4"/>
+ <dia:connection handle="1" to="O19" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O30">
+ <dia:attribute name="obj_pos">
+ <dia:point val="52,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="47.87,3;52,4.185"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Cache 1#</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.2699999511241913"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="52,3.945"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="2"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O31">
+ <dia:attribute name="obj_pos">
+ <dia:point val="52,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="44.3975,13.1425;52,14"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Objects of 512 bytes#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="52,13.825"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="7"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O32">
+ <dia:attribute name="obj_pos">
+ <dia:point val="4,22"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.95,21.95;52.05,33.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="4,22"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="48"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="11"/>
+ </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 - Box" version="0" id="O33">
+ <dia:attribute name="obj_pos">
+ <dia:point val="15,23"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14.95,22.95;22.05,32.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="15,23"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="9"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O34">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,24"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.95,23.95;18.05,27.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="16,24"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O35">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,24"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.95,23.95;21.05,27.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="19,24"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O36">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,23"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,22.95;12.05,32.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,23"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="9"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O37">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,24"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,23.95;8.05,27.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,24"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O38">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,28"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,27.95;8.05,31.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,28"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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 - Box" version="0" id="O39">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,28"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.95,27.95;11.05,31.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="9,28"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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 - Box" version="0" id="O40">
+ <dia:attribute name="obj_pos">
+ <dia:point val="25,23"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="24.95,22.95;32.05,32.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="25,23"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="9"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O41">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,27.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.95,27.1382;15.1118,27.8618"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="12,27.5"/>
+ <dia:point val="15,27.5"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O36" connection="4"/>
+ <dia:connection handle="1" to="O33" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O42">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22,27.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.95,27.1382;25.1118,27.8618"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="22,27.5"/>
+ <dia:point val="25,27.5"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O33" connection="4"/>
+ <dia:connection handle="1" to="O40" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O43">
+ <dia:attribute name="obj_pos">
+ <dia:point val="52,22"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="47.87,22;52,23.185"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Cache 2#</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.2699999511241913"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="52,22.945"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O32" connection="2"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O44">
+ <dia:attribute name="obj_pos">
+ <dia:point val="52,33"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="43.93,32.1425;52,33"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Objects of 1024 bytes#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="52,32.825"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O32" connection="7"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O45">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,24"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.95,23.95;11.05,27.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="9,24"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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 - Box" version="0" id="O46">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,28"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.95,27.95;21.05,31.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="19,28"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O47">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,28"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.95,27.95;18.05,31.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="16,28"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O48">
+ <dia:attribute name="obj_pos">
+ <dia:point val="35,23"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="34.95,22.95;42.05,32.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="35,23"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="9"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O49">
+ <dia:attribute name="obj_pos">
+ <dia:point val="39,28"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="38.95,27.95;41.05,31.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="39,28"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O50">
+ <dia:attribute name="obj_pos">
+ <dia:point val="36,24"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="35.95,23.95;38.05,27.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="36,24"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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 - Box" version="0" id="O51">
+ <dia:attribute name="obj_pos">
+ <dia:point val="39,24"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="38.95,23.95;41.05,27.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="39,24"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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 - Box" version="0" id="O52">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,24"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="25.95,23.95;28.05,27.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="26,24"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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 - Box" version="0" id="O53">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,28"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.95,27.95;31.05,31.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="29,28"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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 - Box" version="0" id="O54">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,28"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="25.95,27.95;28.05,31.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="26,28"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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 - Box" version="0" id="O55">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,24"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.95,23.95;31.05,27.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="29,24"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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 - Box" version="0" id="O56">
+ <dia:attribute name="obj_pos">
+ <dia:point val="36,28"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="35.95,27.95;38.05,31.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="36,28"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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 - Line" version="0" id="O57">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32,27.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.95,27.1382;35.1118,27.8618"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="32,27.5"/>
+ <dia:point val="35,27.5"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O40" connection="4"/>
+ <dia:connection handle="1" to="O48" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O58">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14,17.3631;19.5071,18.6369"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string># 4KiB page#</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.2699999511241913"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="14,18.3377"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O59">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.41727,12.9248;14.0706,18.0706"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="14,18"/>
+ <dia:point val="8.5,13"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O10" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O60">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.41727,17.9294;14.0706,23.0752"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="14,18"/>
+ <dia:point val="8.5,23"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O36" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O61">
+ <dia:attribute name="obj_pos">
+ <dia:point val="34,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="34,15.4075;47.8925,16.5925"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string># Allocated 512 bytes object#</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.2699999511241913"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="34,16.3525"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O62">
+ <dia:attribute name="obj_pos">
+ <dia:point val="34,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="29.9209,11.9209;34.0707,16.0707"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="34,16"/>
+ <dia:point val="30,12"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O27" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O63">
+ <dia:attribute name="obj_pos">
+ <dia:point val="34,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="34,19.3631;45.9946,20.6369"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string># Free 1024 bytes object#</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.2699999511241913"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="34,20.3377"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O64">
+ <dia:attribute name="obj_pos">
+ <dia:point val="34,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="29.9209,19.9293;34.0707,24.0791"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="34,20"/>
+ <dia:point val="30,24"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O55" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-memory/slab-screenshot.png b/slides/kernel-driver-development-memory/slab-screenshot.png
new file mode 100644
index 0000000..99b2aea
Binary files /dev/null and b/slides/kernel-driver-development-memory/slab-screenshot.png differ
diff --git a/slides/kernel-driver-development-mmap/kernel-driver-development-mmap.tex b/slides/kernel-driver-development-mmap/kernel-driver-development-mmap.tex
new file mode 100644
index 0000000..4acc8cf
--- /dev/null
+++ b/slides/kernel-driver-development-mmap/kernel-driver-development-mmap.tex
@@ -0,0 +1,174 @@
+\subsection{mmap}
+
+\begin{frame}
+ \frametitle{mmap}
+ \begin{itemize}
+ \item Possibility to have parts of the virtual address space of a
+ program mapped to the contents of a file
+ \item Particularly useful when the file is a device file
+ \item Allows to access device I/O memory and ports without having to
+ go through (expensive) read, write or ioctl calls
+ \item One can access to current mapped files by two means:
+ \begin{itemize}
+ \item \code{/proc/<pid>/maps}
+ \item \code{pmap <pid>}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{/proc/pid/maps}
+{\footnotesize
+\begin{verbatim}
+ start-end perm offset major:minor inode mapped file name
+00771000-0077f000 r-xp 00000000 03:05 1165839 /lib/libselinux.so.1
+0077f000-00781000 rw-p 0000d000 03:05 1165839 /lib/libselinux.so.1
+0097d000-00992000 r-xp 00000000 03:05 1158767 /lib/ld-2.3.3.so
+00992000-00993000 r--p 00014000 03:05 1158767 /lib/ld-2.3.3.so
+00993000-00994000 rw-p 00015000 03:05 1158767 /lib/ld-2.3.3.so
+00996000-00aac000 r-xp 00000000 03:05 1158770 /lib/tls/libc-2.3.3.so
+00aac000-00aad000 r--p 00116000 03:05 1158770 /lib/tls/libc-2.3.3.so
+00aad000-00ab0000 rw-p 00117000 03:05 1158770 /lib/tls/libc-2.3.3.so
+00ab0000-00ab2000 rw-p 00ab0000 00:00 0
+08048000-08050000 r-xp 00000000 03:05 571452 /sbin/init (text)
+08050000-08051000 rw-p 00008000 03:05 571452 /sbin/init (data, stack)
+08b43000-08b64000 rw-p 08b43000 00:00 0
+f6fdf000-f6fe0000 rw-p f6fdf000 00:00 0
+fefd4000-ff000000 rw-p fefd4000 00:00 0
+ffffe000-fffff000 ---p 00000000 00:00 0
+\end{verbatim}
+}
+\end{frame}
+
+\begin{frame}
+ \frametitle{mmap Overview}
+ \begin{center}
+ \todo{Schema}
+% \includegraphics[width=\textwidth]{slides/kernel-driver-development-mmap/mmap-overview.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{How to Implement mmap - User Space}
+ \begin{itemize}
+ \item Open the device file
+ \item Call the \code{mmap} system call (see \code{man mmap} for
+ details):
+ \begin{minted}[fontsize=\footnotesize]{c}
+void * mmap(
+ void *start, /* Often 0, preferred starting address */
+ size_t length, /* Length of the mapped area */
+ int prot, /* Permissions: read, write, execute */
+ int flags, /* Options: shared mapping, private copy... */
+ int fd, /* Open file descriptor */
+ off_t offset /* Offset in the file */
+);
+ \end{minted}
+ \item You get a virtual address you can write to or read from.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{How to Implement mmap - Kernel Space}
+ \begin{itemize}
+ \item Character driver: implement an mmap file operation and add it
+ to the driver file operations:
+ \begin{minted}{c}
+int (*mmap) (
+ struct file *, /* Open file structure */
+ struct vm_area_struct * /* Kernel VMA structure */
+);
+ \end{minted}
+ \item Initialize the mapping.
+ \begin{itemize}
+ \item Can be done in most cases with the \code{remap_pfn_range()}
+ function, which takes care of most of the job.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{remap\_pfn\_range()}
+ \begin{itemize}
+ \item pfn: page frame number
+ \item The most significant bits of the page address (without the
+ bits corresponding to the page size).
+ \end{itemize}
+ \begin{minted}[fontsize=\small]{c}
+#include <linux/mm.h>
+
+int remap_pfn_range(
+ struct vm_area_struct *, /* VMA struct */
+ unsigned long virt_addr, /* Starting user
+ * virtual address */
+ unsigned long pfn, /* pfn of the starting
+ * physical address */
+ unsigned long size, /* Mapping size */
+ pgprot_t /* Page permissions */
+);
+ \end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Simple mmap Implementation}
+ \begin{minted}[fontsize=\small]{c}
+static int acme_mmap
+ (struct file * file, struct vm_area_struct *vma)
+{
+ size = vma->vm_end - vma->vm_start;
+
+ if (size > ACME_SIZE)
+ return -EINVAL;
+
+ if (remap_pfn_range(vma,
+ vma->vm_start,
+ ACME_PHYS >> PAGE_SHIFT,
+ size,
+ vma->vm_page_prot))
+ return -EAGAIN;
+
+ return 0;
+ }
+ \end{minted}
+\end{frame}
+
+\begin{frame}
+ \frametitle{devmem2}
+ \begin{itemize}
+ \item \url{http://free-electrons.com/pub/mirror/devmem2.c}, by Jan-Derk
+ Bakker
+ \item Very useful tool to directly \code{peek} (read) or \code{poke}
+ (write) I/O addresses mapped in physical address space from a
+ shell command line!
+ \begin{itemize}
+ \item Very useful for early interaction experiments with a device,
+ without having to code and compile a driver.
+ \item Uses \code{mmap} to \code{/dev/mem}.
+ \item Examples (\code{b}: byte, \code{h}: half, \code{w}: word)
+ \begin{itemize}
+ \item \code{devmem2 0x000c0004 h} (reading)
+ \item \code{devmem2 0x000c0008 w 0xffffffff} (writing)
+ \end{itemize}
+ \item devmem is now available in BusyBox, making it even easier to
+ use.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{mmap Summary}
+ \begin{itemize}
+ \item The device driver is loaded. It defines an \code{mmap} file
+ operation.
+ \item A user space process calls the \code{mmap} system call.
+ \item The \code{mmap} file operation is called.
+ \item It initializes the mapping using the device physical address.
+ \item The process gets a starting address to read from and write to
+ (depending on permissions).
+ \item The MMU automatically takes care of converting the process
+ virtual addresses into physical ones.
+ \item Direct access to the hardware without any expensive
+ \code{read} or \code{write} system calls
+ \end{itemize}
+\end{frame}
+
diff --git a/slides/kernel-driver-development-modules/exported-symbols.dia b/slides/kernel-driver-development-modules/exported-symbols.dia
new file mode 100644
index 0000000..b05c01a
--- /dev/null
+++ b/slides/kernel-driver-development-modules/exported-symbols.dia
@@ -0,0 +1,918 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,1.95;18.05,16.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="12"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="14"/>
+ </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="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.4025,2;13.5975,3.185"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Kernel#</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.2699999511241913"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="12,2.945"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.95,3.95;17.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="7,4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="6"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.95,10.95;11.05,15.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="7,11"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </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="13,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.95,10.95;17.05,15.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="13,11"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </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="12,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.20631,4.19822;16.775,9.80178"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#void func1() {...}
+
+void func2() {...}
+EXPORT_SYMBOL(func2);
+
+void func3() {...}
+EXPORT_SYMBOL_GPL(func3);#</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="12,4.81191"/>
+ </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="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.745,11.4262;10.255,14.5738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#func1();
+func2();
+func3();
+func4();#</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="9,12.0213"/>
+ </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="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="15,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14.2975,11.4262;15.7025,14.5738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#OK
+OK
+OK
+NOK#</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="15,12.0213"/>
+ </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="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,-4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.95,-4.05;32.05,7.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="20,-4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="12"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="11"/>
+ </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="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,-4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="22.4988,-4;29.5013,-2.815"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#GPL Module A#</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.2699999511241913"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="26,-3.055"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O8" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="21,-2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="20.95,-2.05;31.05,1.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="21,-2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="21,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="20.95,1.95;25.05,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="21,2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.95,1.95;31.05,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="27,2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,-0.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.225,-1.27375;30.775,0.27375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#void func4() {...}
+EXPORT_SYMBOL_GPL(func4);#</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="26,-0.67875"/>
+ </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="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.745,2.42625;24.255,5.57375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#func1();
+func2();
+func3();
+func4();#</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="23,3.02125"/>
+ </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="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.2975,2.42625;29.7025,5.57375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#NOK
+OK
+OK
+OK#</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="29,3.02125"/>
+ </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="O12" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.95,7.95;32.05,15.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="20,8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="12"/>
+ </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="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.2812,8;30.7188,9.185"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Non-GPL Module B#</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.2699999511241913"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="26,8.945"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O16" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O18">
+ <dia:attribute name="obj_pos">
+ <dia:point val="21,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="20.95,9.95;25.05,14.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="21,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O19">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.95,9.95;31.05,14.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="27,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O20">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,12"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.745,10.4262;24.255,13.5738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#func1();
+func2();
+func3();
+func4();#</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="23,11.0213"/>
+ </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="O18" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O21">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,12"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.2975,10.3982;29.7212,13.6018"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#NOK
+OK
+NOK
+NOK#</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="29,11.0119"/>
+ </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="O19" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O22">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.95,15.95;32.05,23.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="20,16"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="12"/>
+ </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="O23">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="22.4913,16;29.5384,17.2739"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#GPL Module C#</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.2699999511241913"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="26,16.9746"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O22" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O24">
+ <dia:attribute name="obj_pos">
+ <dia:point val="21,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="20.95,17.95;25.05,22.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="21,18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O25">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.95,17.95;31.05,22.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="27,18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O26">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.745,18.4262;24.255,21.5738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#func1();
+func2();
+func3();
+func4();#</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="23,19.0212"/>
+ </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="O24" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O27">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.2788,18.3982;29.7025,21.6018"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#NOK
+OK
+OK
+OK#</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="29,19.0119"/>
+ </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="O25" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-modules/kernel-driver-development-modules.tex b/slides/kernel-driver-development-modules/kernel-driver-development-modules.tex
new file mode 100644
index 0000000..a09af8a
--- /dev/null
+++ b/slides/kernel-driver-development-modules/kernel-driver-development-modules.tex
@@ -0,0 +1,351 @@
+\subsection{Loadable Kernel Modules}
+
+\begin{frame}[fragile]
+ \frametitle{Hello Module 1/2}
+\begin{minted}[fontsize=\small]{c}
+/* hello.c */
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+
+static int __init hello_init(void)
+{
+ pr_alert("Good morrow");
+ pr_alert("to this fair assembly.\n");
+ return 0;
+}
+
+static void __exit hello_exit(void)
+{
+ pr_alert("Alas, poor world, what treasure");
+ pr_alert("hast thou lost!\n");
+}
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Hello Module 2/2}
+\begin{minted}[fontsize=\small]{c}
+module_init(hello_init);
+module_exit(hello_exit);
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("Greeting module");
+MODULE_AUTHOR("William Shakespeare");
+\end{minted}
+
+\begin{itemize}
+\item \code{__init}
+ \begin{itemize}
+ \item removed after initialization (static kernel or module.)
+ \end{itemize}
+\item \code{__exit}
+ \begin{itemize}
+ \item discarded when module compiled statically into the kernel.
+ \end{itemize}
+\item Example available on
+ \url{http://free-electrons.com/doc/c/hello.c}
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Hello Module Explanations}
+ \begin{itemize}
+ \item Headers specific to the Linux kernel: \code{linux/xxx.h}
+ \begin{itemize}
+ \item No access to the usual C library, we're doing kernel
+ programming
+ \end{itemize}
+ \item An initialization function
+ \begin{itemize}
+ \item Called when the module is loaded, returns an error code (0
+ on success, negative value on failure)
+ \item Declared by the \code{module_init()} macro: the name of the
+ function doesn't matter, even though \code{<modulename>_init()}
+ is a convention.
+ \end{itemize}
+ \item A cleanup function
+ \begin{itemize}
+ \item Called when the module is unloaded
+ \item Declared by the \code{module_exit()} macro.
+ \end{itemize}
+ \item Metadata information declared using \code{MODULE_LICENSE()},
+ \code{MODULE_DESCRIPTION()} and \code{MODULE_AUTHOR()}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Symbols Exported to Modules 1/2}
+ \begin{itemize}
+ \item From a kernel module, only a limited number of kernel
+ functions can be called
+ \item Functions and variables have to be explicitly exported by the
+ kernel to be visible from a kernel module
+ \item Two macros are used in the kernel to export functions and
+ variables:
+ \begin{itemize}
+ \item \code{EXPORT_SYMBOL(symbolname)}, which exports a function
+ or variable to all modules
+ \item \code{EXPORT_SYMBOL_GPL(symbolname)}, which exports a
+ function or variable only to GPL modules
+ \end{itemize}
+ \item A normal driver should not need any non-exported function.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Symbols exported to modules 2/2}
+ \begin{center}
+ \includegraphics[height=0.85\textheight]{slides/kernel-driver-development-modules/exported-symbols.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Module License}
+ \begin{itemize}
+ \item Several usages
+ \begin{itemize}
+ \item Used to restrict the kernel functions that the module can
+ use if it isn't a GPL licensed module
+ \begin{itemize}
+ \item Difference between \code{EXPORT_SYMBOL()} and
+ \code{EXPORT_SYMBOL_GPL()}
+ \end{itemize}
+ \item Used by kernel developers to identify issues coming from
+ proprietary drivers, which they can't do anything about
+ (âTaintedâ kernel notice in kernel crashes and oopses).
+ \item Useful for users to check that their system is 100\% free
+ (check /proc/sys/kernel/tainted)
+ \end{itemize}
+ \item Values
+ \begin{itemize}
+ \item GPL, GPL v2, GPL and additional rights, Dual MIT/GPL, Dual
+ BSD/GPL, Dual MPL/GPL, Proprietary
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Compiling a Module}
+ \begin{itemize}
+ \item Two solutions
+ \begin{itemize}
+ \item \emph{Out of tree}
+ \begin{itemize}
+ \item When the code is outside of the kernel source tree, in a
+ different directory
+ \item Advantage: Might be easier to handle than modifications to
+ the kernel itself
+ \item Drawbacks: Not integrated to the kernel
+ configuration/compilation process, needs to be built
+ separately, the driver cannot be built statically
+ \end{itemize}
+ \item Inside the kernel tree
+ \begin{itemize}
+ \item Well integrated into the kernel configuration/compilation
+ process
+ \item Driver can be built statically if needed
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Compiling an out-of-tree Module 1/2}
+ \begin{itemize}
+ \item The below Makefile should be reusable for any single-file
+ out-of-tree Linux module
+ \item The source file is \code{hello.c}
+ \item Just run make to build the hello.ko file
+ \end{itemize}
+\begin{minted}{make}
+ifneq ($(KERNELRELEASE),)
+obj-m := hello.o
+else
+KDIR := /path/to/kernel/sources
+
+all:
+<tab>$(MAKE) -C $(KDIR) M=`pwd` modules
+endif
+\end{minted}
+
+\begin{itemize}
+\item For \code{KDIR}, you can either set
+ \begin{itemize}
+ \item full kernel source directory (configured and compiled)
+ \item or just kernel headers directory (minimum needed)
+ \end{itemize}
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Compiling an out-of-tree Module 2/2}
+ \begin{center}
+ \includegraphics[height=0.4\textheight]{slides/kernel-driver-development-modules/out-of-tree.pdf}
+ \end{center}
+ \begin{itemize}
+ \item The module Makefile is interpreted with \code{KERNELRELEASE}
+ undefined, so it calls the kernel Makefile, passing the module
+ directory in the \code{M} variable
+ \item the kernel Makefile knows how to compile a module, and thanks
+ to the \code{M} variable, knows where the Makefile for our module
+ is. The module Makefile is interpreted with \code{KERNELRELEASE}
+ defined, so the kernel sees the \code{obj-m} definition.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Modules and Kernel Version}
+ \begin{itemize}
+ \item To be compiled, a kernel module needs access to the kernel
+ headers, containing the functions, types and constants definitions
+ \item Two solutions
+ \begin{itemize}
+ \item Full kernel sources
+ \item Only kernel headers (\code{linux-headers-*} packages in
+ Debian/Ubuntu distributions)
+ \end{itemize}
+ \item The sources or headers must be configured
+ \begin{itemize}
+ \item Many macros or functions depend on the configuration
+ \end{itemize}
+ \item A kernel module compiled against version X of kernel headers
+ will not load in kernel version Y
+ \begin{itemize}
+ \item modprobe/insmod will say \emph{Invalid module format}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{New Driver in Kernel Sources 1/2}
+ \begin{itemize}
+ \item To add a new driver to the kernel sources:
+ \begin{itemize}
+ \item Add your new source file to the appropriate source
+ directory. Example: \code{drivers/usb/serial/navman.c}
+ \item Single file drivers in the common case, even if the file is
+ several thousand lines of code. Only really big drivers are
+ split in several files or have their own directory.
+ \item Describe the configuration interface for your new driver by
+ adding the following lines to the Kconfig file in this
+ directory:
+ \end{itemize}
+ \end{itemize}
+
+\begin{verbatim}
+ config USB_SERIAL_NAVMAN
+ tristate "USB Navman GPS device"
+ depends on USB_SERIAL
+ help
+ To compile this driver as a module, choose M here: the
+ module will be called navman.
+\end{verbatim}
+\end{frame}
+
+\begin{frame}
+ \frametitle{New Driver in Kernel Sources 2/2}
+ \begin{itemize}
+ \item Add a line in the Makefile file based on the Kconfig setting:
+ \code{obj-$(CONFIG_USB_SERIAL_NAVMAN) += navman.o}
+ \item It tells the kernel build system to build navman.c when the
+ \code{USB_SERIAL_NAVMAN} option is enabled. It works both if
+ compiled statically or as a module.
+ \begin{itemize}
+ \item Run \code{make xconfig} and see your new options!
+ \item Run \code{make} and your new files are compiled!
+ \item See \code{Documentation/kbuild/} for details and more
+ elaborate examples like drivers with several source files, or
+ drivers in their own subdirectory, etc.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{How To Create Linux Patches}
+ \begin{itemize}
+ \item The old school way
+ \begin{itemize}
+ \item Before making your changes, make sure you have two kernel
+ trees: \code{cp -a linux-2.6.37/ linux-2.6.37-patch/}
+ \item Make your changes in \code{linux-2.6.37-patch/}
+ \item Run \code{make distclean} to keep only source files.
+ \item Create a patch file:
+ \code{diff -Nur linux-2.6.37/ linux-2.6.37-patch/ > patchfile}
+ \item Not practical, does not scale to multiple patches
+ \end{itemize}
+ \item The new school ways
+ \begin{itemize}
+ \item Use quilt (tool to manage a stack of patches)
+ \item Use Git (revision control system used by the Linux kernel
+ developers)
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Hello Module with Parameters 1/2}
+\begin{minted}[fontsize=\small]{c}
+/* hello_param.c */
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+
+MODULE_LICENSE("GPL");
+
+/* A couple of parameters that can be passed in: how many
+ times we say hello, and to whom */
+
+static char *whom = "world";
+module_param(whom, charp, 0);
+
+static int howmany = 1;
+module_param(howmany, int, 0);
+
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Hello Module with Parameters 2/2}
+\begin{minted}[fontsize=\small]{c}
+static int __init hello_init(void)
+{
+ int i;
+ for (i = 0; i < howmany; i++)
+ pr_alert("(%d) Hello, %s\n", i, whom);
+ return 0;
+}
+
+static void __exit hello_exit(void)
+{
+ pr_alert("Goodbye, cruel %s\n", whom);
+}
+
+module_init(hello_init);
+module_exit(hello_exit);
+\end{minted}
+Thanks to Jonathan Corbet for the example!
+
+Example available on \url{http://free-electrons.com/doc/c/hello_param.c}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Declaring a module parameter}
+
+\begin{minted}[fontsize=\small]{c}
+#include <linux/moduleparam.h>
+
+module_param(
+ name, /* name of an already defined variable */
+ type, /* either byte, short, ushort, int, uint, long, ulong,
+ charp, or bool.(checked at compile time!) */
+ perm /* for /sys/module/<module_name>/parameters/<param>,
+ 0: no such module parameter value file */
+);
+
+/* Example */
+int irq=5;
+module_param(irq, int, S_IRUGO);
+\end{minted}
+Modules parameter arrays are also possible with
+\code{module_param_array()}, but they are less common.
+\end{frame}
diff --git a/slides/kernel-driver-development-modules/out-of-tree.dia b/slides/kernel-driver-development-modules/out-of-tree.dia
new file mode 100644
index 0000000..f38defa
--- /dev/null
+++ b/slides/kernel-driver-development-modules/out-of-tree.dia
@@ -0,0 +1,347 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.95,7.95;19.05,15.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="7,8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="12"/>
+ </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 - Box" version="0" id="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="25,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="24.95,7.95;37.05,15.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="25,8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="12"/>
+ </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 - ZigZagLine" version="1" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.95,4.95;31.3618,8.1118"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="13,8"/>
+ <dia:point val="13,5"/>
+ <dia:point val="31,5"/>
+ <dia:point val="31,8"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="1"/>
+ <dia:connection handle="1" to="O1" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.6382,14.8882;31.05,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="31,15"/>
+ <dia:point val="31,18"/>
+ <dia:point val="13,18"/>
+ <dia:point val="13,15"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O1" connection="6"/>
+ <dia:connection handle="1" to="O0" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.3125,8;18.6875,10.3194"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Module Source
+/path/to/module_source#</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.1994443982839584"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="13,8.8925"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="25.635,8;36.393,10.4034"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Kernel Source
+/path/to/kernel_source#</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.1994443982839584"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="31,8.9205"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O1" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13,11.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.6687,11.5;14.3312,14.6475"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#hello.c
+hello.ko
+Makefile
+....#</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="13,12.095"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,11.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="29.6687,11.5;32.3499,14.7036"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#include
+kernel
+Makefile
+....#</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="31,12.1137"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O1" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-processes/address-space.dia b/slides/kernel-driver-development-processes/address-space.dia
new file mode 100644
index 0000000..849c541
--- /dev/null
+++ b/slides/kernel-driver-development-processes/address-space.dia
@@ -0,0 +1,468 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.95,4.95;23.05,14.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="10,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="13"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="9"/>
+ </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 - Box" version="0" id="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.95,5.95;15.05,11.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="11,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#efb9ff"/>
+ </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="16.5,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.7675,12.815;20.2325,14"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Address Space#</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.2699999511241913"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="16.5,13.76"/>
+ </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="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13,8.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.5188,7.47708;14.4813,9.52292"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Thread
+A#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="13,8.26458"/>
+ </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="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="28,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="27.95,4.95;41.05,14.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="28,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="13"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="9"/>
+ </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 - Box" version="0" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.95,5.95;33.05,11.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="29,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#efb9ff"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="36,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="35.95,5.95;40.05,11.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="36,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#efb9ff"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="34.5,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.7675,12.815;38.2325,14"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Address Space#</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.2699999511241913"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="34.5,13.76"/>
+ </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="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O4" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,8.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="29.5188,7.47708;32.4813,9.52292"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Thread
+A#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="31,8.26458"/>
+ </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="O5" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="38,8.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="36.5187,7.47708;39.4812,9.52292"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Thread
+B#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="38,8.26458"/>
+ </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="O6" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16.5,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.4688,14;20.5312,14.9875"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Process after fork()#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="16.5,14.7875"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="34.5,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.3778,14;38.5975,16.1199"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Same process after
+pthread_create()#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="34.5,14.8122"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O4" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-processes/kernel-driver-development-processes.tex b/slides/kernel-driver-development-processes/kernel-driver-development-processes.tex
new file mode 100644
index 0000000..cba1162
--- /dev/null
+++ b/slides/kernel-driver-development-processes/kernel-driver-development-processes.tex
@@ -0,0 +1,57 @@
+\subsection{Processes and scheduling}
+
+\begin{frame}
+ \frametitle{Process, thread?}
+ \begin{itemize}
+ \item Confusion about the terms \emph{process}, \emph{thread} and
+ \emph{task}
+ \item In Unix, a process is created using \code{fork()} and is
+ composed of
+ \begin{itemize}
+ \item An address space, which contains the program code, data,
+ stack, shared libraries, etc.
+ \item One thread, that starts executing the \code{main()}
+ function.
+ \item Upon creation, a process contains one thread
+ \end{itemize}
+ \item Additional threads can be created inside an existing process,
+ using \code{pthread_create()}
+ \begin{itemize}
+ \item They run in the same address space as the initial thread of
+ the process
+ \item They start executing a function passed as argument to
+ \code{pthread_create()}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Process, thread: kernel point of view}
+ \begin{itemize}
+ \item The kernel represents each thread running in the system by a
+ structure of type \code{task_struct}
+ \item From a scheduling point of view, it makes no difference
+ between the initial thread of a process and all additional threads
+ created dynamically using \code{pthread_create()}
+ \end{itemize}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-processes/address-space.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{A thread life}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-processes/threads-life.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Execution of system calls}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-processes/syscalls.pdf}\\
+ The execution of system calls takes place in the context of the
+ thread requesting them.
+ \end{center}
+\end{frame}
+
diff --git a/slides/kernel-driver-development-processes/syscalls.dia b/slides/kernel-driver-development-processes/syscalls.dia
new file mode 100644
index 0000000..ead61e7
--- /dev/null
+++ b/slides/kernel-driver-development-processes/syscalls.dia
@@ -0,0 +1,384 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,5.95;18.05,9.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="12"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.95,5.95;41.05,9.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="27,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="14"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="18,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="17.95,12.95;27.05,16.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="18,13"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </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 - Line" version="0" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="18,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="17.6382,8.95;18.3618,13.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="18,9"/>
+ <dia:point val="18,13"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="7"/>
+ <dia:connection handle="1" to="O2" connection="0"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.6382,8.8882;27.3618,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="27,13"/>
+ <dia:point val="27,9"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="2"/>
+ <dia:connection handle="1" to="O1" connection="5"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="4,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.95,10.6382;43.1118,11.3618"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="4,11"/>
+ <dia:point val="43,11"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.58,6.72625;17.42,8.27375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Process executing in user space...
+(can be preempted)#</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="12,7.32125"/>
+ </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="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="34,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="27.4262,6.32625;40.5737,8.67375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Process continuing in user space...
+(or replaced by a higher priority process)
+(can be preempted)#</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="34,6.92125"/>
+ </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 - Text" version="1" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22.5,14.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.56,13.3262;26.44,15.6738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Kernel code executed
+on behalf of user-space
+(can be preempted too!)#</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="22.5,13.9213"/>
+ </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="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19,8.405;22.9925,9.9525"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#System call
+or exception#</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="19,9"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-driver-development-processes/threads-life.dia b/slides/kernel-driver-development-processes/threads-life.dia
new file mode 100644
index 0000000..1eecb8a
--- /dev/null
+++ b/slides/kernel-driver-development-processes/threads-life.dia
@@ -0,0 +1,936 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,1.95;15.05,7.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="5"/>
+ </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 - ZigZagLine" version="1" id="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31.5,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.8882,14.95;31.55,21.8618"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="31.5,15"/>
+ <dia:point val="31.5,21.5"/>
+ <dia:point val="27,21.5"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O13" connection="6"/>
+ <dia:connection handle="1" to="O16" connection="4"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="15,21.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.1382,14.8882;15.05,21.55"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="15,21.5"/>
+ <dia:point val="10.5,21.5"/>
+ <dia:point val="10.5,15"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O16" connection="3"/>
+ <dia:connection handle="1" to="O10" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10.5,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.1382,6.95;10.8618,10.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="10.5,7"/>
+ <dia:point val="10.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="6"/>
+ <dia:connection handle="1" to="O10" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.1382,6.8882;31.8618,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="31.5,10"/>
+ <dia:point val="31.5,7"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O13" connection="1"/>
+ <dia:connection handle="1" to="O7" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10.5,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.20875,2;13.7913,4.04583"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#
+Thread Created#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="10.5,2.7875"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10.5,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.42625,4.30806;13.5738,7"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#by fork() or
+pthread_create()
+#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="10.5,4.99056"/>
+ </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="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="25,0"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="24.95,-0.05;38.05,7.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="25,0"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="13"/>
+ </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="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31.5,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="25.3813,2.47361;37.6188,7"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Task terminated but its resources
+are not freed yet. Waiting for its
+parent to acknowledge
+its death
+#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="31.5,3.15611"/>
+ </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="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O7" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31.5,0"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.6762,0;34.3237,2.04583"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#
+EXIT_ZOMBIE#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="31.5,0.7875"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O7" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="6,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.95,9.95;15.05,15.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="6,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="5"/>
+ </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="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.22125,10;13.7787,12.0458"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#
+TASK_RUNNING#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="10.5,10.7875"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O10" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10.5,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.385,13.2253;14.615,15"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Ready but not running
+#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="10.5,13.9078"/>
+ </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="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O10" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.95,9.95;36.05,15.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="27,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="9"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="5"/>
+ </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="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31.5,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.2213,10;34.7788,12.0458"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#
+TASK_RUNNING#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="31.5,10.7875"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O13" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31.5,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.4975,13.2253;34.5025,15"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Actually running
+#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="31.5,13.9078"/>
+ </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="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O13" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="15,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14.95,18.95;27.05,24.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="15,19"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="12"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="5"/>
+ </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="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="21,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.8025,19;26.1975,22.1042"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#TASK_INTERRUPTIBLE
+TASK_UNINTERRUPTIBLE
+or TASK_KILLABLE#</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.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="21,19.7875"/>
+ </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="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O16" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O18">
+ <dia:attribute name="obj_pos">
+ <dia:point val="21,24"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.6225,22.2253;22.3775,24"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Waiting
+#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="21,22.9078"/>
+ </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="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O16" connection="6"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O19">
+ <dia:attribute name="obj_pos">
+ <dia:point val="21,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="17.1125,8.11264;24.8875,9.88736"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#The thread is elected
+by the scheduler#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="21,8.79514"/>
+ </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="O20">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="20,15.405;20,16.1525"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>##</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="20,16"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O21">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14.8882,14.6382;27.05,15.3618"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="27,15"/>
+ <dia:point val="15,15"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O13" connection="5"/>
+ <dia:connection handle="1" to="O10" connection="7"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O22">
+ <dia:attribute name="obj_pos">
+ <dia:point val="15,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14.95,9.6382;27.1118,10.3618"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="15,10"/>
+ <dia:point val="27,10"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O10" connection="2"/>
+ <dia:connection handle="1" to="O13" connection="0"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O23">
+ <dia:attribute name="obj_pos">
+ <dia:point val="21,17"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.6325,15.654;26.3675,18.346"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#The thread is preempted by
+the scheduler to run a higher
+priority task#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="21,16.3365"/>
+ </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="O24">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="32,19.3175;44.2225,21.0922"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Decides to sleep on a wait queue
+for a specific event#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="32,20"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O25">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="-1.1075,18.8263;10,21.1738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#The event occurs or the process
+receives a signal. Thread becomes
+runnable again.#</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="10,19.4213"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </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/kernel-driver-development-sleeping/kernel-driver-development-sleeping.tex b/slides/kernel-driver-development-sleeping/kernel-driver-development-sleeping.tex
new file mode 100644
index 0000000..59172fe
--- /dev/null
+++ b/slides/kernel-driver-development-sleeping/kernel-driver-development-sleeping.tex
@@ -0,0 +1,171 @@
+\subsection{Sleeping}
+
+\begin{frame}
+ \frametitle{Sleeping}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-driver-development-sleeping/sleeping.pdf}\\
+ Sleeping is needed when a process (user space or kernel space) is
+ waiting for data.
+ \end{center}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{How to sleep 1/3}
+ \begin{itemize}
+ \item Must declare a wait queue A wait queue will be used to store
+ \item the list of threads waiting for an event
+ \begin{itemize}
+ \item Static queue declaration
+ \begin{itemize}
+ \item useful to declare as a global variable
+ \item \mint{c}+DECLARE_WAIT_QUEUE_HEAD(module_queue);+
+ \end{itemize}
+ \item Or dynamic queue declaration
+ \begin{itemize}
+ \item Useful to embed the wait queue inside another data
+ structure
+\begin{minted}{c}
+wait_queue_head_t queue;
+init_waitqueue_head(&queue);
+\end{minted}
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{How to sleep 2/3}
+ \begin{itemize}
+ \item Several ways to make a kernel process sleep
+ \begin{itemize}
+ \item \mint{c}+void wait_event(queue, condition);+
+ \begin{itemize}
+ \item Sleeps until the task is woken up and the given C
+ expression is true. Caution: can't be interrupted (can't kill
+ the user-space process!)
+ \end{itemize}
+ \item \mint{c}+int wait_event_killable(queue, condition);+
+ \begin{itemize}
+ \item Can be interrupted, but only by a \emph{fatal} signal
+ (\code{SIGKILL}). Returns \code{-ERESTARSYS} if interrupted.
+ \end{itemize}
+ \item \mint{c}+int wait_event_interruptible(queue, condition);+
+ \begin{itemize}
+ \item Can be interrupted by any signal. Returns
+ \code{-ERESTARTSYS} if interrupted.
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{How to sleep 3/3}
+ \begin{itemize}
+ \item \mint{c}+int wait_event_timeout(queue, condition, timeout);+
+ \begin{itemize}
+ \item Also stops sleeping when the task is woken up and the
+ timeout expired. Returns 0 if the timeout elapsed, non-zero if
+ the condition was met.
+ \end{itemize}
+ \item \mint{c}+int wait_event_interruptible_timeout(queue,+
+ \mint{c}+condition, timeout);+
+ \begin{itemize}
+ \item Same as above, interruptible. Returns 0 if the timeout
+ elapsed, \code{-ERESTARTSYS} if interrupted, positive value if
+ the condition was met.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{How to Sleep - Example}
+\begin{minted}{c}
+ret = wait_event_interruptible
+ (sonypi_device.fifo_proc_list,
+ kfifo_len(sonypi_device.fifo) != 0);
+
+if (ret)
+ return ret;
+\end{minted}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Waking up!}
+ \begin{itemize}
+ \item Typically done by interrupt handlers when data sleeping
+ processes are waiting for becomes available.
+ \begin{itemize}
+ \item \code{wake_up(&queue);}
+ \begin{itemize}
+ \item Wakes up all processes in the wait queue
+ \end{itemize}
+ \item \code{wake_up_interruptible(&queue);}
+ \begin{itemize}
+ \item Wakes up all processes waiting in an interruptible sleep
+ on the given queue
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Exclusive vs. non-exclusive}
+ \begin{itemize}
+ \item \code{wait_event_interruptible()} puts a task in a
+ non-exclusive wait.
+ \begin{itemize}
+ \item All non-exclusive tasks are woken up by \code{wake_up()} /
+ \code{wake_up_interruptible()}
+ \end{itemize}
+ \item \code{wait_event_interruptible_exclusive()} puts a task in an
+ exclusive wait.
+ \begin{itemize}
+ \item \code{wake_up()} / \code{wake_up_interruptible()} wakes up
+ all non-exclusive tasks and only one exclusive task
+ \item \code{wake_up_all()} / \code{wake_up_interruptible_all()}
+ wakes up all non-exclusive and all exclusive tasks
+ \end{itemize}
+ \item Exclusive sleeps are useful to avoid waking up multiple tasks
+ when only one will be able to ``consume'' the event.
+ \item Non-exclusive sleeps are useful when the event can ``benefit''
+ to multiple tasks.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Sleeping and Waking up - Implementation 1/2}
+ \begin{itemize}
+ \item The scheduler doesn't keep evaluating the sleeping condition!
+\begin{minted}{c}
+#define __wait_event(wq, condition) \
+ do { \
+ DEFINE_WAIT(__wait); \
+ \
+ for (;;) { \
+ prepare_to_wait(&wq, &__wait, \
+ TASK_UNINTERRUPTIBLE); \
+ if (condition) \
+ break; \
+ schedule(); \
+ } \
+ finish_wait(&wq, &__wait); \
+} while (0)
+\end{minted}
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Sleeping and Waking up - Implementation 2/2}
+ \begin{itemize}
+ \item \mint{c}+wait_event_interruptible(queue, condition);+
+ \begin{itemize}
+ \item The process is put in the \code{TASK_INTERRUPTIBLE} state.
+ \end{itemize}
+ \item \mint{c}+wake_up_interruptible(&queue);+
+ \begin{itemize}
+ \item All processes waiting in queue are woken up, so they get
+ scheduled later and have the opportunity to reevaluate the
+ condition.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
diff --git a/slides/kernel-driver-development-sleeping/sleeping.dia b/slides/kernel-driver-development-sleeping/sleeping.dia
new file mode 100644
index 0000000..c712f34
--- /dev/null
+++ b/slides/kernel-driver-development-sleeping/sleeping.dia
@@ -0,0 +1,874 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="3,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.95,4.95;11.05,7.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="3,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.595,5.62625;10.405,6.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#User space process...#</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="7,6.22125"/>
+ </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="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.95,9.95;19.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="11,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="15,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.8038,10.6263;17.1962,11.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#System Call...#</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="15,11.2213"/>
+ </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="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.6382,6.95;11.3618,10.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="11,7"/>
+ <dia:point val="11,10"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="7"/>
+ <dia:connection handle="1" to="O2" connection="0"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="25,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="24.95,14.95;32.05,17.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="25,15"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#cc1f1a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffacac"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="28.5,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="25.7288,15.6263;31.2713,16.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Interrupt Handler#</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="28.5,16.2213"/>
+ </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="O5" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.95,9.95;39.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="32,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="35.5,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="33.3038,10.6263;37.6962,11.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#...System Call#</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.5,11.2213"/>
+ </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:object type="Standard - Box" version="0" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="39,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="38.95,4.95;47.05,7.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="39,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="43,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="39.5737,5.62625;46.4262,6.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#...User Space Process#</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="43,6.22125"/>
+ </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="O9" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="32,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="31.6382,11.8882;32.3618,15.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="32,15"/>
+ <dia:point val="32,12"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O5" connection="2"/>
+ <dia:connection handle="1" to="O7" connection="5"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="39,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="38.6382,6.8882;39.3618,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="39,10"/>
+ <dia:point val="39,7"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O7" connection="2"/>
+ <dia:connection handle="1" to="O9" connection="5"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="15,21"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14.95,20.95;25.05,23.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="15,21"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="15,12"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14.6382,11.95;15.3618,21.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="15,12"/>
+ <dia:point val="15,21"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="6"/>
+ <dia:connection handle="1" to="O13" connection="0"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12,7.62625;17.28,8.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Read Device File#</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="12,8.22125"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </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="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="14,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.1325,15.6263;14,16.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Ask for 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="0.80000000000000004"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="14,16.2213"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </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="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,22"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.4537,21.6262;21.5463,22.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Hardware#</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="20,22.2212"/>
+ </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="O13" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O18">
+ <dia:attribute name="obj_pos">
+ <dia:point val="25,21"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="24.6382,16.8882;25.3618,21.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="25,21"/>
+ <dia:point val="25,17"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O13" connection="2"/>
+ <dia:connection handle="1" to="O5" connection="5"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O19">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26,18.6262;33.5975,19.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Data Ready Notification#</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="26,19.2212"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O20">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.95,4.95;19.05,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="19,5"/>
+ <dia:point val="19,18"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="dashlength">
+ <dia:real val="0.50000000000000011"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O21">
+ <dia:attribute name="obj_pos">
+ <dia:point val="25,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="24.95,4.95;25.05,19.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="25,5"/>
+ <dia:point val="25,19"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="dashlength">
+ <dia:real val="0.50000000000000011"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O18" connection="0"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O22">
+ <dia:attribute name="obj_pos">
+ <dia:point val="33,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="33,12.6263;35.7425,13.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Wake up#</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="33,13.2213"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </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="O23">
+ <dia:attribute name="obj_pos">
+ <dia:point val="40,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="40,7.62625;41.955,8.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#return#</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="40,8.22125"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </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="O24">
+ <dia:attribute name="obj_pos">
+ <dia:point val="22,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.4125,10.2263;24.5875,11.7737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Other Processes
+are scheduled#</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="22,10.8213"/>
+ </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="O25">
+ <dia:attribute name="obj_pos">
+ <dia:point val="18,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="16.2175,12.6263;18,13.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Sleep#</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="18,13.2213"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </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/kernel-driver-development-title/kernel-driver-development-title.tex b/slides/kernel-driver-development-title/kernel-driver-development-title.tex
new file mode 100644
index 0000000..f43ae8f
--- /dev/null
+++ b/slides/kernel-driver-development-title/kernel-driver-development-title.tex
@@ -0,0 +1 @@
+\section{Embedded Linux driver development}
diff --git a/slides/kernel-embedded-linux-usage-title/kernel-embedded-linux-usage-title.tex b/slides/kernel-embedded-linux-usage-title/kernel-embedded-linux-usage-title.tex
new file mode 100644
index 0000000..2283dc2
--- /dev/null
+++ b/slides/kernel-embedded-linux-usage-title/kernel-embedded-linux-usage-title.tex
@@ -0,0 +1 @@
+\section{Embedded Linux Kernel Usage}
diff --git a/slides/kernel-git-content/gitk.png b/slides/kernel-git-content/gitk.png
new file mode 100644
index 0000000..22490b3
Binary files /dev/null and b/slides/kernel-git-content/gitk.png differ
diff --git a/slides/kernel-git-content/gitweb.png b/slides/kernel-git-content/gitweb.png
new file mode 100644
index 0000000..d6d20b1
Binary files /dev/null and b/slides/kernel-git-content/gitweb.png differ
diff --git a/slides/kernel-git-content/kernel-git-content.tex b/slides/kernel-git-content/kernel-git-content.tex
new file mode 100644
index 0000000..beec867
--- /dev/null
+++ b/slides/kernel-git-content/kernel-git-content.tex
@@ -0,0 +1,554 @@
+\begin{frame}
+ \frametitle{What is Git?}
+ \begin{itemize}
+ \item A version control system, like CVS, SVN, Perforce or ClearCase
+ \item Originally developed for the Linux kernel development, now
+ used by a large number of projects, including U-Boot, GNOME,
+ Buildroot, uClibc and many more
+ \item Contrary to CVS or SVN, Git is a distributed version control
+ system
+ \begin{itemize}
+ \item No central repository
+ \item Everybody has a local repository
+ \item Local branches are possible, and very important
+ \item Easy exchange of code between developers
+ \item Well-suited to the collaborative development model used in
+ open-source projects
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Install and Setup}
+ \begin{itemize}
+ \item Git is available as a package in your distribution
+ \begin{itemize}
+ \item \code{sudo apt-get install git}
+ \end{itemize}
+ \item Everything is available through the git command
+ \begin{itemize}
+ \item \code{git} has many commands, called using
+ \code{git <command>}, where \code{<command>} can be
+ \code{clone}, \code{checkout}, \code{branch}, etc.
+ \item Help can be found for a given command using
+ \code{git help <command>}
+ \end{itemize}
+ \item Setup your name and e-mail address
+ \begin{itemize}
+ \item They will be referenced in each of your commits
+ \item \code{git config --global user.name 'My Name'}
+ \item \code{git config --global user.email me at mydomain.net}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Clone a Repository}
+ \begin{itemize}
+ \item To start working on a project, you use Git's clone operation.
+ \item With CVS or SVN, you would have used the checkout operation,
+ to get a working copy of the project (latest version)
+ \item With Git, you get a full copy of the repository, including the
+ history, which allows to perform most of the operations offline.
+ \item Cloning Linus Torvalds' Linux kernel repository
+ \code{git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git}
+ \item \code{git://} is a special Git protocol. Most repositories can
+ also be accessed using \code{http://}, but this is slower.
+ \item After cloning, in \code{linux/}, you have the repository and a
+ working copy of the master branch.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Explore the History}
+ \begin{itemize}
+ \item \code{git log} will list all the commits. The latest commit is
+ the first.
+{\scriptsize
+\begin{verbatim}
+commit 4371ee353c3fc41aad9458b8e8e627eb508bc9a3
+Author: Florian Fainelli <florian at openwrt.org>
+Date: Mon Jun 1 02:43:17 2009 -0700
+
+MAINTAINERS: take maintainership of the cpmac Ethernet driver
+
+This patch adds me as the maintainer of the CPMAC (AR7)
+Ethernet driver.
+
+Signed-off-by: Florian Fainelli <florian at openwrt.org>
+Signed-off-by: David S. Miller <davem at davemloft.net>
+\end{verbatim}
+}
+ \item \code{git log -p} will list the commits with the corresponding
+ diff
+ \item The history in Git is not linear like in CVS or SVN, but it is
+ a graph of commits
+ \begin{itemize}
+ \item Makes it a little bit more complicated to understand at the
+ beginning
+ \item But this is what allows the powerful features of Git
+ (distributed, branching, merging)
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Visualize the History: gitk}
+ \begin{itemize}
+ \item \code{gitk} is a graphical tool that represents the history of
+ the current Git repository
+ \item Can be installed from the \code{gitk} package
+ \end{itemize}
+ \begin{center}
+ \includegraphics[height=0.65\textheight]{slides/kernel-git-content/gitk.png}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Visualize the History: gitweb}
+ \begin{itemize}
+ \item Another great tool is the Web interface to Git. For the
+ kernel, it is available at \url{http://git.kernel.org/}
+ \end{itemize}
+ \begin{center}
+ \includegraphics[height=0.7\textheight]{slides/kernel-git-content/gitweb.png}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Update your Repository}
+ \begin{itemize}
+ \item The repository that has been cloned at the beginning will
+ change over time
+ \item Updating your local repository to reflect the changes of the
+ remote repository will be necessary from time to time
+ \item \code{git pull}
+ \item Internally, does two things
+ \begin{itemize}
+ \item Fetch the new changes from the remote repository
+ (\code{git fetch})
+ \item Merge them in the current branch (\code{git merge})
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Tags}
+ \begin{itemize}
+ \item The list of existing tags can be found using
+ \begin{itemize}
+ \item \code{git tag -l}
+ \end{itemize}
+ \item To check out a working copy of the repository at a given tag
+ \begin{itemize}
+ \item \code{git checkout <tagname>}
+ \end{itemize}
+ \item To get the list of changes between a given tag and the latest
+ available version
+ \begin{itemize}
+ \item \code{git log v2.6.30..master}
+ \end{itemize}
+ \item List of changes with diff on a given file between two tags
+ \begin{itemize}
+ \item \code{git log -p v2.6.29..v2.6.30 MAINTAINERS}
+ \end{itemize}
+ \item With gitk
+ \begin{itemize}
+ \item \code{gitk v2.6.30..master}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Branches}
+ \begin{itemize}
+ \item To start working on something, the best is to make a branch
+ \begin{itemize}
+ \item It is local-only, nobody except you sees the branch
+ \item It is fast
+ \item It allows to split your work on different topics, try
+ something and throw it away
+ \item It is cheap, so even if you think you're doing something
+ small and quick, do a branch
+ \end{itemize}
+ \item Unlike other version control systems, Git encourages the use
+ of branches. Don't hesitate to use them.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Branches}
+ \begin{itemize}
+ \item Create a branch
+ \begin{itemize}
+ \item \code{git branch <branchname>}
+ \end{itemize}
+ \item Move to this branch
+ \begin{itemize}
+ \item \code{git checkout <branchname>}
+ \end{itemize}
+ \item Both at once (create and switch to branch)
+ \begin{itemize}
+ \item \code{git checkout -b <branchname>}
+ \end{itemize}
+ \item List of local branches
+ \begin{itemize}
+ \item \code{git branch}
+ \end{itemize}
+ \item List of all branches, including remote branches
+ \begin{itemize}
+ \item \code{git branch -a}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Making Changes}
+ \begin{itemize}
+ \item Edit a file with your favorite text editor
+ \item Get the status of your working copy
+ \begin{itemize}
+ \item \code{git status}
+ \end{itemize}
+ \item Git has a feature called the index, which allows you to stage
+ your commits before committing them. It allows to commit only part
+ of your modifications, by file or even by chunk.
+ \item On each modified file
+ \begin{itemize}
+ \item \code{git add <filename>}
+ \end{itemize}
+ \item Then commit. No need to be on-line or connected to commit
+ \begin{itemize}
+ \item Linux requires the -s option to sign your changes
+ \item \code{git commit -s}
+ \end{itemize}
+ \item If all modified files should be part of the commit
+ \begin{itemize}
+ \item \code{git commit -as}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Sharing Changes: E-mail}
+ \begin{itemize}
+ \item The simplest way of sharing a few changes is to send patches
+ by e-mail
+ \item The first step is to generate the patches
+ \begin{itemize}
+ \item \code{git format-patch -n master..<yourbranch>}
+ \item Will generate one patch for each of the commits done on
+ \code{<yourbranch>}
+ \item The patch files will be \code{0001-....}, \code{0002-....},
+ etc.
+ \end{itemize}
+ \item The second step is to send these patches by e-mail
+ \begin{itemize}
+ \item \code{git send-email --compose --to email at domain.com 00*.patch}
+ \end{itemize}
+ \begin{itemize}
+ \item Required Ubuntu package: \code{git-email}
+ \item In a later slide, we will see how to use git config to set
+ the SMTP server, port, user and password.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Sharing Changes: Your Own Repository}
+ \begin{itemize}
+ \item If you do a lot of changes and want to ease collaboration with
+ others, the best is to have your own public repository
+ \item Use a git hosting service on the Internet:
+ \begin{itemize}
+ \item Gitorious (\url{https://gitorious.org/})
+ \begin{itemize}
+ \item Open Source server. Easiest. For public repositories.
+ \end{itemize}
+ \item GitHub (\url{https://github.com/})
+ \begin{itemize}
+ \item For public repositories. Have to pay for private
+ repositories.
+ \end{itemize}
+ \end{itemize}
+ \item Publish on your own web server
+ \begin{itemize}
+ \item Easy to implement.
+ \item Just needs git software on the server and ssh access.
+ \item Drawback: only supports http cloning (less efficient)
+ \end{itemize}
+ \item Set up your own git server
+ \begin{itemize}
+ \item Most flexible solution.
+ \item Today's best solutions are \code{gitolite}
+ (\url{https://github.com/sitaramc/gitolite}) for the server and
+ \code{cgit} for the web interface
+ (\url{http://hjemli.net/git/cgit/}).
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Sharing changes: HTTP Hosting}
+ \begin{itemize}
+ \item Create a bare version of your repository
+ \begin{itemize}
+ \item \code{cd /tmp}
+ \item \code{git clone --bare ~/project project.git}
+ \item \code{touch project.git/git-daemon-export-ok}
+ \end{itemize}
+ \item Transfer the contents of \code{project.git} to a
+ publicly-visible place (reachable read-only by HTTP for everybody,
+ and read-write by you through SSH)
+ \item Tell people to clone
+ \url{http://yourhost.com/path/to/project.git}
+ \item Push your changes using
+ \begin{itemize}
+ \item
+ \code{git push ssh://yourhost.com/path/toproject.git srcbranch:destbranch}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Tracking Remote Trees}
+ \begin{itemize}
+ \item In addition to the official Linus Torvalds tree, you might
+ want to use other development or experimental trees
+ \begin{itemize}
+ \item The OMAP tree at
+ \url{git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap.git}
+ \item The stable realtime tree at
+ \url{git://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-stable-rt.git}
+ \end{itemize}
+ \item The \code{git remote} command allows to manage remote trees
+ \begin{itemize}
+ \item
+ \code{git remote add rt git://git.kernel.org/pub/scm/ linux/kernel/git/rt/linux-stable-rt.git}
+ \end{itemize}
+ \item Get the contents of the tree
+ \begin{itemize}
+ \item \code{git fetch rt}
+ \end{itemize}
+ \item Switch to one of the branches
+ \begin{itemize}
+ \item \code{git checkout rt/master}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Contribute to the Linux Kernel (1)}
+ \begin{itemize}
+ \item Clone Linus Torvalds' tree:
+ \begin{itemize}
+ \item
+ \code{git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git}
+ \end{itemize}
+ \item Keep your tree up to date
+ \begin{itemize}
+ \item \code{git pull}
+ \end{itemize}
+ \item Look at the master branch and check whether your issue /
+ change hasn't been solved / implemented yet. Also check the
+ maintainer's git tree and mailing list (see the \code{MAINTAINERS}
+ file).You may miss submissions that are not in mainline yet.
+ \item If the maintainer has its own git tree, create a remote branch
+ tracking this tree. This is much better than creating another
+ clone (doesn't duplicate common stuff):
+ \begin{itemize}
+ \item
+ \code{git remote add linux-omap git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap.git}
+ \item \code{git fetch linux-omap}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Contribute to the Linux Kernel (2)}
+ \begin{itemize}
+ \item Either create a new branch starting from the current commit in
+ the master branch:
+ \begin{itemize}
+ \item \code{git checkout -b feature}
+ \end{itemize}
+ \item Or, if more appropriate, create a new branch starting from the
+ maintainer's master branch:
+ \begin{itemize}
+ \item \code{git checkout -b feature linux-omap/master} (remote
+ tree / remote branch)
+ \end{itemize}
+ \item In your new branch, implement your changes.
+ \item Test your changes (must at least compile them).
+ \item Run \code{git add} to add any new files to the index.
+ \item Check that each file you modified is ready for submission:
+ \begin{itemize}
+ \item \code{scripts/check_patch.pl --strict --file <file>}
+ \end{itemize}
+ \item If needed, fix indenting rule violations:
+ \begin{itemize}
+ \item \code{indent -linux <file>}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Configure git send-email}
+ \begin{itemize}
+ \item Make sure you already have configured your name and e-mail
+ address (should be done before the first commit).
+ \begin{itemize}
+ \item \code{git config --global user.name 'My Name'}
+ \item \code{git config --global user.email me at mydomain.net}
+ \end{itemize}
+ \item Configure your SMTP settings. Example for a Google Mail
+ account:
+ \begin{itemize}
+ \item \code{git config --global sendemail.smtpserver smtp.googlemail.com}
+ \item \code{git config --global sendemail.smtpserverport 587}
+ \item \code{git config --global sendemail.smtpencryption tls}
+ \item \code{git config --global sendemail.smtpuser jdoe at gmail.com}
+ \item \code{git config --global sendemail.smtppass xxx}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Contribute to the Linux Kernel (3)}
+ \begin{itemize}
+ \item Group your changes by sets of logical changes, corresponding
+ to the set of patches that you wish to submit.
+ \item Commit and sign these groups of changes (signing required by
+ Linux developers).
+ \begin{itemize}
+ \item \code{git commit -s}
+ \item Make sure your first description line is a useful summary
+ and starts with the name of the modified subsystem. This first
+ description line will appear in your e-mails
+ \end{itemize}
+ \item The easiest way is to look at previous commit summaries on the
+ main file you modify
+ \begin{itemize}
+ \item \code{git log --pretty=oneline <path-to-file>}
+ \end{itemize}
+ \item Examples subject lines (\code{[PATCH]} omitted):
+\begin{verbatim}
+Documentation: prctl/seccomp_filter
+PCI: release busn when removing bus
+ARM: add support for xz kernel decompression
+\end{verbatim}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Contribute to the Linux Kernel (4)}
+ \begin{itemize}
+ \item Remove previously generated patches
+ \begin{itemize}
+ \item \code{rm 00*.patch}
+ \end{itemize}
+ \item Have git generate patches corresponding to your branch
+ \begin{itemize}
+ \item If your branch is based on mainline
+ \begin{itemize}
+ \item \code{git format-patch master..<your branch>}
+ \end{itemize}
+ \item If your branch is based on a remote branch
+ \begin{itemize}
+ \item \code{git format-patch <remote>/<branch>..<your branch>}
+ \end{itemize}
+ \end{itemize}
+ \item You can run a last check on all your patches (easy)
+ \begin{itemize}
+ \item \code{scripts/check_patch.pl --strict 00*.patch}
+ \end{itemize}
+ \item Now, send your patches to yourself
+ \begin{itemize}
+ \item \code{git send-email --compose --to me at mydomain.com 00*.patch}
+ \end{itemize}
+ \item If you have just one patch, or a trivial patch, you can remove
+ the empty line after \code{In-Reply-To:}. This way, you won't add
+ a summary e-mail introducing your changes (recommended otherwise).
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Contribute to the Linux Kernel (5)}
+ \begin{itemize}
+ \item Check that you received your e-mail properly, and that it
+ looks good.
+ \item Now, find the maintainers for your patches
+{\scriptsize
+\begin{verbatim}
+scripts/get_maintainer.pl ~/patches/00*.patch
+Russell King <linux at arm.linux.org.uk> (maintainer:ARM PORT)
+Nicolas Pitre <nicolas.pitre at linaro.org>
+(commit_signer:1/1=100%)
+linux-arm-kernel at lists.infradead.org (open list:ARM PORT)
+linux-kernel at vger.kernel.org (open list)
+\end{verbatim}
+}
+ \item Now, send your patches to each of these people and lists
+ \begin{itemize}
+ \item \code{git send-email --compose --to linux at arm.linux.org.uk --to nicolas.pitre at linaro.org --to linux-arm-kernel at lists.infradead.org --to linux-kernel at vger.kernel.org 00*.patch}
+ \end{itemize}
+ \item Wait for replies about your changes, take the comments into
+ account, and resubmit if needed, until your changes are eventually
+ accepted.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Contribute to the Linux Kernel (6)}
+ \begin{itemize}
+ \item If you use \code{git format-patch} to produce your patches,
+ you will need to update your branch and may need to group your
+ changes in a different way (one patch per commit).
+ \item Here's what we recommend
+ \begin{itemize}
+ \item Update your master branch
+ \begin{itemize}
+ \item \code{git checkout master; git pull}
+ \end{itemize}
+ \item Back to your branch, implement the changes taking community
+ feedback into account. Commit these changes.
+ \item Still in your branch: reorganize your commits and commit messages
+ \begin{itemize}
+ \item \code{git rebase --interactive origin/master}
+ \item \code{git rebase} allows to rebase (replay) your changes
+ starting from the latest commits in master. In interactive
+ mode, it also allows you to merge, edit and even reorder
+ commits, in an interactive way.
+ \end{itemize}
+ \item Third, generate the new patches with git format-patch.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{About Git}
+ \begin{itemize}
+ \item We have just seen the very basic features of Git.
+ \item A lot more interesting features are available (rebasing,
+ bisection, merging and more)
+ \item References
+ \begin{itemize}
+ \item Git Manual
+ \begin{itemize}
+ \item \url{http://schacon.github.com/git/user-manual.html}
+ \end{itemize}
+ \item Git Book
+ \begin{itemize}
+ \item \url{http://book.git-scm.com/}
+ \end{itemize}
+ \item Git official website
+ \begin{itemize}
+ \item \url{http://git-scm.com/}
+ \end{itemize}
+ \item Video: James Bottomley's tutorial on using Git
+ \begin{itemize}
+ \item \url{http://free-electrons.com/pub/video/2008/ols/ols2008-james-bottomley-git.ogg}
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
diff --git a/slides/kernel-git-lab/kernel-git-lab.tex b/slides/kernel-git-lab/kernel-git-lab.tex
new file mode 100644
index 0000000..487db6c
--- /dev/null
+++ b/slides/kernel-git-lab/kernel-git-lab.tex
@@ -0,0 +1,9 @@
+\setuplabframe
+{Git}
+{
+ \begin{itemize}
+ \item Get familiar with git by contributing to a real project: the
+ Linux kernel
+ \item Send your patches to the maintainers and mailing lists.
+ \end{itemize}
+}
diff --git a/slides/kernel-git-title/kernel-git-title.tex b/slides/kernel-git-title/kernel-git-title.tex
new file mode 100644
index 0000000..84ec64e
--- /dev/null
+++ b/slides/kernel-git-title/kernel-git-title.tex
@@ -0,0 +1 @@
+\section{Introduction to Git}
diff --git a/slides/kernel-init-content/bootloader-userspace.dia b/slides/kernel-init-content/bootloader-userspace.dia
new file mode 100644
index 0000000..e8c3503
--- /dev/null
+++ b/slides/kernel-init-content/bootloader-userspace.dia
@@ -0,0 +1,397 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.95,4.95;12.05,14.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="5,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="9"/>
+ </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="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8.5,9.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.39625,8.905;11.6038,12.8525"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Low level hardware
+initialization
+Fetch and copy
+the Linux kernel
+to RAM#</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="8.5,9.5"/>
+ </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="3"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="8.5,9.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.4925,7.72528;10.5075,9.5"/>
+ </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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="8.5,8.40778"/>
+ </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="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="15,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14.95,4.95;25.05,14.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="15,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="9"/>
+ </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="28,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="27.95,4.95;35.05,14.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="28,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="9"/>
+ </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="31.5,9.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="29.3912,7.72528;33.6088,9.5"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#init process
+#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="31.5,8.40778"/>
+ </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="1"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O4" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31.5,9.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.2613,8.905;34.7388,10.4525"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#System initialization
+from userspace#</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="31.5,9.5"/>
+ </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="3"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O4" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,9.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="16.4887,9.07125;23.5112,9.92875"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Kernel Initialization#</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.91722218692302704"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="20,9.75375"/>
+ </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 - Line" version="0" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12,9.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.95,9.1382;15.1118,9.8618"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="12,9.5"/>
+ <dia:point val="15,9.5"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="4"/>
+ <dia:connection handle="1" to="O3" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="25,9.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="24.95,9.1382;28.1118,9.8618"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="25,9.5"/>
+ <dia:point val="28,9.5"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O3" connection="4"/>
+ <dia:connection handle="1" to="O4" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-init-content/kernel-bootstrap.dia b/slides/kernel-init-content/kernel-bootstrap.dia
new file mode 100644
index 0000000..8a3a840
--- /dev/null
+++ b/slides/kernel-init-content/kernel-bootstrap.dia
@@ -0,0 +1,1595 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="3,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.95,1.95;7.05,9.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="3,2"/>
+ </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="#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="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,5.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.72625,5.12625;6.27375,5.87375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#vmlinux#</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="5,5.72125"/>
+ </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="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.75,9.405;7.25,12.5525"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Kernel Proper:
+Raw kernel
+executable
+(ELF object)#</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="5,10"/>
+ </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="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.95,1.95;15.05,9.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="11,2"/>
+ </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="#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="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13,5.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="11.9962,5.12625;14.0038,5.87375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Image#</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="13,5.72125"/>
+ </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="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.535,9.38631;15.4837,11.7899"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Stripped Kernel
+Binary
+(Binary Object)#</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="13,10"/>
+ </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="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7,5.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.95,5.1382;11.1118,5.8618"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="7,5.5"/>
+ <dia:point val="11,5.5"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="4"/>
+ <dia:connection handle="1" to="O3" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.745,4.405;10.255,5.1525"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#objcopy#</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="9,5"/>
+ </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="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.95,4.95;23.05,9.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="19,5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </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="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="21,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.6825,6.62625;22.3175,7.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#piggy.gz#</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="21,7.22125"/>
+ </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 - Text" version="1" id="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="21,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="17.9025,9.38631;24.1162,10.9899"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Compressed Kernel
+Binary#</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="21,10"/>
+ </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="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="19,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="18.95,1.95;23.05,4.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="19,2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="21,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.085,2.62625;22.915,3.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#piggy.gzip.S#</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="21,3.22125"/>
+ </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 - ZigZagLine" version="1" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="15,5.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="14.95,5.45;19.0616,7.3618"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="15,5.5"/>
+ <dia:point val="16.9749,5.5"/>
+ <dia:point val="16.9749,7"/>
+ <dia:point val="18.9497,7"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O3" connection="4"/>
+ <dia:connection handle="1" to="O8" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="17,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="16.3362,4.405;17.6638,5.1525"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#gzip#</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="17,5"/>
+ </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="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.95,1.95;31.05,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="27,2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </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 - ZigZagLine" version="1" id="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="22.95,3.6382;27.1118,7.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="23,7"/>
+ <dia:point val="25,7"/>
+ <dia:point val="25,4"/>
+ <dia:point val="27,4"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O8" connection="4"/>
+ <dia:connection handle="1" to="O15" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="23,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="22.95,2.95;27.1118,4.3618"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="23,3"/>
+ <dia:point val="25,3"/>
+ <dia:point val="25,4"/>
+ <dia:point val="27,4"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O11" connection="4"/>
+ <dia:connection handle="1" to="O15" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O18">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="27.0925,3.62625;30.9075,4.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#piggy.gzip.o#</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="29,4.22125"/>
+ </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="O15" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O19">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.95,6.95;31.05,9.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="27,7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O20">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="27.9025,7.62625;30.0975,8.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#head.o#</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="29,8.22125"/>
+ </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="O19" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O21">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.95,9.95;31.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="27,10"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O22">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="27.96,10.6263;30.04,11.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#misc.o#</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="29,11.2213"/>
+ </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="O21" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O23">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.95,12.95;31.05,15.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="27,13"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O24">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="27.205,13.6263;30.795,14.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#head-cpu.o#</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="29,14.2213"/>
+ </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="O23" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O25">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.95,18.95;31.05,21.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="27,19"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O26">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="27.2575,19.6262;30.7425,20.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#lib1funcs.o#</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="29,20.2212"/>
+ </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="O25" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O27">
+ <dia:attribute name="obj_pos">
+ <dia:point val="27,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.95,15.95;31.05,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="27,16"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O28">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,17"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="27.0175,16.6687;30.9825,17.3313"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#decompress.o#</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.70837774782445706"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="29,17.1962"/>
+ </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="O27" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O29">
+ <dia:attribute name="obj_pos">
+ <dia:point val="35,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="34.95,1.95;39.05,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="35,2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="11"/>
+ </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 - ZigZagLine" version="1" id="O30">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.95,3.95;35.1118,7.8618"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="31,4"/>
+ <dia:point val="33,4"/>
+ <dia:point val="33,7.5"/>
+ <dia:point val="35,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O15" connection="4"/>
+ <dia:connection handle="1" to="O29" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O31">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.95,7.1382;35.1118,8.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="31,8"/>
+ <dia:point val="33,8"/>
+ <dia:point val="33,7.5"/>
+ <dia:point val="35,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O19" connection="4"/>
+ <dia:connection handle="1" to="O29" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O32">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,11"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.95,7.1382;35.1118,11.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="31,11"/>
+ <dia:point val="33,11"/>
+ <dia:point val="33,7.5"/>
+ <dia:point val="35,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O21" connection="4"/>
+ <dia:connection handle="1" to="O29" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O33">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.95,7.1382;35.1118,14.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="31,14"/>
+ <dia:point val="33,14"/>
+ <dia:point val="33,7.5"/>
+ <dia:point val="35,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O23" connection="4"/>
+ <dia:connection handle="1" to="O29" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O34">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,17"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.95,7.1382;35.1118,17.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="31,17"/>
+ <dia:point val="33,17"/>
+ <dia:point val="33,7.5"/>
+ <dia:point val="35,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O27" connection="4"/>
+ <dia:connection handle="1" to="O29" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O35">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.95,7.1382;35.1118,20.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="31,20"/>
+ <dia:point val="33,20"/>
+ <dia:point val="33,7.5"/>
+ <dia:point val="35,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O25" connection="4"/>
+ <dia:connection handle="1" to="O29" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O36">
+ <dia:attribute name="obj_pos">
+ <dia:point val="25,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="24.6375,1.38631;25.3812,2.18987"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#as#</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="25,2"/>
+ </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="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O37">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,22"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="26.3125,21.405;31.6875,23.7525"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#asm wrapper
+around piggy.gz
++ bootstrapcode#</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="29,22"/>
+ </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="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O38">
+ <dia:attribute name="obj_pos">
+ <dia:point val="33,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="32.7075,2.405;33.2925,3.1525"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#ld#</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="33,3"/>
+ </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="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O39">
+ <dia:attribute name="obj_pos">
+ <dia:point val="37,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="35.7263,7.12625;38.2737,7.87375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#vmlinux#</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="37,7.72125"/>
+ </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="O29" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O40">
+ <dia:attribute name="obj_pos">
+ <dia:point val="37,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="34.1851,13.3863;39.7963,17.3899"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#in arch/<arch>/
+boot/compressed
+Composite kernel
+image
+(ELF object)#</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="37,14"/>
+ </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="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O41">
+ <dia:attribute name="obj_pos">
+ <dia:point val="43,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="42.95,1.95;47.05,13.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="43,2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="11"/>
+ </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 - Line" version="0" id="O42">
+ <dia:attribute name="obj_pos">
+ <dia:point val="39,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="38.95,7.1382;43.1118,7.8618"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="39,7.5"/>
+ <dia:point val="43,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O29" connection="4"/>
+ <dia:connection handle="1" to="O41" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O43">
+ <dia:attribute name="obj_pos">
+ <dia:point val="41,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="39.745,6.405;42.255,7.1525"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#objcopy#</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="41,7"/>
+ </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="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O44">
+ <dia:attribute name="obj_pos">
+ <dia:point val="45,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="43.8287,7.12625;46.1713,7.87375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#zImage#</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="45,7.72125"/>
+ </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="O41" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O45">
+ <dia:attribute name="obj_pos">
+ <dia:point val="45,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="42.5575,13.405;47.4425,15.7525"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Kernel image
+for bootloaders
+(binary object)#</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="45,14"/>
+ </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="3"/>
+ </dia:attribute>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-init-content/kernel-init-content.tex b/slides/kernel-init-content/kernel-init-content.tex
new file mode 100644
index 0000000..8880475
--- /dev/null
+++ b/slides/kernel-init-content/kernel-init-content.tex
@@ -0,0 +1,289 @@
+\begin{frame}
+ \frametitle{From Bootloader to Userspace}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-init-content/bootloader-userspace.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Kernel Bootstrap (1)}
+ How the kernel bootstraps itself appears in kernel building.
+ Example on ARM (pxa cpu) in Linux 2.6.36:
+{\footnotesize
+\begin{verbatim}
+...
+ LD vmlinux
+ SYSMAP System.map
+ SYSMAP .tmp_System.map
+ OBJCOPY arch/arm/boot/Image
+ Kernel: arch/arm/boot/Image is ready
+ AS arch/arm/boot/compressed/head.o
+ GZIP arch/arm/boot/compressed/piggy.gzip
+ AS arch/arm/boot/compressed/piggy.gzip.o
+ CC arch/arm/boot/compressed/misc.o
+ CC arch/arm/boot/compressed/decompress.o
+ AS arch/arm/boot/compressed/head-xscale.o
+ SHIPPED arch/arm/boot/compressed/lib1funcs.S
+ AS arch/arm/boot/compressed/lib1funcs.o
+ LD arch/arm/boot/compressed/vmlinux
+ OBJCOPY arch/arm/boot/zImage
+ Kernel: arch/arm/boot/zImage is ready
+...
+\end{verbatim}
+}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Kernel Bootstrap (2)}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-init-content/kernel-bootstrap.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Bootstrap Code for Compressed Kernels}
+ \begin{itemize}
+ \item Located in \code{arch/<arch>/boot/compressed}
+ \begin{itemize}
+ \item \code{head.o}
+ \begin{itemize}
+ \item Architecture specific initialization code.
+ \item This is what is executed by the bootloader
+ \end{itemize}
+ \item \code{head-cpu.o} (here \code{head-xscale.o})
+ \begin{itemize}
+ \item CPU specific initialization code
+ \end{itemize}
+ \item \code{decompress.o}, \code{misc.o}
+ \begin{itemize}
+ \item Decompression code
+ \end{itemize}
+ \item \code{piggy.<compressionformat>.o}
+ \begin{itemize}
+ \item The kernel itself
+ \end{itemize}
+ \end{itemize}
+ \item Responsible for uncompressing the kernel itself and jumping to
+ its entry point.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Architecture-specific Initialization Code}
+ \begin{itemize}
+ \item The uncompression code jumps into the main kernel entry point,
+ typically located in \code{arch/<arch>/kernel/head.S}, whose job
+ is to:
+ \begin{itemize}
+ \item Check the architecture, processor and machine type.
+ \item Configure the MMU, create page table entries and enable
+ virtual memory.
+ \item Calls the \code{start_kernel} function in
+ \code{init/main.c}.
+ \item Same code for all architectures.
+ \item Anybody interested in kernel startup should study this file!
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{start\_kernel Main Actions}
+ \begin{itemize}
+ \item Calls \code{setup_arch(&command_line)}
+ \begin{itemize}
+ \item Function defined in \code{arch/<arch>/kernel/setup.c}
+ \item Copying the command line from where the bootloader left it.
+ \item On arm, this function calls \code{setup_processor} (in which
+ CPU information is displayed) and \code{setup_machine}(locating
+ the machine in the list of supported machines).
+ \end{itemize}
+ \item Initializes the console as early as possible (to get error
+ messages)
+ \item Initializes many subsystems (see the code)
+ \item Eventually calls \code{rest_init}.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{rest\_init: Starting the Init Process}
+\begin{minted}[fontsize=\tiny]{c}
+static noinline void __init_refok rest_init(void)
+ __releases(kernel_lock)
+{
+ int pid;
+
+ rcu_scheduler_starting();
+ /*
+ * We need to spawn init first so that it obtains pid 1, however
+ * the init task will end up wanting to create kthreads, which, if
+ * we schedule it before we create kthreadd, will OOPS.
+ */
+ kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
+ numa_default_policy();
+ pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
+ rcu_read_lock();
+ kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns);
+ rcu_read_unlock();
+ complete(&kthreadd_done);
+
+ /*
+ * The boot idle thread must execute schedule()
+ * at least once to get things moving:
+ */
+ init_idle_bootup_task(current);
+ preempt_enable_no_resched();
+ schedule();
+ preempt_disable();
+
+ /* Call into cpu_idle with preempt disabled */
+ cpu_idle();
+}
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{kernel\_init}
+ \begin{itemize}
+ \item \code{kernel_init} does two main things:
+ \begin{itemize}
+ \item Call \code{do_basic_setup}
+ \item Once kernel services are ready, start device initialization
+ (Linux 2.6.36 code excerpt):
+\begin{minted}{c}
+static void __init do_basic_setup(void)
+{
+ cpuset_init_smp();
+ usermodehelper_init();
+ init_tmpfs();
+ driver_init();
+ init_irq_proc();
+ do_ctors();
+ do_initcalls();
+}
+\end{minted}
+ \item Call \code{init_post}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{do\_initcalls}
+Calls pluggable hooks registered with the macros below.
+Advantage: the generic code doesn't have to know about them.
+\begin{minted}[fontsize=\tiny]{c}
+/*
+ * A "pure" initcall has no dependencies on anything else, and purely
+ * initializes variables that couldn't be statically initialized.
+ *
+ * This only exists for built-in code, not for modules.
+ */
+#define pure_initcall(fn) __define_initcall("0",fn,1)
+
+#define core_initcall(fn) __define_initcall("1",fn,1)
+#define core_initcall_sync(fn) __define_initcall("1s",fn,1s)
+#define postcore_initcall(fn) __define_initcall("2",fn,2)
+#define postcore_initcall_sync(fn) __define_initcall("2s",fn,2s)
+#define arch_initcall(fn) __define_initcall("3",fn,3)
+#define arch_initcall_sync(fn) __define_initcall("3s",fn,3s)
+#define subsys_initcall(fn) __define_initcall("4",fn,4)
+#define subsys_initcall_sync(fn) __define_initcall("4s",fn,4s)
+#define fs_initcall(fn) __define_initcall("5",fn,5)
+#define fs_initcall_sync(fn) __define_initcall("5s",fn,5s)
+#define rootfs_initcall(fn) __define_initcall("rootfs",fn,rootfs)
+#define device_initcall(fn) __define_initcall("6",fn,6)
+#define device_initcall_sync(fn) __define_initcall("6s",fn,6s)
+#define late_initcall(fn) __define_initcall("7",fn,7)
+#define late_initcall_sync(fn) __define_initcall("7s",fn,7s)
+\end{minted}
+Defined in \code{include/linux/init.h}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{initcall example}
+From \code{arch/arm/mach-pxa/lpd270.c} (Linux 2.6.36)
+\begin{minted}[fontsize=\scriptsize]{c}
+static int __init lpd270_irq_device_init(void)
+{
+ int ret = -ENODEV;
+ if (machine_is_logicpd_pxa270()) {
+ ret = sysdev_class_register(&lpd270_irq_sysclass);
+ if (ret == 0)
+ ret = sysdev_register(&lpd270_irq_device);
+ }
+ return ret;
+}
+
+device_initcall(lpd270_irq_device_init);
+\end{minted}
+\end{frame}
+
+\begin{frame}
+ \frametitle{init\_post}
+ \begin{itemize}
+ \item The last step of Linux booting
+ \begin{itemize}
+ \item First tries to open a console
+ \item Then tries to run the init process, effectively turning the
+ current kernel thread into the userspace init process.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{init\_post Code: init/main.c}
+\begin{minted}[fontsize=\tiny]{c}
+static noinline int init_post(void) __releases(kernel_lock) {
+ /* need to finish all async __init code before freeing the memory */
+ async_synchronize_full();
+ free_initmem();
+ mark_rodata_ro();
+ system_state = SYSTEM_RUNNING;
+ numa_default_policy();
+
+ current->signal->flags |= SIGNAL_UNKILLABLE;
+ if (ramdisk_execute_command) {
+ run_init_process(ramdisk_execute_command);
+ printk(KERN_WARNING "Failed to execute %s\n", ramdisk_execute_command);
+ }
+
+ /* We try each of these until one succeeds.
+ * The Bourne shell can be used instead of init if we are
+ * trying to recover a really broken machine. */
+ if (execute_command) {
+ run_init_process(execute_command);
+ printk(KERN_WARNING "Failed to execute %s. Attempting defaults...\n", execute_command);
+ }
+ run_init_process("/sbin/init");
+ run_init_process("/etc/init");
+ run_init_process("/bin/init");
+ run_init_process("/bin/sh");
+
+ panic("No init found. Try passing init= option to kernel. See Linux Documentation/init.txt");
+}
+\end{minted}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Kernel Initialization Graph}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-init-content/kernel-initialization.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Kernel Initialization - Summary}
+ \begin{itemize}
+ \item The bootloader executes bootstrap code.
+ \item Bootstrap code initializes the processor and board, and
+ uncompresses the kernel code to RAM, and calls the kernel's
+ \code{start_kernel} function.
+ \item Copies the command line from the bootloader.
+ \item Identifies the processor and machine.
+ \item Initializes the console.
+ \item Initializes kernel services (memory allocation, scheduling,
+ file cache...)
+ \item Creates a new kernel thread (future init process) and
+ continues in the idle loop.
+ \item Initializes devices and execute initcalls.
+ \end{itemize}
+\end{frame}
diff --git a/slides/kernel-init-content/kernel-initialization.dia b/slides/kernel-init-content/kernel-initialization.dia
new file mode 100644
index 0000000..ed98190
--- /dev/null
+++ b/slides/kernel-init-content/kernel-initialization.dia
@@ -0,0 +1,979 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="4,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.95,3.95;11.05,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="4,4"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7.5,5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.74875,4.62625;9.25125,5.37375"/>
+ </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="7.5,5.22125"/>
+ </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="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="4,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.95,7.95;11.05,10.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="4,8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7.5,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.19125,8.22625;10.8087,9.77375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#head.o
+uncompression code#</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="7.5,8.82125"/>
+ </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="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7.5,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.1382,5.95;7.8618,8.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="7.5,6"/>
+ <dia:point val="7.5,8"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="6"/>
+ <dia:connection handle="1" to="O2" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="4,12"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.95,11.95;11.05,14.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="4,12"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7.5,13"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="4.73875,12.2263;10.2613,13.7737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#head.o
+main kernel code#</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="7.5,12.8213"/>
+ </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="O5" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7.5,10.0496"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.1382,9.99956;7.8618,12.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="7.5,10.0496"/>
+ <dia:point val="7.5,12"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="8"/>
+ <dia:connection handle="1" to="O5" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="4,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.95,15.95;11.05,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="4,16"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7.5,17"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.61,16.6262;9.39,17.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#start_kernel#</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="7.5,17.2212"/>
+ </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="4,20"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.95,19.95;11.05,22.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="4,20"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7.5,21"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="6.2225,20.6262;8.7775,21.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#rest_init#</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="7.5,21.2212"/>
+ </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 - Line" version="0" id="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7.5,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.1382,13.95;7.8618,16.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="7.5,14"/>
+ <dia:point val="7.5,16"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O5" connection="6"/>
+ <dia:connection handle="1" to="O8" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7.5,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.1382,17.95;7.8618,20.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="7.5,18"/>
+ <dia:point val="7.5,20"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O8" connection="6"/>
+ <dia:connection handle="1" to="O10" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="18,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="17.95,13.95;25.05,16.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="18,14"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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 - ZigZagLine" version="1" id="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="11,21"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.95,14.6382;18.1118,21.05"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="11,21"/>
+ <dia:point val="14.5,21"/>
+ <dia:point val="14.5,15"/>
+ <dia:point val="18,15"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O10" connection="4"/>
+ <dia:connection handle="1" to="O14" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="18,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="17.95,17.95;25.05,20.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="18,18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="21.5,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="20.1438,18.6262;22.8562,19.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#init_post#</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="21.5,19.2212"/>
+ </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="O16" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O18">
+ <dia:attribute name="obj_pos">
+ <dia:point val="21.5,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.8487,14.6263;23.1512,15.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#kernel_init#</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="21.5,15.2213"/>
+ </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="O14" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O19">
+ <dia:attribute name="obj_pos">
+ <dia:point val="21.5,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.1382,15.95;21.8618,18.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="21.5,16"/>
+ <dia:point val="21.5,18"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O14" connection="6"/>
+ <dia:connection handle="1" to="O16" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O20">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.95,17.95;38.05,20.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="31,18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O21">
+ <dia:attribute name="obj_pos">
+ <dia:point val="34.5,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="32.6638,18.6262;36.3362,19.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#init process#</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="34.5,19.2212"/>
+ </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="O20" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O22">
+ <dia:attribute name="obj_pos">
+ <dia:point val="25,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="24.95,18.6382;31.1118,19.3618"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="25,19"/>
+ <dia:point val="31,19"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O16" connection="4"/>
+ <dia:connection handle="1" to="O20" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O23">
+ <dia:attribute name="obj_pos">
+ <dia:point val="31,23"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30.95,22.95;38.05,25.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="31,23"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O24">
+ <dia:attribute name="obj_pos">
+ <dia:point val="34.5,24"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="33.1788,23.6262;35.8212,24.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#cpu_idle#</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="34.5,24.2212"/>
+ </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="O23" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O25">
+ <dia:attribute name="obj_pos">
+ <dia:point val="7.5,22"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="7.45,21.95;31.1118,24.3618"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="7.5,22"/>
+ <dia:point val="7.5,24"/>
+ <dia:point val="31,24"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O10" connection="6"/>
+ <dia:connection handle="1" to="O23" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O26">
+ <dia:attribute name="obj_pos">
+ <dia:point val="28,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="27.95,5.95;28.05,22.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="28,6"/>
+ <dia:point val="28,22"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="dashlength">
+ <dia:real val="0.50000000000000011"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O27">
+ <dia:attribute name="obj_pos">
+ <dia:point val="26,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="22.1,6.405;26,7.9525"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#System
+Initialization#</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="26,7"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O28">
+ <dia:attribute name="obj_pos">
+ <dia:point val="30,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="30,6.38631;33.0937,7.98988"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#System
+operation#</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="30,7"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-init-title/kernel-init-title.tex b/slides/kernel-init-title/kernel-init-title.tex
new file mode 100644
index 0000000..ac2ab2b
--- /dev/null
+++ b/slides/kernel-init-title/kernel-init-title.tex
@@ -0,0 +1 @@
+\section{Kernel Initialization}
diff --git a/slides/kernel-introduction-lab/kernel-introduction-lab.tex b/slides/kernel-introduction-lab/kernel-introduction-lab.tex
new file mode 100644
index 0000000..1a996bd
--- /dev/null
+++ b/slides/kernel-introduction-lab/kernel-introduction-lab.tex
@@ -0,0 +1,9 @@
+\setuplabframe
+{Training Setup}
+{
+ Prepare your lab environment
+ \begin{itemize}
+ \item Download the lab archive
+ \item Enforce correct permissions
+ \end{itemize}
+}
\ No newline at end of file
diff --git a/slides/kernel-introduction-title/kernel-introduction-title.tex b/slides/kernel-introduction-title/kernel-introduction-title.tex
new file mode 100644
index 0000000..66b97a2
--- /dev/null
+++ b/slides/kernel-introduction-title/kernel-introduction-title.tex
@@ -0,0 +1 @@
+\section{Linux Kernel Introduction}
diff --git a/slides/kernel-porting-content/kernel-porting-content.tex b/slides/kernel-porting-content/kernel-porting-content.tex
new file mode 100644
index 0000000..4963e86
--- /dev/null
+++ b/slides/kernel-porting-content/kernel-porting-content.tex
@@ -0,0 +1,491 @@
+\begin{frame}
+ \frametitle{Porting the Linux kernel}
+ \begin{itemize}
+ \item The Linux kernel supports a lot of different CPU architectures
+ \item Each of them is maintained by a different group of
+ contributors
+ \begin{itemize}
+ \item See the \code{MAINTAINERS} file for details
+ \end{itemize}
+ \item The organization of the source code and the methods to port
+ the Linux kernel to a new board are therefore very
+ architecture-dependent
+ \item For example, PowerPC and ARM are very different
+ \begin{itemize}
+ \item PowerPC relies on device trees to describe hardware details
+ \item ARM relies on source code only, but the migration to device
+ tree is in progress
+ \end{itemize}
+ \item This presentation is focused on the ARM architecture only
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Architecture, CPU and Machine}
+ \begin{itemize}
+ \item In the source tree, each architecture has its own directory
+ \begin{itemize}
+ \item \code{arch/arm} for the ARM architecture
+ \end{itemize}
+ \item This directory contains generic ARM code
+ \begin{itemize}
+ \item \code{boot}, \code{common}, \code{configs}, \code{kernel},
+ \code{lib}, \code{mm}, \code{nwfpe}, \code{vfp},
+ \code{oprofile}, \code{tools}
+ \end{itemize}
+ \item And many directories for different SoC families
+ \begin{itemize}
+ \item \code{mach-*} directories : \code{mach-pxa} for PXA CPUs,
+ \code{mach-imx} for Freescale iMX CPUs, etc.
+ \item Each of these directories contain
+ \begin{itemize}
+ \item Support for the SoC family (GPIO, clocks, pinmux, power
+ management, interrupt controller, etc.)
+ \item Support for several boards using this SoC
+ \end{itemize}
+ \end{itemize}
+ \item Some CPU types share some code, in directories named
+ \code{plat-*}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Source Code for Calao USB A9263}
+ \begin{itemize}
+ \item Taking the case of the Calao USB A9263 board, which uses a
+ AT91SAM9263 CPU.
+ \item \code{arch/arm/mach-at91}
+ \begin{itemize}
+ \item AT91 generic code
+ \begin{itemize}
+ \item \code{clock.c}
+ \item \code{leds.c}
+ \item \code{irq.c}
+ \item \code{pm.c}
+ \end{itemize}
+ \item CPU-specific code for the AT91SAM9263
+ \begin{itemize}
+ \item \code{at91sam9263.c}
+ \item \code{at91sam926x_time.c}
+ \item \code{at91sam9263_devices.c}
+ \end{itemize}
+ \item Board specific code
+ \begin{itemize}
+ \item \code{board-usb-a9263.c}
+ \end{itemize}
+ \end{itemize}
+ \item For the rest of this presentation, we will focus on board
+ support only
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Configuration}
+ \begin{itemize}
+ \item A configuration option must be defined for the board, in
+ \code{arch/arm/mach-at91/Kconfig}
+{\scriptsize
+\begin{verbatim}
+config MACH_USB_A9263
+ bool "CALAO USB-A9263"
+ depends on ARCH_AT91SAM9263
+ help
+ Select this if you are using a Calao Systems USB-A9263.
+ <http://www.calao-systems.com>
+\end{verbatim}
+}
+ \item This option must depend on the CPU type option corresponding
+ to the CPU used in the board
+ \begin{itemize}
+ \item Here the option is \code{ARCH_AT91SAM9263}, defined in the
+ same file
+ \end{itemize}
+ \item A default configuration file for the board can optionally be
+ stored in \code{arch/arm/configs/}. For our board, it's
+ \code{at91sam9263_defconfig}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Compilation}
+ \begin{itemize}
+ \item The source files corresponding to the board support must be
+ associated with the configuration option of the board
+\begin{verbatim}
+obj-$(CONFIG_MACH_USB_A9263) += board-usb-a9263.o
+\end{verbatim}
+ \item This is done in \code{arch/arm/mach-at91/Makefile}
+\begin{verbatim}
+obj-y := irq.o gpio.o
+obj-$(CONFIG_AT91_PMC_UNIT) += clock.o
+obj-y += leds.o
+obj-$(CONFIG_PM) += pm.o
+obj-$(CONFIG_AT91_SLOW_CLOCK) += pm_slowclock.o
+\end{verbatim}
+ \item The Makefile also tells which files are compiled for every AT91 CPU
+ \item And which files for our particular CPU, the AT91SAM9263
+{\footnotesize
+\begin{verbatim}
+obj-$(CONFIG_ARCH_AT91SAM9263) += at91sam9263.o
+at91sam926x_time.o at91sam9263_devices.o sam9_smc.o
+\end{verbatim}
+}
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Machine Structure}
+ \begin{itemize}
+ \item Each board is defined by a machine structure
+ \begin{itemize}
+ \item The word \emph{machine} is quite confusing since every
+ \code{mach-*} directory contains several machine definitions, one for
+ each board using a given CPU type
+ \end{itemize}
+ \item For the Calao board, at the end of
+ \code{arch/arm/mach-at91/board-usb-a926x.c}
+\begin{minted}[fontsize=\footnotesize]{c}
+MACHINE_START(USB_A9263, "CALAO USB_A9263")
+ /* Maintainer: calao-systems */
+ .phys_io = AT91_BASE_SYS,
+ .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
+ .boot_params = AT91_SDRAM_BASE + 0x100,
+ .timer = &at91sam926x_timer,
+ .map_io = ek_map_io,
+ .init_irq = ek_init_irq,
+ .init_machine = ek_board_init,
+MACHINE_END
+\end{minted}
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Machine Structure Macros}
+ \begin{itemize}
+ \item \code{MACHINE_START} and \code{MACHINE_END}
+ \begin{itemize}
+ \item Macros defined in \code{arch/arm/include/asm/mach/arch.h}
+ \item They are helpers to define a \code{struct machine_desc}
+ structure stored in a specific ELF section
+ \item Several \code{machine_desc} structures can be defined in a
+ kernel, which means that the kernel can support several boards.
+ \item The right structure is chosen at boot time
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Machine Type Number}
+ \begin{itemize}
+ \item In the ARM architecture, each board type is identified by a
+ machine type number
+ \item The latest machine type numbers list can be found at
+ \url{http://www.arm.linux.org.uk/developer/machines/download.php}
+ \item A copy of it exists in the kernel tree in
+ \code{arch/arm/tools/mach-types}
+ \begin{itemize}
+ \item For the Calao board
+ \begin{itemize}
+ \item \code{usb_a9263 MACH_USB_A9263 USB_A9263 1710}
+ \end{itemize}
+ \end{itemize}
+ \item At compile time, this file is processed to generate a header
+ file, \code{include/asm-arm/mach-types.h}
+ \begin{itemize}
+ \item For the Calao board
+ \begin{itemize}
+ \item \mint{c}+#define MACH_TYPE_USB_A9263 1710+
+ \end{itemize}
+ \item And a few other macros in the same file
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Machine Type Number}
+ \begin{itemize}
+ \item The machine type number is set in the \code{MACHINE_START()}
+ definition
+ \begin{itemize}
+ \item \mint{c}+MACHINE_START(USB_A9263, "CALAO USB_A9263")+
+ \end{itemize}
+ \item At run time, the machine type number of the board on which the
+ kernel is running is passed by the bootloader in register r1
+ \item Very early in the boot process
+ (\code{arch/arm/kernel/head.S}), the kernel calls
+ \code{__lookup_machine_type} in
+ \code{arch/arm/kernel/head-common.S}
+ \item \code{__lookup_machine_type} looks at all the
+ \code{machine_desc} structures of the special ELF section
+ \begin{itemize}
+ \item If it doesn't find the requested number, prints a message
+ and stops
+ \item If found, it knows the machine descriptions and continues
+ the boot process
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Early Debugging and Boot Parameters}
+ \begin{itemize}
+ \item Early debugging
+ \begin{itemize}
+ \item \code{phys_io} is the physical address of the I/O space
+ \item \code{io_pg_offset} is the offset in the page table to remap
+ the I/O space
+ \item These are used when \code{CONFIG_DEBUG_LL} is enabled to
+ provide very early debugging messages on the serial port
+ \end{itemize}
+ \item Boot parameters
+ \begin{itemize}
+ \item \code{boot_params} is the location where the bootloader has
+ left the boot parameters (the kernel command line)
+ \item The bootloader can override this address in register
+ \code{r2}
+ \item See also \code{Documentation/arm/Booting} for the details of
+ the environment expected by the kernel when booted
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{System Timer}
+ \begin{itemize}
+ \item The timer field points to a \code{struct sys_timer} structure,
+ that describes the system timer
+ \begin{itemize}
+ \item Used to generate the periodic tick at HZ frequency to call
+ the scheduler periodically
+ \end{itemize}
+ \item On the Calao board, the system timer is defined by the
+ \code{at91sam926x_timer} structure in \code{at91sam926x_time.c}
+ \item It contains the interrupt handler called at HZ frequency
+ \item It is integrated with the \code{clockevents} and the
+ \code{clocksource} infrastructures
+ \begin{itemize}
+ \item See \code{include/linux/clocksource.h} and
+ \code{include/linux/clockchips.h} for details
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{map\_io()}
+ \begin{itemize}
+ \item The \code{map_io()} function points to \code{ek_map_io()},
+ which
+ \begin{itemize}
+ \item Initializes the CPU using \code{at91sam9263_initialize()}
+ \begin{itemize}
+ \item Map I/O space
+ \item Register and initialize the clocks
+ \end{itemize}
+ \item Configures the debug serial port and set the console to be
+ on this serial port
+ \item Called at the very beginning of the C code execution
+ \begin{itemize}
+ \item \code{init/main.c}: \code{start_kernel()}
+ \item \code{arch/arm/kernel/setup.c}: \code{setup_arch()}
+ \item \code{arch/arm/mm/mmu.c}: \code{paging_init()}
+ \item \code{arch/arm/mm/mmu.c}: \code{devicemaps_init()}
+ \item \code{mdesc->map_io()}
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{init\_irq()}
+ \begin{itemize}
+ \item \code{init_irq()} to initialize the IRQ hardware specific
+ details
+ \item Implemented by \code{ek_init_irq()}, which calls
+ \code{at91sam9263_init_interrupts()} in \code{at91sam9263.c},
+ which mainly calls \code{at91_aic_init()} in \code{irq.c}
+ \begin{itemize}
+ \item Initialize the interrupt controller, assign the priorities
+ \item Register the IRQ chip (\code{irq_chip} structure) to the
+ kernel generic IRQ infrastructure, so that the kernel knows how
+ to ack, mask, unmask the IRQs
+ \end{itemize}
+ \item Called a little bit later than \code{map_io()}
+ \begin{itemize}
+ \item \code{init/main.c}: \code{start_kernel()}
+ \item \code{arch/arm/kernel/irq.c}: \code{init_IRQ()}
+ \item \code{init_arch_irq()} (equal to \code{mdesc->init_irq})
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{init\_machine()}
+ \begin{itemize}
+ \item \code{init_machine()} completes the initialization of the
+ board by registering all platform devices
+ \item Called by \code{customize_machines()} in
+ \code{arch/arm/kernel/setup.c}
+ \item This function is an \code{arch_initcall} (list of functions
+ whose address is stored in a specific ELF section, by levels)
+ \item At the end of kernel initialization, just before running the
+ first userspace program init:
+ \begin{itemize}
+ \item \code{init/main.c}: \code{kernel_init()}
+ \item \code{init/main.c}: \code{do_basic_setup()}
+ \item \code{init/main.c}: \code{do_initcalls()}
+ \item Calls all initcalls, level by level
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{init\_machine() for Calao}
+ \begin{itemize}
+ \item For the Calao board, implemented in \code{ek_board_init()}
+ \begin{itemize}
+ \item Registers serial ports, USB host, USB device, SPI, Ethernet,
+ NAND flash, 2IC, buttons and LEDs
+ \item Uses \code{at91_add_device_*()} helpers, defined in
+ \code{at91sam9263_devices.c}
+ \item These helpers call \code{platform_device_register()} to
+ register the different \code{platform_device} structures defined
+ in the same file
+ \item For some devices, the board specific code does the
+ registration itself (buttons) or passes board-specific data to
+ the registration helper (USB host and device, NAND, Ethernet,
+ etc.)
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Drivers}
+ \begin{itemize}
+ \item The \code{at91sam9263_devices.c} file doesn't implement the
+ drivers for the platform devices
+ \item The drivers are implemented at different places of the kernel
+ tree
+ \item For the Calao board
+ \begin{itemize}
+ \item USB host, driver \code{at91_ohci},
+ \code{drivers/usb/host/ohci-at91.c}
+ \item USB device, driver \code{at91_udc},
+ \code{drivers/usb/gadget/at91_udc.c}
+ \item Ethernet, driver \code{macb}, \code{drivers/net/macb.c}
+ \item NAND, driver \code{atmel_nand},
+ \code{drivers/mtd/nand/atmel_nand.c}
+ \item I2C on GPIO, driver \code{i2c-gpio},
+ \code{drivers/i2c/busses/i2c-gpio.c}
+ \item SPI, driver \code{atmel_spi}, \code{drivers/spi/atmel_spi.c}
+ \item Buttons, driver \code{gpio-keys},
+ \code{drivers/input/keyboard/gpio_keys.c}
+ \end{itemize}
+ \item All these drivers are selected by the ready-made configuration
+ file
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{New Directions in the ARM Architecture}
+ \begin{itemize}
+ \item The ARM architecture is migrating to the device tree
+ \begin{itemize}
+ \item \emph{The Device Tree is a data structure for describing
+ hardware}
+ \item Instead of describing the hardware in C, a special data
+ structure, external to the kernel is used
+ \item Allows to more easily port the kernel to newer platforms and
+ to make a single kernel image support multiple platforms
+ \end{itemize}
+ \item The ARM architecture is being consolidated
+ \begin{itemize}
+ \item The \emph{clock} API is being converted to a proper
+ framework, with drivers in \code{drivers/clk}
+ \item The GPIO support is being converted as proper GPIO drivers
+ in \code{drivers/gpio}
+ \item The pin muxing support is being converted as drivers in
+ \code{drivers/pinctrl}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Board Device Tree Example: tegra-harmony.dts}
+{\tiny
+\begin{verbatim}
+/dts-v1/;
+/memreserve/ 0x1c000000 0x04000000;
+/include/ "tegra20.dtsi"
+/ {
+ model = "NVIDIA Tegra2 Harmony evaluation board";
+ compatible = "nvidia,harmony", "nvidia,tegra20";
+ chosen {
+ bootargs = "vmalloc=192M video=tegrafb console=ttyS0,115200n8";
+ };
+
+ memory at 0 {
+ reg = < 0x00000000 0x40000000 >;
+ };
+
+ i2c at 7000c000 {
+ clock-frequency = <400000>;
+
+ codec: wm8903 at 1a {
+ compatible = "wlf,wm8903";
+ reg = <0x1a>;
+ interrupts = < 347 >;
+
+ gpio-controller;
+ #gpio-cells = <2>;
+
+ /* 0x8000 = Not configured */
+ gpio-cfg = < 0x8000 0x8000 0 0x8000 0x8000 >;
+ };
+ };
+ [...]
+};
+\end{verbatim}
+}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Device Tree Usage}
+ \begin{itemize}
+ \item The \emph{device tree source} (\code{.dts}) is compiled into a
+ \emph{device tree blob} (\code{.dtb}) using a \emph{device tree
+ compiler} (\code{.dtc})
+ \begin{itemize}
+ \item The \code{dtb} is an efficient binary data structure
+ \item The \code{dtb} is either appended to the kernel image, or
+ better, passed by the bootloader to the kernel
+ \end{itemize}
+ \item At runtime, the kernel parses the device tree to find out
+ \begin{itemize}
+ \item which devices are present
+ \item what drivers are needed
+ \item which parameters should be used to initialize the devices
+ \end{itemize}
+ \item On ARM, device tree support is only beginning
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Porting to a New Board: Advise}
+ \begin{itemize}
+ \item Porting Linux to a new board is easy, when Linux already
+ supports the evaluation kit / development board for your CPU.
+ \item Most work has already been done and it is just a matter of
+ customizing devices instantiated on your boards and their
+ settings.
+ \item Therefore, look for how the development board is supported, or
+ at least for a similar board with the same CPU.
+ \item For example, review the (few) differences between the Calao
+ \code{qil-a9260} board and Atmel's \code{sam9260} Evaluation Kit:
+ \begin{itemize}
+ \item \code{meld board-sam9260ek.c board-qil-a9260.c}
+ \end{itemize}
+ \item Similarly, you will find very few differences in U-boot
+ between code for a board and for the corresponding evaluation
+ board.
+ \end{itemize}
+\end{frame}
diff --git a/slides/kernel-porting-title/kernel-porting-title.tex b/slides/kernel-porting-title/kernel-porting-title.tex
new file mode 100644
index 0000000..43fc126
--- /dev/null
+++ b/slides/kernel-porting-title/kernel-porting-title.tex
@@ -0,0 +1 @@
+\section{Porting the Linux Kernel to an ARM Board}
diff --git a/slides/kernel-power-management-content/kernel-power-management-content.tex b/slides/kernel-power-management-content/kernel-power-management-content.tex
new file mode 100644
index 0000000..24cb6b5
--- /dev/null
+++ b/slides/kernel-power-management-content/kernel-power-management-content.tex
@@ -0,0 +1,352 @@
+\begin{frame}
+ \frametitle{PM Building Blocks}
+ \begin{itemize}
+ \item Several power management \emph{building blocks}
+ \begin{itemize}
+ \item Suspend and resume
+ \item CPUidle
+ \item Runtime power management
+ \item Frequency and voltage scaling
+ \item Applications
+ \end{itemize}
+ \item Independent \emph{building blocks} that can be improved
+ gradually during development
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Clock Framework (1)}
+ \begin{itemize}
+ \item Generic framework to manage clocks used by devices in the
+ system
+ \item Allows to reference count clock users and to shutdown the
+ unused clocks to save power
+ \item Simple API described in
+ \url{http://free-electrons.com/kerneldoc/latest/DocBook/kernel-api/clk.html}
+ \begin{itemize}
+ \item \code{clk_get()} to get a reference to a clock
+ \item \code{clk_enable()} to start the clock
+ \item \code{clk_disable()} to stop the clock
+ \item \code{clk_put()} to free the clock source
+ \item \code{clk_get_rate()} to get the current rate
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Clock Framework (2)}
+ \begin{itemize}
+ \item The clock framework API and the \code{clk} structure are
+ usually implemented by each architecture (code duplication!)
+ \begin{itemize}
+ \item See \code{arch/arm/mach-at91/clock.c} for an example
+ \item This is also where all clocks are defined.
+ \item Clocks are identified by a name string specific to a given
+ platform
+ \end{itemize}
+ \item Drivers can then use the clock API. Example from
+ \code{drivers/net/macb.c}:
+ \begin{itemize}
+ \item \code{clk_get()} called from the \code{probe()} function, to
+ get the definition of a clock for the current board, get its
+ frequency, and run \code{clk_enable()}.
+ \item \code{clk_put()} called from the \code{remove()} function to
+ release the reference to the clock, after calling
+ \code{clk_disable()}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Clock Disable Implementation}
+From \code{arch/arm/mach-at91/clock.c}: (2.6.36)
+\begin{minted}[fontsize=\footnotesize]{c}
+static void __clk_disable(struct clk *clk)
+{
+ BUG_ON(clk->users == 0);
+ if (--clk->users == 0 && clk->mode)
+ /* Call the hardware function switching off this clock */
+ clk->mode(clk, 0);
+ if (clk->parent)
+ __clk_disable(clk->parent);
+}
+
+[...]
+
+static void pmc_sys_mode(struct clk *clk, int is_on)
+{
+ if (is_on)
+ at91_sys_write(AT91_PMC_SCER, clk->pmc_mask);
+ else
+ at91_sys_write(AT91_PMC_SCDR, clk->pmc_mask);
+}
+\end{minted}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Suspend and Resume}
+ \begin{itemize}
+ \item Infrastructure in the kernel to support suspend and resume
+ \item Platform hooks
+ \begin{itemize}
+ \item \code{prepare()}, \code{enter()}, \code{finish()},
+ \code{valid()} in a \code{platform_suspend_ops} structure
+ \item Registered using the \code{suspend_set_ops()} function
+ \item See \code{arch/arm/mach-at91/pm.c}
+ \end{itemize}
+ \item Device drivers
+ \begin{itemize}
+ \item \code{suspend()} and \code{resume()} hooks in the
+ \code{*_driver} structures (\code{platform_driver},
+ \code{usb_driver}, etc.)
+ \item See \code{drivers/net/macb.c}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Board-specific Power Management}
+ \begin{itemize}
+ \item Typically takes care of battery and charging management.
+ \item Also defines \code{presuspend} and \code{postsuspend}
+ handlers.
+ \item Example: \code{arch/arm/mach-pxa/spitz_pm.c}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{arch/arm/mach-cpu/sleep.S}
+ \begin{itemize}
+ \item Assembly code implementing CPU specific suspend and resume
+ code.
+ \item Note: only found on arm, just 3 other occurrences in other
+ architectures, with other paths.
+ \item First scenario: only a suspend function. The code goes in
+ sleep state (after enabling DRAM self-refresh), and continues with
+ resume code.
+ \item Second scenario: suspend and resume functions. Resume
+ functions called by the bootloader.
+ \item Examples to look at:
+ \begin{itemize}
+ \item \code{arch/arm/mach-omap2/sleep24xx.S} (1st case)
+ \item \code{arch/arm/mach-pxa/sleep.S} (2nd case)
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Triggering Suspend}
+ \begin{itemize}
+ \item Whatever the power management implementation, CPU specific
+ \code{suspend_ops} functions are called by the \code{enter_state}
+ function.
+ \item \code{enter_state} also takes care of executing the suspend
+ and resume functions for your devices.
+ \item The execution of this function can be triggered from
+ userspace. To suspend to RAM:
+ \begin{itemize}
+ \item \code{echo mem > /sys/power/state}
+ \end{itemize}
+ \item Can also use the s2ram program from
+ \url{http://suspend.sourceforge.net/}
+ \item Read \code{kernel/power/suspend.c}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Runtime Power Management}
+ \begin{itemize}
+ \item According to the kernel configuration interface: \emph{Enable
+ functionality allowing I/O devices to be put into energy-saving
+ (low power) states at run time (or autosuspended) after a
+ specified period of inactivity and woken up in response to a
+ hardware-generated wake-up event or a driver's request.}
+ \item New hooks must be added to the drivers:
+ \code{runtime_suspend()}, \code{runtime_resume()},
+ \code{runtime_idle()}
+ \item API and details on \code{Documentation/power/runtime_pm.txt}
+ \item See also Kevin Hilman's presentation at ELC Europe 2010:
+ \url{http://elinux.org/images/c/cd/ELC-2010-khilman-Runtime-PM.odp}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Saving Power in the Idle Loop}
+ \begin{itemize}
+ \item The idle loop is what you run when there's nothing left to run
+ in the system.
+ \item Implemented in all architectures in
+ \code{arch/<arch>/kernel/process.c}
+ \item Example to read: look for \code{cpu_idle} in
+ \code{arch/arm/kernel/process.c}
+ \item Each ARM cpu defines its own \code{arch_idle} function.
+ \item The CPU can run power saving HLT instructions, enter NAP mode,
+ and even disable the timers (tickless systems).
+ \item See also \url{http://en.wikipedia.org/wiki/Idle_loop}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Managing Idle}
+ \begin{itemize}
+ \item Adding support for multiple idle levels
+ \begin{itemize}
+ \item Modern CPUs have several sleep states offering different
+ power savings with associated wake up latencies
+ \item Since 2.6.21, the dynamic tick feature allows to remove the
+ periodic tick to save power, and to know when the next event is
+ scheduled, for smarter sleeps.
+ \item CPUidle infrastructure to change sleep states
+ \begin{itemize}
+ \item Platform-specific driver defining sleep states and
+ transition operations
+ \item Platform-independent governors (ladder and menu)
+ \item Available for x86/ACPI, not supported yet by all ARM cpus.
+ (look for \code{cpuidle*} files under \code{arch/arm/})
+ \item See \code{Documentation/cpuidle/} in kernel sources.
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{PowerTOP}
+ \begin{itemize}
+ \item \url{http://www.lesswatts.org/projects/powertop/}
+ \begin{itemize}
+ \item With dynamic ticks, allows to fix parts of kernel code and
+ applications that wake up the system too often.
+ \item PowerTOP allows to track the worst offenders
+ \item Now available on ARM cpus implementing CPUidle
+ \item Also gives you useful hints for reducing power.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Frequency and Voltage Scaling (1)}
+ \begin{itemize}
+ \item Frequency and voltage scaling possible through the
+ \code{cpufreq} kernel infrastructure.
+ \begin{itemize}
+ \item Generic infrastructure: \code{drivers/cpufreq/cpufreq.c} and
+ \code{include/linux/cpufreq.h}
+ \item Generic governors, responsible for deciding frequency and
+ voltage transitions
+ \begin{itemize}
+ \item \code{performance}: maximum frequency
+ \item \code{powersave}: minimum frequency
+ \item \code{ondemand}: measures CPU consumption to adjust frequency
+ \item \code{conservative}: often better than
+ \code{ondemand}. Only increases frequency gradually when the
+ CPU gets loaded.
+ \item \code{userspace}: leaves the decision to an userspace
+ daemon.
+ \end{itemize}
+ \item This infrastructure can be controlled from
+ \code{/sys/devices/system/cpu/cpu<n>/cpufreq/}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Frequency and Voltage Scaling (2)}
+ \begin{itemize}
+ \item CPU support code in architecture dependent files. Example to
+ read: \code{arch/arm/plat-omap/cpu-omap.c}
+ \item Must implement the operations of the \code{cpufreq_driver}
+ structure and register them using \code{cpufreq_register_driver()}
+ \begin{itemize}
+ \item \code{init()} for initialization
+ \item \code{exit()} for cleanup
+ \item \code{verify()} to verify the user-chosen policy
+ \item \code{setpolicy()} or \code{target()} to actually perform
+ the frequency change
+ \end{itemize}
+ \item See \code{Documentation/cpu-freq/} for useful explanations
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{PM QoS}
+ \begin{itemize}
+ \item PM QoS is a framework developed by Intel introduced in 2.6.25
+ \item It allows kernel code and applications to set their
+ requirements in terms of
+ \begin{itemize}
+ \item CPU DMA latency
+ \item Network latency
+ \item Network throughput
+ \end{itemize}
+ \item According to these requirements, PM QoS allows kernel drivers
+ to adjust their power management
+ \item See \code{Documentation/power/pm_qos_interface.txt} and Mark
+ Gross' presentation at ELC 2008
+ \item Still in very early deployment (only 4 drivers in 2.6.36).
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Regulator Framework}
+ \begin{itemize}
+ \item Modern embedded hardware have hardware responsible for voltage
+ and current regulation
+ \item The regulator framework allows to take advantage of this
+ hardware to save power when parts of the system are unused
+ \begin{itemize}
+ \item A consumer interface for device drivers (i.e users)
+ \item Regulator driver interface for regulator drivers
+ \item Machine interface for board configuration
+ \item sysfs interface for userspace
+ \end{itemize}
+ \item Merged in Linux 2.6.27.
+ \item See \code{Documentation/power/regulator/} in kernel sources.
+ \item See Liam Girdwood's presentation at ELC 2008
+ \url{http://free-electrons.com/blog/elc-2008-report\#girdwood}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{BSP Work for a New Board}
+ \begin{itemize}
+ \item In case you just need to create a BSP for your board, and your
+ CPU already has full PM support, you should just need to:
+ \begin{itemize}
+ \item Create clock definitions and bind your devices to them.
+ \item Implement PM handlers (suspend, resume) in the drivers for
+ your board specific devices.
+ \item Implement runtime PM handlers in your drivers.
+ \item Implement board specific power management if needed (mainly
+ battery management)
+ \item Implement regulator framework hooks for your board if
+ needed.
+ \item All other parts of the PM infrastructure should be already
+ there: suspend / resume, cpuidle, cpu frequency and voltage
+ scaling.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Useful Resources}
+ \begin{itemize}
+ \item \code{Documentation/power/} in the Linux kernel sources.
+ \begin{itemize}
+ \item Will give you many useful details.
+ \end{itemize}
+ \item \url{http://lesswatts.org}
+ \begin{itemize}
+ \item Intel effort trying to create a Linux power saving community.
+ \item Mainly targets Intel processors.
+ \item Lots of useful resources.
+ \end{itemize}
+ \item \url{http://wiki.linaro.org/WorkingGroups/PowerManagement/}
+ \begin{itemize}
+ \item Ongoing developments on the ARM platform.
+ \end{itemize}
+ \item Tips and ideas for prolonging battery life
+ \begin{itemize}
+ \item \url{http://j.mp/fVdxKh}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
diff --git a/slides/kernel-power-management-lab/kernel-power-management-lab.tex b/slides/kernel-power-management-lab/kernel-power-management-lab.tex
new file mode 100644
index 0000000..23a1b82
--- /dev/null
+++ b/slides/kernel-power-management-lab/kernel-power-management-lab.tex
@@ -0,0 +1,8 @@
+\setuplabframe
+{Power Management}
+{
+ \begin{itemize}
+ \item Suspend and resume your Linux system
+ \item Change the CPU frequency of your system
+ \end{itemize}
+}
diff --git a/slides/kernel-power-management-title/kernel-power-management-title.tex b/slides/kernel-power-management-title/kernel-power-management-title.tex
new file mode 100644
index 0000000..ee19448
--- /dev/null
+++ b/slides/kernel-power-management-title/kernel-power-management-title.tex
@@ -0,0 +1 @@
+\section{Power Management}
diff --git a/slides/kernel-resources-advice/kernel-resources-advice.tex b/slides/kernel-resources-advice/kernel-resources-advice.tex
new file mode 100644
index 0000000..1f037b8
--- /dev/null
+++ b/slides/kernel-resources-advice/kernel-resources-advice.tex
@@ -0,0 +1,88 @@
+\subsection{Advices}
+
+\begin{frame}
+ \frametitle{Solving Issues}
+ \begin{itemize}
+ \item If you face an issue, and it doesn't look specific to your
+ work but rather to the tools you are using, it is very likely that
+ someone else already faced it.
+ \item Search the Internet for similar error reports.
+ \item You have great chances of finding a solution or workaround, or
+ at least an explanation for your issue.
+ \item Otherwise, reporting the issue is up to you!
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Getting Help}
+ \begin{itemize}
+ \item If you have a support contract, ask your vendor.
+ \item Otherwise, don't hesitate to share your questions and issues
+ \begin{itemize}
+ \item Either contact the Linux mailing list for your architecture
+ (like linux-arm-kernel or linuxsh-dev...).
+ \item Or contact the mailing list for the subsystem you're dealing
+ with (linux- usb-devel, linux-mtd...). Don't ask the maintainer
+ directly!
+ \item Most mailing lists come with a FAQ page. Make sure you read
+ it before contacting the mailing list.
+ \item Useful IRC resources are available too
+ (for example on \url{http://kernelnewbies.org}).
+ \item Refrain from contacting the Linux Kernel mailing list,
+ unless you're an experienced developer and need advice.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Reporting Linux Bugs}
+ \begin{itemize}
+ \item First make sure you're using the latest version
+ \item Make sure you investigate the issue as much as you can: see
+ \code{Documentation/BUG-HUNTING}
+ \item Check for previous bugs reports. Use web search engines,
+ accessing public mailing list archives.
+ \item If the subsystem you report a bug on has a mailing list, use
+ it. Otherwise, contact the official maintainer (see the
+ \code{MAINTAINERS} file). Always give as many useful details as
+ possible.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{How to Become a Kernel Developer?}
+ \begin{itemize}
+ \item Recommended resources
+ \begin{itemize}
+ \item See \code{Documentation/SubmittingPatches} for guidelines
+ and \url{http://kernelnewbies.org/UpstreamMerge} for very
+ helpful advice to have your changes merged upstream (by Rik van
+ Riel).
+ \item Watch the \emph{Write and Submit your first Linux kernel
+ Patch} talk by Greg. K.H:
+ \url{http://www.youtube.com/watch?v=LLBrBBImJt4}
+ \item How to Participate in the Linux Community (by Jonathan
+ Corbet) A Guide To The Kernel Development Process
+ \url{http://j.mp/tX2Ld6}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+
+\begin{frame}
+ \frametitle{How to Submit Patches or Drivers}
+ \begin{itemize}
+ \item Use git to prepare make your changes
+ \item Don't merge patches addressing different issues
+ \item Make sure that your changes compile well, and if possible, run well.
+ \item Run Linux patch checks: \code{scripts/checkpatch.pl}
+ \item Send the patches to yourself first, as an inline
+ attachment. This is required to let people reply to parts of your
+ patches. Make sure your patches still applies. See
+ \code{Documentation/email-clients.txt} for help configuring e-mail
+ clients. Best to use \code{git send-email}, which never corrupts
+ patches.
+ \item Run \code{scripts/get_maintainer.pl} on your patches, to know
+ who you should send them to.
+ \end{itemize}
+\end{frame}
diff --git a/slides/kernel-resources-references/kernel-resources-references.tex b/slides/kernel-resources-references/kernel-resources-references.tex
new file mode 100644
index 0000000..3bd4792
--- /dev/null
+++ b/slides/kernel-resources-references/kernel-resources-references.tex
@@ -0,0 +1,170 @@
+\subsection{References}
+
+\begin{frame}
+ \frametitle{Kernel Development News}
+ \begin{itemize}
+ \item Linux Weekly News
+ \begin{itemize}
+ \item \url{http://lwn.net/}
+ \item The weekly digest off all Linux and free software
+ information sources
+ \item In depth technical discussions about the kernel
+ \item Subscribe to finance the editors (\$7 / month)
+ \item Articles available for non subscribers after 1 week.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Useful Reading (1)}
+ \begin{itemize}
+ \item Essential Linux Device Drivers, April 2008
+ \begin{itemize}
+ \item \url{http://free-electrons.com/redirect/eldd-book.html}
+ \item By Sreekrishnan Venkateswaran, an embedded IBM engineer with
+ more than 10 years of experience
+ \item Covers a wide range of topics not covered by LDD : serial
+ drivers, input drivers, I2C, PCMCIA and Compact Flash, PCI, USB,
+ video drivers, audio drivers, block drivers, network drivers,
+ Bluetooth, IrDA, MTD, drivers in userspace, kernel debugging,
+ etc.
+ \item \emph{Probably the most wide ranging and complete Linux
+ device driver book I've read} -- Alan Cox
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Useful Reading (2)}
+ \begin{itemize}
+ \item Writing Linux Device drivers, September 2009
+ \begin{itemize}
+ \item \url{http://www.coopj.com/}
+ \item Self published by Jerry Cooperstein
+ \item Available like any other book (Amazon and others)
+ \item Though not as thorough as the previous book on specific
+ drivers, still a good complement on multiple aspects of kernel
+ and device driver development.
+ \item Based on Linux 2.6.31
+ \item Multiple exercises. Updated solutions for 2.6.36.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Useful Reading (3)}
+ \begin{itemize}
+ \item Linux Device Drivers, 3rd edition, Feb 2005
+ \begin{itemize}
+ \item \url{http://www.oreilly.com/catalog/linuxdrive3/}
+ \item By Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman,
+ O'Reilly
+ \item Freely available on-line! Great companion to the printed
+ book for easy electronic searches!
+ \item \url{http://lwn.net/Kernel/LDD3/} (1 PDF file per chapter)
+ \item \url{http://free-electrons.com/community/kernel/ldd3/}
+ (single PDF file)
+ \item Getting outdated but still useful for Linux device driver
+ writers!
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Useful Reading (4)}
+ \begin{itemize}
+ \item Linux Kernel Development, 3rd Edition, Jun 2010
+ \begin{itemize}
+ \item Robert Love, Novell Press
+ \item \url{http://free-electrons.com/redir/lkd3-book.html}
+ \item A very synthetic and pleasant way to learn about kernel
+ subsystems (beyond the needs of device driver writers)
+ \end{itemize}
+ \item The Linux Programming Interface, Oct 2010
+ \begin{itemize}
+ \item Michael Kerrisk, No Starch Press
+ \item \url{http://man7.org/tlpi/}
+ \item A gold mine about the kernel interface and how to use it
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Useful Online Resources}
+ \begin{itemize}
+ \item Kernel documentation (\code{Documentation/} in kernel sources)
+ \begin{itemize}
+ \item Available on line:
+ \url{http://free-electrons.com/kerneldoc/} (with HTML
+ documentation extracted from source code)
+ \end{itemize}
+ \item Linux kernel mailing list FAQ
+ \begin{itemize}
+ \item \url{http://www.tux.org/lkml/}
+ \item Complete Linux kernel FAQ
+ \item Read this before asking a question to the mailing list
+ \end{itemize}
+ \item Kernel Newbies
+ \begin{itemize}
+ \item \url{http://kernelnewbies.org/}
+ \item Glossary, articles, presentations, HOWTOs, recommended
+ reading, useful tools for people getting familiar with Linux
+ kernel or driver development.
+ \end{itemize}
+ \item Kernel glossary
+ \begin{itemize}
+ \item \url{http://kernelnewbies.org/KernelGlossary}
+ \end{itemize}
+\end{itemize}
+
+\end{frame}
+
+\begin{frame}
+ \frametitle{International Conferences}
+ \begin{itemize}
+ \item Embedded Linux Conference: \url{http://embeddedlinuxconference.com/}
+ \begin{itemize}
+ \item Organized by the CE Linux Forum:
+ \item in California (San Francisco, April)
+ \item in Europe (October-November)
+ \item Very interesting kernel and userspace topics for embedded
+ systems developers.
+ \item Presentation slides freely available
+ \end{itemize}
+ \item Linux Plumbers: \url{http://linuxplumbersconf.org}
+ \begin{itemize}
+ \item Conference on the low-level plumbing of Linux: kernel,
+ audio, power management, device management, multimedia, etc.
+ \end{itemize}
+ \item linux.conf.au: \url{http://linux.org.au/conf/}
+ \begin{itemize}
+ \item In Australia / New Zealand
+ \item Features a few presentations by key kernel hackers.
+ \end{itemize}
+ \item Don't miss our free conference videos on
+ \url{http://free-electrons.com/community/videos/conferences/}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{ARM resources}
+ \begin{itemize}
+ \item ARM Linux project: \url{http://www.arm.linux.org.uk/}
+ \begin{itemize}
+ \item Developer documentation:
+ \url{http://www.arm.linux.org.uk/developer/}
+ \item linux-arm-kernel mailing list:
+ \url{http://lists.infradead.org/mailman/listinfo/linux-arm-kernel}
+ \item FAQ: \url{http://www.arm.linux.org.uk/armlinux/mlfaq.php}
+ \end{itemize}
+ \item Linaro: \url{http://linaro.org}
+ \begin{itemize}
+ \item Many optimizations and resources for recent ARM CPUs
+ (toolchains, kernels, debugging utilities...).
+ \end{itemize}
+ \item ARM Limited: \url{http://www.linux-arm.com/}
+ \begin{itemize}
+ \item Wiki with links to useful developer resources
+ \end{itemize}
+ \end{itemize}
+\end{frame}
diff --git a/slides/kernel-resources-title/kernel-resources-title.tex b/slides/kernel-resources-title/kernel-resources-title.tex
new file mode 100644
index 0000000..209980e
--- /dev/null
+++ b/slides/kernel-resources-title/kernel-resources-title.tex
@@ -0,0 +1 @@
+\section{Kernel Advice and Resources}
diff --git a/slides/kernel-serial-drivers-content/architecture.dia b/slides/kernel-serial-drivers-content/architecture.dia
new file mode 100644
index 0000000..0abe391
--- /dev/null
+++ b/slides/kernel-serial-drivers-content/architecture.dia
@@ -0,0 +1,677 @@
+<?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>#A4#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.8222000598907471"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.8222000598907471"/>
+ </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="Arrière-plan" visible="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="3,2"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.95,1.95;24.05,4.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="3,2"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="21"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="13.5,3"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.0725,2.62625;16.9275,3.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#System Call Interface#</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="13.5,3.22125"/>
+ </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="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="3,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.95,5.95;15.05,12.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="3,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="12"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="6"/>
+ </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="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="16,6"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="15.95,5.95;24.05,8.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="16,6"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#2f004a"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#efb9ff"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="17.3337,6.62625;22.6662,7.37375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Character Driver#</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="20,7.22125"/>
+ </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="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9,8.22625;14.3325,9.77375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Character Driver
+TTY Core#</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="9,8.82125"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="2"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="2,7"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="1.95,6.95;7.05,11.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="2,7"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="4"/>
+ </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="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="4.5,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.9525,8.22625;6.0475,9.77375"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Line
+Discipline#</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="4.5,8.82125"/>
+ </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="O6" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="3,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.95,13.95;8.05,16.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="3,14"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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 - Box" version="0" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10,14"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.95,13.95;15.05,16.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="10,14"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </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="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="5.5,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="3.83125,14.6263;7.16875,15.3738"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#TTY Driver#</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="5.5,15.2213"/>
+ </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 - Text" version="1" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12.5,15"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.7513,14.2263;14.2488,15.7737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#TTY Driver
+Serial Core#</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="12.5,14.8213"/>
+ </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="O9" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O12">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="9.95,17.95;15.05,20.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="10,18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#a34804"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffd192"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O13">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12.5,19"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.5075,18.6262;14.4925,19.3737"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Serial Driver#</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="12.5,19.2212"/>
+ </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="O12" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O14">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,12"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.95,11.95;12.8618,14.1118"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="9,12"/>
+ <dia:point val="9,13"/>
+ <dia:point val="12.5,13"/>
+ <dia:point val="12.5,14"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="6"/>
+ <dia:connection handle="1" to="O9" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - ZigZagLine" version="1" id="O15">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,12"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="5.1382,11.95;9.05,14.1118"/>
+ </dia:attribute>
+ <dia:attribute name="orth_points">
+ <dia:point val="9,12"/>
+ <dia:point val="9,13"/>
+ <dia:point val="5.5,13"/>
+ <dia:point val="5.5,14"/>
+ </dia:attribute>
+ <dia:attribute name="orth_orient">
+ <dia:enum val="1"/>
+ <dia:enum val="0"/>
+ <dia:enum val="1"/>
+ </dia:attribute>
+ <dia:attribute name="autorouting">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O2" connection="6"/>
+ <dia:connection handle="1" to="O8" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O16">
+ <dia:attribute name="obj_pos">
+ <dia:point val="12.5,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="12.1382,15.95;12.8618,18.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="12.5,16"/>
+ <dia:point val="12.5,18"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O9" connection="6"/>
+ <dia:connection handle="1" to="O12" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O17">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.6382,3.95;20.3618,6.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="20,4"/>
+ <dia:point val="20,6"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O3" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O18">
+ <dia:attribute name="obj_pos">
+ <dia:point val="9,4"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="8.6382,3.95;9.3618,6.1118"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="9,4"/>
+ <dia:point val="9,6"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O2" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/kernel-serial-drivers-content/kernel-serial-drivers-content.tex b/slides/kernel-serial-drivers-content/kernel-serial-drivers-content.tex
new file mode 100644
index 0000000..b95cfd6
--- /dev/null
+++ b/slides/kernel-serial-drivers-content/kernel-serial-drivers-content.tex
@@ -0,0 +1,803 @@
+\begin{frame}
+ \frametitle{Architecture (1)}
+ \begin{center}
+ \includegraphics[height=0.8\textheight]{slides/kernel-serial-drivers-content/architecture.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Architecture (2)}
+ \begin{itemize}
+ \item To be properly integrated in a Linux system, serial ports must
+ be visible as TTY devices from userspace applications
+ \item Therefore, the serial driver must be part of the kernel TTY
+ subsystem
+ \item Until 2.6, serial drivers were implemented directly behind the
+ TTY core
+ \begin{itemize}
+ \item A lot of complexity was involved
+ \end{itemize}
+ \item Since 2.6, a specialized TTY driver, \code{serial_core}, eases
+ the development of serial drivers
+ \begin{itemize}
+ \item See \code{include/linux/serial_core.h} for the main
+ definitions of the \code{serial_core} infrastructure
+ \end{itemize}
+ \item The line discipline that cooks the data exchanged with the
+ \code{tty} driver. For normal serial ports, \code{N_TTY} is used.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Data Structures}
+ \begin{itemize}
+ \item A data structure representing a driver : \code{uart_driver}
+ \begin{itemize}
+ \item Single instance for each driver
+ \item \code{uart_register_driver()} and
+ \code{uart_unregister_driver()}
+ \end{itemize}
+ \item A data structure representing a port : \code{uart_port}
+ \begin{itemize}
+ \item One instance for each port (several per driver are possible)
+ \item \code{uart_add_one_port()} and \code{uart_remove_one_port()}
+ \end{itemize}
+ \item A data structure containing the pointers to the operations :
+ \code{uart_ops}
+ \begin{itemize}
+ \item Linked from \code{uart_port} through the \code{ops} field
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{uart\_driver}
+ \begin{itemize}
+ \item Usually
+ \begin{itemize}
+ \item Defined statically in the driver
+ \item Registered in \code{module_init()}
+ \item Unregistered in \code{module_cleanup()}
+ \end{itemize}
+ \item Contains
+ \begin{itemize}
+ \item \code{owner}, usually set to \code{THIS_MODULE}
+ \item \code{driver_name}
+ \item \code{dev_name}, the device name prefix, usually \code{ttyS}
+ \item \code{major} and \code{minor}
+ \begin{itemize}
+ \item Use \code{TTY_MAJOR} and \code{64} to get the normal
+ numbers. But they might conflict with the 8250-reserved
+ numbers
+ \end{itemize}
+ \item \code{nr}, the maximum number of ports
+ \item \code{cons}, pointer to the console device (covered later)
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{uart\_driver Code Example (1)}
+\begin{minted}[fontsize=\scriptsize]{c}
+static struct uart_driver atmel_uart = {
+ .owner = THIS_MODULE,
+ .driver_name = "atmel_serial",
+ .dev_name = ATMEL_DEVICENAME,
+ .major = SERIAL_ATMEL_MAJOR,
+ .minor = MINOR_START,
+ .nr = ATMEL_MAX_UART,
+ .cons = ATMEL_CONSOLE_DEVICE,
+};
+
+static struct platform_driver atmel_serial_driver = {
+ .probe = atmel_serial_probe,
+ .remove = __devexit_p(atmel_serial_remove),
+ .suspend = atmel_serial_suspend,
+ .resume = atmel_serial_resume,
+ .driver = {
+ .name = "atmel_usart",
+ .owner = THIS_MODULE,
+ },
+};
+\end{minted}
+Example code from \code{drivers/serial/atmel_serial.c}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{uart\_driver Code Example (2)}
+\begin{minted}[fontsize=\small]{c}
+static int __init atmel_serial_init(void)
+{
+ /* Warning: Error management removed */
+ uart_register_driver(&atmel_uart);
+ platform_driver_register(&atmel_serial_driver);
+ return 0;
+}
+
+static void __exit atmel_serial_exit(void)
+{
+ platform_driver_unregister(&atmel_serial_driver);
+ uart_unregister_driver(&atmel_uart);
+}
+
+module_init(atmel_serial_init);
+module_exit(atmel_serial_exit);
+\end{minted}
+\end{frame}
+
+\begin{frame}
+ \frametitle{uart\_port}
+ \begin{itemize}
+ \item Can be allocated statically or dynamically
+ \item Usually registered at \code{probe()} time and unregistered at
+ \code{remove()} time
+ \item Most important fields
+ \begin{itemize}
+ \item \code{iotype}, type of I/O access, usually \code{UPIO_MEM}
+ for memory-mapped devices
+ \item \code{mapbase}, physical address of the registers
+ \item \code{irq}, the IRQ channel number
+ \item \code{membase}, the virtual address of the registers
+ \item \code{uartclk}, the clock rate
+ \item \code{ops}, pointer to the operations
+ \item \code{dev}, pointer to the device (\code{platform_device}
+ or other)
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{uart\_port Code Example (1)}
+\begin{minted}[fontsize=\tiny]{c}
+static int __devinit atmel_serial_probe(struct platform_device *pdev)
+{
+ struct atmel_uart_port *port;
+
+ port = &atmel_ports[pdev->id];
+ port->backup_imr = 0;
+
+ atmel_init_port(port, pdev);
+
+ uart_add_one_port(&atmel_uart, &port->uart);
+
+ platform_set_drvdata(pdev, port);
+
+ return 0;
+}
+
+static int __devexit atmel_serial_remove(struct platform_device *pdev)
+{
+ struct uart_port *port = platform_get_drvdata(pdev);
+
+ platform_set_drvdata(pdev, NULL);
+ uart_remove_one_port(&atmel_uart, port);
+
+ return 0;
+}
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{uart\_port Code Example (2)}
+\begin{minted}[fontsize=\footnotesize]{c}
+static void __devinit atmel_init_port(struct atmel_uart_port *atmel_port,
+ struct platform_device *pdev)
+{
+ struct uart_port *port = &atmelt_port->uart;
+ struct atmel_uart_data *data = pdev->dev.platform_data;
+
+ port->iotype = UPIO_MEM;
+ port->flags = UPF_BOOT_AUTOCONF;
+ port->ops = &atmel_pops;
+ port->fifosize = 1;
+ port->line = pdev->id;
+ port->dev = &pdev->dev;
+
+ port->mapbase = pdev->resource[0].start;
+ port->irq = pdev->resource[1].start;
+
+ tasklet_init(&atmel_port->tasklet, atmel_tasklet_func,
+ (unsigned long)port);
+
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{uart\_port Code Example (3)}
+\begin{minted}[fontsize=\footnotesize]{c}
+ if (data->regs)
+ /* Already mapped by setup code */
+ port->membase = data->regs;
+ else {
+ port->flags |= UPF_IOREMAP;
+ port->membase = NULL;
+ }
+
+ /* for console, the clock could already be configured */
+ if (!atmel_port->clk) {
+ atmel_port->clk = clk_get(&pdev->dev, "usart");
+ clk_enable(atmel_port->clk);
+ port->uartclk = clk_get_rate(atmel_port->clk);
+ clk_disable(atmel_port->clk);
+ /* only enable clock when USART is in use */
+ }
+}
+\end{minted}
+\end{frame}
+
+\begin{frame}
+ \frametitle{uart\_ops}
+ \begin{itemize}
+ \item Important operations
+ \begin{itemize}
+ \item \code{tx_empty()}, tells whether the transmission FIFO is
+ empty or not
+ \item \code{set_mctrl()} and \code{get_mctrl()}, allow to set and
+ get the modem control parameters (RTS, DTR, LOOP, etc.)
+ \item \code{start_tx()} and \code{stop_tx()}, to start and stop
+ the transmission
+ \item \code{stop_rx()}, to stop the reception
+ \item \code{startup()} and \code{shutdown()}, called when the port
+ is opened/closed
+ \item \code{request_port()} and \code{release_port()},
+ request/release I/O or memory regions
+ \item \code{set_termios()}, change port parameters
+ \end{itemize}
+ \item See the detailed description in
+ \code{Documentation/serial/driver}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Implementing Transmission}
+ \begin{itemize}
+ \item The \code{start_tx()} method should start transmitting
+ characters over the serial port
+ \item The characters to transmit are stored in a circular buffer,
+ implemented by a \code{struct uart_circ} structure. It contains
+ \begin{itemize}
+ \item \code{buf[]}, the buffer of characters
+ \item \code{tail}, the index of the next character to
+ transmit. After transmit, tail must be updated using
+ \mint{c}+tail = tail &(UART_XMIT_SIZE - 1)+
+ \end{itemize}
+ \item Utility functions on \code{uart_circ}
+ \begin{itemize}
+ \item \code{uart_circ_empty()}, tells whether the circular buffer
+ is empty
+ \item \code{uart_circ_chars_pending()}, returns the number of
+ characters left to transmit
+ \end{itemize}
+ \item From an \code{uart_port} pointer, this structure can be
+ reached using \code{port->state->xmit}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Polled-Mode Transmission}
+\begin{minted}[fontsize=\footnotesize]{c}
+foo_uart_putc(struct uart_port *port, unsigned char c) {
+ while(__raw_readl(port->membase + UART_REG1) & UART_TX_FULL)
+ cpu_relax();
+ __raw_writel(c, port->membase + UART_REG2);
+}
+
+foo_uart_start_tx(struct uart_port *port) {
+ struct circ_buf *xmit = &port->state->xmit;
+
+ while (!uart_circ_empty(xmit)) {
+ foo_uart_putc(port, xmit->buf[xmit->tail]);
+ xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
+ port->icount.tx++;
+ }
+}
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Transmission with Interrupts (1)}
+\begin{minted}{c}
+foo_uart_interrupt(int irq, void *dev_id) {
+ [...]
+ if (interrupt_cause & END_OF_TRANSMISSION)
+ foo_uart_handle_transmit(port);
+ [...]
+}
+
+foo_uart_start_tx(struct uart_port *port) {
+ enable_interrupt_on_txrdy();
+}
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Transmission with Interrupts (2)}
+\begin{minted}[fontsize=\footnotesize]{c}
+foo_uart_handle_transmit(port) {
+ struct circ_buf *xmit = &port->state->xmit;
+ if (uart_circ_empty(xmit) || uart_tx_stopped(port)) {
+ disable_interrupt_on_txrdy();
+ return;
+ }
+
+ while (!uart_circ_empty(xmit)) {
+ if (!(__raw_readl(port->membase + UART_REG1) &
+ UART_TX_FULL))
+ break;
+ __raw_writel(xmit->buf[xmit->tail],
+ port->membase + UART_REG2);
+ xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
+ port->icount.tx++;
+ }
+
+ if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
+ uart_write_wakeup(port);
+}
+\end{minted}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Reception}
+ \begin{itemize}
+ \item On reception, usually in an interrupt handler, the driver must
+ \begin{itemize}
+ \item Increment \code{port->icount.rx}
+ \item Call \code{uart_handle_break()} if a \code{BRK} has been
+ received, and if it returns TRUE, skip to the next character
+ \item If an error occurred, increment \code{port->icount.parity},
+ \code{port->icount.frame}, \code{port->icount.overrun} depending
+ on the error type
+ \item Call \code{uart_handle_sysrq_char()} with the received
+ character, and if it returns TRUE, skip to the next character
+ \item Call \code{uart_insert_char()} with the received character
+ and a status
+ \begin{itemize}
+ \item Status is \code{TTY_NORMAL} is everything is OK, or
+ \code{TTY_BREAK}, \code{TTY_PARITY}, \code{TTY_FRAME} in case
+ of error
+ \end{itemize}
+ \item Call \code{tty_flip_buffer_push()} to push data to the TTY
+ later
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Understanding Sysrq}
+ \begin{itemize}
+ \item Part of the reception work is dedicated to handling
+ \code{Sysrq}
+ \begin{itemize}
+ \item Sysrq are special commands that can be sent to the kernel to
+ make it reboot, unmount filesystems, dump the task state, nice
+ real-time tasks, etc.
+ \item These commands are implemented at the lowest possible level
+ so that even if the system is locked, you can recover it.
+ \item Through serial port: send a \code{BRK} character, send the
+ character of the \code{Sysrq} command
+ \item See \code{Documentation/sysrq.txt}
+ \end{itemize}
+ \item In the driver
+ \begin{itemize}
+ \item \code{uart_handle_break()} saves the current time + 5
+ seconds in a variable
+ \item \code{uart_handle_sysrq_char()} will test if the current
+ time is below the saved time, and if so, will trigger the
+ execution of the Sysrq command
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Reception Code Sample (1)}
+\begin{minted}[fontsize=\scriptsize]{c}
+foo_receive_chars(struct uart_port *port) {
+ int limit = 256;
+
+ while (limit-- > 0) {
+ status = __raw_readl(port->membase + REG_STATUS);
+ ch = __raw_readl(port->membase + REG_DATA);
+ flag = TTY_NORMAL;
+
+ if (status & BREAK) {
+ port->icount.break++;
+ if (uart_handle_break(port))
+ continue;
+ }
+ else if (status & PARITY)
+ port->icount.parity++;
+ else if (status & FRAME)
+ port->icount.frame++;
+ else if (status & OVERRUN)
+ port->icount.overrun++;
+
+ [...]
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Reception Code Sample (2)}
+\begin{minted}[fontsize=\scriptsize]{c}
+ [...]
+ status &= port->read_status_mask;
+
+ if (status & BREAK)
+ flag = TTY_BREAK;
+ else if (status & PARITY)
+ flag = TTY_PARITY;
+ else if (status & FRAME)
+ flag = TTY_FRAME;
+
+ if (uart_handle_sysrq_char(port, ch))
+ continue;
+
+ uart_insert_char(port, status, OVERRUN, ch, flag);
+ }
+
+ spin_unlock(& port->lock);
+ tty_flip_buffer_push(port->state->port.tty);
+ spin_lock(& port->lock);
+}
+\end{minted}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Modem Control Lines}
+ \begin{itemize}
+ \item Set using the \code{set_mctrl()} operation
+ \begin{itemize}
+ \item The \code{mctrl} argument can be a mask of \code{TIOCM_RTS}
+ (request to send), \code{TIOCM_DTR} (Data Terminal Ready),
+ \code{TIOCM_OUT1}, \code{TIOCM_OUT2}, \code{TIOCM_LOOP} (enable
+ loop mode)
+ \item If a bit is set in \code{mctrl}, the signal must be driven
+ active, if the bit is cleared, the signal must be driven
+ inactive
+ \end{itemize}
+ \item Status using the \code{get_mctrl()} operation
+ \begin{itemize}
+ \item Must return read hardware status and return a combination of
+ \code{TIOCM_CD} (Carrier Detect), \code{TIOCM_CTS} (Clear to
+ Send), \code{TIOCM_DSR} (Data Set Ready) and \code{TIOCM_RI}
+ (Ring Indicator)
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{set\_mctrl() Example}
+\begin{minted}[fontsize=\scriptsize]{c}
+foo_set_mctrl(struct uart_port *uart, u_int mctrl) {
+ unsigned int control = 0, mode = 0;
+
+ if (mctrl & TIOCM_RTS)
+ control |= ATMEL_US_RTSEN;
+ else
+ control |= ATMEL_US_RTSDIS;
+
+ if (mctrl & TIOCM_DTS)
+ control |= ATMEL_US_DTREN;
+ else
+ control |= ATMEL_US_DTRDIS;
+
+ __raw_writel(port->membase + REG_CTRL, control);
+
+ if (mctrl & TIOCM_LOOP)
+ mode |= ATMEL_US_CHMODE_LOC_LOOP;
+ else
+ mode |= ATMEL_US_CHMODE_NORMAL;
+
+ __raw_writel(port->membase + REG_MODE, mode);
+}
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{get\_mctrl() example}
+\begin{minted}[fontsize=\footnotesize]{c}
+foo_get_mctrl(struct uart_port *uart, u_int mctrl) {
+ unsigned int status, ret = 0;
+
+ status = __raw_readl(port->membase + REG_STATUS);
+
+ /*
+ * The control signals are active low.
+ */
+ if (!(status & ATMEL_US_DCD))
+ ret |= TIOCM_CD;
+ if (!(status & ATMEL_US_CTS))
+ ret |= TIOCM_CTS;
+ if (!(status & ATMEL_US_DSR))
+ ret |= TIOCM_DSR;
+ if (!(status & ATMEL_US_RI))
+ ret |= TIOCM_RI;
+
+ return ret;
+}
+\end{minted}
+\end{frame}
+
+\begin{frame}
+ \frametitle{termios}
+ \begin{itemize}
+ \item \emph{The termios functions describe a general terminal
+ interface that is provided to control asynchronous
+ communications ports}
+ \item A mechanism to control from userspace serial port parameters
+ such as
+ \begin{itemize}
+ \item Speed
+ \item Parity
+ \item Byte size
+ \item Stop bit
+ \item Hardware handshake
+ \item Etc.
+ \end{itemize}
+ \item See \code{termios(3)} for details
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{set\_termios()}
+ \begin{itemize}
+ \item The \code{set_termios()} operation must
+ \begin{itemize}
+ \item apply configuration changes according to the arguments
+ \item update \code{port->read_config_mask} and
+ \code{port->ignore_config_mask} to indicate the events we are
+ interested in receiving
+ \end{itemize}
+ \item \mint{c}+static void set_termios(struct uart_port *port,+
+ \mint{c}+struct ktermios *termios, struct ktermios *old)+
+ \begin{itemize}
+ \item \code{port}, the port, \code{termios}, the new values and
+ \code{old}, the old values
+ \end{itemize}
+ \item Relevant \code{ktermios} structure fields are
+ \begin{itemize}
+ \item \code{c_cflag} with word size, stop bits, parity, reception
+ enable, CTS status change reporting, enable modem status change
+ reporting
+ \item \code{c_iflag} with frame and parity errors reporting, break
+ event reporting
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{set\_termios() example (1)}
+\begin{minted}[fontsize=\tiny]{c}
+static void atmel_set_termios(struct uart_port *port, struct ktermios *termios,
+ struct ktermios *old)
+{
+ unsigned long flags;
+ unsigned int mode, imr, quot, baud;
+
+ mode = __raw_readl(port->membase + REG_MODE);
+ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 16);
+ /* Read current configuration */
+ quot = uart_get_divisor(port, baud);
+
+ /* Compute the mode modification for the byte size parameter */
+ switch (termios->c_cflag & CSIZE) {
+ case CS5:
+ mode |= ATMEL_US_CHRL_5;
+ break;
+ case CS6:
+ mode |= ATMEL_US_CHRL_6;
+ break;
+ case CS7:
+ mode |= ATMEL_US_CHRL_7;
+ break;
+ default:
+ mode |= ATMEL_US_CHRL_8;
+ break;
+ }
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{set\_termios() example (2)}
+\begin{minted}[fontsize=\scriptsize]{c}
+ /* Compute the mode modification for the stop bit */
+ if (termios->c_cflag & CSTOPB)
+ mode |= ATMEL_US_NBSTOP_2;
+
+ /* Compute the mode modification for parity */
+ if (termios->c_cflag & PARENB) {
+ /* Mark or Space parity */
+ if (termios->c_cflag & CMSPAR) {
+ if (termios->c_cflag & PARODD)
+ mode |= ATMEL_US_PAR_MARK;
+ else
+ mode |= ATMEL_US_PAR_SPACE;
+ } else if (termios->c_cflag & PARODD)
+ mode |= ATMEL_US_PAR_ODD;
+ else
+ mode |= ATMEL_US_PAR_EVEN;
+ } else
+ mode |= ATMEL_US_PAR_NONE;
+
+ /* Compute the mode modification for CTS reporting */
+ if (termios->c_cflag & CRTSCTS)
+ mode |= ATMEL_US_USMODE_HWHS;
+ else
+ mode |= ATMEL_US_USMODE_NORMAL;
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{set\_termios() Example (3)}
+\begin{minted}[fontsize=\scriptsize]{c}
+ /* Compute the read_status_mask and ignore_status_mask
+ * according to the events we're interested in. These
+ * values are used in the interrupt handler. */
+ port->read_status_mask = ATMEL_US_OVRE;
+ if (termios->c_iflag & INPCK)
+ port->read_status_mask |= (ATMEL_US_FRAME | ATMEL_US_PARE);
+ if (termios->c_iflag & (BRKINT | PARMRK))
+ port->read_status_mask |= ATMEL_US_RXBRK;
+
+ port->ignore_status_mask = 0;
+ if (termios->c_iflag & IGNPAR)
+ port->ignore_status_mask |= (ATMEL_US_FRAME | ATMEL_US_PARE);
+ if (termios->c_iflag & IGNBRK) {
+ port->ignore_status_mask |= ATMEL_US_RXBRK;
+ if (termios->c_iflag & IGNPAR)
+ port->ignore_status_mask |= ATMEL_US_OVRE;
+ }
+ /* The serial_core maintains a timeout that corresponds to the
+ * duration it takes to send the full transmit FIFO. This timeout has
+ * to be updated. */
+ uart_update_timeout(port, termios->c_cflag, baud);
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{set\_termios() Example (4)}
+\begin{minted}[fontsize=\scriptsize]{c}
+ /* Finally, apply the mode and baud rate modifications. Interrupts,
+ * transmission and reception are disabled when the modifications
+ * are made. */
+
+ /* Save and disable interrupts */
+ imr = UART_GET_IMR(port);
+ UART_PUT_IDR(port, -1);
+ /* disable receiver and transmitter */
+ UART_PUT_CR(port, ATMEL_US_TXDIS | ATMEL_US_RXDIS);
+ /* set the parity, stop bits and data size */
+ UART_PUT_MR(port, mode);
+ /* set the baud rate */
+ UART_PUT_BRGR(port, quot);
+ UART_PUT_CR(port, ATMEL_US_RSTSTA | ATMEL_US_RSTRX);
+ UART_PUT_CR(port, ATMEL_US_TXEN | ATMEL_US_RXEN);
+ /* restore interrupts */
+ UART_PUT_IER(port, imr);
+ /* CTS flow-control and modem-status interrupts */
+ if (UART_ENABLE_MS(port, termios->c_cflag))
+ port->ops->enable_ms(port);
+}
+ \end{minted}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Console}
+ \begin{itemize}
+ \item To allows early boot messages to be printed, the kernel
+ provides a separate but related facility: \code{console}
+ \begin{itemize}
+ \item This console can be enabled using the \code{console=} kernel
+ argument
+ \end{itemize}
+ \item The driver developer must
+ \begin{itemize}
+ \item Implement a \code{console_write()} operation, called to
+ print characters on the console
+ \item Implement a \code{console_setup()} operation, called to
+ parse the \code{console=} argument
+ \item Declare a \code{struct console} structure
+ \item Register the console using a \code{console_initcall()}
+ function
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Console: Registration}
+\begin{minted}[fontsize=\scriptsize]{c}
+static struct console serial_txx9_console = {
+ .name = TXX9_TTY_NAME,
+ .write = serial_txx9_console_write,
+ /* Helper function from the serial_core layer */
+ .device = uart_console_device,
+ .setup = serial_txx9_console_setup,
+ /* Ask for the kernel messages buffered during
+ * boot to be printed to the console when activated */
+ .flags = CON_PRINTBUFFER,
+ .index = -1,
+ .data = &serial_txx9_reg,
+};
+
+static int __init serial_txx9_console_init(void)
+{
+ register_console(&serial_txx9_console);
+ return 0;
+}
+
+/* This will make sure the function is called early during the boot process.
+ * start_kernel() calls console_init() that calls our function */
+console_initcall(serial_txx9_console_init);
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Console: Setup}
+\begin{minted}[fontsize=\tiny]{c}
+static int __init serial_txx9_console_setup(struct console *co,
+ char *options)
+{
+ struct uart_port *port;
+ struct uart_txx9_port *up;
+ int baud = 9600;
+ int bits = 8;
+ int parity = 'n';
+ int flow = 'n';
+
+ if (co->index >= UART_NR)
+ co->index = 0;
+ up = &serial_txx9_ports[co->index];
+ port = &up->port;
+ if (!port->ops)
+ return -ENODEV;
+
+ /* Function shared with the normal serial driver */
+ serial_txx9_initialize(&up->port);
+
+ if (options)
+ /* Helper function from serial_core that parses the console= string */
+ uart_parse_options(options, &baud, &parity, &bits, &flow);
+
+ /* Helper function from serial_core that calls the ->set_termios() */
+ /* operation with the proper arguments to configure the port */
+ return uart_set_options(port, co, baud, parity, bits, flow);
+}
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Console: Write}
+\begin{minted}[fontsize=\tiny]{c}
+static void serial_txx9_console_putchar(struct uart_port *port, int ch)
+{
+ struct uart_txx9_port *up = (struct uart_txx9_port *)port;
+ /* Busy-wait for transmitter ready and output a single character. */
+ wait_for_xmitr(up);
+ sio_out(up, TXX9_SITFIFO, ch);
+}
+
+static void serial_txx9_console_write(struct console *co,
+ const char *s, unsigned int count)
+{
+ struct uart_txx9_port *up = &serial_txx9_ports[co->index];
+ unsigned int ier, flcr;
+
+ /* Disable interrupts */
+ ier = sio_in(up, TXX9_SIDICR);
+ sio_out(up, TXX9_SIDICR, 0);
+
+ /* Disable flow control */
+ flcr = sio_in(up, TXX9_SIFLCR);
+ if (!(up->port.flags & UPF_CONS_FLOW) && (flcr & TXX9_SIFLCR_TES))
+ sio_out(up, TXX9_SIFLCR, flcr & ~TXX9_SIFLCR_TES);
+
+ /* Helper function from serial_core that repeatedly calls the given putchar() */
+ /* callback */
+ uart_console_write(&up->port, s, count, serial_txx9_console_putchar);
+
+ /* Re-enable interrupts */
+ wait_for_xmitr(up);
+ sio_out(up, TXX9_SIFLCR, flcr);
+ sio_out(up, TXX9_SIDICR, ier);
+}
+\end{minted}
+\end{frame}
diff --git a/slides/kernel-serial-drivers-lab/kernel-serial-drivers-lab.tex b/slides/kernel-serial-drivers-lab/kernel-serial-drivers-lab.tex
new file mode 100644
index 0000000..30c6303
--- /dev/null
+++ b/slides/kernel-serial-drivers-lab/kernel-serial-drivers-lab.tex
@@ -0,0 +1,8 @@
+\setuplabframe
+{Serial drivers}
+{
+ \begin{itemize}
+ \item Improve the character driver of the previous labs to make it a
+ real serial driver
+ \end{itemize}
+}
diff --git a/slides/kernel-serial-drivers-title/kernel-serial-drivers-title.tex b/slides/kernel-serial-drivers-title/kernel-serial-drivers-title.tex
new file mode 100644
index 0000000..1aa91a8
--- /dev/null
+++ b/slides/kernel-serial-drivers-title/kernel-serial-drivers-title.tex
@@ -0,0 +1 @@
+\section{Serial Drivers}
diff --git a/slides/kernel-source-code-drivers/kernel-source-code-drivers.tex b/slides/kernel-source-code-drivers/kernel-source-code-drivers.tex
new file mode 100644
index 0000000..3302aa3
--- /dev/null
+++ b/slides/kernel-source-code-drivers/kernel-source-code-drivers.tex
@@ -0,0 +1,282 @@
+\subsection{Linux Code and Device Drivers}
+
+\begin{frame}
+ \frametitle{Supported kernel version}
+ \begin{itemize}
+ \item The APIs covered in these training slides should be compliant
+ with Linux 3.0.
+ \item We may also mention features in more recent kernels.
+ \end{itemize}
+\end{frame}
+
+
+\begin{frame}
+ \frametitle{Programming language}
+ \begin{itemize}
+ \item Implemented in C like all Unix systems. (C was created to
+ implement the first Unix systems)
+ \item A little Assembly is used too:
+ \begin{itemize}
+ \item CPU and machine initialization, exceptions
+ \item Critical library routines.
+ \end{itemize}
+ \item No C++ used, see \url{http://www.tux.org/lkml/\#s15-3}
+ \item All the code compiled with gcc, the GNU C Compiler
+ \begin{itemize}
+ \item Many gcc specific extensions used in the kernel code, any
+ ANSI C compiler will not compile the kernel
+ \item A few alternate compilers are supported (Intel and Marvell)
+ \item See
+ \url{http://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/C-Extensions.html}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{No C library}
+ \begin{itemize}
+ \item The kernel has to be standalone and can't use user-space code.
+ \item Userspace is implemented on top of kernel services, not the
+ opposite.
+ \item Kernel code has to supply its own library implementations
+ (string utilities, cryptography, uncompression ...)
+ \item So, you can't use standard C library functions in kernel code.
+ (\code{printf()}, \code{memset()}, \code{malloc()},...).
+ \item Fortunately, the kernel provides similar C functions for your
+ convenience, like \code{printk()}, \code{memset()},
+ \code{kmalloc()}, ...
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Portability}
+ \begin{itemize}
+ \item The Linux kernel code is designed to be portable
+ \item All code outside \code{arch/} should be portable
+ \item To this aim, the kernel provides macros and functions to
+ abstract the architecture specific details
+ \begin{itemize}
+ \item Endianness
+ \begin{itemize}
+ \item \code{cpu_to_be32}
+ \item \code{cpu_to_le32}
+ \item \code{be32_to_cpu}
+ \item \code{le32_to_cpu}
+ \end{itemize}
+ \item I/O memory access
+ \item Memory barriers to provide ordering guarantees if needed
+ \item DMA API to flush and invalidate caches if needed
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{No floating point computation}
+ \begin{itemize}
+ \item Never use floating point numbers in kernel code. Your code may
+ be run on a processor without a floating point unit (like on ARM).
+ \item Don't be confused with floating point related configuration
+ options
+ \begin{itemize}
+ \item They are related to the emulation of floating point
+ operation performed by the user space applications, triggering
+ an exception into the kernel.
+ \item Using soft-float, i.e. emulation in user-space, is however
+ recommended for performance reasons.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{No stable Linux internal API 1/3}
+ \begin{itemize}
+ \item The internal kernel API to implement kernel code can undergo
+ changes between two stable 2.6.x or 3.x releases. A stand-alone
+ driver compiled for a given version may no longer compile or work
+ on a more recent one. See
+ \code{Documentation/stable_api_nonsense.txt} in kernel sources for
+ reasons why.
+ \item Of course, the external API must not change (system calls,
+ \code{/proc}, \code{/sys}), as it could break existing
+ programs. New features can be added, but kernel developers try to
+ keep backward compatibility with earlier versions, at least for 1
+ or several years.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{No stable Linux internal API 2/3}
+ \begin{itemize}
+ \item Whenever a developer changes an internal API, (s)he also has
+ to update all kernel code which uses it. Nothing broken!
+ \item Works great for code in the mainline kernel tree.
+ \item Difficult to keep in line for out of tree or closed-source
+ drivers!
+ \item Feature removal schedule:
+ \code{Documentation/feature-removal-schedule.txt}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{No stable Linux internal API 3/3}
+ \begin{itemize}
+ \item USB example
+ \begin{itemize}
+ \item Linux has updated its USB internal API at least 3 times
+ (fixes, security issues, support for high-speed devices) and has
+ now the fastest USB bus speeds (compared to other systems)
+ \item Windows XP also had to rewrite its USB stack 3 times. But,
+ because of closed-source, binary drivers that can't be updated,
+ they had to keep backward compatibility with all earlier
+ implementation. This is very costly (development, security,
+ stability, performance).
+ \end{itemize}
+ \item See âMyths, Lies, and Truths about the Linux Kernelâ, by Greg
+ K.H., for details about the kernel development process:
+ \code{http://kroah.com/log/linux/ols_2006_keynote.html}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Kernel memory constraints}
+ \begin{itemize}
+ \item No memory protection
+ \item Accessing illegal memory locations result in (often fatal)
+ kernel oopses.
+ \item Fixed size stack (8 or 4 KB). Unlike in userspace, there's no
+ way to make it grow.
+ \item Kernel memory can't be swapped out (for the same reasons).
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Linux kernel licensing constraints}
+ \begin{itemize}
+ \item The Linux kernel is licensed under the GNU General Public
+ License version 2
+ \begin{itemize}
+ \item This license gives you the right to use, study, modify and
+ share the software freely
+ \end{itemize}
+ \item However, when the software is redistributed, either modified
+ or unmodified, the GPL requires that you redistribute the software
+ under the same license, with the source code
+ \begin{itemize}
+ \item If modifications are made to the Linux kernel (for example
+ to adapt it to your hardware), it is a derivative work of the
+ kernel, and therefore must be released under GPLv2
+ \item The validity of the GPL on this point has already been
+ verified in courts
+ \end{itemize}
+ \item However, you're only required to do so
+ \begin{itemize}
+ \item At the time the device starts to be distributed
+ \item To your customers, not to the entire world
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Proprietary code and the kernel}
+ \begin{itemize}
+ \item It is illegal to distribute a binary kernel that includes
+ statically compiled proprietary drivers
+ \item The kernel modules are a gray area : are they derived works of
+ the kernel or not?
+ \begin{itemize}
+ \item The general opinion of the kernel community is that
+ proprietary drivers are bad: \url{http://j.mp/fbyuuH}
+ \item From a legal point of view, each driver is probably a
+ different case
+ \item Is it really useful to keep your drivers secret?
+ \end{itemize}
+ \item There are some examples of proprietary drivers, like the
+ Nvidia graphics drivers
+ \begin{itemize}
+ \item They use a wrapper between the driver and the kernel
+ \item Unclear whether it makes it legal or not
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Advantages of GPL drivers 1/2}
+ \begin{itemize}
+ \item You don't have to write your driver from scratch. You can
+ reuse code from similar free software drivers.
+ \item You get free community contributions, support, code review and
+ testing. Proprietary drivers (even with sources) don't get any.
+ \item Your drivers can be freely shipped by others (mainly by
+ distributions).
+ \item Closed source drivers often support a given kernel version. A
+ system with closed source drivers from 2 different sources is
+ unmanageable.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Advantages of GPL drivers 2/2}
+ \begin{itemize}
+ \item Users and the community get a positive image of your
+ company. Makes it easier to hire talented developers.
+ \item You don't have to supply binary driver releases for each
+ kernel version and patch version (closed source drivers).
+ \item Drivers have all privileges. You need the sources to make sure
+ that a driver is not a security risk.
+ \item Your drivers can be statically compiled into the kernel.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Advantages of in-tree kernel drivers}
+ \begin{itemize}
+ \item Once your sources are accepted in the mainline tree, they are
+ maintained by people making changes.
+ \item Cost-free maintenance, security fixes and improvements.
+ \item Easy access to your sources by users.
+ \item Many more people reviewing your code.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Userspace device drivers 1/2}
+ \begin{itemize}
+ \item Possible to implement device drivers in user-space!
+ \item Such drivers just need access to the devices through minimum,
+ generic kernel drivers.
+ \item Examples
+ \begin{itemize}
+ \item Printer and scanner drivers (on top of generic parallel port
+ or USB drivers)
+ \item X drivers: low level kernel drivers + user space X drivers.
+ \item Userspace drivers based on UIO See
+ \code{Documentation/DocBook/uio-howto} in the kernel
+ documentation for details about UIO and the \emph{Using UIO on
+ an Embedded platform} talk at ELC 2008
+ \code{http://j.mp/tBzayM}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Userspace device drivers 2/2}
+ \begin{itemize}
+ \item Advantages
+ \begin{itemize}
+ \item No need for kernel coding skills. Easier to reuse code
+ between devices.
+ \item Drivers can be written in any language, even Perl!
+ \item Drivers can be kept proprietary.
+ \item Driver code can be killed and debugged. Cannot crash the
+ kernel.
+ \item Can be swapped out (kernel code cannot be).
+ \item Can use floating-point computation.
+ \item Less in-kernel complexity.
+ \end{itemize}
+ \item Drawbacks
+ \begin{itemize}
+ \item Less straightforward to handle interrupts.
+ \item Increased latency vs. kernel code.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
diff --git a/slides/kernel-source-code-lab-module/kernel-source-code-lab-module.tex b/slides/kernel-source-code-lab-module/kernel-source-code-lab-module.tex
new file mode 100644
index 0000000..c390227
--- /dev/null
+++ b/slides/kernel-source-code-lab-module/kernel-source-code-lab-module.tex
@@ -0,0 +1,10 @@
+\setuplabframe
+{Module Development Environment}
+{
+ \begin{itemize}
+ \item Set up a cross-compiling environment
+ \item Cross-compile a kernel for an ARM target platform
+ \item Boot this kernel from a directory on your workstation,
+ accessed by the board through NFS
+ \end{itemize}
+}
\ No newline at end of file
diff --git a/slides/kernel-source-code-lab-source-code/kernel-source-code-lab-source-code.tex b/slides/kernel-source-code-lab-source-code/kernel-source-code-lab-source-code.tex
new file mode 100644
index 0000000..247e130
--- /dev/null
+++ b/slides/kernel-source-code-lab-source-code/kernel-source-code-lab-source-code.tex
@@ -0,0 +1,10 @@
+\setuplabframe
+{Kernel Source Code}
+{
+ \begin{itemize}
+ \item Get the Linux kernel sources
+ \item Apply patches
+ \item Explore sources manually
+ \item Use automated tools to explore the source code
+ \end{itemize}
+}
\ No newline at end of file
diff --git a/slides/kernel-source-code-layout/kernel-source-code-layout.tex b/slides/kernel-source-code-layout/kernel-source-code-layout.tex
new file mode 100644
index 0000000..f53f214
--- /dev/null
+++ b/slides/kernel-source-code-layout/kernel-source-code-layout.tex
@@ -0,0 +1,167 @@
+\subsection{Linux sources}
+
+\begin{frame}
+ \frametitle{Linux sources structure 1/4}
+ \begin{itemize}
+ \item \code{arch/<architecture>}
+ \begin{itemize}
+ \item Architecture specific code
+ \end{itemize}
+ \item \code{arch/<architecture>/mach-<machine>}
+ \begin{itemize}
+ \item Machine/board specific code
+ \end{itemize}
+ \item \code{block}
+ \begin{itemize}
+ \item Block layer core
+ \end{itemize}
+ \item \code{COPYING}
+ \begin{itemize}
+ \item Linux copying conditions (GNU GPL)
+ \end{itemize}
+ \item \code{CREDITS}
+ \begin{itemize}
+ \item Linux main contributors
+ \end{itemize}
+ \item \code{crypto/}
+ \begin{itemize}
+ \item Cryptographic libraries
+ \end{itemize}
+ \item \code{Documentation/}
+ \begin{itemize}
+ \item Kernel documentation. Don't miss it!
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Linux sources structure 2/4}
+ \begin{itemize}
+ \item \code{drivers/}
+ \begin{itemize}
+ \item All device drivers except sound ones (usb, pci...)
+ \end{itemize}
+ \item \code{fs/}
+ \begin{itemize}
+ \item Filesystems (\code{fs/ext3/}, etc.)
+ \end{itemize}
+ \item \code{include/}
+ \begin{itemize}
+ \item Kernel headers
+ \end{itemize}
+ \item \code{include/asm-<architecture>}
+ \begin{itemize}
+ \item Architecture and machine dependent headers
+ \end{itemize}
+ \item \code{include/linux}
+ \begin{itemize}
+ \item Linux kernel core headers
+ \end{itemize}
+ \item \code{init/}
+ \begin{itemize}
+ \item Linux initialization (including \code{main.c})
+ \end{itemize}
+ \item \code{ipc/}
+ \begin{itemize}
+ \item Code used for process communication
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Linux sources structure 3/4}
+ \begin{itemize}
+ \item \code{Kbuild}
+ \begin{itemize}
+ \item Part of the kernel build system
+ \end{itemize}
+ \item \code{kernel/}
+ \begin{itemize}
+ \item Linux kernel core (very small!)
+ \end{itemize}
+ \item \code{lib/}
+ \begin{itemize}
+ \item Misc library routines (zlib, crc32...)
+ \end{itemize}
+ \item \code{MAINTAINERS}
+ \begin{itemize}
+ \item Maintainers of each kernel part. Very useful!
+ \end{itemize}
+ \item \code{Makefile}
+ \begin{itemize}
+ \item Top Linux Makefile (sets arch and version)
+ \end{itemize}
+ \item \code{mm/}
+ \begin{itemize}
+ \item Memory management code (small too!)
+ \end{itemize}
+ \item \code{net/}
+ \begin{itemize}
+ \item Network support code (not drivers)
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Linux sources structure 4/4}
+ \begin{itemize}
+ \item \code{README}
+ \begin{itemize}
+ \item Overview and building instructions
+ \end{itemize}
+ \item \code{REPORTING-BUGS}
+ \begin{itemize}
+ \item Bug report instructions
+ \end{itemize}
+ \item \code{samples/}
+ \begin{itemize}
+ \item Sample code (markers, kprobes, kobjects...)
+ \end{itemize}
+ \item \code{scripts/}
+ \begin{itemize}
+ \item Scripts for internal or external use
+ \end{itemize}
+ \item \code{security/}
+ \begin{itemize}
+ \item Security model implementations (SELinux...)
+ \end{itemize}
+ \item \code{sound/}
+ \begin{itemize}
+ \item Sound support code and drivers
+ \end{itemize}
+ \item \code{usr/}
+ \begin{itemize}
+ \item Code to generate an initramfs cpio archive.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Accessing development sources 1/2}
+ \begin{itemize}
+ \item Useful if you are involved in kernel development or if you
+ found a bug in the source code.
+ \item Kernel development sources are now managed with Git:
+ \url{http://git-scm.com/}
+ \item You can browse Linus' Git tree (if you just need to check a
+ few files):
+ \url{http://www.kernel.org/git/?p=linux/kernel/git/torvalds/linux.git;a=tree}
+ \item You can also directly use Git on your workstation
+ \begin{itemize}
+ \item Debian / Ubuntu: install the git-core package
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Accessing development sources 2/2}
+ \begin{itemize}
+ \item Choose a Git development tree on \url{http://git.kernel.org/}
+ \item Get a local copy (âcloneâ) of this tree.
+ \begin{itemize}
+ \item \code{git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git}
+ \end{itemize}
+ \item Update your copy whenever needed: \code{git pull}
+ \item See our training materials on Git: \url{http://free-electrons.com/docs/git/}
+ \end{itemize}
+\end{frame}
diff --git a/slides/kernel-source-code-management/cscope.png b/slides/kernel-source-code-management/cscope.png
new file mode 100644
index 0000000..1c459f1
Binary files /dev/null and b/slides/kernel-source-code-management/cscope.png differ
diff --git a/slides/kernel-source-code-management/kernel-source-code-management.tex b/slides/kernel-source-code-management/kernel-source-code-management.tex
new file mode 100644
index 0000000..d3d5290
--- /dev/null
+++ b/slides/kernel-source-code-management/kernel-source-code-management.tex
@@ -0,0 +1,62 @@
+\subsection{Kernel source management tools}
+
+\begin{frame}
+ \frametitle{Cscope}
+ \begin{itemize}
+ \item \url{http://cscope.sourceforge.net/}
+ \begin{itemize}
+ \item Tool to browse source code (mainly C, but also C++ or Java)
+ \item Supports huge projects like the Linux kernel. Takes less
+ than 1 min. to index Linux 2.6.17 sources (fast!)
+ \item Can be used from editors like vim and emacs.
+ \item In Linux kernel sources, run it with: \code{cscope -Rk} (see
+ man cscope for details)
+ \item kscope: graphical front-end, not actively maintained though
+ (will reappear in Ubuntu 12.04)
+ \item Allows searching for a symbol, a definition, functions,
+ strings, files, etc.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Cscope screenshot}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-source-code-management/cscope.png}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{LXR: Linux Cross Reference}
+ \begin{itemize}
+ \item \url{http://sourceforge.net/projects/lxr}
+ \item Generic source indexing tool and code browser
+ \begin{itemize}
+ \item Web server based, very easy and fast to use
+ \item Identifier or text search available
+ \item Very easy to find the declaration, implementation or usages
+ of symbols
+ \item Supports C and C++
+ \item Supports huge code projects such as the Linux kernel (431 MB
+ of source code in version 3.0).
+ \item Takes a little time and patience to setup (configuration,
+ indexing, server configuration).
+ \item Indexing a new version is very fast: approximately 20
+ minutes with LXR 0.3.1 (old version, but scales very well).
+ \item You don't need to set up LXR by yourself. Use our
+ \url{http://lxr.free-electrons.com} server!
+ \item Other servers available on the Internet:
+ \url{http://free-electrons.com/community/kernel/lxr/}
+ \item This makes LXR the simplest solution to browse standard
+ kernel sources.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{LXR screenshot}
+ \begin{center}
+ \includegraphics[width=\textwidth]{slides/kernel-source-code-management/lxr.png}
+ \end{center}
+\end{frame}
+
diff --git a/slides/kernel-source-code-management/lxr.png b/slides/kernel-source-code-management/lxr.png
new file mode 100644
index 0000000..8b59790
Binary files /dev/null and b/slides/kernel-source-code-management/lxr.png differ
diff --git a/slides/kernel-source-code-title/kernel-source-code-title.tex b/slides/kernel-source-code-title/kernel-source-code-title.tex
new file mode 100644
index 0000000..f9f3326
--- /dev/null
+++ b/slides/kernel-source-code-title/kernel-source-code-title.tex
@@ -0,0 +1 @@
+\section{Kernel Source Code}
-----------------------------------------------------------------------
Summary of changes:
Makefile | 60 +-
.../driver-architecture.dia} | 387 ++--
.../frameworks.dia} | 1090 +++++++----
...nel-driver-development-architecture-drivers.tex | 918 +++++++++
.../link-structures-imx.dia} | 487 +++--
.../link-structures-netdev.dia} | 523 +++---
.../recursive-model.dia} | 1594 +++++++++-------
.../spi-components.dia} | 1315 +++++++------
.../usb-bus.dia} | 1410 +++++++-------
.../usb-detection.dia} | 166 +-
.../usb-registering.dia} | 125 +-
.../copy-to-from-user.dia} | 603 +++---
...kernel-driver-development-character-drivers.tex | 635 +++++++
.../user-kernel-exchanges.dia} | 662 ++++---
.../concurrency-protection.dia} | 623 +++---
.../deadlock-same-lock.dia} | 218 +--
.../deadlock-two-locks.dia} | 198 +-
.../kernel-driver-development-concurrency.tex | 321 ++++
.../spinlock.dia} | 147 +-
.../kernel-driver-development-debugging.tex | 415 ++++
.../kernel-driver-development-debugging/kexec.dia | 307 ++-
.../dma-integration.dia} | 356 ++--
.../kernel-driver-development-dma.tex | 227 +++
.../kernel-driver-development-general-apis.tex | 101 +
.../kernel-driver-development-interrupts.tex | 292 +++
.../thread-halves.dia} | 690 +++----
.../ioremap.dia} | 874 ++++-----
.../kernel-driver-development-io-memory.tex | 262 +++
.../mmio-vs-pio.dia} | 259 ++-
...el-driver-development-lab-character-drivers.tex | 13 +
.../kernel-driver-development-lab-debugging.tex | 12 +
.../kernel-driver-development-lab-interrupts.tex | 11 +
.../kernel-driver-development-lab-io-memory.tex | 11 +
.../kernel-driver-development-lab-locking.tex | 8 +
.../kernel-driver-development-lab-modules.tex | 9 +
.../allocators.dia} | 601 +++---
.../kernel-driver-development-memory.tex | 368 ++++
.../memory-mapping.dia} | 557 +++---
.../memory-organization.dia} | 180 +-
.../mmu.dia} | 1175 +++++-------
.../slab-allocator.dia | 1979 ++++++++++++++++++++
.../slab-screenshot.png | Bin 0 -> 5699 bytes
.../kernel-driver-development-mmap.tex | 174 ++
.../exported-symbols.dia} | 675 ++++---
.../kernel-driver-development-modules.tex | 351 ++++
.../out-of-tree.dia} | 224 ++-
.../address-space.dia} | 208 +-
.../kernel-driver-development-processes.tex | 57 +
.../syscalls.dia} | 341 ++--
.../threads-life.dia} | 707 +++----
.../kernel-driver-development-sleeping.tex | 171 ++
.../sleeping.dia} | 759 ++++----
.../kernel-driver-development-title.tex | 1 +
.../kernel-embedded-linux-usage-title.tex | 1 +
slides/kernel-git-content/gitk.png | Bin 0 -> 207883 bytes
slides/kernel-git-content/gitweb.png | Bin 0 -> 64187 bytes
slides/kernel-git-content/kernel-git-content.tex | 554 ++++++
slides/kernel-git-lab/kernel-git-lab.tex | 9 +
slides/kernel-git-title/kernel-git-title.tex | 1 +
.../bootloader-userspace.dia} | 292 +--
.../kernel-bootstrap.dia} | 1434 +++++++-------
slides/kernel-init-content/kernel-init-content.tex | 289 +++
.../kernel-initialization.dia} | 920 +++++----
slides/kernel-init-title/kernel-init-title.tex | 1 +
.../kernel-introduction-lab.tex | 9 +
.../kernel-introduction-title.tex | 1 +
.../kernel-porting-content.tex | 491 +++++
.../kernel-porting-title/kernel-porting-title.tex | 1 +
.../kernel-power-management-content.tex | 352 ++++
.../kernel-power-management-lab.tex | 8 +
.../kernel-power-management-title.tex | 1 +
.../kernel-resources-advice.tex | 88 +
.../kernel-resources-references.tex | 170 ++
.../kernel-resources-title.tex | 1 +
.../architecture.dia} | 455 +++--
.../kernel-serial-drivers-content.tex | 803 ++++++++
.../kernel-serial-drivers-lab.tex | 8 +
.../kernel-serial-drivers-title.tex | 1 +
.../kernel-source-code-drivers.tex | 282 +++
.../kernel-source-code-lab-module.tex | 10 +
.../kernel-source-code-lab-source-code.tex} | 7 +-
.../kernel-source-code-layout.tex | 167 ++
slides/kernel-source-code-management/cscope.png | Bin 0 -> 9424 bytes
.../kernel-source-code-management.tex | 62 +
slides/kernel-source-code-management/lxr.png | Bin 0 -> 194771 bytes
.../kernel-source-code-title.tex | 1 +
86 files changed, 20333 insertions(+), 9943 deletions(-)
copy slides/{sysdev-realtime/kernel-preemption.dia => kernel-driver-development-architecture-drivers/driver-architecture.dia} (70%)
copy slides/{sysdev-realtime/xenomai-architecture.dia => kernel-driver-development-architecture-drivers/frameworks.dia} (62%)
create mode 100644 slides/kernel-driver-development-architecture-drivers/kernel-driver-development-architecture-drivers.tex
copy slides/{sysdev-application-development/gdb-vs-gdbserver-architecture.dia => kernel-driver-development-architecture-drivers/link-structures-imx.dia} (66%)
copy slides/{sysdev-embedded-linux/xorg-architecture.dia => kernel-driver-development-architecture-drivers/link-structures-netdev.dia} (68%)
copy slides/{sysdev-embedded-linux/gtk-dependencies-size.dia => kernel-driver-development-architecture-drivers/recursive-model.dia} (62%)
copy slides/{sysdev-realtime/xenomai-architecture.dia => kernel-driver-development-architecture-drivers/spi-components.dia} (64%)
copy slides/{sysdev-embedded-linux/gtk-dependencies-size.dia => kernel-driver-development-architecture-drivers/usb-bus.dia} (62%)
copy slides/{sysdev-realtime/userspace-preemption.dia => kernel-driver-development-architecture-drivers/usb-detection.dia} (73%)
copy slides/{sysdev-realtime/userspace-preemption.dia => kernel-driver-development-architecture-drivers/usb-registering.dia} (78%)
copy slides/{sysdev-realtime/kernel-preemption.dia => kernel-driver-development-character-drivers/copy-to-from-user.dia} (61%)
create mode 100644 slides/kernel-driver-development-character-drivers/kernel-driver-development-character-drivers.tex
copy slides/{sysdev-embedded-linux/gtk-backends.dia => kernel-driver-development-character-drivers/user-kernel-exchanges.dia} (64%)
copy slides/{sysdev-udev/firmware-hotplugging.dia => kernel-driver-development-concurrency/concurrency-protection.dia} (69%)
copy slides/{sysdev-realtime/interrupt-inversion.dia => kernel-driver-development-concurrency/deadlock-same-lock.dia} (66%)
copy slides/{sysdev-realtime/interrupt-inversion.dia => kernel-driver-development-concurrency/deadlock-two-locks.dia} (76%)
create mode 100644 slides/kernel-driver-development-concurrency/kernel-driver-development-concurrency.tex
copy slides/{sysdev-application-development/gdb-vs-gdbserver.dia => kernel-driver-development-concurrency/spinlock.dia} (62%)
create mode 100644 slides/kernel-driver-development-debugging/kernel-driver-development-debugging.tex
copy labs/kernel-module-environment/host-vs-target.dia => slides/kernel-driver-development-debugging/kexec.dia (70%)
copy slides/{sysdev-udev/module-autoloading.dia => kernel-driver-development-dma/dma-integration.dia} (65%)
create mode 100644 slides/kernel-driver-development-dma/kernel-driver-development-dma.tex
create mode 100644 slides/kernel-driver-development-general-apis/kernel-driver-development-general-apis.tex
create mode 100644 slides/kernel-driver-development-interrupts/kernel-driver-development-interrupts.tex
copy slides/{sysdev-embedded-linux/autotools.dia => kernel-driver-development-interrupts/thread-halves.dia} (66%)
copy slides/{sysdev-intro/global-architecture.dia => kernel-driver-development-io-memory/ioremap.dia} (56%)
create mode 100644 slides/kernel-driver-development-io-memory/kernel-driver-development-io-memory.tex
copy slides/{sysdev-realtime/userspace-preemption.dia => kernel-driver-development-io-memory/mmio-vs-pio.dia} (69%)
create mode 100644 slides/kernel-driver-development-lab-character-drivers/kernel-driver-development-lab-character-drivers.tex
create mode 100644 slides/kernel-driver-development-lab-debugging/kernel-driver-development-lab-debugging.tex
create mode 100644 slides/kernel-driver-development-lab-interrupts/kernel-driver-development-lab-interrupts.tex
create mode 100644 slides/kernel-driver-development-lab-io-memory/kernel-driver-development-lab-io-memory.tex
create mode 100644 slides/kernel-driver-development-lab-locking/kernel-driver-development-lab-locking.tex
create mode 100644 slides/kernel-driver-development-lab-modules/kernel-driver-development-lab-modules.tex
copy slides/{sysdev-udev/firmware-hotplugging.dia => kernel-driver-development-memory/allocators.dia} (71%)
create mode 100644 slides/kernel-driver-development-memory/kernel-driver-development-memory.tex
copy slides/{sysdev-udev/udev-overall-architecture.dia => kernel-driver-development-memory/memory-mapping.dia} (65%)
copy slides/{sysdev-bootloaders-sequence/booting-from-nor.dia => kernel-driver-development-memory/memory-organization.dia} (67%)
copy slides/{sysdev-embedded-linux/gtk-dependencies-size.dia => kernel-driver-development-memory/mmu.dia} (65%)
create mode 100644 slides/kernel-driver-development-memory/slab-allocator.dia
create mode 100644 slides/kernel-driver-development-memory/slab-screenshot.png
create mode 100644 slides/kernel-driver-development-mmap/kernel-driver-development-mmap.tex
copy slides/{sysdev-embedded-linux/directfb-dependencies-size.dia => kernel-driver-development-modules/exported-symbols.dia} (69%)
create mode 100644 slides/kernel-driver-development-modules/kernel-driver-development-modules.tex
copy slides/{sysdev-bootloaders-sequence/booting-from-nor.dia => kernel-driver-development-modules/out-of-tree.dia} (63%)
copy slides/{sysdev-realtime/thread-vs-process.dia => kernel-driver-development-processes/address-space.dia} (78%)
create mode 100644 slides/kernel-driver-development-processes/kernel-driver-development-processes.tex
copy slides/{sysdev-realtime/latency-basic.dia => kernel-driver-development-processes/syscalls.dia} (71%)
copy slides/{sysdev-embedded-linux/directfb-dependencies-size.dia => kernel-driver-development-processes/threads-life.dia} (64%)
create mode 100644 slides/kernel-driver-development-sleeping/kernel-driver-development-sleeping.tex
copy slides/{sysdev-embedded-linux/directfb-dependencies-size.dia => kernel-driver-development-sleeping/sleeping.dia} (68%)
create mode 100644 slides/kernel-driver-development-title/kernel-driver-development-title.tex
create mode 100644 slides/kernel-embedded-linux-usage-title/kernel-embedded-linux-usage-title.tex
create mode 100644 slides/kernel-git-content/gitk.png
create mode 100644 slides/kernel-git-content/gitweb.png
create mode 100644 slides/kernel-git-content/kernel-git-content.tex
create mode 100644 slides/kernel-git-lab/kernel-git-lab.tex
create mode 100644 slides/kernel-git-title/kernel-git-title.tex
copy slides/{sysdev-realtime/userspace-preemption.dia => kernel-init-content/bootloader-userspace.dia} (73%)
copy slides/{sysdev-embedded-linux/gtk-dependencies-size.dia => kernel-init-content/kernel-bootstrap.dia} (68%)
create mode 100644 slides/kernel-init-content/kernel-init-content.tex
copy slides/{sysdev-embedded-linux/autotools.dia => kernel-init-content/kernel-initialization.dia} (62%)
create mode 100644 slides/kernel-init-title/kernel-init-title.tex
create mode 100644 slides/kernel-introduction-lab/kernel-introduction-lab.tex
create mode 100644 slides/kernel-introduction-title/kernel-introduction-title.tex
create mode 100644 slides/kernel-porting-content/kernel-porting-content.tex
create mode 100644 slides/kernel-porting-title/kernel-porting-title.tex
create mode 100644 slides/kernel-power-management-content/kernel-power-management-content.tex
create mode 100644 slides/kernel-power-management-lab/kernel-power-management-lab.tex
create mode 100644 slides/kernel-power-management-title/kernel-power-management-title.tex
create mode 100644 slides/kernel-resources-advice/kernel-resources-advice.tex
create mode 100644 slides/kernel-resources-references/kernel-resources-references.tex
create mode 100644 slides/kernel-resources-title/kernel-resources-title.tex
copy slides/{sysdev-embedded-linux/directfb-architecture.dia => kernel-serial-drivers-content/architecture.dia} (69%)
create mode 100644 slides/kernel-serial-drivers-content/kernel-serial-drivers-content.tex
create mode 100644 slides/kernel-serial-drivers-lab/kernel-serial-drivers-lab.tex
create mode 100644 slides/kernel-serial-drivers-title/kernel-serial-drivers-title.tex
create mode 100644 slides/kernel-source-code-drivers/kernel-source-code-drivers.tex
create mode 100644 slides/kernel-source-code-lab-module/kernel-source-code-lab-module.tex
copy slides/{sysdev-linux-intro-lab-sources/sysdev-linux-intro-lab-sources.tex => kernel-source-code-lab-source-code/kernel-source-code-lab-source-code.tex} (50%)
create mode 100644 slides/kernel-source-code-layout/kernel-source-code-layout.tex
create mode 100644 slides/kernel-source-code-management/cscope.png
create mode 100644 slides/kernel-source-code-management/kernel-source-code-management.tex
create mode 100644 slides/kernel-source-code-management/lxr.png
create mode 100644 slides/kernel-source-code-title/kernel-source-code-title.tex
More information about the training-materials-updates
mailing list