[bootlin/training-materials updates] master: agenda: update Linux kernel course agenda to reflect recent changes (71722c2c)

Thomas Petazzoni thomas.petazzoni at bootlin.com
Sun Apr 16 21:06:09 CEST 2023


Repository : https://github.com/bootlin/training-materials
On branch  : master
Link       : https://github.com/bootlin/training-materials/commit/71722c2c95e2c1a3096a49d6625558aedbd698c6

>---------------------------------------------------------------

commit 71722c2c95e2c1a3096a49d6625558aedbd698c6
Author: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
Date:   Sun Apr 16 21:03:38 2023 +0200

    agenda: update Linux kernel course agenda to reflect recent changes
    
    With Miquèl numerous updates to the course, the agenda was no longer
    accurate. This commit updates all 4 versions of the agenda. The
    schedule is somewhat tentative, as real experience only will tell us
    what is the correct distribution of the different topics.
    
    Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>


>---------------------------------------------------------------

71722c2c95e2c1a3096a49d6625558aedbd698c6
 agenda/linux-kernel-agenda.tex           | 132 ++++++++++++++++++---------
 agenda/linux-kernel-fr-agenda.tex        | 133 ++++++++++++++++++----------
 agenda/linux-kernel-online-agenda.tex    | 137 +++++++++++++++++++---------
 agenda/linux-kernel-online-fr-agenda.tex | 147 +++++++++++++++++++------------
 agenda/linux-kernel.inc                  |   6 +-
 5 files changed, 362 insertions(+), 193 deletions(-)

diff --git a/agenda/linux-kernel-agenda.tex b/agenda/linux-kernel-agenda.tex
index c2e16191..63ae3617 100644
--- a/agenda/linux-kernel-agenda.tex
+++ b/agenda/linux-kernel-agenda.tex
@@ -63,26 +63,33 @@
 
 \section{Day 1 - Morning}
 
-\feagendaonecolumn
+\feagendatwocolumn
 {Lecture - Introduction to the Linux kernel}
 {
   \begin{itemize}
-  \item Kernel features
-  \item Legal constraints with device drivers.
+  \item Roles of the Linux kernel
   \item Kernel user interface (/proc and /sys)
-  \item User space device drivers
+  \item Overall architecture
+  \item Versions of the Linux kernel
+  \item Kernel source tree organization
+  \end{itemize}
+}
+{Lab - Downloading the Linux kernel source code}
+{
+  \begin{itemize}
+  \item Download the Linux kernel code from Git
   \end{itemize}
 }
-\\
+
 \feagendatwocolumn
-{Lecture - Kernel sources}
+{Lecture - Linux kernel source code}
 {
   \begin{itemize}
   \item Specifics of Linux kernel development
   \item Coding standards
-  \item Retrieving Linux kernel sources
-  \item Tour of the Linux kernel sources
-  \item Kernel source code browsers
+  \item Stability of interfaces
+  \item Licensing aspects
+  \item User-space drivers
   \end{itemize}
 }
 {Lab - Kernel sources}
@@ -115,8 +122,6 @@
     NFS boot support.
   \end{itemize}
 }
-\\
-\section{Day 2 - Morning}
 
 \feagendatwocolumn
 {Lecture - Linux kernel modules}
@@ -140,63 +145,83 @@
   \end{itemize}
 }
 
-\section{Day 2 - Afternoon}
+\section{Day 2 - Morning}
 
 \feagendatwocolumn
-{Lecture - Linux device model}
+{Lecture - Describing hardware devices}
 {
   \begin{itemize}
-  \item Understand how the kernel is designed to support device
-    drivers
-  \item The device model
-  \item Binding devices and drivers
-  \item Platform devices, Device Tree
-  \item Interface in user space: \code{/sys}
+  \item Discoverable hardware: USB, PCI
+  \item Non-discoverable hardware
+  \item Extensive details on Device Tree: overall syntax, properties,
+    design principles, examples
   \end{itemize}
 }
-{Lab - Linux device model for an I2C driver}
+{Lab - Describing hardware devices}
 {
   {\em Using the BeagleBone Black board}
   \begin{itemize}
-  \item Implement a driver that registers as an I2C driver
-  \item Modify the Device Tree to list an I2C device
-  \item Get the driver called when the I2C device is enumerated at
-    boot time
+  \item Create your own Device Tree file
+  \item Configure LEDs connected to GPIOs
+  \item Describe an I2C-connected device in the Device Tree
   \end{itemize}
 }
 
