[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