-\section{Day 3 - Morning}
-
 \feagendatwocolumn
-{Lecture - Introduction to the I2C API}
+{Lecture - Pin muxing}
 {
   \begin{itemize}
-  \item The I2C subsystem of the kernel
-  \item Details about the API provided to kernel drivers to interact
-    with I2C devices
+  \item Understand the {\em pinctrl} framework of the kernel
+  \item Understand how to configure the muxing of pins
   \end{itemize}
 }
-{Lecture - Pin muxing}
+{Lab - Pin muxing}
 {
+  {\em Using the BeagleBone Black board}
   \begin{itemize}
-  \item Understand the {\em pinctrl} framework of the kernel
-  \item Understand how to configure the muxing of pins
+  \item Configure the pinmuxing for the I2C bus used to communicate
+    with the Nunchuk
+  \item Validate that the I2C communication works using user space
+    tools
   \end{itemize}
 }
 
+\section{Day 2 - Afternoon}
+
 \feagendaonecolumn
+{Lecture - Linux device model}
+{
+  \begin{itemize}
+  \item Understand how the kernel is designed to support device
+    drivers
+  \item The device model
+  \item Binding devices and drivers
+  \item Platform devices, Device Tree
+  \item Interface in user space: \code{/sys}
+  \end{itemize}
+}
+
+\feagendatwocolumn
+{Lecture - Introduction to the I2C API}
+{
+  \begin{itemize}
+  \item The I2C subsystem of the kernel
+  \item Details about the API provided to kernel drivers to interact
+    with I2C devices
+  \end{itemize}
+}
 {Lab - Communicate with the Nunchuk over I2C}
 {
   {\em Using the BeagleBone Black board}
   \begin{itemize}
-  \item Configure the pin muxing for the I2C bus used to communicate
-    with the Nunchuk
-  \item Extend the I2C driver started in the previous lab to
-    communicate with the Nunchuk via I2C
+  \item Explore the content of \code{/dev} and \code{/sys} and the
+    devices available on the embedded hardware platform.
+  \item Implement a driver that registers as an I2C driver.
+  \item Communicate with the Nunchuk and extract data from it.
   \end{itemize}
 }
 
-\section{Day 3 - Afternoon}
+\section{Day 3 - Morning}
 
 \feagendaonecolumn
 {Lecture - Kernel frameworks}
@@ -230,7 +255,7 @@
   \end{itemize}
 }
 
-\section{Day 4 - Morning}
+\section{Day 3 - Afternoon}
 
 \feagendatwocolumn
 {Lecture - Memory management}
@@ -248,7 +273,7 @@
   \begin{itemize}
   \item I/O memory range registration.
   \item I/O memory access.
-  \item Read / write memory barriers.
+  \item Memory ordering and barriers
   \end{itemize}
 }
 
@@ -266,7 +291,8 @@
   \end{itemize}
 }
 
-\section{Day 4 - Afternoon}
+
+\section{Day 4 - Morning}
 
 \feagendatwocolumn
 {Lecture - The misc kernel subsystem}
@@ -311,7 +337,7 @@
   \end{itemize}
 }
 
-\section{Day 5 - Morning}
+\section{Day 4 - Afternoon}
 
 \feagendatwocolumn
 {Lecture - Locking}
@@ -333,6 +359,27 @@
   \end{itemize}
 }
 
+\feagendatwocolumn
+{Lecture - DMA: Direct Memory Access}
+{
+  \begin{itemize}
+  \item Peripheral DMA vs. DMA controllers
+  \item DMA constraints: caching, addressing
+  \item Kernel APIs for DMA: \code{dma-mapping}, \code{dmaengine}, \code{dma-buf}
+  \end{itemize}
+}
+{Lab - DMA: Direct Memory Access}
+{
+  \begin{itemize}
+  \item Setup streaming mappings with the \code{dma} API
+  \item Configure a DMA controller with the \code{dmaengine} API
+  \item Configure the hardware to trigger DMA transfers
+  \item Wait for DMA completion
+  \end{itemize}
+}
+
+\section{Day 5 - Morning}
+
 \feagendatwocolumn
 {Lecture - Driver debugging techniques}
 {
@@ -392,7 +439,6 @@
 {Lecture - If time left}
 {
   \begin{itemize}
-  \item DMA
   \item mmap
   \end{itemize}
 }
diff --git a/agenda/linux-kernel-fr-agenda.tex b/agenda/linux-kernel-fr-agenda.tex
index 24de7247..499dce9a 100644
--- a/agenda/linux-kernel-fr-agenda.tex
+++ b/agenda/linux-kernel-fr-agenda.tex
@@ -67,32 +67,38 @@
 
 \section{1\textsuperscript{er} jour - Matin}
 
-\feagendaonecolumn
+\feagendatwocolumn
 {Cours - Introduction au noyau Linux}
 {
   \begin{itemize}
   \item Fonctionnalités et rôle du noyau.
-  \item Contraintes juridiques liées aux pilotes de périphériques.
   \item L'interface noyau / espace utilisateur (/proc et /sys).
-  \item Pilotes de périphériques en espace utilisateur.
+  \item Architecture générale
+  \item Versions du noyau Linux
+  \item Organisation du code source
+  \end{itemize}
+}
+{TP - Téléchargement du noyau Linux}
+{
+  \begin{itemize}
+  \item Téléchargement du noyau Linux en utilisant Git
   \end{itemize}
 }
-\\
+
 \feagendatwocolumn
-{Cours - Les sources du noyau}
+{Cours - Le code source du noyau}
 {
   \begin{itemize}
   \item Spécificités du développement noyau
   \item Conventions de codage
-  \item Récupération des sources du noyau
-  \item Aperçu des sources du noyau
-  \item Outils de navigation dans les sources
+  \item Stabilité des interfaces
+  \item Aspects juridiques: license
+  \item Pilotes de périphérique en espace utilisateur
   \end{itemize}
 }
 {TP - Code source du noyau}
 {
   \begin{itemize}
-  \item Récupération des sources du noyau
   \item Effectuer des recherches dans les sources du noyau Linux :
     recherche de définitions C, de paramètres de configuration et d'autres
     informations.
@@ -120,8 +126,6 @@
     avec support de NFS.
   \end{itemize}
 }
-\\
-\section{2\textsuperscript{ème} jour - Matin}
 
 \feagendatwocolumn
 {Cours – Modules noyau Linux}
@@ -145,44 +149,29 @@
   \end{itemize}
 }
 
-\section{2\textsuperscript{ème} jour - Après-midi}
+\section{2\textsuperscript{ème} jour - Matin}
 
 \feagendatwocolumn
-{Lecture - Le "device model" de Linux}
+{Cours - Description des périphériques matériels}
 {
   \begin{itemize}
-  \item Comprendre comment le noyau est conçu pour supporter les pilotes
-    de périphériques
-  \item Le "device model"
-  \item Connexion entre périphériques et pilotes.
-  \item Périphériques "platform", le "Device Tree"
-  \item Interface en espace utilisateur avec \code{/sys}
+  \item Matériel découvrable dynamiquement: USB, PCI
+  \item Matériel non-découvrable dynamiquement
+  \item Présentation détaillée du Device Tree: syntaxe, propriétés,
+    principes de conception, exemples
   \end{itemize}
 }
-{TP - Device model de Linux pour un pilote I2C}
+{TP - Description des périphériques matériels}
 {
   {\em En utilisant la carte BeagleBone Black}
   \begin{itemize}
-  \item Réalisation d'un pilote qui s'enregistre comme
-     un pilote I2C.
-  \item Modification du Device Tree pour déclarer un
-     périphérique I2C.
-  \item Faire en sorte que le pilote soit appelé quand le
-     périphérique I2C est énuméré au démarrage.
+  \item Créer son propre fichier Device Tree
+  \item Configurer des LEDs connectées à des GPIOs
+  \item Décrire un périphérique connecté sur I2C dans le Device Tree
   \end{itemize}
 }
 
-\section{3\textsuperscript{ème} jour - Matin}
-
 \feagendatwocolumn
-{Cours - Introduction à l'API I2C}
-{
-  \begin{itemize}
-  \item Le sous-système I2C du noyau
-  \item Détails sur l'API fournie aux pilotes du noyau pour interagir
-    avec les périphériques I2C.
-  \end{itemize}
-}
 {Cours - "Pin muxing" (multiplexage d'entrées-sorties)}
 {
   \begin{itemize}
@@ -191,20 +180,54 @@
     entrées/sorties.
   \end{itemize}
 }
+{TP - Pin-muxing}
+{
+  {\em En utilisant la carte BeagleBone Black}
+  \begin{itemize}
+  \item Configurer le pin-mux pour le bus I2C utilisé pour communiquer
+    avec le Nunchuk
+  \item Valider que la communication I2C est fonctionnelle en
+    utilisant des outils en espace utilisateur
+  \end{itemize}
+}
+
+\section{2\textsuperscript{ème} jour - Après-midi}
 
 \feagendaonecolumn
+{Lecture - Le "device model" de Linux}
+{
+  \begin{itemize}
+  \item Comprendre comment le noyau est conçu pour supporter les pilotes
+    de périphériques
+  \item Le "device model"
+  \item Connexion entre périphériques et pilotes.
+  \item Périphériques "platform", le "Device Tree"
+  \item Interface en espace utilisateur avec \code{/sys}
+  \end{itemize}
+}
+
+\feagendatwocolumn
+{Cours - Introduction à l'API I2C}
+{
+  \begin{itemize}
+  \item Le sous-système I2C du noyau
+  \item Détails sur l'API fournie aux pilotes du noyau pour interagir
+    avec les périphériques I2C.
+  \end{itemize}
+}
 {TP - Communiquer avec le Nunchuk via I2C}
 {
   {\em En utilisant la carte BeagleBone Black}
   \begin{itemize}
-  \item Configurer le pin muxing pour le bus I2C utilisé pour
-    communiquer avec le Nunchuk
-  \item Étendre le pilote I2C commencé au TP précédent pour
-    communiquer avec le Nunchuk à travers le bus I2C.
+  \item Explorer le contenu de \code{/dev} et \code{/sys} et les
+    périphériques disponibles sur le système embarqué
+  \item Implémenter un driver qui s'enregistre comme driver I2C
+  \item Communiquer avec le Nunchuk et lire des données depuis le
+    Nunchuk
   \end{itemize}
 }
 
-\section{3\textsuperscript{ème} jour - Après-midi}
+\section{3\textsuperscript{ème} jour - Matin}
 
 \feagendaonecolumn
 {Cours - Infrastructures du noyau}
@@ -242,7 +265,7 @@
   \end{itemize}
 }
 
-\section{4\textsuperscript{ème} jour - Matin}
+\section{3\textsuperscript{ème} jour - Après-midi}
 
 \feagendatwocolumn
 {Cours - Gestion de la mémoire}
@@ -279,7 +302,7 @@
   \end{itemize}
 }
 
-\section{4\textsuperscript{ème} jour - Après-midi}
+\section{4\textsuperscript{ème} jour - Matin}
 
 \feagendatwocolumn
 {Cours - Le sous-système misc}
@@ -325,7 +348,7 @@
   \end{itemize}
 }
 
-\section{5\textsuperscript{ème} jour - Matin}
+\section{4\textsuperscript{ème} jour - Après-midi}
 
 \feagendatwocolumn
 {Cours - Verrouillage}
@@ -347,6 +370,27 @@
   \end{itemize}
 }
 
+\feagendatwocolumn
+{Cours - DMA: Direct Memory Access}
+{
+  \begin{itemize}
+  \item {\em Peripheral DMA} par rapport à l'utilisation de contrôleur DMA
+  \item Contraintes du DMA: cache, adressage
+  \item APIs du noyau Linux pour le DMA: \code{dma-mapping}, \code{dmaengine}, \code{dma-buf}
+  \end{itemize}
+}
+{TP - DMA: Direct Memory Access}
+{
+  \begin{itemize}
+  \item Mise en place de {\em streaming mappings} avec l'API \code{dma-mapping}
+  \item COnfiguration du contrôleur DMA avec l'API \code{dmaengine}
+  \item Configurer le matériel pour lancer les transfers DMA
+  \item Attendre la fin d'un transfert DMA
+  \end{itemize}
+}
+
+\section{5\textsuperscript{ème} jour - Matin}
+
 \feagendatwocolumn
 {Cours - Techniques de débogage noyau}
 {
@@ -410,7 +454,6 @@
 {Cours - S'il reste du temps}
 {
   \begin{itemize}
-  \item DMA
   \item mmap
   \end{itemize}
 }
diff --git a/agenda/linux-kernel-online-agenda.tex b/agenda/linux-kernel-online-agenda.tex
index d5816ac6..45e67c82 100644
--- a/agenda/linux-kernel-online-agenda.tex
+++ b/agenda/linux-kernel-online-agenda.tex
@@ -67,25 +67,32 @@
 {Lecture - Introduction to the Linux kernel}
 {
   \begin{itemize}
-  \item Kernel features
-  \item Legal constraints with device drivers.
+  \item Roles of the Linux kernel
   \item Kernel user interface (/proc and /sys)
-  \item User space device drivers
+  \item Overall architecture
+  \item Versions of the Linux kernel
+  \item Kernel source tree organization
   \end{itemize}
 }
-{Lecture - Kernel sources}
+{Lab - Downloading the Linux kernel source code}
+{
+  \begin{itemize}
+  \item Download the Linux kernel code from Git
+  \end{itemize}
+}
+
+\feagendatwocolumn
+{Lecture - Linux kernel source code}
 {
   \begin{itemize}
   \item Specifics of Linux kernel development
   \item Coding standards
-  \item Retrieving Linux kernel sources
-  \item Tour of the Linux kernel sources
-  \item Kernel source code browsers
+  \item Stability of interfaces
+  \item Licensing aspects
+  \item User-space drivers
   \end{itemize}
 }
-\\
-\feagendaonecolumn
-{Demo - Kernel sources}
+{Lab - Kernel sources}
 {
   \begin{itemize}
   \item Making searches in the Linux kernel sources: looking for C
@@ -96,8 +103,6 @@
  \end{itemize}
 }
 
-\section{Half day 2}
-
 \feagendatwocolumn
 {Lecture - Configuring, compiling and booting the Linux kernel}
 {
@@ -117,6 +122,8 @@
   \end{itemize}
 }
 
+\section{Half day 2}
+
 \feagendatwocolumn
 {Lecture - Linux kernel modules}
 {
@@ -139,62 +146,83 @@
   \end{itemize}
 }
 
+\feagendatwocolumn
+{Lecture - Describing hardware devices}
+{
+  \begin{itemize}
+  \item Discoverable hardware: USB, PCI
+  \item Non-discoverable hardware
+  \item Extensive details on Device Tree: overall syntax, properties,
+    design principles, examples
+  \end{itemize}
+}
+{Demo - Describing hardware devices}
+{
+  {\em Using the BeagleBone Black board}
+  \begin{itemize}
+  \item Create your own Device Tree file
+  \item Configure LEDs connected to GPIOs
+  \item Describe an I2C-connected device in the Device Tree
+  \end{itemize}
+}
+
 \section{Half day 3}
 
 \feagendatwocolumn
-{Lecture - Linux device model}
+{Lecture - Pin muxing}
 {
   \begin{itemize}
-  \item Understand how the kernel is designed to support device
-    drivers
-  \item The device model
-  \item Binding devices and drivers
-  \item Platform devices, Device Tree
-  \item Interface in user space: \code{/sys}
+  \item Understand the {\em pinctrl} framework of the kernel
+  \item Understand how to configure the muxing of pins
   \end{itemize}
 }
-{Demo - Linux device model for an I2C driver}
+{Demo - Pin muxing}
 {
   {\em Using the BeagleBone Black board}
   \begin{itemize}
-  \item Implement a driver that registers as an I2C driver
-  \item Modify the Device Tree to list an I2C device
-  \item Get the driver called when the I2C device is enumerated at
-    boot time
+  \item Configure the pinmuxing for the I2C bus used to communicate
+    with the Nunchuk
+  \item Validate that the I2C communication works using user space
+    tools
   \end{itemize}
 }
 
 \feagendaonecolumn
-{Lecture - Introduction to the I2C API}
+{Lecture - Linux device model}
 {
   \begin{itemize}
-  \item The I2C subsystem of the kernel
-  \item Details about the API provided to kernel drivers to interact
-    with I2C devices
+  \item Understand how the kernel is designed to support device
+    drivers
+  \item The device model
+  \item Binding devices and drivers
+  \item Platform devices, Device Tree
+  \item Interface in user space: \code{/sys}
   \end{itemize}
 }
 
-\section{Half day 4}
 \feagendatwocolumn
-{Lecture - Pin muxing}
+{Lecture - Introduction to the I2C API}
 {
   \begin{itemize}
-  \item Understand the {\em pinctrl} framework of the kernel
-  \item Understand how to configure the muxing of pins
+  \item The I2C subsystem of the kernel
+  \item Details about the API provided to kernel drivers to interact
+    with I2C devices
   \end{itemize}
 }
 {Demo - Communicate with the Nunchuk over I2C}
 {
   {\em Using the BeagleBone Black board}
   \begin{itemize}
-  \item Configure the pin muxing for the I2C bus used to communicate
-    with the Nunchuk
-  \item Extend the I2C driver started in the previous lab to
-    communicate with the Nunchuk via I2C
+  \item Explore the content of \code{/dev} and \code{/sys} and the
+    devices available on the embedded hardware platform.
+  \item Implement a driver that registers as an I2C driver.
+  \item Communicate with the Nunchuk and extract data from it.
   \end{itemize}
 }
 
-\feagendatwocolumn
+\section{Half day 4}
+
+\feagendaonecolumn
 {Lecture - Kernel frameworks}
 {
   \begin{itemize}
@@ -205,6 +233,8 @@
   \item The principle of kernel frameworks
   \end{itemize}
 }
+
+\feagendatwocolumn
 {Lecture - The input subsystem}
 {
   \begin{itemize}
@@ -214,8 +244,6 @@
   \item User space API offered by the {\em input} subsystem
   \end{itemize}
 }
-
-\feagendaonecolumn
 {Demo - Expose the Nunchuk functionality to user space}
 {
   {\em Using the BeagleBone Black board}
@@ -227,7 +255,8 @@
 }
 
 \section{Half day 5}
-\feagendaonecolumn
+
+\feagendatwocolumn
 {Lecture - Memory management}
 {
   \begin{itemize}
@@ -238,16 +267,16 @@
   \item Allocating with \code{vmalloc()}.
   \end{itemize}
 }
-
-\feagendatwocolumn
 {Lecture - I/O memory}
 {
   \begin{itemize}
   \item I/O memory range registration.
   \item I/O memory access.
-  \item Read / write memory barriers.
+  \item Memory ordering and barriers
   \end{itemize}
 }
+
+\feagendaonecolumn
 {Demo - Minimal platform driver and access to I/O memory}
 {
   {\em Using the BeagleBone Black board}
@@ -283,6 +312,7 @@
 }
 
 \section{Half day 6}
+
 \feagendatwocolumn
 {Lecture - Processes, scheduling, sleeping and interrupts}
 {
@@ -326,6 +356,26 @@
 }
 
 \section{Half day 7}
+
+\feagendatwocolumn
+{Lecture - DMA: Direct Memory Access}
+{
+  \begin{itemize}
+  \item Peripheral DMA vs. DMA controllers
+  \item DMA constraints: caching, addressing
+  \item Kernel APIs for DMA: \code{dma-mapping}, \code{dmaengine}, \code{dma-buf}
+  \end{itemize}
+}
+{Demo - DMA: Direct Memory Access}
+{
+  \begin{itemize}
+  \item Setup streaming mappings with the \code{dma} API
+  \item Configure a DMA controller with the \code{dmaengine} API
+  \item Configure the hardware to trigger DMA transfers
+  \item Wait for DMA completion
+  \end{itemize}
+}
+
 \feagendatwocolumn
 {Lecture - Driver debugging techniques}
 {
@@ -383,7 +433,6 @@
 {Lecture - If time left}
 {
   \begin{itemize}
-  \item DMA
   \item mmap
   \end{itemize}
 }
diff --git a/agenda/linux-kernel-online-fr-agenda.tex b/agenda/linux-kernel-online-fr-agenda.tex
index d30de96e..1667bc8e 100644
--- a/agenda/linux-kernel-online-fr-agenda.tex
+++ b/agenda/linux-kernel-online-fr-agenda.tex
@@ -67,32 +67,38 @@
 
 \section{1\textsuperscript{ère} demi-journée}
 
-\feagendaonecolumn
+\feagendatwocolumn
 {Cours - Introduction au noyau Linux}
 {
   \begin{itemize}
   \item Fonctionnalités et rôle du noyau.
-  \item Contraintes juridiques liées aux pilotes de périphériques.
   \item L'interface noyau / espace utilisateur (/proc et /sys).
-  \item Pilotes de périphériques en espace utilisateur.
+  \item Architecture générale
+  \item Versions du noyau Linux
+  \item Organisation du code source
+  \end{itemize}
+}
+{Démo - Téléchargement du noyau Linux}
+{
+  \begin{itemize}
+  \item Téléchargement du noyau Linux en utilisant Git
   \end{itemize}
 }
-\\
+
 \feagendatwocolumn
-{Cours - Les sources du noyau}
+{Cours - Le code source du noyau}
 {
   \begin{itemize}
   \item Spécificités du développement noyau
   \item Conventions de codage
-  \item Récupération des sources du noyau
-  \item Aperçu des sources du noyau
-  \item Outils de navigation dans les sources
+  \item Stabilité des interfaces
+  \item Aspects juridiques: license
+  \item Pilotes de périphérique en espace utilisateur
   \end{itemize}
 }
 {Démo - Code source du noyau}
 {
   \begin{itemize}
-  \item Récupération des sources du noyau
   \item Effectuer des recherches dans les sources du noyau Linux :
     recherche de définitions C, de paramètres de configuration et d'autres
     informations.
@@ -101,19 +107,6 @@
  \end{itemize}
 }
 
-\feagendaonecolumn
-{Cours – Configuration, compilation et démarrage du noyau Linux}
-{
-  \begin{itemize}
-  \item Configuration du noyau.
-  \item Compilation native et croisée. Fichiers générés.
-  \item Démarrage du noyau. Paramètres de démarrage.
-  \item Montage du système de fichiers racine par NFS.
-  \end{itemize}
-}
-
-\section{2\textsuperscript{ème} demi-journée}
-
 \feagendaonecolumn
 {Démo – Configuration, compilation croisée et démarrage sur NFS}
 {
@@ -124,6 +117,8 @@
   \end{itemize}
 }
 
+\section{2\textsuperscript{ème} demi-journée}
+
 \feagendatwocolumn
 {Cours – Modules noyau Linux}
 {
@@ -146,32 +141,58 @@
   \end{itemize}
 }
 
-\feagendaonecolumn
-{Lecture - Le "device model" de Linux}
+\feagendatwocolumn
+{Cours - Description des périphériques matériels}
 {
   \begin{itemize}
-  \item Comprendre comment le noyau est conçu pour supporter les pilotes
-    de périphériques
-  \item Le "device model"
-  \item Connexion entre périphériques et pilotes.
-  \item Périphériques "platform", le "Device Tree"
-  \item Interface en espace utilisateur avec \code{/sys}
+  \item Matériel découvrable dynamiquement: USB, PCI
+  \item Matériel non-découvrable dynamiquement
+  \item Présentation détaillée du Device Tree: syntaxe, propriétés,
+    principes de conception, exemples
+  \end{itemize}
+}
+{Démo - Description des périphériques matériels}
+{
+  {\em En utilisant la carte BeagleBone Black}
+  \begin{itemize}
+  \item Créer son propre fichier Device Tree
+  \item Configurer des LEDs connectées à des GPIOs
+  \item Décrire un périphérique connecté sur I2C dans le Device Tree
   \end{itemize}
 }
 
 \section{3\textsuperscript{ème} demi-journée}
 
-\feagendaonecolumn
-{Démo - Device model de Linux pour un pilote I2C}
+\feagendatwocolumn
+{Cours - "Pin muxing" (multiplexage d'entrées-sorties)}
+{
+  \begin{itemize}
+  \item Comprendre l'infrastructure {\em pinctrl} du noyau.
+  \item Comprendre comment configurer le multiplexage des
+    entrées/sorties.
+  \end{itemize}
+}
+{Démo - Pin-muxing}
 {
   {\em En utilisant la carte BeagleBone Black}
   \begin{itemize}
-  \item Réalisation d'un pilote qui s'enregistre comme
-     un pilote I2C.
-  \item Modification du Device Tree pour déclarer un
-     périphérique I2C.
-  \item Faire en sorte que le pilote soit appelé quand le
-     périphérique I2C est énuméré au démarrage.
+  \item Configurer le pin-mux pour le bus I2C utilisé pour communiquer
+    avec le Nunchuk
+  \item Valider que la communication I2C est fonctionnelle en
+    utilisant des outils en espace utilisateur
+  \end{itemize}
+}
+
+\feagendaonecolumn
+{Lecture - Le "device model" de Linux}
+{
+  \begin{itemize}
+  \item Comprendre comment le noyau est conçu pour supporter les pilotes
+    de périphériques
+  \item Le "device model"
+  \item Connexion entre périphériques et pilotes.
+  \item Périphériques "platform", le "Device Tree"
+  \item Interface en espace utilisateur avec \code{/sys}
   \end{itemize}
 }
 
@@ -184,24 +205,15 @@
     avec les périphériques I2C.
   \end{itemize}
 }
-{Cours - "Pin muxing" (multiplexage d'entrées-sorties)}
-{
-  \begin{itemize}
-  \item Comprendre l'infrastructure {\em pinctrl} du noyau.
-  \item Comprendre comment configurer le multiplexage des
-    entrées/sorties.
-  \end{itemize}
-}
-
-\feagendaonecolumn
 {Démo - Communiquer avec le Nunchuk via I2C}
 {
   {\em En utilisant la carte BeagleBone Black}
   \begin{itemize}
-  \item Configurer le pin muxing pour le bus I2C utilisé pour
-    communiquer avec le Nunchuk
-  \item Étendre le pilote I2C commencé à la démo précédente pour
-    communiquer avec le Nunchuk à travers le bus I2C.
+  \item Explorer le contenu de \code{/dev} et \code{/sys} et les
+    périphériques disponibles sur le système embarqué
+  \item Implémenter un driver qui s'enregistre comme driver I2C
+  \item Communiquer avec le Nunchuk et lire des données depuis le
+    Nunchuk
   \end{itemize}
 }
 
@@ -243,6 +255,8 @@
   \end{itemize}
 }
 
+\section{5\textsuperscript{ème} demi-journée}
+
 \feagendatwocolumn
 {Cours - Gestion de la mémoire}
 {
@@ -278,8 +292,6 @@
   \end{itemize}
 }
 
-\section{5\textsuperscript{ème} demi-journée}
-
 \feagendatwocolumn
 {Cours - Le sous-système misc}
 {
@@ -301,6 +313,8 @@
   \end{itemize}
 }
 
+\section{6\textsuperscript{ème} demi-journée}
+
 \feagendatwocolumn
 {Cours - Processus, ordonnancement, sommeil et interruptions}
 {
@@ -324,8 +338,6 @@
   \end{itemize}
 }
 
-\section{6\textsuperscript{ème} demi-journée}
-
 \feagendatwocolumn
 {Cours - Verrouillage}
 {
@@ -346,6 +358,27 @@
   \end{itemize}
 }
 
+\section{7\textsuperscript{ème} demi-journée}
+
+\feagendatwocolumn
+{Cours - DMA: Direct Memory Access}
+{
+  \begin{itemize}
+  \item {\em Peripheral DMA} par rapport à l'utilisation de contrôleur DMA
+  \item Contraintes du DMA: cache, adressage
+  \item APIs du noyau Linux pour le DMA: \code{dma-mapping}, \code{dmaengine}, \code{dma-buf}
+  \end{itemize}
+}
+{Démo - DMA: Direct Memory Access}
+{
+  \begin{itemize}
+  \item Mise en place de {\em streaming mappings} avec l'API \code{dma-mapping}
+  \item COnfiguration du contrôleur DMA avec l'API \code{dmaengine}
+  \item Configurer le matériel pour lancer les transfers DMA
+  \item Attendre la fin d'un transfert DMA
+  \end{itemize}
+}
+
 \feagendatwocolumn
 {Cours - Techniques de débogage noyau}
 {
@@ -377,8 +410,6 @@
   \end{itemize}
 }
 
-\section{7\textsuperscript{ème} demi-journée}
-
 \feagendaonecolumn
 {Cours - Gestion de l'énergie}
 {
diff --git a/agenda/linux-kernel.inc b/agenda/linux-kernel.inc
index 56799139..43b65de5 100644
--- a/agenda/linux-kernel.inc
+++ b/agenda/linux-kernel.inc
@@ -40,8 +40,8 @@
       pour les périphériques.
     \item Être capable d'utiliser les principaux mécanismes du noyau
       Linux pour le développement de pilotes de périphériques: gestion
-      mémoire, verouillage, gestion des interruptions, mise en sommeil
-      et réveil de threads.
+      mémoire, verrouillage, gestion des interruptions, mise en sommeil
+      et réveil de threads, DMA.
     \item Être capable de débugger des problèmes dans le noyau Linux, en
       utilisant différents outils et mécanismes de debug.
     \end{itemize}
@@ -67,7 +67,7 @@
       devices, kernel subsystems.
     \item Be able to use the major kernel mechanisms needed for device
       driver development: memory management, locking, interrupt
-      handling, sleeping.
+      handling, sleeping, DMA.
     \item Be able to debug Linux kernel issues, using a variety of
       debugging techniques and mechanisms.
     \end{itemize}




More information about the training-materials-updates mailing list