From a7fc3ac402d87437fbe035223f4bba4ac9805317 Mon Sep 17 00:00:00 2001 From: Thomas Bonnefille Date: Tue, 29 Oct 2024 18:29:09 +0100 Subject: [PATCH 01/18] agenda: create commmand to refactor agendas This commits adds commands to refactor the agendas. It adds respectively commands to : - Define and show a specific section (lecture or lab) - Define and show a supported board - Show a specified part of a specified day Signed-off-by: Thomas Bonnefille --- agenda/common.inc | 99 +++++++++++++++++++++++++++++++++++++++++++++++ common/agenda.sty | 1 + 2 files changed, 100 insertions(+) create mode 100644 agenda/common.inc diff --git a/agenda/common.inc b/agenda/common.inc new file mode 100644 index 0000000000..8790aeb9d5 --- /dev/null +++ b/agenda/common.inc @@ -0,0 +1,99 @@ +\newcommand\defagendaitem[6]{ + \ifthenelse{\equal{\agendalanguage}{french}}{ + \expandafter\def\csname #1@#2@title\endcsname {#5} + \expandafter\def\csname #1@#2@contents\endcsname {#6} + }{ + \expandafter\def\csname #1@#2@title\endcsname {#3} + \expandafter\def\csname #1@#2@contents\endcsname {#4} + } +} + +\newcommand\showagendaitem[2]{ + \feagendaonecolumn{ + \ifthenelse{\equal{\agendalanguage}{french}}{ + \ifthenelse{\equal{#2}{lecture}} + {Cours -} + { + \ifthenelse{\equal{#2}{lab}}{ + \ifthenelse{\equal{\trainingtype}{online}}{Démo -}{TP -} + } + {} + } + }{ + \ifthenelse{\equal{#2}{lecture}} + {Lecture -} + { + \ifthenelse{\equal{#2}{lab}}{ + \ifthenelse{\equal{\trainingtype}{online}}{Demo -}{Lab -} + } + {} + } + } + \csname #1@#2@title\endcsname + }{ + \csname #1@#2@contents\endcsname + } +} + +\newcommand\defboard[6]{ + \ifthenelse{\equal{\agendalanguage}{french}}{ + \expandafter\def\csname #1@title\endcsname {#4} + \expandafter\def\csname #1@contents\endcsname {#5} + }{ + \expandafter\def\csname #1@title\endcsname {#2} + \expandafter\def\csname #1@contents\endcsname {#3} + } + \expandafter\def\csname #1@image\endcsname {#6} +} + +\newcommand\showboarditem[1]{ + \feagendatwocolumn{ + \csname #1@title\endcsname + }{ + \csname #1@contents\endcsname + } + {} + { + \csname #1@image\endcsname + } +} + +\newcommand\showagendaday[1]{ + \ifthenelse{\equal{\trainingtype}{online}}{ + \showonlineagendaday{#1} + }{ + \pgfmathparse{int(mod(#1, 2))} + \ifnum\pgfmathresult=1 + \pgfmathparse{int((#1 + 1) / 2)} + \showonsiteagendaday{\pgfmathresult}{morning} + \else + \pgfmathparse{int(#1 / 2)} + \showonsiteagendaday{\pgfmathresult}{afternoon} + \fi + } +} + + +\newcommand\showonlineagendaday[1]{ + \ifthenelse{\equal{\agendalanguage}{french}}{ + \section{#1 demi-journée} + }{ + \section{Half day #1} + } +} + +\newcommand\showonsiteagendaday[2]{ + \ifthenelse{\equal{\agendalanguage}{french}}{ + \ifthenelse{\equal{#2}{morning}}{ + \section{Jour #1 - Matin} + }{ + \section{Jour #1 - Après-midi} + } + }{ + \ifthenelse{\equal{#2}{morning}}{ + \section{Day #1 - Morning} + }{ + \section{Day #1 - Afternoon} + } + } +} diff --git a/common/agenda.sty b/common/agenda.sty index d20da23922..4195769cf7 100644 --- a/common/agenda.sty +++ b/common/agenda.sty @@ -21,6 +21,7 @@ \usepackage{ifthen} \usepackage{fp} \usepackage{fmtcount} +\usepackage{pgf} % Setting the babel language is important for fmtcount to return % strings in the appropriate language. From b681be23d4cdb4f1d4ef757dcdcfadab586e8f73 Mon Sep 17 00:00:00 2001 From: Thomas Bonnefille Date: Tue, 29 Oct 2024 18:27:40 +0100 Subject: [PATCH 02/18] agenda: define different section for the yocto course This commit defines the different sections necessary for the Yocto course. Signed-off-by: Thomas Bonnefille --- agenda/common.inc | 120 ++++++++ agenda/yocto.inc | 699 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 819 insertions(+) diff --git a/agenda/common.inc b/agenda/common.inc index 8790aeb9d5..fd9f6047a7 100644 --- a/agenda/common.inc +++ b/agenda/common.inc @@ -97,3 +97,123 @@ } } } + +\defboard +{stm32mp1} +{Hardware platform for practical labs} +{ + One of these Discovery Kits from STMicroelectronics: {\bf + STM32MP157A-DK1}, {\bf STM32MP157D-DK1}, {\bf STM32MP157C-DK2} or + {\bf STM32MP157F-DK2} + \begin{itemize} + \item STM32MP157, dual Cortex-A7 processor from STMicroelectronics + \item USB powered + \item 512 MB DDR3L RAM + \item Gigabit Ethernet port + \item 4 USB 2.0 host ports + \item 1 USB-C OTG port + \item 1 Micro SD slot + \item On-board ST-LINK/V2-1 debugger + \item Arduino compatible headers + \item Audio codec, buttons, LEDs + \item LCD touchscreen (DK2 kits only) + \end{itemize} +} +{Plateforme matérielle pour les travaux pratiques} +{ + Une de ces cartes de STMicroelectronics : {\bf + STM32MP157A-DK1}, {\bf STM32MP157D-DK1}, {\bf STM32MP157C-DK2} ou + {\bf STM32MP157F-DK2} + \begin{itemize} + \item Processeur STM32MP157, double Cortex-A7, de STMicroelectronics + \item Alimentée par USB + \item 512 Mo DDR3L RAM + \item Port Gigabit Ethernet port + \item 4 ports hôte USB 2.0 + \item 1 port USB-C OTG + \item 1 connecteur Micro SD + \item Debugger ST-LINK/V2-1 sur la carte + \item Connecteurs compatibles Arduino Uno v3 + \item Codec audio + \item Divers : boutons, LEDs + \item Écran LCD tactile (uniquement sur cartes DK2) + \end{itemize} +} +{ + \begin{center} + \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} + \end{center} +} + +\defboard +{beagleboneblack} +{Hardware platform for practical labs} +{ + {\bf BeagleBone Black} or {\bf BeagleBone Black Wireless} board + \begin{itemize} + \item An ARM AM335x (single Cortex-A8) processor from Texas + Instruments + \item USB powered + \item 512 MB of RAM + \item 2 or 4 GB of on-board eMMC storage + \item USB host and device + \item HDMI output + \item 2 x 46 pins headers, to access UARTs, SPI buses, I2C buses + and more. + \item Ethernet or WiFi + \end{itemize} +} +{Plateforme matérielle pour les travaux pratiques} +{ + Carte {\bf BeagleBone Black} ou {\bf BeagleBone Black Wireless} + \begin{itemize} + \item Un processeur ARM AM335x de Texas Instruments (à base de + Cortex-A8), avec accélération 3D, etc. + \item 512 Mo de RAM + \item 2 ou 4 Go de stockage eMMC + \item USB hôte et device + \item Sortie HDMI + \item Connecteurs à 2 x 46 broches, pour accéder aux UARTs, aux bus + SPI, aux bus I2C, et à d'autres entrées/sorties du processeur. + \item Ethernet ou WiFi + \end{itemize} +} +{ + \begin{center} + \includegraphics[width=5cm]{../slides/beagleboneblack-board/beagleboneblack.png} + \end{center} +} + +\defboard +{beagleplay} +{Hardware platform for practical labs} +{ + {\bf BeaglePlay} board + \begin{itemize} + \item Texas Instruments AM625x (4xARM Cortex-A53 CPU) + \item SoC with 3D acceleration, integrated MCU and many other peripherals. + \item 2 GB of RAM + \item 16 GB of on-board eMMC storage + \item USB host and USB device, microSD, HDMI + \item 2.4 and 5 GHz WiFi, Bluetooth and also Ethernet + \item 1 MicroBus Header (SPI, I2C, UART, ...), OLDI and CSI connector. + \end{itemize} +} +{Plateforme matérielle pour les travaux pratiques} +{ + Carte {\bf BeaglePlay} + \begin{itemize} + \item SoC Texas Instruments AM625x (CPU 4xARM Cortex-A53) + \item SoC avec accélération 3D, MCU intégré et de nombreux autres périphériques. + \item 2 GB de RAM + \item 16 Go de stockage eMMC + \item USB hôte et device, microSD, HDMI + \item WiFi 2.4 and 5 GHz, Bluetooth et aussi Ethernet + \item 1 Header MicroBus (SPI, I2C, UART, ...), connecteurs OLDI et CSI. + \end{itemize} +} +{ + \begin{center} + \includegraphics[width=5cm]{../slides/beagleplay-board/beagleplay.png} + \end{center} +} diff --git a/agenda/yocto.inc b/agenda/yocto.inc index 527eca5c81..b9c10d6464 100644 --- a/agenda/yocto.inc +++ b/agenda/yocto.inc @@ -1,4 +1,6 @@ \usepackage{ifthen} +\input{agenda/common.inc} + \def \training{yocto} % Title @@ -96,3 +98,700 @@ % Time ratio \def \onsitelecturetimeratio{40} \def \onsitelabtimeratio{60} + +% Agenda items + +\defagendaitem +{intro} +{lecture} +{Introduction to embedded Linux build systems} +{ + \begin{itemize} + \item Overview of an embedded Linux system architecture + \item Methods to build a root filesystem image + \item Usefulness of build systems + \end{itemize} +} +{Introduction aux outils de compilation de systèmes Linux embarqué} +{ + \begin{itemize} + \item Vue d'ensemble de l'architecture d'un système Linux embarqué + \item Méthodes pour compiler un système de fichiers + \item Utilité des outils de compilation + \end{itemize} +} + +\defagendaitem +{overview} +{lecture} +{Overview of the Yocto Project and the Poky reference system} +{ + \begin{itemize} + \item Introduction to the Yocto / OpenEmbedded build system and its lexicon + \item Overview of the Poky reference system + \end{itemize} +} +{Vue d'ensemble de Yocto Project et du système de référence Poky} +{ + \begin{itemize} + \item Organisation des sources du projet + \item Création d'un système de fichiers avec Yocto Project + \end{itemize} +} + +\defagendaitem +{overview} +{lecture} +{Yocto Project and Poky reference system overview} +{ + \begin{itemize} + \item Introduction to the Yocto / OpenEmbedded build system and its lexicon + \item Overview of the Poky reference system + \end{itemize} +} +{Vue d'ensemble de Yocto Project et du système de référence Poky} +{ + \begin{itemize} + \item Présentation de l'outil de compilation Yocto / OpenEmbedded et de sa terminologie. + \item Vue d'ensemble du système de référence Poky + \end{itemize} +} + +\defagendaitem +{usingbasics} +{lecture} +{Using Yocto Project - basics} +{ + \begin{itemize} + \item Setting up the build directory and environment + \item Configuring the build system + \item Building a root filesystem image + \item Organization of the build output + \end{itemize} +} +{Bases de l'utilisation de Yocto Project} +{ + \begin{itemize} + \item Mise en place du répertoire de travail et de l'environnement + \item Configuration de l'outil de compilation + \item Compilation de l'image d'un système de fichiers racine + \item Structure des fichiers générés + \end{itemize} +} + +\defagendaitem +{firstbuild} +{lab} +{First Yocto Project build} +{ + \begin{itemize} + \item Downloading the Poky reference build system + \item Configuring the build system + \item Building a system image + \end{itemize} +} +{1\textsuperscript{ère} compilation avec Yocto Project} +{ + \begin{itemize} + \item Téléchargement du système de référence Poky + \item Configuration de l'outil de compilation + \item Compilation d'une image système + \end{itemize} +} + +\defagendaitem +{flashingbooting} +{lab} +{Flashing and booting} +{ + \begin{itemize} + \item Flashing and booting the image on the board + \end{itemize} +} +{Flasher et booter} +{ + \begin{itemize} + \item Flasher et booter l'image du système sur la carte + \end{itemize} +} + +\defagendaitem +{usingadvanced} +{lecture} +{Using Yocto Project - advanced usage} +{ + \begin{itemize} + \item Variable assignment, operators and overrides + \item Package variants and package selection + \item bitbake command line options + \end{itemize} +} +{Utilisation de Yocto Project - Utilisation avancée} +{ + \begin{itemize} + \item Assignation des variables, opérateurs et surcharge + \item Paquetages: variantes de paquetages + \item Options de la commande bitbake + \end{itemize} +} + +\defagendaitem +{nfsconfiguring} +{lab} +{Using NFS and configuring the build} +{ + \begin{itemize} + \item Configuring the board to boot over NFS + \item Add a package to the root filesystem + \item Learn how to use the \code{PREFERRED_PROVIDER} mechanism + \item Get familiar with the bitbake command line options + \end{itemize} +} +{Utilisation de NFS et configuration de la compilation} +{ + \begin{itemize} + \item Configurer la carte pour démarrer via NFS + \item Rajouter un paquetage au système de fichiers racine + \item Apprendre à utiliser le mécanisme \code{PREFERRED_PROVIDER} + \item Se familiariser avec les options de la commande bitbake + \end{itemize} +} + +\defagendaitem +{writingrecipesbasics} +{lecture} +{Writing recipes - basics} +{ + \begin{itemize} + \item Recipes: overview + \item Recipe file organization + \item Applying patches + \item Recipe examples + \end{itemize} +} +{Écriture de recettes - Fonctionnalités de base} +{ + \begin{itemize} + \item Recettes: vue d'ensemble + \item Organisation d'un fichier de recette + \item Application de patches + \item Exemples de recettes + \end{itemize} +} + +\defagendaitem +{appcompilation} +{lab} +{Adding an application to the build} +{ + \begin{itemize} + \item Writing a recipe for {\em ninvaders} + \item Troubleshooting the recipe + \item Troubleshooting cross-compilation issues + \item Adding {\em ninvaders} to the final image + \end{itemize} +} +{Ajouter la compilation d'une application} +{ + \begin{itemize} + \item Création d'une recette pour {\em ninvaders} + \item Résolution de problèmes liés à la recette + \item Résolution de problèmes liés à la compilation croisée + \item Ajout d'{\em ninvaders} à l'image finale + \end{itemize} +} + +\defagendaitem +{writingrecipesadvanced} +{lecture} +{Writing recipes - advanced features} +{ + \begin{itemize} + \item Extending and overriding recipes + \item Virtual packages + \item Learn about classes + \item BitBake file inclusions + \item Debugging recipes + \item Configuring BitBake network usage + \end{itemize} +} +{Écriture de recettes - Fonctionnalités avancées} +{ + \begin{itemize} + \item Extension et redéfinition de recettes + \item Paquetages virtuels + \item Familiarisation avec les classes + \item Inclusion d'exemples avec BitBake + \item Mise au point des recettes + \item Configuration de l'utilisation du réseau par BitBake + \end{itemize} +} + +\defagendaitem +{layers} +{lecture} +{Layers} +{ + \begin{itemize} + \item What layers are + \item Where to find layers + \item Creating a layer + \end{itemize} +} +{Layers} +{ + \begin{itemize} + \item Ce que sont les {\em layers} + \item Où trouver les {\em layers} + \item Création d'un {\em layer} + \end{itemize} +} + +\defagendaitem +{writinglayer} +{lab} +{Writing a layer} +{ + \begin{itemize} + \item Learn how to write a layer + \item Add the layer to the build + \item Move {\em ninvaders} to the new layer + \end{itemize} +} +{Écriture d'un layer} +{ + \begin{itemize} + \item Apprendre à écrire un {\em layer} + \item Ajouter le {\em layer} à la compilation + \item Inclure {\em ninvaders} dans le nouveau {\em layer} + \end{itemize} +} + +\defagendaitem +{extendrecipe} +{lab} +{Extend a recipe} +{ + \begin{itemize} + \item Extend the kernel recipe to add patches + \item Configure the kernel to compile the nunchuk driver + \item Edit the ninvaders recipe to add patches + \item Play {\em ninvaders} + \end{itemize} +} +{Étendre une recette} +{ + \begin{itemize} + \item Étendre la recette pour le noyau pour rajouter des patches + \item Configurer le noyau pour compiler le pilote du nunchuk + \item Modifier la recette ninvaders pour rajouter des patches + \item Jouer avec {\em ninvaders} + \end{itemize} +} + +\defagendaitem +{writingbsp} +{lecture} +{Writing a BSP} +{ + \begin{itemize} + \item Introduction to BSP layers + \item Adding a new machine + \item Bootloader configuration + \item Linux: the kernel bbclass and the linux-yocto recipe + \end{itemize} +} +{Écriture d'un BSP} +{ + \begin{itemize} + \item Introduction aux layers BSP + \item Ajout d'une nouvelle machine + \item Configuration du chargeur de démarrage + \item Linux : la classe kernel.bbclass et la recette linux-yocto + \end{itemize} +} + +\defagendaitem +{kernelchanges} +{lab} +{Create a custom machine configuration} +{ + \begin{itemize} + \item Create a new machine configuration + \item Build an image for the new machine + \end{itemize} +} +{Création d'une configuration spécifique pour une machine} +{ + \begin{itemize} + \item Types d'images + \item Écriture et utilisation de groupes de paquetages + \end{itemize} +} + +\defagendaitem +{distrolayer} +{lecture} +{Distro layers} +{ + \begin{itemize} + \item Distro configuration + \item Distro layers + \end{itemize} +} +{Création d'une image sur mesure} +{ + \begin{itemize} + \item Rajouter une recette de base pour une image + \item Sélectionner les fonctionnalités et les paquetages de l'image + \item Ajouter un groupe de paquetages sur mesure + \item Ajouter une variante d'image pour le débogage + \end{itemize} +} + +\defagendaitem +{image} +{lecture} +{Images} +{ + \begin{itemize} + \item Writing an image recipe + \item Image types + \item Writing and using package groups recipes + \end{itemize} +} +{Images} +{ + \begin{itemize} + \item Écriture d’une recette d’image + \item Types d’images + \item Écriture et utilisation de groupes de paquetages + \end{itemize} +} + +\defagendaitem +{image} +{lab} +{Create a custom image} +{ + \begin{itemize} + \item Add a basic image recipe + \item Select the image capabilities and packages + \item Add a custom package group + \item Add an image variant for debugging + \end{itemize} +} +{Création d'une image sur mesure} +{ + \begin{itemize} + \item Écrire une recette d'image personnalisée + \item Ajouter {\em ninvaders} à l'image sur mesure + \end{itemize} +} + +\defagendaitem +{writingrecipesgoingfurther} +{lecture} +{Writing recipes - going further} +{ + \begin{itemize} + \item The per-recipe sysroot + \item Using Python code in metadata + \item Variable flags + \item Packages features and PACKAGECONFIG + \item Conditional features + \item Package splitting + \item Dependencies in detail + \end{itemize} +} +{Écriture de recettes - Pour aller plus loin} +{ + \begin{itemize} + \item Le sysroot de chaque recette + \item Utilisation de code Python code dans les méta-données + \item Drapeaux de variables + \item Fonctionnalités de paquetages et PACKAGECONFIG + \item Fonctionnalités conditionnelles + \item Découpage de paquetages + \end{itemize} +} + +\defagendaitem +{licensing} +{lecture} +{Licensing} +{ + \begin{itemize} + \item Managing open source licenses + \end{itemize} +} +{Licences} +{ + \begin{itemize} + \item Gestion de licences open source + \end{itemize} +} + +\defagendaitem +{sdk} +{lecture} +{The Yocto Project SDK} +{ + \begin{itemize} + \item Goals of the SDK + \item Building and customizing an SDK + \item Using the Yocto Project SDK + \end{itemize} +} +{SDK pour le projet Yocto} +{ + \begin{itemize} + \item Objectifs du SDK + \item Compilation et personnalisation d'un SDK + \item Utilisation d'un SDK pour le projet Yocto + \end{itemize} +} + +\defagendaitem +{sdk} +{lab} +{Develop your application in the Poky SDK} +{ + \begin{itemize} + \item Building an SDK + \item Using the Yocto Project SDK + \end{itemize} +} +{Développement d'une application au moyen du SDK de Poky} +{ + \begin{itemize} + \item Construction d'un SDK + \item Utilisation du SDK de Yocto Project + \end{itemize} +} + +\defagendaitem +{devtool} +{lecture} +{Devtool} +{ + \begin{itemize} + \item About devtool + \item Devtool use cases + \end{itemize} +} +{Devtool} +{ + \begin{itemize} + \item Présentation devtool + \item Cas d'utilisation de devtool + \end{itemize} +} + +\defagendaitem +{devtool} +{lab} +{Using devtool} +{ + \begin{itemize} + \item Generate a new recipe + \item Modify a recipe to add a new patch + \item Upgrade a recipe to a newer version + \end{itemize} +} +{Utilisation de devtool} +{ + \begin{itemize} + \item Création d'une nouvelle recette + \item Modification d'une recette pour ajouter un nouveau patch + \item Mettre à jour une recette pour prendre en charge une nouvelle version + \end{itemize} +} + +\defagendaitem +{automatinglayermanagement} +{lecture} +{Automating layer management} +{ + \begin{itemize} + \item Automating layer management + \end{itemize} +} +{Gestion automatique de layers} +{ + \begin{itemize} + \item Gestion automatique de layers + \end{itemize} +} + +\defagendaitem +{runtimepackagemanagement} +{lecture} +{Runtime Package Management} +{ + \begin{itemize} + \item Introduction to runtime package management + \item Build configuration + \item Package server configuration + \item Target configuration + \end{itemize} +} +{Gestion de paquetages à l'exécution} +{ + \begin{itemize} + \item Introduction à la gestion de paquetages à l'exécution + \item Configuration de la compilation + \item Configuration d'une serveur de paquetages + \item Configuration de la machine cible + \end{itemize} +} + +\defagendaitem +{qna} +{misc} +{Questions and Answers} +{ + \begin{itemize} + \item Questions and answers with the audience about the course topics + \item Extra presentations if time is left, according what most + participants are interested in. + \end{itemize} +} +{Questions / réponses} +{ + \begin{itemize} + \item Questions et réponses avec les participants à propos des sujets abordés. + \item Présentations supplémentaires s'il reste du temps, en fonction des demandes + de la majorité des participants. + \end{itemize} +} + +\def \onlineagenda { + \showagendaday{1} + + \showagendaitem{intro}{lecture} + + \showagendaitem{overview}{lecture} + + \showagendaitem{usingbasics}{lecture} + + \showagendaitem{firstbuild}{lab} + + \showagendaitem{flashingbooting}{lab} + + \showagendaday{2} + + \showagendaitem{usingadvanced}{lecture} + + \showagendaitem{nfsconfiguring}{lab} + + \showagendaitem{writingrecipesbasics}{lecture} + + \showagendaitem{appcompilation}{lab} + + \showagendaitem{writingrecipesadvanced}{lecture} + + \showagendaday{3} + + \showagendaitem{layers}{lecture} + + \showagendaitem{writinglayer}{lab} + + \showagendaitem{extendrecipe}{lab} + + \showagendaitem{writingbsp}{lecture} + + \showagendaitem{kernelchanges}{lab} + + \showagendaitem{distrolayer}{lecture} + + \showagendaday{4} + + \showagendaitem{image}{lecture} + + \showagendaitem{image}{lab} + + \showagendaitem{writingrecipesgoingfurther}{lecture} + + \showagendaitem{licensing}{lecture} + + \showagendaitem{sdk}{lecture} + + \showagendaitem{sdk}{lab} + + \showagendaitem{devtool}{lecture} + + \showagendaitem{devtool}{lab} + + \showagendaitem{automatinglayermanagement}{lecture} + + \showagendaitem{runtimepackagemanagement}{lecture} + + \showagendaitem{qna}{misc} +} + +\def \onsiteagenda { + \showonsiteagendaday{1}{morning} + + \showagendaitem{intro}{lecture} + + \showagendaitem{overview}{lecture} + + \showagendaitem{usingbasics}{lecture} + + \showagendaitem{firstbuild}{lab} + + \showonsiteagendaday{1}{afternoon} + + \showagendaitem{flashingbooting}{lab} + + \showagendaitem{usingadvanced}{lecture} + + \showagendaitem{nfsconfiguring}{lab} + + \showonsiteagendaday{2}{morning} + + \showagendaitem{writingrecipesbasics}{lecture} + + \showagendaitem{appcompilation}{lab} + + \showagendaitem{writingrecipesadvanced}{lecture} + + \showonsiteagendaday{2}{afternoon} + + \showagendaitem{layers}{lecture} + + \showagendaitem{writinglayer}{lab} + + \showonsiteagendaday{3}{morning} + + \showagendaitem{extendrecipe}{lab} + + \showagendaitem{writingbsp}{lecture} + + \showagendaitem{kernelchanges}{lab} + + \showagendaitem{distrolayer}{lecture} + + \showonsiteagendaday{3}{afternoon} + + \showagendaitem{image}{lecture} + + \showagendaitem{image}{lab} + + \showagendaitem{writingrecipesgoingfurther}{lecture} + + \showagendaitem{licensing}{lecture} + + \showagendaitem{sdk}{lecture} + + \showagendaitem{sdk}{lab} + + \showagendaitem{devtool}{lecture} + + \showagendaitem{devtool}{lab} + + \showagendaitem{automatinglayermanagement}{lecture} + + \showagendaitem{runtimepackagemanagement}{lecture} +} From 0f9234eb903aea49d43618497bbfc7e03c8eff5d Mon Sep 17 00:00:00 2001 From: Thomas Bonnefille Date: Tue, 29 Oct 2024 18:28:53 +0100 Subject: [PATCH 03/18] agenda: use commands to refactor the Yocto agenda Signed-off-by: Thomas Bonnefille --- agenda/yocto-agenda.tex | 335 +---------------------------- agenda/yocto-fr-agenda.tex | 336 +---------------------------- agenda/yocto-online-agenda.tex | 342 +----------------------------- agenda/yocto-online-fr-agenda.tex | 342 +----------------------------- 4 files changed, 16 insertions(+), 1339 deletions(-) diff --git a/agenda/yocto-agenda.tex b/agenda/yocto-agenda.tex index 7303afe622..735e748427 100644 --- a/agenda/yocto-agenda.tex +++ b/agenda/yocto-agenda.tex @@ -13,338 +13,11 @@ \feshowinfo -\feagendatwocolumn -{Hardware platform for practical labs, option \#1} -{ - One of these Discovery Kits from STMicroelectronics: {\bf - STM32MP157A-DK1}, {\bf STM32MP157D-DK1}, {\bf STM32MP157C-DK2} or - {\bf STM32MP157F-DK2} - \begin{itemize} - \item STM32MP157, dual Cortex-A7 processor from STMicroelectronics - \item USB powered - \item 512 MB DDR3L RAM - \item Gigabit Ethernet port - \item 4 USB 2.0 host ports - \item 1 USB-C OTG port - \item 1 Micro SD slot - \item On-board ST-LINK/V2-1 debugger - \item Arduino compatible headers - \item Audio codec, buttons, LEDs - \item LCD touchscreen (DK2 kits only) - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} - \end{center} -} +\showboarditem{stm32mp1} +\showboarditem{beagleboneblack} +\showboarditem{beagleplay} -\feagendatwocolumn -{Hardware platform for practical labs, option \#2} -{ - {\bf BeagleBone Black} or {\bf BeagleBone Black Wireless} board - \begin{itemize} - \item An ARM AM335x (single Cortex-A8) processor from Texas - Instruments - \item USB powered - \item 512 MB of RAM - \item 2 or 4 GB of on-board eMMC storage - \item USB host and device - \item HDMI output - \item 2 x 46 pins headers, to access UARTs, SPI buses, I2C buses - and more. - \item Ethernet or WiFi - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleboneblack-board/beagleboneblack.png} - \end{center} -} - -\feagendatwocolumn -{Hardware platform for practical labs, option \#3} -{ - {\bf BeaglePlay} board - \begin{itemize} - \item Texas Instruments AM625x (4xARM Cortex-A53 CPU) - \item SoC with 3D acceleration, integrated MCU and many other peripherals. - \item 2 GB of RAM - \item 16 GB of on-board eMMC storage - \item USB host and USB device, microSD, HDMI - \item 2.4 and 5 GHz WiFi, Bluetooth and also Ethernet - \item 1 MicroBus Header (SPI, I2C, UART, ...), OLDI and CSI connector. - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleplay-board/beagleplay.png} - \end{center} -} - -\section{Day 1 - Morning} - -\feagendaonecolumn -{Lecture - Introduction to embedded Linux build systems} -{ - \begin{itemize} - \item Overview of an embedded Linux system architecture - \item Methods to build a root filesystem image - \item Usefulness of build systems - \end{itemize} -} - -\feagendaonecolumn -{Lecture - Yocto Project and Poky reference system overview} -{ - \begin{itemize} - \item Introduction to the Yocto / OpenEmbedded build system and its lexicon - \item Overview of the Poky reference system - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Using Yocto Project - basics} -{ - \begin{itemize} - \item Setting up the build directory and environment - \item Configuring the build system - \item Building a root filesystem image - \end{itemize} -} -{Lab 1 - First Yocto Project build} -{ - \begin{itemize} - \item Downloading the Poky reference build system - \item Configuring the build system - \item Building a system image - \end{itemize} -} - -\section{Day 1 - Afternoon} - -\feagendatwocolumn -{Lecture - Using Yocto Project - basics} -{ - \begin{itemize} - \item Organization of the build output - \end{itemize} -} -{Lab 1 - Flashing and booting} -{ - \begin{itemize} - \item Flashing and booting the image on the board - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Using Yocto Project - advanced usage} -{ - \begin{itemize} - \item Variable assignment, operators and overrides - \item Package variants and package selection - \item bitbake command line options - \end{itemize} -} -{Lab 2 - Using NFS and configuring the build} -{ - \begin{itemize} - \item Configuring the board to boot over NFS - \item Add a package to the root filesystem - \item Learn how to use the \code{PREFERRED_PROVIDER} mechanism - \item Get familiar with the bitbake command line options - \end{itemize} -} -\\ -\section{Day 2 - Morning} - -\feagendatwocolumn -{Lecture - Writing recipes - basics} -{ - \begin{itemize} - \item Recipes: overview - \item Recipe file organization - \item Applying patches - \item Recipe examples - \end{itemize} -} -{Lab 3 - Adding an application to the build} -{ - \begin{itemize} - \item Writing a recipe for {\em nInvaders} - \item Troubleshooting the recipe - \item Troubleshooting cross-compilation issues - \item Adding {\em ninvaders} to the final image - \end{itemize} -} - -\feagendaonecolumn -{Lecture - Writing recipes - advanced features} -{ - \begin{itemize} - \item Extending and overriding recipes - \item Virtual packages - \item Learn about classes - \item BitBake file inclusions - \item Debugging recipes - \item Configuring BitBake network usage - \end{itemize} -} - -\section{Day 2 - Afternoon} - -\feagendatwocolumn -{Lecture - Layers} -{ - \begin{itemize} - \item What layers are - \item Where to find layers - \item Creating a layer - \end{itemize} -} -{Lab 4 - Writing a layer} -{ - \begin{itemize} - \item Learn how to write a layer - \item Add the layer to the build - \item Move {\em ninvaders} to the new layer - \end{itemize} -} - -\section{Day 3 - Morning} - -\feagendaonecolumn -{Lab 5 - Extend a recipe} -{ - \begin{itemize} - \item Extend the kernel recipe to add patches - \item Configure the kernel to compile the nunchuk driver - \item Edit the ninvaders recipe to add patches - \item Play {\em nInvaders} - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Writing a BSP} -{ - \begin{itemize} - \item Introduction to BSP layers - \item Adding a new machine - \item Bootloader configuration - \item Linux: the kernel bbclass and the linux-yocto recipe - \end{itemize} -} -{Lab 6 - Create a custom machine configuration} -{ - \begin{itemize} - \item Create a new machine configuration - \item Build an image for the new machine - \end{itemize} -} - -\feagendaonecolumn -{Lecture - Distro layers} -{ - \begin{itemize} - \item Distro configuration - \item Distro layers - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Images} -{ - \begin{itemize} - \item Writing an image recipe - \item Image types - \item Writing and using package groups recipes - \end{itemize} -} -{Lab 7 - Create a custom image} -{ - \begin{itemize} - \item Add a basic image recipe - \item Select the image capabilities and packages - \item Add a custom package group - \item Add an image variant for debugging - \end{itemize} -} - -\section{Day 3 - Afternoon} - -\feagendatwocolumn -{Lecture - Writing recipes - going further} -{ - \begin{itemize} - \item The per-recipe sysroot - \item Using Python code in metadata - \item Variable flags - \item Packages features and PACKAGECONFIG - \item Conditional features - \item Package splitting - \item Dependencies in detail - \end{itemize} -} -{Lecture - Licensing} -{ - \begin{itemize} - \item Managing open source licenses - \end{itemize} -} - -\feagendatwocolumn -{Lecture - The Yocto Project SDK} -{ - \begin{itemize} - \item Goals of the SDK - \item Building and customizing an SDK - \item Using the Yocto Project SDK - \end{itemize} -} -{Lab 8 - Develop your application in the Poky SDK} -{ - \begin{itemize} - \item Building an SDK - \item Using the Yocto Project SDK - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Devtool} -{ - \begin{itemize} - \item About devtool - \item Devtool use cases - \end{itemize} -} -{Lab 9 - Using devtool} -{ - \begin{itemize} - \item Generate a new recipe - \item Modify a recipe to add a new patch - \item Upgrade a recipe to a newer version - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Automating layer management} -{ - \begin{itemize} - \item Automating layer management - \end{itemize} -} -{Lecture - Runtime Package Management} -{ - \begin{itemize} - \item Introduction to runtime package management - \item Build configuration - \item Package server configuration - \item Target configuration - \end{itemize} -} +\onsiteagenda \end{document} diff --git a/agenda/yocto-fr-agenda.tex b/agenda/yocto-fr-agenda.tex index ee415acf19..8de1f2556a 100644 --- a/agenda/yocto-fr-agenda.tex +++ b/agenda/yocto-fr-agenda.tex @@ -13,338 +13,10 @@ \feshowinfo -\feagendatwocolumn -{Plateforme matérielle pour les travaux pratiques, option \#1} -{ - Une de ces cartes de STMicroelectronics : {\bf - STM32MP157A-DK1}, {\bf STM32MP157D-DK1}, {\bf STM32MP157C-DK2} ou - {\bf STM32MP157F-DK2} - \begin{itemize} - \item Processeur STM32MP157, double Cortex-A7, de STMicroelectronics - \item Alimentée par USB - \item 512 Mo DDR3L RAM - \item Port Gigabit Ethernet port - \item 4 ports hôte USB 2.0 - \item 1 port USB-C OTG - \item 1 connecteur Micro SD - \item Debugger ST-LINK/V2-1 sur la carte - \item Connecteurs compatibles Arduino Uno v3 - \item Codec audio - \item Divers : boutons, LEDs - \item Écran LCD tactile (uniquement sur cartes DK2) - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} - \end{center} -} +\showboarditem{stm32mp1} +\showboarditem{beagleboneblack} +\showboarditem{beagleplay} -\feagendatwocolumn -{Plateforme matérielle pour les travaux pratiques, option \#2} -{ - Carte {\bf BeagleBone Black} ou {\bf BeagleBone Black Wireless} - \begin{itemize} - \item Un processeur ARM AM335x de Texas Instruments (à base de - Cortex-A8), avec accélération 3D, etc. - \item 512 Mo de RAM - \item 2 ou 4 Go de stockage eMMC - \item USB hôte et device - \item Sortie HDMI - \item Connecteurs à 2 x 46 broches, pour accéder aux UARTs, aux bus - SPI, aux bus I2C, et à d'autres entrées/sorties du processeur. - \item Ethernet ou WiFi - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleboneblack-board/beagleboneblack.png} - \end{center} -} - -\feagendatwocolumn -{Plateforme matérielle pour les travaux pratiques, option \#3} -{ - Carte {\bf BeaglePlay} - \begin{itemize} - \item SoC Texas Instruments AM625x (CPU 4xARM Cortex-A53) - \item SoC avec accélération 3D, MCU intégré et de nombreux autres périphériques. - \item 2 GB de RAM - \item 16 Go de stockage eMMC - \item USB hôte et device, microSD, HDMI - \item WiFi 2.4 and 5 GHz, Bluetooth et aussi Ethernet - \item 1 Header MicroBus (SPI, I2C, UART, ...), connecteurs OLDI et CSI. - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleplay-board/beagleplay.png} - \end{center} -} - -\section{1\textsuperscript{er} jour - Matin} - -\feagendaonecolumn -{Cours - Introduction aux outils de compilation de systèmes Linux embarqué} -{ - \begin{itemize} - \item Vue d'ensemble de l'architecture d'un système Linux embarqué - \item Méthodes pour compiler un système de fichiers - \item Utilité des outils de compilation - \end{itemize} -} - -\feagendaonecolumn -{Cours - Vue d'ensemble de Yocto Project et du système de référence Poky} -{ - \begin{itemize} - \item Présentation de l'outil de compilation Yocto / OpenEmbedded et de sa terminologie. - \item Vue d'ensemble du système de référence Poky - \end{itemize} -} - -\feagendatwocolumn -{Cours - Bases de l'utilisation de Yocto Project} -{ - \begin{itemize} - \item Mise en place du répertoire de travail et de l'environnement - \item Configuration de l'outil de compilation - \item Compilation de l'image d'un système de fichiers racine - \end{itemize} -} -{TP 1 - 1\textsuperscript{ère} compilation avec Yocto Project} -{ - \begin{itemize} - \item Téléchargement du système de référence Poky - \item Configuration de l'outil de compilation - \item Compilation d'une image système - \end{itemize} -} - -\section{1\textsuperscript{er} Jour - Après-midi} - -\feagendatwocolumn -{Cours - Utilisation de Yocto Project - Notions de base} -{ - \begin{itemize} - \item Structure des fichiers générés - \end{itemize} -} -{TP 1- Flasher et booter} -{ - \begin{itemize} - \item Flasher et booter l'image du système sur la carte - \end{itemize} -} - -\feagendatwocolumn -{Cours - Utilisation de Yocto Project - Utilisation avancée} -{ - \begin{itemize} - \item Assignation des variables, opérateurs et surcharge - \item Paquetages: variantes de paquetages - \item Options de la commande bitbake - \end{itemize} -} -{TP 2- Utilisation de NFS et configuration de la compilation} -{ - \begin{itemize} - \item Configurer la carte pour démarrer via NFS - \item Rajouter un paquetage au système de fichiers racine - \item Apprendre à utiliser le mécanisme \code{PREFERRED_PROVIDER} - \item Se familiariser avec les options de la commande bitbake - \end{itemize} -} -\\ -\section{2\textsuperscript{ème} jour - Matin} - -\feagendatwocolumn -{Cours - Écriture de recettes - Fonctionnalités de base} -{ - \begin{itemize} - \item Recettes: vue d'ensemble - \item Organisation d'un fichier de recette - \item Application de patches - \item Exemples de recettes - \end{itemize} -} -{TP 3 - Ajouter la compilation d'une application} -{ - \begin{itemize} - \item Création d'une recette pour {\em nInvaders} - \item Résolution de problèmes liés à la recette - \item Résolution de problèmes liés à la compilation croisée - \item Ajout d'{\em nInvaders} à l'image finale - \end{itemize} -} - -\feagendaonecolumn -{Cours - Écriture de recettes - Fonctionnalités avancées} -{ - \begin{itemize} - \item Extension et redéfinition de recettes - \item Paquetages virtuels - \item Familiarisation avec les classes - \item Inclusion d'exemples avec BitBake - \item Mise au point des recettes - \item Configuration de l'utilisation du réseau par BitBake - \end{itemize} -} - -\section{2\textsuperscript{ème} jour - Après-midi} - -\feagendatwocolumn -{Cours - Layers} -{ - \begin{itemize} - \item Ce que sont les {\em layers} - \item Où trouver les {\em layers} - \item Création d'un {\em layer} - \end{itemize} -} -{TP 4- Écriture d'un layer} -{ - \begin{itemize} - \item Apprendre à écrire un {\em layer} - \item Ajouter le {\em layer} à la compilation - \item Inclure {\em nInvaders} dans le nouveau {\em layer} - \end{itemize} -} - -\section{3\textsuperscript{ème} jour - Matin} - -\feagendaonecolumn -{TP 5 - Étendre une recette} -{ - \begin{itemize} - \item Étendre la recette pour le noyau pour rajouter des patches - \item Configurer le noyau pour compiler le pilote du nunchuk - \item Modifier la recette ninvaders pour rajouter des patches - \item Jouer avec {\em nInvaders} - \end{itemize} -} - -\feagendatwocolumn -{Cours - Écriture d'un BSP} -{ - \begin{itemize} - \item Introduction aux layers BSP - \item Ajout d'une nouvelle machine - \item Configuration du chargeur de démarrage - \item Linux : la classe kernel.bbclass et la recette linux-yocto - \end{itemize} -} -{TP 6 - Création d'une configuration spécifique pour une machine} -{ - \begin{itemize} - \item Créer un nouvelle configuration de machine - \item Compiler une image pour la machine - \end{itemize} -} - -\feagendaonecolumn -{Cours - Layers de distribution} -{ - \begin{itemize} - \item Configuration d'une distribution - \item Layers de distribution - \end{itemize} -} - -\feagendatwocolumn -{Cours - Images} -{ - \begin{itemize} - \item Écriture d'une recette d'image - \item Types d'images - \item Écriture et utilisation de groupes de paquetages - \end{itemize} -} -{TP 7- Création d'une image sur mesure} -{ - \begin{itemize} - \item Rajouter une recette de base pour une image - \item Sélectionner les fonctionnalités et les paquetages de l'image - \item Ajouter un groupe de paquetages sur mesure - \item Ajouter une variante d'image pour le débogage - \end{itemize} -} - -\section{3\textsuperscript{ème} jour - Après-midi} - -\feagendatwocolumn -{Cours - Écriture de recettes - Pour aller plus loin} -{ - \begin{itemize} - \item Le sysroot de chaque recette - \item Utilisation de code Python code dans les méta-données - \item Drapeaux de variables - \item Fonctionnalités de paquetages et PACKAGECONFIG - \item Fonctionnalités conditionnelles - \item Découpage de paquetages - \item Détails sur les dépendances - \end{itemize} -} -{Cours - Licences} -{ - \begin{itemize} - \item Gestion de licences open source - \end{itemize} -} - -\feagendatwocolumn -{Cours - SDK pour le projet Yocto} -{ - \begin{itemize} - \item Objectifs du SDK - \item Compilation et personnalisation d'un SDK - \item Utilisation d'un SDK pour le projet Yocto - \end{itemize} -} -{TP 8 - Développement d'une application au moyen du SDK de Poky} -{ - \begin{itemize} - \item Compilation d'un SDK - \item Utilisation du SDK - \end{itemize} -} - -\feagendatwocolumn -{Cours - Devtool} -{ - \begin{itemize} - \item Présentation devtool - \item Cas d'utilisation de devtool - \end{itemize} -} -{TP 9 - Utilisation de devtool} -{ - \begin{itemize} - \item Création d'une nouvelle recette - \item Modification d'une recette pour ajouter un nouveau patch - \item Mettre à jour une recette pour prendre en charge une nouvelle version - \end{itemize} -} - -\feagendatwocolumn -{Cours - Gestion automatique de layers} -{ - \begin{itemize} - \item Gestion automatique de layers - \end{itemize} -} -{Cours - Gestion de paquetages à l'exécution} -{ - \begin{itemize} - \item Introduction à la gestion de paquetages à l'exécution - \item Configuration de la compilation - \item Configuration d'une serveur de paquetages - \item Configuration de la machine cible - \end{itemize} -} +\onsiteagenda \end{document} - diff --git a/agenda/yocto-online-agenda.tex b/agenda/yocto-online-agenda.tex index 70461fe244..bffbf62fee 100644 --- a/agenda/yocto-online-agenda.tex +++ b/agenda/yocto-online-agenda.tex @@ -13,345 +13,11 @@ \feshowinfo -\feagendatwocolumn -{Hardware platform for practical demos, option \#1} -{ - One of these Discovery Kits from STMicroelectronics: {\bf - STM32MP157A-DK1}, {\bf STM32MP157D-DK1}, {\bf STM32MP157C-DK2} or - {\bf STM32MP157F-DK2} - \begin{itemize} - \item STM32MP157, dual Cortex-A7 processor from STMicroelectronics - \item USB powered - \item 512 MB DDR3L RAM - \item Gigabit Ethernet port - \item 4 USB 2.0 host ports - \item 1 USB-C OTG port - \item 1 Micro SD slot - \item On-board ST-LINK/V2-1 debugger - \item Arduino compatible headers - \item Audio codec, buttons, LEDs - \item LCD touchscreen (DK2 kits only) - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} - \end{center} -} +\showboarditem{stm32mp1} +\showboarditem{beagleboneblack} +\showboarditem{beagleplay} -\feagendatwocolumn -{Hardware platform for practical demos, option \#2} -{ - {\bf BeagleBone Black} or {\bf BeagleBone Black Wireless} board - \begin{itemize} - \item An ARM AM335x (single Cortex-A8) processor from Texas - Instruments - \item USB powered - \item 512 MB of RAM - \item 2 or 4 GB of on-board eMMC storage - \item USB host and device - \item HDMI output - \item 2 x 46 pins headers, to access UARTs, SPI buses, I2C buses - and more. - \item Ethernet or WiFi - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleboneblack-board/beagleboneblack.png} - \end{center} -} - -\feagendatwocolumn -{Hardware platform for practical labs, option \#3} -{ - {\bf BeaglePlay} board - \begin{itemize} - \item Texas Instruments AM625x (4xARM Cortex-A53 CPU) - \item SoC with 3D acceleration, integrated MCU and many other peripherals. - \item 2 GB of RAM - \item 16 GB of on-board eMMC storage - \item USB host and USB device, microSD, HDMI - \item 2.4 and 5 GHz WiFi, Bluetooth and also Ethernet - \item 1 MicroBus Header (SPI, I2C, UART, ...), OLDI and CSI connector. - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleplay-board/beagleplay.png} - \end{center} -} - -\section{Half day 1} - -\feagendaonecolumn -{Lecture - Introduction to embedded Linux build systems} -{ - \begin{itemize} - \item Overview of an embedded Linux system architecture - \item Methods to build a root filesystem image - \item Usefulness of build systems - \end{itemize} -} - -\feagendaonecolumn -{Lecture - Yocto Project and Poky reference system overview} -{ - \begin{itemize} - \item Introduction to the Yocto / OpenEmbedded build system and its lexicon - \item Overview of the Poky reference system - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Using Yocto Project - basics} -{ - \begin{itemize} - \item Setting up the build directory and environment - \item Configuring the build system - \item Building a root filesystem image - \end{itemize} -} -{Demo 1 - First Yocto Project build} -{ - \begin{itemize} - \item Downloading the Poky reference build system - \item Configuring the build system - \item Building a system image - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Using Yocto Project - basics} -{ - \begin{itemize} - \item Organization of the build output - \end{itemize} -} -{Demo 1 - Flashing and booting} -{ - \begin{itemize} - \item Flashing and booting the image on the board - \end{itemize} -} - -\section{Half day 2} - -\feagendatwocolumn -{Lecture - Using Yocto Project - advanced usage} -{ - \begin{itemize} - \item Variable assignment, operators and overrides - \item Package variants and package selection - \item bitbake command line options - \end{itemize} -} -{Demo 2 - Using NFS and configuring the build} -{ - \begin{itemize} - \item Configuring the board to boot over NFS - \item Add a package to the root filesystem - \item Learn how to use the \code{PREFERRED_PROVIDER} mechanism - \item Get familiar with the bitbake command line options - \end{itemize} -} -\\ - -\feagendatwocolumn -{Lecture - Writing recipes - basics} -{ - \begin{itemize} - \item Recipes: overview - \item Recipe file organization - \item Applying patches - \item Recipe examples - \end{itemize} -} -{Demo 3 - Adding an application to the build} -{ - \begin{itemize} - \item Writing a recipe for {\em nInvaders} - \item Troubleshooting the recipe - \item Troubleshooting cross-compilation issues - \item Adding {\em ninvaders} to the final image - \end{itemize} -} - -\feagendaonecolumn -{Lecture - Writing recipes - advanced features} -{ - \begin{itemize} - \item Extending and overriding recipes - \item Virtual packages - \item Learn about classes - \item BitBake file inclusions - \item Debugging recipes - \item Configuring BitBake network usage - \end{itemize} -} - -\section{Half day 3} - -\feagendatwocolumn -{Lecture - Layers} -{ - \begin{itemize} - \item What layers are - \item Where to find layers - \item Creating a layer - \end{itemize} -} -{Demo 4 - Writing a layer} -{ - \begin{itemize} - \item Learn how to write a layer - \item Add the layer to the build - \item Move {\em ninvaders} to the new layer - \end{itemize} -} - -\feagendaonecolumn -{Demo 5 - Extend a recipe} -{ - \begin{itemize} - \item Extend the kernel recipe to add patches - \item Configure the kernel to compile the nunchuk driver - \item Edit the ninvaders recipe to add patches - \item Play {\em nInvaders} - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Writing a BSP} -{ - \begin{itemize} - \item Introduction to BSP layers - \item Adding a new machine - \item Bootloader configuration - \item Linux: the kernel bbclass and the linux-yocto recipe - \end{itemize} -} -{Demo 6 - Create a custom machine configuration} -{ - \begin{itemize} - \item Create a new machine configuration - \item Build an image for the new machine - \end{itemize} -} - -\feagendaonecolumn -{Lecture - Distro layers} -{ - \begin{itemize} - \item Distro configuration - \item Distro layers - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Images} -{ - \begin{itemize} - \item Writing an image recipe - \item Image types - \item Writing and using package groups recipes - \end{itemize} -} -{Demo 7 - Create a custom image} -{ - \begin{itemize} - \item Add a basic image recipe - \item Select the image capabilities and packages - \item Add a custom package group - \item Add an image variant for debugging - \end{itemize} -} - -\section{Half day 4} - -\feagendatwocolumn -{Lecture - Writing recipes - going further} -{ - \begin{itemize} - \item The per-recipe sysroot - \item Using Python code in metadata - \item Variable flags - \item Packages features and PACKAGECONFIG - \item Conditional features - \item Package splitting - \item Dependencies in detail - \end{itemize} -} -{Lecture - Licensing} -{ - \begin{itemize} - \item Managing open source licenses - \end{itemize} -} - -\feagendatwocolumn -{Lecture - The Yocto Project SDK} -{ - \begin{itemize} - \item Goals of the SDK - \item Building and customizing an SDK - \item Using the Yocto Project SDK - \end{itemize} -} -{Demo 8 - Develop your application in the Poky SDK} -{ - \begin{itemize} - \item Building an SDK - \item Using the Yocto Project SDK - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Devtool} -{ - \begin{itemize} - \item About devtool - \item Devtool use cases - \end{itemize} -} -{Demo 9 - Using devtool} -{ - \begin{itemize} - \item Generate a new recipe - \item Modify a recipe to add a new patch - \item Upgrade a recipe to a newer version - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Automating layer management} -{ - \begin{itemize} - \item Automating layer management - \end{itemize} -} -{Lecture - Runtime Package Management} -{ - \begin{itemize} - \item Introduction to runtime package management - \item Build configuration - \item Package server configuration - \item Target configuration - \end{itemize} -} - -\feagendaonecolumn -{Questions and Answers} -{ - \begin{itemize} - \item Questions and answers with the audience about the course topics - \item Extra presentations if time is left, according what most - participants are interested in. - \end{itemize} -} +\onlineagenda \section{Possible extra time} diff --git a/agenda/yocto-online-fr-agenda.tex b/agenda/yocto-online-fr-agenda.tex index c10e763014..605257d8db 100644 --- a/agenda/yocto-online-fr-agenda.tex +++ b/agenda/yocto-online-fr-agenda.tex @@ -13,345 +13,11 @@ \feshowinfo -\feagendatwocolumn -{Plateforme matérielle pour les démonstrations, option \#1} -{ - Une de ces cartes de STMicroelectronics : {\bf - STM32MP157A-DK1}, {\bf STM32MP157D-DK1}, {\bf STM32MP157C-DK2} ou - {\bf STM32MP157F-DK2} - \begin{itemize} - \item Processeur STM32MP157, double Cortex-A7, de STMicroelectronics - \item Alimentée par USB - \item 512 Mo DDR3L RAM - \item Port Gigabit Ethernet port - \item 4 ports hôte USB 2.0 - \item 1 port USB-C OTG - \item 1 connecteur Micro SD - \item Debugger ST-LINK/V2-1 sur la carte - \item Connecteurs compatibles Arduino Uno v3 - \item Codec audio - \item Divers : boutons, LEDs - \item Écran LCD tactile (uniquement sur cartes DK2) - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} - \end{center} -} +\showboarditem{stm32mp1} +\showboarditem{beagleboneblack} +\showboarditem{beagleplay} -\feagendatwocolumn -{Plateforme matérielle pour les démonstrations, option \#2} -{ - Carte {\bf BeagleBone Black} ou {\bf BeagleBone Black Wireless} - \begin{itemize} - \item Un processeur ARM AM335x de Texas Instruments (à base de - Cortex-A8), avec accélération 3D, etc. - \item 512 Mo de RAM - \item 2 ou 4 Go de stockage eMMC - \item USB hôte et device - \item Sortie HDMI - \item Connecteurs à 2 x 46 broches, pour accéder aux UARTs, aux bus - SPI, aux bus I2C, et à d'autres entrées/sorties du processeur. - \item Ethernet ou WiFi - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleboneblack-board/beagleboneblack.png} - \end{center} -} - -\feagendatwocolumn -{Plateforme matérielle pour les travaux pratiques, option \#3} -{ - Carte {\bf BeaglePlay} - \begin{itemize} - \item SoC Texas Instruments AM625x (CPU 4xARM Cortex-A53) - \item SoC avec accélération 3D, MCU intégré et de nombreux autres périphériques. - \item 2 GB de RAM - \item 16 Go de stockage eMMC - \item USB hôte et device, microSD, HDMI - \item WiFi 2.4 and 5 GHz, Bluetooth et aussi Ethernet - \item 1 Header MicroBus (SPI, I2C, UART, ...), connecteurs OLDI et CSI. - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleplay-board/beagleplay.png} - \end{center} -} - -\section{1\textsuperscript{ère} demi-journée} - -\feagendaonecolumn -{Cours - Introduction aux outils de compilation de systèmes Linux embarqué} -{ - \begin{itemize} - \item Vue d'ensemble de l'architecture d'un système Linux embarqué - \item Méthodes pour compiler un système de fichiers - \item Utilité des outils de compilation - \end{itemize} -} - -\feagendaonecolumn -{Cours - Vue d'ensemble de Yocto Project et du système de référence Poky} -{ - \begin{itemize} - \item Présentation de l'outil de compilation Yocto / OpenEmbedded et de sa terminologie. - \item Vue d'ensemble du système de référence Poky - \end{itemize} -} - -\feagendatwocolumn -{Cours - Bases de l'utilisation de Yocto Project} -{ - \begin{itemize} - \item Mise en place du répertoire de travail et de l'environnement - \item Configuration de l'outil de compilation - \item Compilation de l'image d'un système de fichiers racine - \end{itemize} -} -{Démo 1 - 1\textsuperscript{ère} compilation avec Yocto Project} -{ - \begin{itemize} - \item Téléchargement du système de référence Poky - \item Configuration de l'outil de compilation - \item Compilation d'une image système - \end{itemize} -} - -\feagendatwocolumn -{Cours - Utilisation de Yocto Project - Notions de base} -{ - \begin{itemize} - \item Structure des fichiers générés - \end{itemize} -} -{Démo 1 - Flasher et booter} -{ - \begin{itemize} - \item Flasher et booter l'image du système sur la carte - \end{itemize} -} - -\section{2\textsuperscript{ème} demi-journée} - -\feagendatwocolumn -{Cours - Utilisation de Yocto Project - Utilisation avancée} -{ - \begin{itemize} - \item Assignation des variables, opérateurs et surcharge - \item Paquetages: variantes de paquetages - \item Options de la commande bitbake - \end{itemize} -} -{Démo 2 - Utilisation de NFS et configuration de la compilation} -{ - \begin{itemize} - \item Configurer la carte pour démarrer via NFS - \item Rajouter un paquetage au système de fichiers racine - \item Apprendre à utiliser le mécanisme \code{PREFERRED_PROVIDER} - \item Se familiariser avec les options de la commande bitbake - \end{itemize} -} -\\ - -\feagendatwocolumn -{Cours - Écriture de recettes - Fonctionnalités de base} -{ - \begin{itemize} - \item Recettes: vue d'ensemble - \item Organisation d'un fichier de recette - \item Application de patches - \item Exemples de recettes - \end{itemize} -} -{Démo 3 - Ajouter la compilation d'une application} -{ - \begin{itemize} - \item Création d'une recette pour {\em nInvaders} - \item Résolution de problèmes liés à la recette - \item Résolution de problèmes liés à la compilation croisée - \item Ajout d'{\em nInvaders} à l'image finale - \end{itemize} -} - -\feagendaonecolumn -{Cours - Écriture de recettes - Fonctionnalités avancées} -{ - \begin{itemize} - \item Extension et redéfinition de recettes - \item Paquetages virtuels - \item Familiarisation avec les classes - \item Inclusion d'exemples avec BitBake - \item Mise au point des recettes - \item Configuration de l'utilisation du réseau par BitBake - \end{itemize} -} - -\section{3\textsuperscript{ème} demi-journée} - -\feagendatwocolumn -{Cours - Layers} -{ - \begin{itemize} - \item Ce que sont les {\em layers} - \item Où trouver les {\em layers} - \item Création d'un {\em layer} - \end{itemize} -} -{Démo 4 - Écriture d'un layer} -{ - \begin{itemize} - \item Apprendre à écrire un {\em layer} - \item Ajouter le {\em layer} à la compilation - \item Inclure {\em nInvaders} dans le nouveau {\em layer} - \end{itemize} -} - -\feagendaonecolumn -{TP 5 - Étendre une recette} -{ - \begin{itemize} - \item Étendre la recette pour le noyau pour rajouter des patches - \item Configurer le noyau pour compiler le pilote du nunchuk - \item Modifier la recette ninvaders pour rajouter des patches - \item Jouer avec {\em nInvaders} - \end{itemize} -} - -\feagendatwocolumn -{Cours - Écriture d'un BSP} -{ - \begin{itemize} - \item Introduction aux layers BSP - \item Ajout d'une nouvelle machine - \item Configuration du chargeur de démarrage - \item Linux : la classe kernel.bbclass et la recette linux-yocto - \end{itemize} -} -{Démo 6 - Création d'une configuration spécifique pour une machine} -{ - \begin{itemize} - \item Créer un nouvelle configuration de machine - \item Compiler une image pour la machine - \end{itemize} -} - -\feagendaonecolumn -{Cours - Layers de distribution} -{ - \begin{itemize} - \item Configuration d'une distribution - \item Layers de distribution - \end{itemize} -} - -\feagendatwocolumn -{Cours - Images} -{ - \begin{itemize} - \item Écriture d'une recette d'image - \item Types d'images - \item Écriture et utilisation de groupes de paquetages - \end{itemize} -} -{Démo 7 - Création d'une image sur mesure} -{ - \begin{itemize} - \item Rajouter une recette de base pour une image - \item Sélectionner les fonctionnalités et les paquetages de l'image - \item Ajouter un groupe de paquetages sur mesure - \item Ajouter une variante d'image pour le débogage - \end{itemize} -} - -\section{4\textsuperscript{ème} demi-journée} - -\feagendatwocolumn -{Cours - Écriture de recettes - Pour aller plus loin} -{ - \begin{itemize} - \item Le sysroot de chaque recette - \item Utilisation de code Python code dans les méta-données - \item Drapeaux de variables - \item Fonctionnalités de paquetages et PACKAGECONFIG - \item Fonctionnalités conditionnelles - \item Découpage de paquetages - \item Détails sur les dépendances - \end{itemize} -} -{Cours - Licences} -{ - \begin{itemize} - \item Gestion de licences open source - \end{itemize} -} - -\feagendatwocolumn -{Cours - SDK pour le projet Yocto} -{ - \begin{itemize} - \item Objectifs du SDK - \item Compilation et personnalisation d'un SDK - \item Utilisation d'un SDK pour le projet Yocto - \end{itemize} -} -{Démo 8 - Développement d'une application au moyen du SDK de Poky} -{ - \begin{itemize} - \item Compilation d'un SDK - \item Utilisation du SDK - \end{itemize} -} - -\feagendatwocolumn -{Cours - Devtool} -{ - \begin{itemize} - \item Présentation devtool - \item Cas d'utilisation de devtool - \end{itemize} -} -{Démo 9 - Utilisation de devtool} -{ - \begin{itemize} - \item Création d'une nouvelle recette - \item Modification d'une recette pour ajouter un nouveau patch - \item Mettre à jour une recette pour prendre en charge une nouvelle version - \end{itemize} -} - -\feagendatwocolumn -{Cours - Gestion automatique de layers} -{ - \begin{itemize} - \item Gestion automatique de layers - \end{itemize} -} -{Cours - Gestion de paquetages à l'exécution} -{ - \begin{itemize} - \item Introduction à la gestion de paquetages à l'exécution - \item Configuration de la compilation - \item Configuration d'une serveur de paquetages - \item Configuration de la machine cible - \end{itemize} -} - -\feagendaonecolumn -{Questions / réponses} -{ - \begin{itemize} - \item Questions et réponses avec les participants à propos des sujets abordés. - \item Présentations supplémentaires s'il reste du temps, en fonction des demandes - de la majorité des participants. - \end{itemize} -} +\onlineagenda \section{Temps supplémentaire possible} From b75e343152f4b14421908564de1d146a6f34bdd7 Mon Sep 17 00:00:00 2001 From: Thomas Bonnefille Date: Fri, 15 Nov 2024 15:35:46 +0100 Subject: [PATCH 04/18] agenda: move qna section to common.inc As the QnA section can be use in multiple training, this commit move it to the common section. Signed-off-by: Thomas Bonnefille --- agenda/common.inc | 21 +++++++++++++++++++++ agenda/yocto.inc | 20 -------------------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/agenda/common.inc b/agenda/common.inc index fd9f6047a7..a9e79f8d16 100644 --- a/agenda/common.inc +++ b/agenda/common.inc @@ -145,6 +145,27 @@ \end{center} } +\defagendaitem +{qna} +{misc} +{Questions and Answers} +{ + \begin{itemize} + \item Questions and answers with the audience about the course topics + \item Extra presentations if time is left, according what most + participants are interested in. + \end{itemize} +} +{Questions / réponses} +{ + \begin{itemize} + \item Questions et réponses avec les participants à propos des sujets abordés. + \item Présentations supplémentaires s'il reste du temps, en fonction des demandes + de la majorité des participants. + \end{itemize} +} + + \defboard {beagleboneblack} {Hardware platform for practical labs} diff --git a/agenda/yocto.inc b/agenda/yocto.inc index b9c10d6464..0828bf42c9 100644 --- a/agenda/yocto.inc +++ b/agenda/yocto.inc @@ -646,26 +646,6 @@ \end{itemize} } -\defagendaitem -{qna} -{misc} -{Questions and Answers} -{ - \begin{itemize} - \item Questions and answers with the audience about the course topics - \item Extra presentations if time is left, according what most - participants are interested in. - \end{itemize} -} -{Questions / réponses} -{ - \begin{itemize} - \item Questions et réponses avec les participants à propos des sujets abordés. - \item Présentations supplémentaires s'il reste du temps, en fonction des demandes - de la majorité des participants. - \end{itemize} -} - \def \onlineagenda { \showagendaday{1} From 028dae93d61e0a0bbddce0c6d2902358cc9a46e5 Mon Sep 17 00:00:00 2001 From: Thomas Bonnefille Date: Fri, 15 Nov 2024 15:41:48 +0100 Subject: [PATCH 05/18] agenda: define different section for the embedded linux course Signed-off-by: Thomas Bonnefille --- agenda/embedded-linux.inc | 844 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 844 insertions(+) diff --git a/agenda/embedded-linux.inc b/agenda/embedded-linux.inc index a55c68aa7a..3a25959352 100644 --- a/agenda/embedded-linux.inc +++ b/agenda/embedded-linux.inc @@ -1,4 +1,6 @@ \usepackage{ifthen} +\input{agenda/common.inc} + \def \training{embedded-linux} % Title @@ -120,3 +122,845 @@ % Time ratio \def \onsitelecturetimeratio{50} \def \onsitelabtimeratio{50} + +% Agenda items + + +\defagendaitem +{intro} +{lecture} +{Introduction to embedded Linux} +{ + \begin{itemize} + \item Advantages of Linux versus traditional embedded operating + systems. + \item Typical hardware platforms used to run embedded Linux systems. + \item Overall architecture of embedded Linux systems: overview of + the major software components. + \item Development environment for Embedded Linux development. + \end{itemize} +} +{Introduction à Linux embarqué} +{ + \begin{itemize} + \item Introduction au Logiciel Libre + \item Atouts du Logiciel Libre pour les systèmes embarqués + \item Exemples de systèmes embarqués fonctionnant sous Linux + \item Besoins en CPU, RAM et stockage + \item Choix d'une plateforme matérielle + \item Architecture du système : composants principaux + \item Différentes tâches pour développer un système embarqué + \end{itemize} +} +\defagendaitem +{crosscompile} +{lecture} +{Cross-compiling toolchain and C library} +{ + \begin{itemize} + \item What's inside a cross-compiling toolchain + \item Choosing the target C library + \item What's inside the C library + \item Ready to use cross-compiling toolchains + \item Building a cross-compiling toolchain with automated tools. + \end{itemize} +} +{Chaîne de compilation croisée et bibliothèque standard C} +{ + \begin{itemize} + \item Les composants d'une chaîne de compilation croisée. + \item Choisir une bibliothèque standard C. + \item Le contenu de la bibliothèque standard C. + \item Les chaînes de compilation croisée prêtes à l'emploi. + \item La construction automatisée d'une chaîne de compilation croisée. + \end{itemize} +} +\defagendaitem +{crosscompile} +{lab} +{Cross compiling toolchain} +{ + \begin{itemize} + \item Getting and configuring Crosstool-NG + \item Executing it to build a custom cross-compilation toolchain + \item Exploring the contents of the toolchain + \end{itemize} +} +{Chaîne de compilation croisée} +{ + \begin{itemize} + \item Configuration de Crosstool-NG + \item Exécution pour construire une chaîne de compilation croisée + personnalisée reposant sur la uClibc. + \item Exploration du contenu d'une chaîne de compilation croisée + \end{itemize} +} +\defagendaitem +{bootprocess} +{lecture} +{Boot process, firmware, bootloaders} +{ + \begin{itemize} + \item Booting process of embedded platforms, focus on the {\em x86} + and {\em ARM} architectures + \item Boot process and bootloaders on {\em x86} platforms (legacy + and UEFI) + \item Boot process on ARM platforms: ROM code, bootloaders, {\em ARM + Trusted Firmware} + \item Focus on U-Boot: configuration, installation, and usage. + \item U-Boot commands, U-Boot environment, U-Boot scripts, U-Boot + generic distro boot mechanism + \end{itemize} +} +{Processus de démarrage, firmware, chargeurs de démarrage} +{ + \begin{itemize} + \item Processus de démarrage des systèmes embarqués, focus sur les + architectures {\em x86} et {\em ARM} + \item Processus de démarrage et chargeurs de démarrage sur + plateformes {\em x86} (legacy et UEFI) + \item Processus de démarrage sur plateformes {\em ARM} : code en ROM, + chargeurs de démarrage, {\em ARM Trusted Firmware} + \item Focus sur U-Boot : configuration, installation et utilisation + \item Commandes U-Boot, environnement U-Boot, scripts U-Boot, + mécanisme {\em distro boot command} de U-Boot + \end{itemize} +} +\defagendaitem +{uboot} +{lab} +{Bootloader and U-boot} +{ + \begin{itemize} + \item Set up serial communication with the board. + \item Configure, compile and install U-Boot for the target hardware. + \item Only on STM32MP1: configure, compile and install Trusted Firmware-A + \item Become familiar with U-Boot environment and commands. + \item Set up TFTP communication with the board. Use TFTP U-Boot + commands. + \end{itemize} + + \vspace{0.5cm} + {\em Using the embedded hardware platform.} +} +{U-Boot} +{ + \begin{itemize} + \item Mise en place de la communication série avec la carte. + \item Configuration, compilation et installation d'U-Boot sur la + plateforme embarquée. + \item Seulement sur STM32MP1 : Configuration, compilation et + installation de Trusted Firmware-A sur la plateforme embarquée. + \item Familiarisation avec l'environnement et les commandes + d'U-Boot. + \item Mise en place de la communication TFTP avec la carte. + Utilisation des commandes TFTP d'U-Boot. + \end{itemize} + + \vspace{0.5cm} + {\em Mise en oeuvre sur la plateforme embarquée.} +} +\defagendaitem +{kernel} +{lecture} +{Linux kernel} +{ + \begin{itemize} + \item Role and general architecture of the Linux kernel + \item Separation between kernel and user-space, and interfaces + between user-space and the Linux kernel + \item Understanding Linux kernel versions: choosing between + vendor-provided kernel and upstream kernel, {\em Long Term + Support} versions + \item Getting the Linux kernel source code + \end{itemize} +} +{Noyau Linux} +{ + \begin{itemize} + \item Rôle et architecture générale du noyau Linux. + \item Séparation entre noyau et espace utilisateur, interfaces entre + l'espace utilisateur et le noyau + \item Comprendre les différentes versions du noyau Linux : choix + entre versions proposées par les fabricants et la version {\em + upstream}, versions {\em Long Term Support} + \item Récupérer les sources du noyau Linux + \end{itemize} +} +\defagendaitem +{fetchkernel} +{lab} +{Fetching Linux kernel sources} +{ + \begin{itemize} + \item Clone the mainline Linux tree + \item Accessing stable releases + \end{itemize} +} +{Récupération des sources du noyau Linux} +{ + \begin{itemize} + \item Clonage du dépôt git officiel de Linux + \item Accès aux versions stables + \end{itemize} +} +\defagendaitem +{configurekernel} +{lecture} +{Configuring, compiling and booting the Linux kernel} +{ + \begin{itemize} + \item Configuring the Linux kernel: ready-made configuration files, + configuration interfaces + \item Concept of {\em Device Tree} + \item Cross-compiling the Linux kernel + \item Study of the generated files and their role + \item Installing and booting the Linux kernel + \item The Linux kernel command line + \end{itemize} +} +{Configuration, compilation et démarrage du Noyau Linux} +{ + \begin{itemize} + \item Configuration du noyau Linux : configuration pré-définies, + interfaces de configuration + \item Concept de {\em Device Tree} + \item Cross-compilation du noyau Linux + \item Rôle des fichiers résultants de la compilation du noyau Linux + \item Installation et démarrage du noyau Linux + \item La ligne de commande du noyau Linux + \end{itemize} +} +\defagendaitem +{compilekernel} +{lab} +{Kernel cross-compiling and booting} +{ + \begin{itemize} + \item Configuring the Linux kernel and cross-compiling it for the + embedded hardware platform. + \item Downloading your kernel on the board through U-boot's TFTP + client. + \item Booting your kernel. + \item Automating the kernel boot process with U-Boot scripts. + \end{itemize} + + \vspace{0.5cm} + {\em Using the embedded hardware platform} +} +{Compilation croisée du noyau et démarrage sur la carte} +{ + \begin{itemize} + \item Configuration du noyau Linux et compilation croisée pour la + plateforme embarquée. + \item Téléchargement du noyau en utilisant le client TFTP d'U-Boot. + \item Démarrage du noyau depuis la RAM. + \item Automatisation du démarrage du noyau avec des scripts U-Boot. + \end{itemize} + + \vspace{0.5cm} + {\em Mise en oeuvre sur la plateforme embarquée.} +} +\defagendaitem +{rootfs} +{lecture} +{Root filesystem in Linux} +{ + \begin{itemize} + \item Filesystems in Linux. + \item Role and organization of the root filesystem. + \item Location of the root filesystem: on storage, in memory, + from the network. + \item Device files, virtual filesystems. + \item Contents of a typical root filesystem. + \end{itemize} +} +{Système de fichier racine} +{ + \begin{itemize} + \item Les systèmes de fichiers dans Linux. + \item Rôle et organisation du système de fichiers racine. + \item Localisation de ce système de fichiers : sur espace + de stockage, en mémoire, sur le réseau. + \item Les fichiers device, les systèmes de fichiers virtuels. + \item Contenu type d'un système de fichiers racine. + \end{itemize} +} +\defagendaitem +{busybox} +{lecture} +{BusyBox} +{ + \begin{itemize} + \item Detailed overview. Detailed features. + \item Configuration, compiling and deploying. + \end{itemize} +} +{BusyBox} +{ + \begin{itemize} + \item Présentation de BusyBox. Intérêt pour les systèmes embarqués. + \item Configuration, compilation et installation. + \end{itemize} +} +\defagendaitem +{busybox} +{lab} +{Tiny root filesystem built from scratch with BusyBox} +{ + \begin{itemize} + \item Setting up a kernel to boot your system on a workstation + directory exported by NFS + \item Passing kernel command line parameters to boot on NFS + \item Creating the full root filesystem from scratch. + Populating it with BusyBox based utilities. + \item System startup using BusyBox \code{init} + \item Using the BusyBox HTTP server. + \item Controlling the target from a web browser on the PC host. + \item Setting up shared libraries on the target and compiling + a sample executable. + \end{itemize} + + \vspace{0.5cm} + {\em Using the embedded hardware platform} +} +{Construction d'un minuscule système Linux embarqué avec BusyBox} +{ + \begin{itemize} + \item Construction à partir de zéro d'un système de fichiers racine + contenant un système Linux embarqué + \item Mise en place d'un noyau permettant de démarrer le système + depuis un répertoire mis à disposition par la station de + développement au travers de NFS. + \item Passage de paramètres au noyau pour le démarrage avec NFS. + \item Création complète du système de fichiers à partir de zéro : + installation de BusyBox, création des fichiers spéciaux pour les + périphériques. + \item Initialisation du système en utilisant le programme init de BusyBox. + \item Utilisation du serveur HTTP de BusyBox. + \item Contrôle de la cible à partir d'un navigateur Web sur la + station de développement. + \item Mise en place des bibliothèques partagées sur la cible et + développement d'une application d'exemple. + \end{itemize} + + \vspace{0.5cm} + {\em Mise en oeuvre sur la plateforme embarquée.} +} +\defagendaitem +{accessinghardware} +{lecture} +{Accessing hardware devices} +{ + \begin{itemize} + \item How to access hardware on popular busses: USB, SPI, I2C, PCI + \item Usage of kernel drivers and direct user-space access + \item The {\em Device Tree} syntax, and how to use it to describe + additional devices and pin-muxing + \item Finding Linux kernel drivers for specific hardware devices + \item Using kernel modules + \item Hardware access using \code{/dev} and \code{/sys} + \item User-space interfaces for the most common hardware devices: + storage, network, GPIO, LEDs, audio, graphics, video + \end{itemize} +} +{Accès aux périphériques matériels} +{ + \begin{itemize} + \item Comment accéder au matériel sur les principaux bus : USB, SPI, + I2C, PCI + \item Utilisation de pilotes de périphériques dans le noyau ou accès + depuis l'espace utilisateur + \item La syntaxe du {\em Device Tree}, et comment l'utilisation pour + décrire des périphériques additionnels et le multiplexage des + signaux. + \item Trouver des pilotes de périphériques dans le noyau Linux pour + des périphériques matériels. + \item Utilisation de modules noyau + \item Accès au matériel par \code{/dev} ou \code{/sys} + \item Interfaces en espace utilisateur pour les périphériques les + plus courants : stockage, réseau, GPIO, LEDs, audio, affichage, + video + \end{itemize} +} +\defagendaitem +{accessinghardware} +{lab} +{Accessing hardware devices} +{ + \begin{itemize} + \item Exploring the contents of \code{/dev} and \code{/sys} and the + devices available on the embedded hardware platform. + \item Using GPIOs and LEDs. + \item Modifying the Device Tree to control pin multiplexing and + to declare an I2C-connected joystick. + \item Adding support for a USB audio card using Linux kernel modules + \item Adding support for the I2C-connected joystick through + an out-of-tree module. + \end{itemize} + + \vspace{0.5cm} + {\em Using the embedded hardware platform} +} +{Accès aux périphériques matériels} +{ + \begin{itemize} + \item Exploration du contenu de \code{/dev} et \code{/sys}, et des + périphériques disponibles sur la plateforme embarquée. + \item Utilisation de GPIOs et de LEDs. + \item Modification du Device Tree pour controler le multiplexage + de broches et déclarer un joystick connecté sur I2C. + \item Ajout du support pour une carte son USB en utilisant des + modules noyau. + \item Prise en charge du joystick I2C par la compilation et + l'installation d'un module noyau externe. + \end{itemize} + + \vspace{0.5cm} + {\em Mise en oeuvre sur la plateforme embarquée.} +} +\defagendaitem +{blockfs} +{lecture} +{Block filesystems} +{ + \begin{itemize} + \item Accessing and partitioning block devices. + \item Filesystems for block devices. + \item Usefulness of journaled filesystems. + \item Read-only block filesystems. + \item RAM filesystems. + \item How to create each of these filesystems. + \item Suggestions for embedded systems. + \end{itemize} +} +{Système de fichiers bloc} +{ + \begin{itemize} + \item Accéder et partitionner des périphériques bloc. + \item Systèmes de fichiers pour périphériques bloc. + \item Utilité des systèmes de fichiers journalisés. + \item Systèmes de fichiers en lecture seule. + \item Systèmes de fichiers en RAM. + \item Création de chacun de ces systèmes de fichiers. + \item Suggestions pour les systèmes embarqués. + \end{itemize} +} +\defagendaitem +{blockfs} +{lab} +{Block filesystems} +{ + \begin{itemize} + \item Creating partitions on your SD card + \item Booting a system with a mix of filesystems: {\em SquashFS} for + the root filesystem, {\em ext4} for system data, and {\em + tmpfs} for temporary system files. + \end{itemize} + + \vspace{0.5cm} + {\em Using the embedded hardware platform} +} +{Système de fichiers bloc} +{ + \begin{itemize} + \item Créer des partitions sur le stockage bloc. + \item Démarrage d'un système avec un assemblage de plusieurs systèmes + de fichiers : SquashFS pour le système de fichier racine, ext4 pour + les données du système et tmpfs pour les fichiers temporaires. + \end{itemize} + \vspace{0.5cm} + {\em Mise en oeuvre sur la plateforme embarquée.} +} +\defagendaitem +{flashfs} +{lecture} +{Flash filesystems} +{ + \begin{itemize} + \item The Memory Technology Devices (MTD) filesystem. + \item Filesystems for MTD storage: JFFS2, Yaffs2, UBIFS. + \item Kernel configuration options + \item MTD storage partitions. + \item Focus on today's best solution, UBI and UBIFS: + preparing, flashing and using UBI images. + \end{itemize} + + \vspace{0.5cm} + + {\em Note: as the embedded hardware platform used for the labs does + not have any flash-based storage, this lecture will not be + illustrated with a corresponding practical lab.} +} +{Système de fichiers pour flash} +{ + \begin{itemize} + \item Le sous-système Memory Technology Devices du noyau Linux. + \item Les systèmes de fichiers pour le stockage MTD : JFFS2, YAFFS2, + UBIFS. + \item Options de configuration du noyau. + \item Partitions MTD. + \item Étude en détail de UBI et UBIFS : préparation, flashage et mise + en oeuvre d'images UBI. + \end{itemize} + + \vspace{0.5cm} + + {\em Note : la plateforme embarquée utilisée pour les labs ne + comportant pas de mémoire flash NAND en accès direct, cette partie + du cours ne sera pas illustrée avec un TP correspondant.} +} +\defagendaitem +{crosscompileapp} +{lecture} +{Cross-compiling user-space libraries and applications} +{ + \begin{itemize} + \item Configuring, cross-compiling and installing applications and + libraries. + \item Concept of build system, and overview of a few common build + systems used by open-source projects: Makefile, {\em autotools}, + {\em CMake}, {\em meson} + \item Overview of the common issues encountered when + cross-compiling. + \end{itemize} +} +{Cross-compilation de bibliothèques et d'applications espace utilisateur} +{ + \begin{itemize} + \item Configuration, compilation croisée et installation + d'applications et de bibliothèques + \item Concept de {\em build system}, et aperçu de quelques {\em + build systems} courants utilisés dans les projets open-source : + {\em Makefile}, {\em autotools}, {\em CMake}, {\em meson} + \item Aperçu des problématiques courantes rencontrées lors de la + compilation croisée + \end{itemize} +} +\defagendaitem +{crosscompileapp} +{lab} +{Cross-compiling applications and libraries} +{ + \begin{itemize} + \item Manual cross-compilation of several open-source libraries and + applications for an embedded platform. + \item Learning about common pitfalls and issues, and their + solutions. + \item This includes compiling {\em alsa-utils} package, + and using its \code{speaker-test} program to test that + audio works on the target. + \end{itemize} + + \vspace{0.5cm} + {\em Using the embedded hardware platform} +} +{Compilation croisée de bibliothèques et d'applications} +{ + \begin{itemize} + \item Compilation croisée manuelle de plusieurs bibliothèques et + applications open-source pour une plateforme embarquée. + \item Apprentissage des principales techniques et des problèmes + principaux. + \item Cela inclut la compilation du composant {\em alsa-utils}, + et l'utilisation de son programme \code{speaker-test} pour + vérifier que l'audio fonctionne sur la cible. + \end{itemize} + + \vspace{0.5cm} + {\em Mise en oeuvre sur la plateforme embarquée.} +} +\defagendaitem +{buildsystem} +{lecture} +{Embedded system building tools} +{ + \begin{itemize} + \item Approaches for building embedded Linux systems: build systems + and binary distributions + \item Principle of {\em build systems}, overview of Yocto + Project/OpenEmbedded and Buildroot. + \item Principle of {\em binary distributions} and useful tools, + focus on Debian/Ubuntu + \item Specialized software frameworks/distributions: Tizen, AGL, + Android + \end{itemize} +} +{Outils de construction de systèmes} +{ + \begin{itemize} + \item Les différentes approches pour construire un système Linux + embarqué : {\em build systems} et distributions binaires + \item Principe d'un {\em build system}, aperçu de Yocto + Project/OpenEmbedded et de Buildroot + \item Principe d'une {\em distribution binaire} et outils associés, + focus sur Debian et Ubuntu + \item Piles logicielles standards : Tizen, AGL, Android + \end{itemize} +} +\defagendaitem +{buildroot} +{lab} +{System build with Buildroot} +{ + \begin{itemize} + \item Using Buildroot to rebuild the same basic system + plus a sound playing server ({\em MPD}) and a + client to control it ({\em mpc}). + \item Driving music playback, directly from the target, + and then remotely through an MPD client on the + host machine. + \item Analyzing dependencies between packages. + \end{itemize} + + \vspace{0.5cm} + {\em Using the embedded hardware platform} +} +{Construction d'un système avec Buildroot} +{ + \begin{itemize} + \item Utilisation de Buildroot pour construire de façon automatisée + le même système de base que dans le TP précédent, en y rajoutant + un serveur pour jouer des bandes sonores ({\em MPD}) ainsi + qu'un client pour piloter ce serveur ({\em mpc}). + \item Contrôle de la lecture audio, directement depuis la + cible, puis depuis un client MPD sur le PC de développement. + \item Analyse des dépendences entre les différents composants + du système. + \end{itemize} + + \vspace{0.5cm} + {\em Mise en oeuvre sur la plateforme embarquée.} +} +\defagendaitem +{license} +{lecture} +{Open source licenses and compliance} +{ + \begin{itemize} + \item Presentation of the most important open-source licenses: GPL, + LGPL, MIT, BSD, Apache, etc. + \item Concept of {\em copyleft} licenses + \item Differences between (L)GPL version 2 and 3 + \item Compliance with open-source licenses: best practices + \end{itemize} +} +{Licences open-source et mise en conformité} +{ + \begin{itemize} + \item Présentation des principales licenses open-source : GPL, LGPL, + MIT, BSD, Apache, etc. + \item Concept de {\em copyleft} dans les licences open-source + \item Différence entre (L)GPL version 2 et 3 + \item Mise en conformité avec les licences open-source : bonnes + pratiques + \end{itemize} +} +\defagendaitem +{opensourcelinuxsoftwarestacks} +{lecture} +{Overview of major embedded Linux software stacks} +{ + \begin{itemize} + \item \code{systemd} as an {\em init} system + \item Hardware management with {\em udev} + \item Inter-process communication with {\em D-Bus} + \item The graphics software stack: DRM/KMS, X.org, Wayland, Qt, Gtk, + OpenGL + \item The multimedia software stack: Video4Linux, GStreamer, + Pulseaudio, Pipewire + \end{itemize} +} +{Aperçu des stack logicielles open-source majeures pour Linux embarqué} +{ + \begin{itemize} + \item \code{systemd} comme système {\em init} + \item Gestion du matériel avec {\em udev} + \item Communication inter-processus avec {\em D-Bus} + \item La stack logicielle pour le graphique : DRM/KMS, X.org, + Wayland, Qt, Gtk, OpenGL + \item La stack logicielle pour le multimédia : Video4Linux, + GStreamer, Pulseaudio, Pipewire + \end{itemize} +} +\defagendaitem +{integration} +{lab} +{Integration of additional software stacks} +{ + \begin{itemize} + \item Integration of {\em systemd} as an init system + \item Use {\em udev} built in {\em systemd} for automatic module + loading + \end{itemize} + + \vspace{0.5cm} + {\em Using the embedded hardware platform} +} +{Intégration de stack logicielles additionnelles} +{ + \begin{itemize} + \item Intégration de {\em systemd} comme système d'init + \item Utilisation de {\em udev} pour le chargement automatique de + modules + \end{itemize} + + \vspace{0.5cm} + {\em Mise en oeuvre sur la plateforme embarquée.} +} +\defagendaitem +{debugging} +{lecture} +{Application development and debugging} +{ + \begin{itemize} + \item Programming languages and libraries available. + \item Build system for your application, an overview of {\em CMake} + and {\em meson} + \item The {\em gdb} debugger: remote debugging with {\em gdbserver}, + post-mortem debugging with \code{core} files + \item Performance analysis, tracing and profiling tools, memory + checkers: \code{strace}, \code{ltrace}, \code{perf}, + \code{valgrind} + \end{itemize} +} +{Développement et déboguage d'application} +{ + \begin{itemize} + \item Langages de programmations et bibliothèques disponibles. + \item {\em Build system} pour votre application, un aperçu de {\em + CMake} et {\em Meson} + \item Le débogueur {\em gdb} : déboguage d'applications à distance + avec gdb et gdbserver, analyse post-mortem d'une application. + \item Analyse de performance, outils de {\em tracing} et {\em + profiling}, analyseurs mémoire : \code{strace}, \code{ltrace}, + \code{perf}, \code{valgrind} + \end{itemize} +} +\defagendaitem +{debugging} +{lab} +{Application development and debugging} +{ + \begin{itemize} + \item Creating an application that uses an I2C-connected joystick to + control an audio player. + \item Setting up an IDE to develop and remotely debug an + application. + \item Using {\em strace}, {\em ltrace}, {\em gdbserver} and {\em + perf} to debug/investigate buggy applications on the embedded + board. + \end{itemize} + + \vspace{0.5cm} + {\em Using the embedded hardware platform} +} +{Développement et déboguage d'application} +{ + \begin{itemize} + \item Création d'une application qui utilise un joystick connecté + sur I2C pour contrôler un player audio. + \item Mise en place d'un IDE pour le développement et le déboguage + d'une application. + \item Utilisation de {\em strace}, {\em ltrace}, {\em gdbserver} et + {\em perf} pour déboguer/investiguer des applications + problématiques sur la plateforme embarquée. + \end{itemize} + {\em Mise en oeuvre sur la plateforme embarquée.} +} +\defagendaitem +{resources} +{lecture} +{Useful resources} +{ + \begin{itemize} + \item Books about embedded Linux and system programming + \item Useful online resources + \item International conferences + \end{itemize} +} +{Ressources utiles} +{ + \begin{itemize} + \item Livres sur Linux embarqué et la programmation système + \item Ressources sur Internet + \item Conférences internationales + \end{itemize} +} + +\def \onlineagenda { + \showagendaday{1} + \showagendaitem{intro}{lecture} + \showagendaitem{crosscompile}{lecture} + \showagendaitem{crosscompile}{lab} + \showagendaitem{bootprocess}{lecture} + \showagendaday{2} + \showagendaitem{uboot}{lab} + \showagendaitem{kernel}{lecture} + \showagendaitem{fetchkernel}{lab} + \showagendaitem{configurekernel}{lecture} + \showagendaitem{compilekernel}{lab} + \showagendaday{3} + \showagendaitem{rootfs}{lecture} + \showagendaitem{busybox}{lecture} + \showagendaitem{busybox}{lab} + \showagendaday{4} + \showagendaitem{accessinghardware}{lecture} + \showagendaitem{accessinghardware}{lab} + \showagendaitem{blockfs}{lecture} + \showagendaitem{blockfs}{lab} + \showagendaday{5} + \showagendaitem{flashfs}{lecture} + \showagendaitem{crosscompileapp}{lecture} + \showagendaitem{crosscompileapp}{lab} + \showagendaday{6} + \showagendaitem{buildsystem}{lecture} + \showagendaitem{buildroot}{lab} + \showagendaitem{license}{lecture} + \showagendaitem{opensourcelinuxsoftwarestacks}{lecture} + \showagendaday{7} + \showagendaitem{integration}{lab} + \showagendaitem{debugging}{lecture} + \showagendaitem{debugging}{lab} + \showagendaitem{resources}{lecture} +} + +\def \onsiteagenda { + \showagendaday{1} + \showagendaitem{intro}{lecture} + \showagendaitem{crosscompile}{lecture} + \showagendaitem{crosscompile}{lab} + \showagendaday{2} + \showagendaitem{bootprocess}{lecture} + \showagendaitem{uboot}{lab} + \showagendaday{3} + \showagendaitem{kernel}{lecture} + \showagendaitem{fetchkernel}{lab} + \showagendaitem{configurekernel}{lecture} + \showagendaitem{compilekernel}{lab} + \showagendaday{4} + \showagendaitem{rootfs}{lecture} + \showagendaitem{busybox}{lecture} + \showagendaitem{busybox}{lab} + \showagendaday{5} + \showagendaitem{accessinghardware}{lecture} + \showagendaitem{accessinghardware}{lab} + \showagendaday{6} + \showagendaitem{blockfs}{lecture} + \showagendaitem{blockfs}{lab} + \showagendaitem{flashfs}{lecture} + \showagendaday{7} + \showagendaitem{crosscompileapp}{lecture} + \showagendaitem{crosscompileapp}{lab} + \showagendaday{8} + \showagendaitem{buildsystem}{lecture} + \showagendaitem{buildroot}{lab} + \showagendaitem{license}{lecture} + \showagendaday{9} + \showagendaitem{opensourcelinuxsoftwarestacks}{lecture} + \showagendaitem{integration}{lab} + \showagendaday{10} + \showagendaitem{debugging}{lecture} + \showagendaitem{debugging}{lab} + \showagendaitem{resources}{lecture} +} From 29c41686eb80e08430bd2acfced0b41cc8a593a7 Mon Sep 17 00:00:00 2001 From: Thomas Bonnefille Date: Fri, 15 Nov 2024 15:42:34 +0100 Subject: [PATCH 06/18] agenda: use commands to refactor the embedded linux agenda Signed-off-by: Thomas Bonnefille --- agenda/embedded-linux-agenda.tex | 459 +------------------- agenda/embedded-linux-fr-agenda.tex | 475 +-------------------- agenda/embedded-linux-online-agenda.tex | 457 +------------------- agenda/embedded-linux-online-fr-agenda.tex | 473 +------------------- 4 files changed, 16 insertions(+), 1848 deletions(-) diff --git a/agenda/embedded-linux-agenda.tex b/agenda/embedded-linux-agenda.tex index 1a856fb8c9..ec36124d2d 100644 --- a/agenda/embedded-linux-agenda.tex +++ b/agenda/embedded-linux-agenda.tex @@ -13,461 +13,10 @@ \feshowinfo -\feagendatwocolumn -{Hardware platform for practical labs, option \#1} -{ - One of these Discovery Kits from STMicroelectronics: {\bf - STM32MP157A-DK1}, {\bf STM32MP157D-DK1}, {\bf STM32MP157C-DK2} or - {\bf STM32MP157F-DK2} - \begin{itemize} - \item STM32MP157, dual Cortex-A7 processor from STMicroelectronics - \item USB powered - \item 512 MB DDR3L RAM - \item Gigabit Ethernet port - \item 4 USB 2.0 host ports - \item 1 USB-C OTG port - \item 1 Micro SD slot - \item On-board ST-LINK/V2-1 debugger - \item Arduino compatible headers - \item Audio codec, buttons, LEDs - \item LCD touchscreen (DK2 kits only) - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} - \end{center} -} +\showboarditem{stm32mp1} +\showboarditem{beagleboneblack} +\showboarditem{beagleplay} -\feagendatwocolumn -{Hardware platform for practical labs, option \#2} -{ - {\bf BeagleBone Black} or {\bf BeagleBone Black Wireless} board - \begin{itemize} - \item An ARM AM335x (single Cortex-A8) processor from Texas - Instruments - \item USB powered - \item 512 MB of RAM - \item 2 or 4 GB of on-board eMMC storage - \item USB host and device - \item HDMI output - \item 2 x 46 pins headers, to access UARTs, SPI buses, I2C buses - and more. - \item Ethernet or WiFi - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleboneblack-board/beagleboneblack.png} - \end{center} -} - -\feagendatwocolumn -{Hardware platform for practical labs, option \#3} -{ - {\bf BeaglePlay} board - \begin{itemize} - \item Texas Instruments AM625x (4xARM Cortex-A53 CPU) - \item SoC with 3D acceleration, integrated MCU and many other peripherals. - \item 2 GB of RAM - \item 16 GB of on-board eMMC storage - \item USB host and USB device, microSD, HDMI - \item 2.4 and 5 GHz WiFi, Bluetooth and also Ethernet - \item 1 MicroBus Header (SPI, I2C, UART, ...), OLDI and CSI connector. - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleplay-board/beagleplay.png} - \end{center} -} - -\section{Day 1 - Morning} - -\feagendaonecolumn -{Lecture - Introduction to embedded Linux} -{ - \begin{itemize} - \item Advantages of Linux versus traditional embedded operating - systems. - \item Typical hardware platforms used to run embedded Linux systems. - \item Overall architecture of embedded Linux systems: overview of - the major software components. - \item Development environment for Embedded Linux development. - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Cross-compiling toolchain and C library} -{ - \begin{itemize} - \item What's inside a cross-compiling toolchain - \item Choosing the target C library - \item What's inside the C library - \item Ready to use cross-compiling toolchains - \item Building a cross-compiling toolchain with automated tools. - \end{itemize} -} -{Lab - Cross compiling toolchain} -{ - \begin{itemize} - \item Getting and configuring Crosstool-NG - \item Executing it to build a custom cross-compilation toolchain - \item Exploring the contents of the toolchain - \end{itemize} -} - -\section{Day 1 - Afternoon} - -\feagendatwocolumn -{Lecture - Boot process, firmware, bootloaders} -{ - \begin{itemize} - \item Booting process of embedded platforms, focus on the {\em x86} - and {\em ARM} architectures - \item Boot process and bootloaders on {\em x86} platforms (legacy - and UEFI) - \item Boot process on ARM platforms: ROM code, bootloaders, {\em ARM - Trusted Firmware} - \item Focus on U-Boot: configuration, installation, and usage. - \item U-Boot commands, U-Boot environment, U-Boot scripts, U-Boot - generic distro boot mechanism - \end{itemize} -} -{Lab - Bootloader and U-boot} -{ - \begin{itemize} - \item Set up serial communication with the board. - \item Configure, compile and install U-Boot for the target hardware. - \item Only on STM32MP1: configure, compile and install Trusted Firmware-A - \item Become familiar with U-Boot environment and commands. - \item Set up TFTP communication with the board. Use TFTP U-Boot - commands. - \end{itemize} - - \vspace{0.5cm} - {\em Using the embedded hardware platform.} -} - -\section{Day 2 - Morning} - -\feagendatwocolumn -{Lecture - Linux kernel} -{ - \begin{itemize} - \item Role and general architecture of the Linux kernel - \item Separation between kernel and user-space, and interfaces - between user-space and the Linux kernel - \item Understanding Linux kernel versions: choosing between - vendor-provided kernel and upstream kernel, {\em Long Term - Support} versions - \item Getting the Linux kernel source code - \end{itemize} -} -{Lab - Fetching Linux kernel sources} -{ - \begin{itemize} - \item Clone the mainline Linux tree - \item Accessing stable releases - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Configuring, compiling and booting the Linux kernel} -{ - \begin{itemize} - \item Configuring the Linux kernel: ready-made configuration files, - configuration interfaces - \item Concept of {\em Device Tree} - \item Cross-compiling the Linux kernel - \item Study of the generated files and their role - \item Installing and booting the Linux kernel - \item The Linux kernel command line - \end{itemize} -} -{Lab - Kernel cross-compiling and booting} -{ - \begin{itemize} - \item Configuring the Linux kernel and cross-compiling it for the - embedded hardware platform. - \item Downloading your kernel on the board through U-boot's TFTP - client. - \item Booting your kernel. - \item Automating the kernel boot process with U-Boot scripts. - \end{itemize} - - \vspace{0.5cm} - {\em Using the embedded hardware platform} -} - -\section{Day 2 - Afternoon} - -\feagendatwocolumn -{Lecture – Root filesystem in Linux} -{ - \begin{itemize} - \item Filesystems in Linux. - \item Role and organization of the root filesystem. - \item Location of the root filesystem: on storage, in memory, - from the network. - \item Device files, virtual filesystems. - \item Contents of a typical root filesystem. - \end{itemize} -} -{Lecture - BusyBox} -{ - \begin{itemize} - \item Detailed overview. Detailed features. - \item Configuration, compiling and deploying. - \end{itemize} -} - -\feagendaonecolumn -{Lab – Tiny root filesystem built from scratch with BusyBox} -{ - \begin{itemize} - \item Setting up a kernel to boot your system on a workstation - directory exported by NFS - \item Passing kernel command line parameters to boot on NFS - \item Creating the full root filesystem from scratch. - Populating it with BusyBox based utilities. - \item System startup using BusyBox \code{init} - \item Using the BusyBox HTTP server. - \item Controlling the target from a web browser on the PC host. - \item Setting up shared libraries on the target and compiling - a sample executable. - \end{itemize} - - \vspace{0.5cm} - {\em Using the embedded hardware platform} -} - -\section{Day 3 - Morning} - -\feagendatwocolumn -{Lecture - Accessing hardware devices} -{ - \begin{itemize} - \item How to access hardware on popular busses: USB, SPI, I2C, PCI - \item Usage of kernel drivers and direct user-space access - \item The {\em Device Tree} syntax, and how to use it to describe - additional devices and pin-muxing - \item Finding Linux kernel drivers for specific hardware devices - \item Using kernel modules - \item Hardware access using \code{/dev} and \code{/sys} - \item User-space interfaces for the most common hardware devices: - storage, network, GPIO, LEDs, audio, graphics, video - \end{itemize} -} -{Lab - Accessing hardware devices} -{ - \begin{itemize} - \item Exploring the contents of \code{/dev} and \code{/sys} and the - devices available on the embedded hardware platform. - \item Using GPIOs and LEDs. - \item Modifying the Device Tree to control pin multiplexing and - to declare an I2C-connected joystick. - \item Adding support for a USB audio card using Linux kernel modules - \item Adding support for the I2C-connected joystick through - an out-of-tree module. - \end{itemize} - - \vspace{0.5cm} - {\em Using the embedded hardware platform} -} - -\section{Day 3 - Afternoon} - -\feagendatwocolumn -{Lecture - Block filesystems} -{ - \begin{itemize} - \item Accessing and partitioning block devices. - \item Filesystems for block devices. - \item Usefulness of journaled filesystems. - \item Read-only block filesystems. - \item RAM filesystems. - \item How to create each of these filesystems. - \item Suggestions for embedded systems. - \end{itemize} -} -{Lab - Block filesystems} -{ - \begin{itemize} - \item Creating partitions on your SD card - \item Booting a system with a mix of filesystems: {\em SquashFS} for - the root filesystem, {\em ext4} for system data, and {\em - tmpfs} for temporary system files. - \end{itemize} - - \vspace{0.5cm} - {\em Using the embedded hardware platform} -} - -\feagendaonecolumn -{Lecture - Flash filesystems} -{ - \begin{itemize} - \item The Memory Technology Devices (MTD) filesystem. - \item Filesystems for MTD storage: JFFS2, Yaffs2, UBIFS. - \item Kernel configuration options - \item MTD storage partitions. - \item Focus on today's best solution, UBI and UBIFS: - preparing, flashing and using UBI images. - \end{itemize} - - \vspace{0.5cm} - - {\em Note: as the embedded hardware platform used for the labs does - not have any flash-based storage, this lecture will not be - illustrated with a corresponding practical lab.} -} - -\section{Day 4 - Morning} - -\feagendatwocolumn -{Lecture – Cross-compiling user-space libraries and applications} -{ - \begin{itemize} - \item Configuring, cross-compiling and installing applications and - libraries. - \item Concept of build system, and overview of a few common build - systems used by open-source projects: Makefile, {\em autotools}, - {\em CMake}, {\em meson} - \item Overview of the common issues encountered when - cross-compiling. - \end{itemize} -} -{Lab – Cross-compiling applications and libraries} -{ - \begin{itemize} - \item Manual cross-compilation of several open-source libraries and - applications for an embedded platform. - \item Learning about common pitfalls and issues, and their - solutions. - \item This includes compiling {\em alsa-utils} package, - and using its \code{speaker-test} program to test that - audio works on the target. - \end{itemize} - - \vspace{0.5cm} - {\em Using the embedded hardware platform} -} - -\section{Day 4 - Afternoon} - -\feagendatwocolumn -{Lecture - Embedded system building tools} -{ - \begin{itemize} - \item Approaches for building embedded Linux systems: build systems - and binary distributions - \item Principle of {\em build systems}, overview of Yocto - Project/OpenEmbedded and Buildroot. - \item Principle of {\em binary distributions} and useful tools, - focus on Debian/Ubuntu - \item Specialized software frameworks/distributions: Tizen, AGL, - Android - \end{itemize} -} -{Lab - System build with Buildroot} -{ - \begin{itemize} - \item Using Buildroot to rebuild the same basic system - plus a sound playing server ({\em MPD}) and a - client to control it ({\em mpc}). - \item Driving music playback, directly from the target, - and then remotely through an MPD client on the - host machine. - \item Analyzing dependencies between packages. - \end{itemize} - - \vspace{0.5cm} - {\em Using the embedded hardware platform} -} - -\feagendaonecolumn -{Lecture - Open source licenses and compliance} -{ - \begin{itemize} - \item Presentation of the most important open-source licenses: GPL, - LGPL, MIT, BSD, Apache, etc. - \item Concept of {\em copyleft} licenses - \item Differences between (L)GPL version 2 and 3 - \item Compliance with open-source licenses: best practices - \end{itemize} -} - -\section{Day 5 - Morning} - -\feagendatwocolumn -{Lecture - Overview of major embedded Linux software stacks} -{ - \begin{itemize} - \item \code{systemd} as an {\em init} system - \item Hardware management with {\em udev} - \item Inter-process communication with {\em D-Bus} - \item The graphics software stack: DRM/KMS, X.org, Wayland, Qt, Gtk, - OpenGL - \item The multimedia software stack: Video4Linux, GStreamer, - Pulseaudio, Pipewire - \end{itemize} -} -{Lab - Integration of additional software stacks} -{ - \begin{itemize} - \item Integration of {\em systemd} as an init system - \item Use {\em udev} built in {\em systemd} for automatic module - loading - \end{itemize} - - \vspace{0.5cm} - {\em Using the embedded hardware platform} -} - -\section{Day 5 - Afternoon} - -\feagendatwocolumn -{Lecture - Application development and debugging} -{ - \begin{itemize} - \item Programming languages and libraries available. - \item Build system for your application, an overview of {\em CMake} - and {\em meson} - \item The {\em gdb} debugger: remote debugging with {\em gdbserver}, - post-mortem debugging with \code{core} files - \item Performance analysis, tracing and profiling tools, memory - checkers: \code{strace}, \code{ltrace}, \code{perf}, - \code{valgrind} - \end{itemize} -} -{Lab – Application development and debugging} -{ - \begin{itemize} - \item Creating an application that uses an I2C-connected joystick to - control an audio player. - \item Setting up an IDE to develop and remotely debug an - application. - \item Using {\em strace}, {\em ltrace}, {\em gdbserver} and {\em - perf} to debug/investigate buggy applications on the embedded - board. - \end{itemize} - - \vspace{0.5cm} - {\em Using the embedded hardware platform} -} - -\feagendaonecolumn -{Lecture - Useful resources} -{ - \begin{itemize} - \item Books about embedded Linux and system programming - \item Useful online resources - \item International conferences - \end{itemize} -} +\onsiteagenda \end{document} diff --git a/agenda/embedded-linux-fr-agenda.tex b/agenda/embedded-linux-fr-agenda.tex index 49bbce7fa9..307b3b7c60 100644 --- a/agenda/embedded-linux-fr-agenda.tex +++ b/agenda/embedded-linux-fr-agenda.tex @@ -13,477 +13,10 @@ \feshowinfo -\feagendatwocolumn -{Plateforme matérielle pour les travaux pratiques, option \#1} -{ - Une de ces cartes de STMicroelectronics : {\bf - STM32MP157A-DK1}, {\bf STM32MP157D-DK1}, {\bf STM32MP157C-DK2} ou - {\bf STM32MP157F-DK2} - \begin{itemize} - \item Processeur STM32MP157, double Cortex-A7, de STMicroelectronics - \item Alimentée par USB - \item 512 Mo DDR3L RAM - \item Port Gigabit Ethernet port - \item 4 ports hôte USB 2.0 - \item 1 port USB-C OTG - \item 1 connecteur Micro SD - \item Debugger ST-LINK/V2-1 sur la carte - \item Connecteurs compatibles Arduino Uno v3 - \item Codec audio - \item Divers : boutons, LEDs - \item Écran LCD tactile (uniquement sur cartes DK2) - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} - \end{center} -} +\showboarditem{stm32mp1} +\showboarditem{beagleboneblack} +\showboarditem{beagleplay} -\feagendatwocolumn -{Plateforme matérielle pour les travaux pratiques, option \#2} -{ - Carte {\bf BeagleBone Black} ou {\bf BeagleBone Black Wireless} - \begin{itemize} - \item Un processeur ARM AM335x de Texas Instruments (à base de - Cortex-A8), avec accélération 3D, etc. - \item 512 Mo de RAM - \item 2 ou 4 Go de stockage eMMC - \item USB hôte et device - \item Sortie HDMI - \item Connecteurs à 2 x 46 broches, pour accéder aux UARTs, aux bus - SPI, aux bus I2C, et à d'autres entrées/sorties du processeur. - \item Ethernet ou WiFi - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleboneblack-board/beagleboneblack.png} - \end{center} -} - -\feagendatwocolumn -{Plateforme matérielle pour les travaux pratiques, option \#3} -{ - Carte {\bf BeaglePlay} - \begin{itemize} - \item SoC Texas Instruments AM625x (CPU 4xARM Cortex-A53) - \item SoC avec accélération 3D, MCU intégré et de nombreux autres périphériques. - \item 2 GB de RAM - \item 16 Go de stockage eMMC - \item USB hôte et device, microSD, HDMI - \item WiFi 2.4 and 5 GHz, Bluetooth et aussi Ethernet - \item 1 Header MicroBus (SPI, I2C, UART, ...), connecteurs OLDI et CSI. - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleplay-board/beagleplay.png} - \end{center} -} - -\section{1\textsuperscript{er} jour - Matin} - -\feagendaonecolumn -{Cours – Introduction à Linux embarqué} -{ - \begin{itemize} - \item Introduction au Logiciel Libre - \item Atouts du Logiciel Libre pour les systèmes embarqués - \item Exemples de systèmes embarqués fonctionnant sous Linux - \item Besoins en CPU, RAM et stockage - \item Choix d'une plateforme matérielle - \item Architecture du système : composants principaux - \item Différentes tâches pour développer un système embarqué - \end{itemize} -} - -\feagendatwocolumn -{Cours - Chaîne de compilation croisée et bibliothèque standard C} -{ - \begin{itemize} - \item Les composants d'une chaîne de compilation croisée. - \item Choisir une bibliothèque standard C. - \item Le contenu de la bibliothèque standard C. - \item Les chaînes de compilation croisée prêtes à l'emploi. - \item La construction automatisée d'une chaîne de compilation croisée. - \end{itemize} -} -{TP – Chaîne de compilation croisée} -{ - \begin{itemize} - \item Configuration de Crosstool-NG - \item Exécution pour construire une chaîne de compilation croisée - personnalisée reposant sur la uClibc. - \item Exploration du contenu d'une chaîne de compilation croisée - \end{itemize} -} - -\section{1\textsuperscript{er} Jour - Après-midi} - -\feagendatwocolumn -{Cours – Processus de démarrage, firmware, chargeurs de démarrage} -{ - \begin{itemize} - \item Processus de démarrage des systèmes embarqués, focus sur les - architectures {\em x86} et {\em ARM} - \item Processus de démarrage et chargeurs de démarrage sur - plateformes {\em x86} (legacy et UEFI) - \item Processus de démarrage sur plateformes {\em ARM} : code en ROM, - chargeurs de démarrage, {\em ARM Trusted Firmware} - \item Focus sur U-Boot : configuration, installation et utilisation - \item Commandes U-Boot, environnement U-Boot, scripts U-Boot, - mécanisme {\em distro boot command} de U-Boot - \end{itemize} -} -{TP - U-Boot} -{ - \begin{itemize} - \item Mise en place de la communication série avec la carte. - \item Configuration, compilation et installation d'U-Boot sur la - plateforme embarquée. - \item Seulement sur STM32MP1 : Configuration, compilation et - installation de Trusted Firmware-A sur la plateforme embarquée. - \item Familiarisation avec l'environnement et les commandes - d'U-Boot. - \item Mise en place de la communication TFTP avec la carte. - Utilisation des commandes TFTP d'U-Boot. - \end{itemize} - - \vspace{0.5cm} - {\em Mise en oeuvre sur la plateforme embarquée.} -} - -\section{2\textsuperscript{ème} jour - Matin} - -\feagendatwocolumn -{Cours – Noyau Linux} -{ - \begin{itemize} - \item Rôle et architecture générale du noyau Linux. - \item Séparation entre noyau et espace utilisateur, interfaces entre - l'espace utilisateur et le noyau - \item Comprendre les différentes versions du noyau Linux : choix - entre versions proposées par les fabricants et la version {\em - upstream}, versions {\em Long Term Support} - \item Récupérer les sources du noyau Linux - \end{itemize} -} -{Lab - Récupération des sources du noyau Linux} -{ - \begin{itemize} - \item Clonage du dépôt git officiel de Linux - \item Accès aux versions stables - \end{itemize} -} - -\feagendatwocolumn -{Cours – Configuration, compilation et démarrage du Noyau Linux} -{ - \begin{itemize} - \item Configuration du noyau Linux : configuration pré-définies, - interfaces de configuration - \item Concept de {\em Device Tree} - \item Cross-compilation du noyau Linux - \item Rôle des fichiers résultants de la compilation du noyau Linux - \item Installation et démarrage du noyau Linux - \item La ligne de commande du noyau Linux - \end{itemize} -} -{TP - Compilation croisée du noyau et démarrage sur la carte} -{ - \begin{itemize} - \item Configuration du noyau Linux et compilation croisée pour la - plateforme embarquée. - \item Téléchargement du noyau en utilisant le client TFTP d'U-Boot. - \item Démarrage du noyau depuis la RAM. - \item Automatisation du démarrage du noyau avec des scripts U-Boot. - \end{itemize} - - \vspace{0.5cm} - {\em Mise en oeuvre sur la plateforme embarquée.} -} - -\section{2\textsuperscript{ème} jour - Après-midi} - -\feagendatwocolumn -{Cours – Système de fichier racine} -{ - \begin{itemize} - \item Les systèmes de fichiers dans Linux. - \item Rôle et organisation du système de fichiers racine. - \item Localisation de ce système de fichiers : sur espace - de stockage, en mémoire, sur le réseau. - \item Les fichiers device, les systèmes de fichiers virtuels. - \item Contenu type d'un système de fichiers racine. - \end{itemize} -} -{Cours - BusyBox} -{ - \begin{itemize} - \item Présentation de BusyBox. Intérêt pour les systèmes embarqués. - \item Configuration, compilation et installation. - \end{itemize} -} - -\feagendaonecolumn -{TP – Construction d'un minuscule système Linux embarqué avec BusyBox} -{ - \begin{itemize} - \item Construction à partir de zéro d'un système de fichiers racine - contenant un système Linux embarqué - \item Mise en place d'un noyau permettant de démarrer le système - depuis un répertoire mis à disposition par la station de - développement au travers de NFS. - \item Passage de paramètres au noyau pour le démarrage avec NFS. - \item Création complète du système de fichiers à partir de zéro : - installation de BusyBox, création des fichiers spéciaux pour les - périphériques. - \item Initialisation du système en utilisant le programme init de BusyBox. - \item Utilisation du serveur HTTP de BusyBox. - \item Contrôle de la cible à partir d'un navigateur Web sur la - station de développement. - \item Mise en place des bibliothèques partagées sur la cible et - développement d'une application d'exemple. - \end{itemize} - - \vspace{0.5cm} - {\em Mise en oeuvre sur la plateforme embarquée.} -} - -\section{3\textsuperscript{ème} jour - Matin} - -\feagendatwocolumn -{Cours - Accès aux périphériques matériels} -{ - \begin{itemize} - \item Comment accéder au matériel sur les principaux bus : USB, SPI, - I2C, PCI - \item Utilisation de pilotes de périphériques dans le noyau ou accès - depuis l'espace utilisateur - \item La syntaxe du {\em Device Tree}, et comment l'utilisation pour - décrire des périphériques additionnels et le multiplexage des - signaux. - \item Trouver des pilotes de périphériques dans le noyau Linux pour - des périphériques matériels. - \item Utilisation de modules noyau - \item Accès au matériel par \code{/dev} ou \code{/sys} - \item Interfaces en espace utilisateur pour les périphériques les - plus courants : stockage, réseau, GPIO, LEDs, audio, affichage, - video - \end{itemize} -} -{TP - Accès aux périphériques matériels} -{ - \begin{itemize} - \item Exploration du contenu de \code{/dev} et \code{/sys}, et des - périphériques disponibles sur la plateforme embarquée. - \item Utilisation de GPIOs et de LEDs. - \item Modification du Device Tree pour controler le multiplexage - de broches et déclarer un joystick connecté sur I2C. - \item Ajout du support pour une carte son USB en utilisant des - modules noyau. - \item Prise en charge du joystick I2C par la compilation et - l'installation d'un module noyau externe. - \end{itemize} - - \vspace{0.5cm} - {\em Mise en oeuvre sur la plateforme embarquée.} -} - -\section{3\textsuperscript{ème} jour - Après-midi} - -\feagendatwocolumn -{Cours - Système de fichiers bloc} -{ - \begin{itemize} - \item Accéder et partitionner des périphériques bloc. - \item Systèmes de fichiers pour périphériques bloc. - \item Utilité des systèmes de fichiers journalisés. - \item Systèmes de fichiers en lecture seule. - \item Systèmes de fichiers en RAM. - \item Création de chacun de ces systèmes de fichiers. - \item Suggestions pour les systèmes embarqués. - \end{itemize} -} -{TP - Système de fichiers bloc} -{ - \begin{itemize} - \item Créer des partitions sur le stockage bloc. - \item Démarrage d'un système avec un assemblage de plusieurs systèmes - de fichiers : SquashFS pour le système de fichier racine, ext4 pour - les données du système et tmpfs pour les fichiers temporaires. - \end{itemize} - \vspace{0.5cm} - {\em Mise en oeuvre sur la plateforme embarquée.} -} - -\feagendaonecolumn -{Cours - Système de fichiers pour flash} -{ - \begin{itemize} - \item Le sous-système Memory Technology Devices du noyau Linux. - \item Les systèmes de fichiers pour le stockage MTD : JFFS2, YAFFS2, - UBIFS. - \item Options de configuration du noyau. - \item Partitions MTD. - \item Étude en détail de UBI et UBIFS : préparation, flashage et mise - en oeuvre d'images UBI. - \end{itemize} - - \vspace{0.5cm} - - {\em Note : la plateforme embarquée utilisée pour les labs ne - comportant pas de mémoire flash NAND en accès direct, cette partie - du cours ne sera pas illustrée avec un TP correspondant.} -} - -\section{4\textsuperscript{ème} jour - Matin} - -\feagendatwocolumn -{Cours – Cross-compilation de bibliothèques et d'applications espace utilisateur} -{ - \begin{itemize} - \item Configuration, compilation croisée et installation - d'applications et de bibliothèques - \item Concept de {\em build system}, et aperçu de quelques {\em - build systems} courants utilisés dans les projets open-source : - {\em Makefile}, {\em autotools}, {\em CMake}, {\em meson} - \item Aperçu des problématiques courantes rencontrées lors de la - compilation croisée - \end{itemize} -} -{TP – Compilation croisée de bibliothèques et d'applications} -{ - \begin{itemize} - \item Compilation croisée manuelle de plusieurs bibliothèques et - applications open-source pour une plateforme embarquée. - \item Apprentissage des principales techniques et des problèmes - principaux. - \item Cela inclut la compilation du composant {\em alsa-utils}, - et l'utilisation de son programme \code{speaker-test} pour - vérifier que l'audio fonctionne sur la cible. - \end{itemize} - - \vspace{0.5cm} - {\em Mise en oeuvre sur la plateforme embarquée.} -} - -\section{4\textsuperscript{ème} jour - Après-midi} - -\feagendatwocolumn -{Cours - Outils de construction de systèmes} -{ - \begin{itemize} - \item Les différentes approches pour construire un système Linux - embarqué : {\em build systems} et distributions binaires - \item Principe d'un {\em build system}, aperçu de Yocto - Project/OpenEmbedded et de Buildroot - \item Principe d'une {\em distribution binaire} et outils associés, - focus sur Debian et Ubuntu - \item Piles logicielles standards : Tizen, AGL, Android - \end{itemize} -} -{TP - Construction d'un système avec Buildroot} -{ - \begin{itemize} - \item Utilisation de Buildroot pour construire de façon automatisée - le même système de base que dans le TP précédent, en y rajoutant - un serveur pour jouer des bandes sonores ({\em MPD}) ainsi - qu'un client pour piloter ce serveur ({\em mpc}). - \item Contrôle de la lecture audio, directement depuis la - cible, puis depuis un client MPD sur le PC de développement. - \item Analyse des dépendences entre les différents composants - du système. - \end{itemize} - - \vspace{0.5cm} - {\em Mise en oeuvre sur la plateforme embarquée.} -} - -\feagendaonecolumn -{Cours - Licences open-source et mise en conformité} -{ - \begin{itemize} - \item Présentation des principales licenses open-source : GPL, LGPL, - MIT, BSD, Apache, etc. - \item Concept de {\em copyleft} dans les licences open-source - \item Différence entre (L)GPL version 2 et 3 - \item Mise en conformité avec les licences open-source : bonnes - pratiques - \end{itemize} -} - -\section{5\textsuperscript{ème} jour - Matin} - -\feagendatwocolumn -{Cours - Aperçu des stack logicielles open-source majeures pour Linux embarqué} -{ - \begin{itemize} - \item \code{systemd} comme système {\em init} - \item Gestion du matériel avec {\em udev} - \item Communication inter-processus avec {\em D-Bus} - \item La stack logicielle pour le graphique : DRM/KMS, X.org, - Wayland, Qt, Gtk, OpenGL - \item La stack logicielle pour le multimédia : Video4Linux, - GStreamer, Pulseaudio, Pipewire - \end{itemize} -} -{TP - Intégration de stack logicielles additionnelles} -{ - \begin{itemize} - \item Intégration de {\em systemd} comme système d'init - \item Utilisation de {\em udev} pour le chargement automatique de - modules - \end{itemize} - - \vspace{0.5cm} - {\em Mise en oeuvre sur la plateforme embarquée.} -} - -\section{5\textsuperscript{ème} jour - Après-midi} - -\feagendaonecolumn -{Cours - Développement et déboguage d'application} -{ - \begin{itemize} - \item Langages de programmations et bibliothèques disponibles. - \item {\em Build system} pour votre application, un aperçu de {\em - CMake} et {\em Meson} - \item Le débogueur {\em gdb} : déboguage d'applications à distance - avec gdb et gdbserver, analyse post-mortem d'une application. - \item Analyse de performance, outils de {\em tracing} et {\em - profiling}, analyseurs mémoire : \code{strace}, \code{ltrace}, - \code{perf}, \code{valgrind} - \end{itemize} -} - -\feagendaonecolumn -{TP – Développement et déboguage d'application} -{ - \begin{itemize} - \item Création d'une application qui utilise un joystick connecté - sur I2C pour contrôler un player audio. - \item Mise en place d'un IDE pour le développement et le déboguage - d'une application. - \item Utilisation de {\em strace}, {\em ltrace}, {\em gdbserver} et - {\em perf} pour déboguer/investiguer des applications - problématiques sur la plateforme embarquée. - \end{itemize} - {\em Mise en oeuvre sur la plateforme embarquée.} -} - -\feagendaonecolumn -{Lecture - Ressources utiles} -{ - \begin{itemize} - \item Livres sur Linux embarqué et la programmation système - \item Ressources sur Internet - \item Conférences internationales - \end{itemize} -} +\onsiteagenda \end{document} diff --git a/agenda/embedded-linux-online-agenda.tex b/agenda/embedded-linux-online-agenda.tex index 198f8c1f1d..662ace8f4d 100644 --- a/agenda/embedded-linux-online-agenda.tex +++ b/agenda/embedded-linux-online-agenda.tex @@ -13,459 +13,10 @@ \feshowinfo -\feagendatwocolumn -{Hardware platform for practical demos, option \#1} -{ - One of these Discovery Kits from STMicroelectronics: {\bf - STM32MP157A-DK1}, {\bf STM32MP157D-DK1}, {\bf STM32MP157C-DK2} or - {\bf STM32MP157F-DK2} - \begin{itemize} - \item STM32MP157, dual Cortex-A7 processor from STMicroelectronics - \item USB powered - \item 512 MB DDR3L RAM - \item Gigabit Ethernet port - \item 4 USB 2.0 host ports - \item 1 USB-C OTG port - \item 1 Micro SD slot - \item On-board ST-LINK/V2-1 debugger - \item Arduino compatible headers - \item Audio codec, buttons, LEDs - \item LCD touchscreen (DK2 kits only) - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} - \end{center} -} +\showboarditem{stm32mp1} +\showboarditem{beagleboneblack} +\showboarditem{beagleplay} -\feagendatwocolumn -{Hardware platform for practical demos, option \#2} -{ - {\bf BeagleBone Black} or {\bf BeagleBone Black Wireless} board - \begin{itemize} - \item An ARM AM335x (single Cortex-A8) processor from Texas - Instruments - \item USB powered - \item 512 MB of RAM - \item 2 or 4 GB of on-board eMMC storage - \item USB host and device - \item HDMI output - \item 2 x 46 pins headers, to access UARTs, SPI buses, I2C buses - and more. - \item Ethernet or WiFi - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleboneblack-board/beagleboneblack.png} - \end{center} -} - -\feagendatwocolumn -{Hardware platform for practical labs, option \#3} -{ - {\bf BeaglePlay} board - \begin{itemize} - \item Texas Instruments AM625x (4xARM Cortex-A53 CPU) - \item SoC with 3D acceleration, integrated MCU and many other peripherals. - \item 2 GB of RAM - \item 16 GB of on-board eMMC storage - \item USB host and USB device, microSD, HDMI - \item 2.4 and 5 GHz WiFi, Bluetooth and also Ethernet - \item 1 MicroBus Header (SPI, I2C, UART, ...), OLDI and CSI connector. - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleplay-board/beagleplay.png} - \end{center} -} - -\section{Half day 1} - -\feagendaonecolumn -{Lecture - Introduction to embedded Linux} -{ - \begin{itemize} - \item Advantages of Linux versus traditional embedded operating - systems. - \item Typical hardware platforms used to run embedded Linux systems. - \item Overall architecture of embedded Linux systems: overview of - the major software components. - \item Development environment for Embedded Linux development. - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Cross-compiling toolchain and C library} -{ - \begin{itemize} - \item What's inside a cross-compiling toolchain - \item Choosing the target C library - \item What's inside the C library - \item Ready to use cross-compiling toolchains - \item Building a cross-compiling toolchain with automated tools. - \end{itemize} -} -{Lab - Cross compiling toolchain} -{ - \begin{itemize} - \item Getting and configuring Crosstool-NG - \item Executing it to build a custom cross-compilation toolchain - \item Exploring the contents of the toolchain - \end{itemize} -} - -\feagendaonecolumn -{Lecture - Boot process, firmware, bootloaders} -{ - \begin{itemize} - \item Booting process of embedded platforms, focus on the {\em x86} - and {\em ARM} architectures - \item Boot process and bootloaders on {\em x86} platforms (legacy - and UEFI) - \item Boot process on ARM platforms: ROM code, bootloaders, {\em ARM - Trusted Firmware} - \item Focus on U-Boot: configuration, installation, and usage. - \item U-Boot commands, U-Boot environment, U-Boot scripts, U-Boot - generic distro boot mechanism - \end{itemize} -} - -\section{Half day 2} - -\feagendaonecolumn -{Lab - Bootloader and U-boot} -{ - \begin{itemize} - \item Set up serial communication with the board. - \item Configure, compile and install U-Boot for the target hardware. - \item Only on STM32MP1: configure, compile and install Trusted Firmware-A - \item Become familiar with U-Boot environment and commands. - \item Set up TFTP communication with the board. Use TFTP U-Boot - commands. - \end{itemize} - - \vspace{0.5cm} - {\em Using the embedded hardware platform.} -} - -\feagendatwocolumn -{Lecture - Linux kernel} -{ - \begin{itemize} - \item Role and general architecture of the Linux kernel - \item Separation between kernel and user-space, and interfaces - between user-space and the Linux kernel - \item Understanding Linux kernel versions: choosing between - vendor-provided kernel and upstream kernel, {\em Long Term - Support} versions - \item Getting the Linux kernel source code - \end{itemize} -} -{Lab - Fetching Linux kernel sources} -{ - \begin{itemize} - \item Clone the mainline Linux tree - \item Accessing stable releases - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Configuring, compiling and booting the Linux kernel} -{ - \begin{itemize} - \item Configuring the Linux kernel: ready-made configuration files, - configuration interfaces - \item Concept of {\em Device Tree} - \item Cross-compiling the Linux kernel - \item Study of the generated files and their role - \item Installing and booting the Linux kernel - \item The Linux kernel command line - \end{itemize} -} -{Lab - Kernel cross-compiling and booting} -{ - \begin{itemize} - \item Configuring the Linux kernel and cross-compiling it for the - embedded hardware platform. - \item Downloading your kernel on the board through U-boot's TFTP - client. - \item Booting your kernel. - \item Automating the kernel boot process with U-Boot scripts. - \end{itemize} - - \vspace{0.5cm} - {\em Using the embedded hardware platform} -} - -\section{Half day 3} - -\feagendatwocolumn -{Lecture – Root filesystem in Linux} -{ - \begin{itemize} - \item Filesystems in Linux. - \item Role and organization of the root filesystem. - \item Location of the root filesystem: on storage, in memory, - from the network. - \item Device files, virtual filesystems. - \item Contents of a typical root filesystem. - \end{itemize} -} -{Lecture - BusyBox} -{ - \begin{itemize} - \item Detailed overview. Detailed features. - \item Configuration, compiling and deploying. - \end{itemize} -} - -\feagendaonecolumn -{Lab – Tiny root filesystem built from scratch with BusyBox} -{ - \begin{itemize} - \item Setting up a kernel to boot your system on a workstation - directory exported by NFS - \item Passing kernel command line parameters to boot on NFS - \item Creating the full root filesystem from scratch. - Populating it with BusyBox based utilities. - \item System startup using BusyBox \code{init} - \item Using the BusyBox HTTP server. - \item Controlling the target from a web browser on the PC host. - \item Setting up shared libraries on the target and compiling - a sample executable. - \end{itemize} - - \vspace{0.5cm} - {\em Using the embedded hardware platform} -} - -\section{Half day 4} - -\feagendatwocolumn -{Lecture - Accessing hardware devices} -{ - \begin{itemize} - \item How to access hardware on popular busses: USB, SPI, I2C, PCI - \item Usage of kernel drivers and direct user-space access - \item The {\em Device Tree} syntax, and how to use it to describe - additional devices and pin-muxing - \item Finding Linux kernel drivers for specific hardware devices - \item Using kernel modules - \item Hardware access using \code{/dev} and \code{/sys} - \item User-space interfaces for the most common hardware devices: - storage, network, GPIO, LEDs, audio, graphics, video - \end{itemize} -} -{Lab - Accessing hardware devices} -{ - \begin{itemize} - \item Exploring the contents of \code{/dev} and \code{/sys} and the - devices available on the embedded hardware platform. - \item Using GPIOs and LEDs. - \item Modifying the Device Tree to control pin multiplexing and - to declare an I2C-connected joystick. - \item Adding support for a USB audio card using Linux kernel modules - \item Adding support for the I2C-connected joystick through - an out-of-tree module. - \end{itemize} - - \vspace{0.5cm} - {\em Using the embedded hardware platform} -} - -\feagendatwocolumn -{Lecture - Block filesystems} -{ - \begin{itemize} - \item Accessing and partitioning block devices. - \item Filesystems for block devices. - \item Usefulness of journaled filesystems. - \item Read-only block filesystems. - \item RAM filesystems. - \item How to create each of these filesystems. - \item Suggestions for embedded systems. - \end{itemize} -} -{Lab - Block filesystems} -{ - \begin{itemize} - \item Creating partitions on your SD card - \item Booting a system with a mix of filesystems: {\em SquashFS} for - the root filesystem, {\em ext4} for system data, and {\em - tmpfs} for temporary system files. - \end{itemize} - - \vspace{0.5cm} - {\em Using the embedded hardware platform} -} - -\section{Half day 5} - -\feagendaonecolumn -{Lecture - Flash filesystems} -{ - \begin{itemize} - \item The Memory Technology Devices (MTD) filesystem. - \item Filesystems for MTD storage: JFFS2, Yaffs2, UBIFS. - \item Kernel configuration options - \item MTD storage partitions. - \item Focus on today's best solution, UBI and UBIFS: - preparing, flashing and using UBI images. - \end{itemize} - - \vspace{0.5cm} - - {\em Note: as the embedded hardware platform used for the labs does - not have any flash-based storage, this lecture will not be - illustrated with a corresponding practical lab.} -} - -\feagendatwocolumn -{Lecture – Cross-compiling user-space libraries and applications} -{ - \begin{itemize} - \item Configuring, cross-compiling and installing applications and - libraries. - \item Concept of build system, and overview of a few common build - systems used by open-source projects: Makefile, {\em autotools}, - {\em CMake}, {\em meson} - \item Overview of the common issues encountered when - cross-compiling. - \end{itemize} -} -{Lab – Cross-compiling applications and libraries} -{ - \begin{itemize} - \item Manual cross-compilation of several open-source libraries and - applications for an embedded platform. - \item Learning about common pitfalls and issues, and their - solutions. - \item This includes compiling {\em alsa-utils} package, - and using its \code{speaker-test} program to test that - audio works on the target. - \end{itemize} - - \vspace{0.5cm} - {\em Using the embedded hardware platform} -} - -\section{Half day 6} - -\feagendatwocolumn -{Lecture - Embedded system building tools} -{ - \begin{itemize} - \item Approaches for building embedded Linux systems: build systems - and binary distributions - \item Principle of {\em build systems}, overview of Yocto - Project/OpenEmbedded and Buildroot. - \item Principle of {\em binary distributions} and useful tools, - focus on Debian/Ubuntu - \item Specialized software frameworks/distributions: Tizen, AGL, - Android - \end{itemize} -} -{Lab - System build with Buildroot} -{ - \begin{itemize} - \item Using Buildroot to rebuild the same basic system - plus a sound playing server ({\em MPD}) and a - client to control it ({\em mpc}). - \item Driving music playback, directly from the target, - and then remotely through an MPD client on the - host machine. - \item Analyzing dependencies between packages. - \end{itemize} - - \vspace{0.5cm} - {\em Using the embedded hardware platform} -} - -\feagendaonecolumn -{Lecture - Open source licenses and compliance} -{ - \begin{itemize} - \item Presentation of the most important open-source licenses: GPL, - LGPL, MIT, BSD, Apache, etc. - \item Concept of {\em copyleft} licenses - \item Differences between (L)GPL version 2 and 3 - \item Compliance with open-source licenses: best practices - \end{itemize} -} - -\feagendaonecolumn -{Lecture - Overview of major embedded Linux software stacks} -{ - \begin{itemize} - \item \code{systemd} as an {\em init} system - \item Hardware management with {\em udev} - \item Inter-process communication with {\em D-Bus} - \item The graphics software stack: DRM/KMS, X.org, Wayland, Qt, Gtk, - OpenGL - \item The multimedia software stack: Video4Linux, GStreamer, - Pulseaudio, Pipewire - \end{itemize} -} - -\section{Half day 7} - -\feagendaonecolumn -{Lab - Integration of additional software stacks} -{ - \begin{itemize} - \item Integration of {\em systemd} as an init system - \item Use {\em udev} built in {\em systemd} for automatic module - loading - \end{itemize} - - \vspace{0.5cm} - {\em Using the embedded hardware platform} -} - -\feagendatwocolumn -{Lecture - Application development and debugging} -{ - \begin{itemize} - \item Programming languages and libraries available. - \item Build system for your application, an overview of {\em CMake} - and {\em meson} - \item The {\em gdb} debugger: remote debugging with {\em gdbserver}, - post-mortem debugging with \code{core} files - \item Performance analysis, tracing and profiling tools, memory - checkers: \code{strace}, \code{ltrace}, \code{perf}, - \code{valgrind} - \end{itemize} -} -{Lab – Application development and debugging} -{ - \begin{itemize} - \item Creating an application that uses an I2C-connected joystick to - control an audio player. - \item Setting up an IDE to develop and remotely debug an - application. - \item Using {\em strace}, {\em ltrace}, {\em gdbserver} and {\em - perf} to debug/investigate buggy applications on the embedded - board. - \end{itemize} - - \vspace{0.5cm} - {\em Using the embedded hardware platform} -} - -\feagendaonecolumn -{Lecture - Useful resources} -{ - \begin{itemize} - \item Books about embedded Linux and system programming - \item Useful online resources - \item International conferences - \end{itemize} -} +\onlineagenda \end{document} diff --git a/agenda/embedded-linux-online-fr-agenda.tex b/agenda/embedded-linux-online-fr-agenda.tex index 603db1fe7b..acf714162f 100644 --- a/agenda/embedded-linux-online-fr-agenda.tex +++ b/agenda/embedded-linux-online-fr-agenda.tex @@ -13,475 +13,10 @@ \feshowinfo -\feagendatwocolumn -{Plateforme matérielle pour les démonstrations, option \#1} -{ - Une de ces cartes de STMicroelectronics : {\bf - STM32MP157A-DK1}, {\bf STM32MP157D-DK1}, {\bf STM32MP157C-DK2} ou - {\bf STM32MP157F-DK2} - \begin{itemize} - \item Processeur STM32MP157, double Cortex-A7, de STMicroelectronics - \item Alimentée par USB - \item 512 Mo DDR3L RAM - \item Port Gigabit Ethernet port - \item 4 ports hôte USB 2.0 - \item 1 port USB-C OTG - \item 1 connecteur Micro SD - \item Debugger ST-LINK/V2-1 sur la carte - \item Connecteurs compatibles Arduino Uno v3 - \item Codec audio - \item Divers : boutons, LEDs - \item Écran LCD tactile (uniquement sur cartes DK2) - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} - \end{center} -} +\showboarditem{stm32mp1} +\showboarditem{beagleboneblack} +\showboarditem{beagleplay} -\feagendatwocolumn -{Plateforme matérielle pour les démonstrations, option \#2} -{ - Carte {\bf BeagleBone Black} ou {\bf BeagleBone Black Wireless} - \begin{itemize} - \item Un processeur ARM AM335x de Texas Instruments (à base de - Cortex-A8), avec accélération 3D, etc. - \item 512 Mo de RAM - \item 2 ou 4 Go de stockage eMMC - \item USB hôte et device - \item Sortie HDMI - \item Connecteurs à 2 x 46 broches, pour accéder aux UARTs, aux bus - SPI, aux bus I2C, et à d'autres entrées/sorties du processeur. - \item Ethernet ou WiFi - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleboneblack-board/beagleboneblack.png} - \end{center} -} - -\feagendatwocolumn -{Plateforme matérielle pour les travaux pratiques, option \#3} -{ - Carte {\bf BeaglePlay} - \begin{itemize} - \item SoC Texas Instruments AM625x (CPU 4xARM Cortex-A53) - \item SoC avec accélération 3D, MCU intégré et de nombreux autres périphériques. - \item 2 GB de RAM - \item 16 Go de stockage eMMC - \item USB hôte et device, microSD, HDMI - \item WiFi 2.4 and 5 GHz, Bluetooth et aussi Ethernet - \item 1 Header MicroBus (SPI, I2C, UART, ...), connecteurs OLDI et CSI. - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleplay-board/beagleplay.png} - \end{center} -} - -\section{1\textsuperscript{ère} demi-journée} - -\feagendaonecolumn -{Cours – Introduction à Linux embarqué} -{ - \begin{itemize} - \item Introduction au Logiciel Libre - \item Atouts du Logiciel Libre pour les systèmes embarqués - \item Exemples de systèmes embarqués fonctionnant sous Linux - \item Besoins en CPU, RAM et stockage - \item Choix d'une plateforme matérielle - \item Architecture du système : composants principaux - \item Différentes tâches pour développer un système embarqué - \end{itemize} -} - -\feagendatwocolumn -{Cours - Chaîne de compilation croisée et bibliothèque standard C} -{ - \begin{itemize} - \item Les composants d'une chaîne de compilation croisée. - \item Choisir une bibliothèque standard C. - \item Le contenu de la bibliothèque standard C. - \item Les chaînes de compilation croisée prêtes à l'emploi. - \item La construction automatisée d'une chaîne de compilation croisée. - \end{itemize} -} -{TP – Chaîne de compilation croisée} -{ - \begin{itemize} - \item Configuration de Crosstool-NG - \item Exécution pour construire une chaîne de compilation croisée - personnalisée reposant sur la uClibc. - \item Exploration du contenu d'une chaîne de compilation croisée - \end{itemize} -} - -\feagendaonecolumn -{Cours – Processus de démarrage, firmware, chargeurs de démarrage} -{ - \begin{itemize} - \item Processus de démarrage des systèmes embarqués, focus sur les - architectures {\em x86} et {\em ARM} - \item Processus de démarrage et chargeurs de démarrage sur - plateformes {\em x86} (legacy et UEFI) - \item Processus de démarrage sur plateformes {\em ARM} : code en ROM, - chargeurs de démarrage, {\em ARM Trusted Firmware} - \item Focus sur U-Boot : configuration, installation et utilisation - \item Commandes U-Boot, environnement U-Boot, scripts U-Boot, - mécanisme {\em distro boot command} de U-Boot - \end{itemize} -} - -\section{2\textsuperscript{ème} demi-journée} - -\feagendaonecolumn -{TP - U-Boot} -{ - \begin{itemize} - \item Mise en place de la communication série avec la carte. - \item Configuration, compilation et installation d'U-Boot sur la - plateforme embarquée. - \item Seulement sur STM32MP1 : Configuration, compilation et - installation de Trusted Firmware-A sur la plateforme embarquée. - \item Familiarisation avec l'environnement et les commandes - d'U-Boot. - \item Mise en place de la communication TFTP avec la carte. - Utilisation des commandes TFTP d'U-Boot. - \end{itemize} - - \vspace{0.5cm} - {\em Mise en oeuvre sur la plateforme embarquée.} -} - -\feagendatwocolumn -{Cours – Noyau Linux} -{ - \begin{itemize} - \item Rôle et architecture générale du noyau Linux. - \item Séparation entre noyau et espace utilisateur, interfaces entre - l'espace utilisateur et le noyau - \item Comprendre les différentes versions du noyau Linux : choix - entre versions proposées par les fabricants et la version {\em - upstream}, versions {\em Long Term Support} - \item Récupérer les sources du noyau Linux - \end{itemize} -} -{Lab - Récupération des sources du noyau Linux} -{ - \begin{itemize} - \item Clonage du dépôt git officiel de Linux - \item Accès aux versions stables - \end{itemize} -} - -\feagendatwocolumn -{Cours – Configuration, compilation et démarrage du Noyau Linux} -{ - \begin{itemize} - \item Configuration du noyau Linux : configuration pré-définies, - interfaces de configuration - \item Concept de {\em Device Tree} - \item Cross-compilation du noyau Linux - \item Rôle des fichiers résultants de la compilation du noyau Linux - \item Installation et démarrage du noyau Linux - \item La ligne de commande du noyau Linux - \end{itemize} -} -{TP - Compilation croisée du noyau et démarrage sur la carte} -{ - \begin{itemize} - \item Configuration du noyau Linux et compilation croisée pour la - plateforme embarquée. - \item Téléchargement du noyau en utilisant le client TFTP d'U-Boot. - \item Démarrage du noyau depuis la RAM. - \item Automatisation du démarrage du noyau avec des scripts U-Boot. - \end{itemize} - - \vspace{0.5cm} - {\em Mise en oeuvre sur la plateforme embarquée.} -} - -\section{3\textsuperscript{ème} demi-journée} - -\feagendatwocolumn -{Cours – Système de fichier racine} -{ - \begin{itemize} - \item Les systèmes de fichiers dans Linux. - \item Rôle et organisation du système de fichiers racine. - \item Localisation de ce système de fichiers : sur espace - de stockage, en mémoire, sur le réseau. - \item Les fichiers device, les systèmes de fichiers virtuels. - \item Contenu type d'un système de fichiers racine. - \end{itemize} -} -{Cours - BusyBox} -{ - \begin{itemize} - \item Présentation de BusyBox. Intérêt pour les systèmes embarqués. - \item Configuration, compilation et installation. - \end{itemize} -} - -\feagendaonecolumn -{TP – Construction d'un minuscule système Linux embarqué avec BusyBox} -{ - \begin{itemize} - \item Construction à partir de zéro d'un système de fichiers racine - contenant un système Linux embarqué - \item Mise en place d'un noyau permettant de démarrer le système - depuis un répertoire mis à disposition par la station de - développement au travers de NFS. - \item Passage de paramètres au noyau pour le démarrage avec NFS. - \item Création complète du système de fichiers à partir de zéro : - installation de BusyBox, création des fichiers spéciaux pour les - périphériques. - \item Initialisation du système en utilisant le programme init de BusyBox. - \item Utilisation du serveur HTTP de BusyBox. - \item Contrôle de la cible à partir d'un navigateur Web sur la - station de développement. - \item Mise en place des bibliothèques partagées sur la cible et - développement d'une application d'exemple. - \end{itemize} - - \vspace{0.5cm} - {\em Mise en oeuvre sur la plateforme embarquée.} -} - -\section{4\textsuperscript{ème} demi-journée} - -\feagendatwocolumn -{Cours - Accès aux périphériques matériels} -{ - \begin{itemize} - \item Comment accéder au matériel sur les principaux bus : USB, SPI, - I2C, PCI - \item Utilisation de pilotes de périphériques dans le noyau ou accès - depuis l'espace utilisateur - \item La syntaxe du {\em Device Tree}, et comment l'utilisation pour - décrire des périphériques additionnels et le multiplexage des - signaux. - \item Trouver des pilotes de périphériques dans le noyau Linux pour - des périphériques matériels. - \item Utilisation de modules noyau - \item Accès au matériel par \code{/dev} ou \code{/sys} - \item Interfaces en espace utilisateur pour les périphériques les - plus courants : stockage, réseau, GPIO, LEDs, audio, affichage, - video - \end{itemize} -} -{TP - Accès aux périphériques matériels} -{ - \begin{itemize} - \item Exploration du contenu de \code{/dev} et \code{/sys}, et des - périphériques disponibles sur la plateforme embarquée. - \item Utilisation de GPIOs et de LEDs. - \item Modification du Device Tree pour controler le multiplexage - de broches et déclarer un joystick connecté sur I2C. - \item Ajout du support pour une carte son USB en utilisant des - modules noyau. - \item Prise en charge du joystick I2C par la compilation et - l'installation d'un module noyau externe. - \end{itemize} - - \vspace{0.5cm} - {\em Mise en oeuvre sur la plateforme embarquée.} -} - -\feagendatwocolumn -{Cours - Système de fichiers bloc} -{ - \begin{itemize} - \item Accéder et partitionner des périphériques bloc. - \item Systèmes de fichiers pour périphériques bloc. - \item Utilité des systèmes de fichiers journalisés. - \item Systèmes de fichiers en lecture seule. - \item Systèmes de fichiers en RAM. - \item Création de chacun de ces systèmes de fichiers. - \item Suggestions pour les systèmes embarqués. - \end{itemize} -} -{TP - Système de fichiers bloc} -{ - \begin{itemize} - \item Créer des partitions sur le stockage bloc. - \item Démarrage d'un système avec un assemblage de plusieurs systèmes - de fichiers : SquashFS pour le système de fichier racine, ext4 pour - les données du système et tmpfs pour les fichiers temporaires. - \end{itemize} - \vspace{0.5cm} - {\em Mise en oeuvre sur la plateforme embarquée.} -} - -\section{5\textsuperscript{ème} demi-journée} - -\feagendaonecolumn -{Cours - Système de fichiers pour flash} -{ - \begin{itemize} - \item Le sous-système Memory Technology Devices du noyau Linux. - \item Les systèmes de fichiers pour le stockage MTD : JFFS2, YAFFS2, - UBIFS. - \item Options de configuration du noyau. - \item Partitions MTD. - \item Étude en détail de UBI et UBIFS : préparation, flashage et mise - en oeuvre d'images UBI. - \end{itemize} - - \vspace{0.5cm} - - {\em Note : la plateforme embarquée utilisée pour les labs ne - comportant pas de mémoire flash NAND en accès direct, cette partie - du cours ne sera pas illustrée avec un TP correspondant.} -} - -\feagendatwocolumn -{Cours – Cross-compilation de bibliothèques et d'applications espace utilisateur} -{ - \begin{itemize} - \item Configuration, compilation croisée et installation - d'applications et de bibliothèques - \item Concept de {\em build system}, et aperçu de quelques {\em - build systems} courants utilisés dans les projets open-source : - {\em Makefile}, {\em autotools}, {\em CMake}, {\em meson} - \item Aperçu des problématiques courantes rencontrées lors de la - compilation croisée - \end{itemize} -} -{TP – Compilation croisée de bibliothèques et d'applications} -{ - \begin{itemize} - \item Compilation croisée manuelle de plusieurs bibliothèques et - applications open-source pour une plateforme embarquée. - \item Apprentissage des principales techniques et des problèmes - principaux. - \item Cela inclut la compilation du composant {\em alsa-utils}, - et l'utilisation de son programme \code{speaker-test} pour - vérifier que l'audio fonctionne sur la cible. - \end{itemize} - - \vspace{0.5cm} - {\em Mise en oeuvre sur la plateforme embarquée.} -} - -\section{6\textsuperscript{ème} demi-journée} - -\feagendatwocolumn -{Cours - Outils de construction de systèmes} -{ - \begin{itemize} - \item Les différentes approches pour construire un système Linux - embarqué : {\em build systems} et distributions binaires - \item Principe d'un {\em build system}, aperçu de Yocto - Project/OpenEmbedded et de Buildroot - \item Principe d'une {\em distribution binaire} et outils associés, - focus sur Debian et Ubuntu - \item Piles logicielles standards : Tizen, AGL, Android - \end{itemize} -} -{TP - Construction d'un système avec Buildroot} -{ - \begin{itemize} - \item Utilisation de Buildroot pour construire de façon automatisée - le même système de base que dans le TP précédent, en y rajoutant - un serveur pour jouer des bandes sonores ({\em MPD}) ainsi - qu'un client pour piloter ce serveur ({\em mpc}). - \item Contrôle de la lecture audio, directement depuis la - cible, puis depuis un client MPD sur le PC de développement. - \item Analyse des dépendences entre les différents composants - du système. - \end{itemize} - - \vspace{0.5cm} - {\em Mise en oeuvre sur la plateforme embarquée.} -} - -\feagendaonecolumn -{Cours - Licences open-source et mise en conformité} -{ - \begin{itemize} - \item Présentation des principales licenses open-source : GPL, LGPL, - MIT, BSD, Apache, etc. - \item Concept de {\em copyleft} dans les licences open-source - \item Différence entre (L)GPL version 2 et 3 - \item Mise en conformité avec les licences open-source : bonnes - pratiques - \end{itemize} -} - -\feagendaonecolumn -{Cours - Aperçu des stack logicielles open-source majeures pour Linux embarqué} -{ - \begin{itemize} - \item \code{systemd} comme système {\em init} - \item Gestion du matériel avec {\em udev} - \item Communication inter-processus avec {\em D-Bus} - \item La stack logicielle pour le graphique : DRM/KMS, X.org, - Wayland, Qt, Gtk, OpenGL - \item La stack logicielle pour le multimédia : Video4Linux, - GStreamer, Pulseaudio, Pipewire - \end{itemize} -} - -\section{7\textsuperscript{ème} jour - Matin} - -\feagendaonecolumn -{TP - Intégration de stack logicielles additionnelles} -{ - \begin{itemize} - \item Intégration de {\em systemd} comme système d'init - \item Utilisation de {\em udev} pour le chargement automatique de - modules - \end{itemize} - - \vspace{0.5cm} - {\em Mise en oeuvre sur la plateforme embarquée.} -} - -\feagendaonecolumn -{Cours - Développement et déboguage d'application} -{ - \begin{itemize} - \item Langages de programmations et bibliothèques disponibles. - \item {\em Build system} pour votre application, un aperçu de {\em - CMake} et {\em Meson} - \item Le débogueur {\em gdb} : déboguage d'applications à distance - avec gdb et gdbserver, analyse post-mortem d'une application. - \item Analyse de performance, outils de {\em tracing} et {\em - profiling}, analyseurs mémoire : \code{strace}, \code{ltrace}, - \code{perf}, \code{valgrind} - \end{itemize} -} - -\feagendaonecolumn -{TP – Développement et déboguage d'application} -{ - \begin{itemize} - \item Création d'une application qui utilise un joystick connecté - sur I2C pour contrôler un player audio. - \item Mise en place d'un IDE pour le développement et le déboguage - d'une application. - \item Utilisation de {\em strace}, {\em ltrace}, {\em gdbserver} et - {\em perf} pour déboguer/investiguer des applications - problématiques sur la plateforme embarquée. - \end{itemize} - {\em Mise en oeuvre sur la plateforme embarquée.} -} - -\feagendaonecolumn -{Lecture - Ressources utiles} -{ - \begin{itemize} - \item Livres sur Linux embarqué et la programmation système - \item Ressources sur Internet - \item Conférences internationales - \end{itemize} -} +\onlineagenda \end{document} From abcb7729b55e3b699a8c07316511dcc7bc9ceab3 Mon Sep 17 00:00:00 2001 From: Thomas Bonnefille Date: Fri, 15 Nov 2024 16:17:00 +0100 Subject: [PATCH 07/18] agenda: define different section for the linux kernel course Signed-off-by: Thomas Bonnefille --- agenda/linux-kernel.inc | 855 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 855 insertions(+) diff --git a/agenda/linux-kernel.inc b/agenda/linux-kernel.inc index 43b65de548..8da2340a53 100644 --- a/agenda/linux-kernel.inc +++ b/agenda/linux-kernel.inc @@ -1,4 +1,5 @@ \usepackage{ifthen} +\input{agenda/common.inc} \def \training{kernel} % Title @@ -100,3 +101,857 @@ % Time ratio \def \onsitelecturetimeratio{50} \def \onsitelabtimeratio{50} + +% Agenda items + +\defagendaitem +{intro} +{lecture} +{Introduction to the Linux kernel} +{ + \begin{itemize} + \item Roles of the Linux kernel + \item Kernel user interface (/proc and /sys) + \item Overall architecture + \item Versions of the Linux kernel + \item Kernel source tree organization + \end{itemize} +} +{Introduction au noyau Linux} +{ + \begin{itemize} + \item Fonctionnalités et rôle du noyau. + \item L'interface noyau / espace utilisateur (/proc et /sys). + \item Architecture générale + \item Versions du noyau Linux + \item Organisation du code source + \end{itemize} +} +\defagendaitem +{fetchkernel} +{lab} +{Downloading the Linux kernel source code} +{ + \begin{itemize} + \item Download the Linux kernel code from Git + \end{itemize} +} +{Téléchargement du noyau Linux} +{ + \begin{itemize} + \item Téléchargement du noyau Linux en utilisant Git + \end{itemize} +} +\defagendaitem +{kernelsource} +{lecture} +{Linux kernel source code} +{ + \begin{itemize} + \item Specifics of Linux kernel development + \item Coding standards + \item Stability of interfaces + \item Licensing aspects + \item User-space drivers + \end{itemize} +} +{Le code source du noyau} +{ + \begin{itemize} + \item Spécificités du développement noyau + \item Conventions de codage + \item Stabilité des interfaces + \item Aspects juridiques : license + \item Pilotes de périphérique en espace utilisateur + \end{itemize} +} +\defagendaitem +{kernelsource} +{lab} +{Kernel sources} +{ + \begin{itemize} + \item Making searches in the Linux kernel sources: looking for C + definitions, for definitions of kernel configuration parameters, + and for other kinds of information. + \item Using the UNIX command line and then kernel source code + browsers. + \end{itemize} +} +{Code source du noyau} +{ + \begin{itemize} + \item Effectuer des recherches dans les sources du noyau Linux : + recherche de définitions C, de paramètres de configuration et d'autres + informations. + \item En utilisant la ligne de commande UNIX et des outils de + navigation dans le code. + \end{itemize} +} +\defagendaitem +{configurekernel} +{lecture} +{Configuring, compiling and booting the Linux kernel} +{ + \begin{itemize} + \item Kernel configuration. + \item Native and cross compilation. Generated files. + \item Booting the kernel. Kernel booting parameters. + \item Mounting a root filesystem on NFS. + \end{itemize} +} +{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} +} +\defagendaitem +{configurekernel} +{lab} +{Kernel configuration, cross-compiling and booting on NFS} +{ + {\em Using the BeagleBone Black board} + \begin{itemize} + \item Configuring, cross-compiling and booting a Linux kernel with + NFS boot support. + \end{itemize} +} +{Configuration, compilation croisée et démarrage sur NFS} +{ + {\em En utilisant la carte BeagleBone Black} + \begin{itemize} + \item Configuration, compilation croisée et démarrage du noyau Linux + avec support de NFS. + \end{itemize} +} +\defagendaitem +{kernelmodule} +{lecture} +{Linux kernel modules} +{ + \begin{itemize} + \item Linux device drivers + \item A simple module + \item Programming constraints + \item Loading, unloading modules + \item Module dependencies + \item Adding sources to the kernel tree + \end{itemize} +} +{Modules noyau Linux} +{ + \begin{itemize} + \item Pilotes de périphériques Linux + \item Un module simple + \item Contraintes de programmation + \item Chargement et déchargement de modules + \item Dépendances entre modules + \item Ajouter du code source à l'arbre du noyau + \end{itemize} +} +\defagendaitem +{kernelmodule} +{lab} +{Writing modules} +{ + {\em Using the BeagleBone Black board} + \begin{itemize} + \item Write a kernel module with several capabilities. + \item Access kernel internals from your module. + \item Set up the environment to compile it + \end{itemize} +} +{Développement de module} +{ + {\em En utilisant la carte BeagleBone Black} + \begin{itemize} + \item Écriture d'un module noyau offrant quelques fonctionnalités + \item Accès aux informations internes du noyau depuis le module + \item Mise en place de l'environnement de compilation + \end{itemize} +} +\defagendaitem +{describehardware} +{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} +} +{Description des périphériques matériels} +{ + \begin{itemize} + \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} +} +\defagendaitem +{describehardware} +{lab} +{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} +} +{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} +} +\defagendaitem +{pinmux} +{lecture} +{Pin muxing} +{ + \begin{itemize} + \item Understand the {\em pinctrl} framework of the kernel + \item Understand how to configure the muxing of pins + \end{itemize} +} +{"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} +} +\defagendaitem +{pinmux} +{lab} +{Pin muxing} +{ + {\em Using the BeagleBone Black board} + \begin{itemize} + \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} +} +{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} +} +\defagendaitem +{devicemodel} +{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} +} +{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} +} +\defagendaitem +{i2c} +{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} +} +{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} +} +\defagendaitem +{i2c} +{lab} +{Communicate with the Nunchuk over I2C} +{ + {\em Using the BeagleBone Black board} + \begin{itemize} + \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} +} +{Communiquer avec le Nunchuk via I2C} +{ + {\em En utilisant la carte BeagleBone Black} + \begin{itemize} + \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} +} +\defagendaitem +{framework} +{lecture} +{Kernel frameworks} +{ + \begin{itemize} + \item Block vs. character devices + \item Interaction of user space applications with the kernel + \item Details on character devices, \code{file_operations}, \code{ioctl()}, etc. + \item Exchanging data to/from user space + \item The principle of kernel frameworks + \end{itemize} +} +{Infrastructures du noyau} +{ + \begin{itemize} + \item Périphériques de type bloc et caractère + \item Interaction entre applications en espace utilisateur et le noyau + \item Détails sur les pilotes caractère, \code{file_operations}, + \code{ioctl()}, etc. + \item Échange de données vers ou depuis l'espace utilisateur + \item Le principe des infrastructures du noyau + \end{itemize} +} +\defagendaitem +{input} +{lecture} +{The input subsystem} +{ + \begin{itemize} + \item Principle of the kernel {\em input} subsystem + \item API offered to kernel drivers to expose input devices + capabilities to user space applications + \item User space API offered by the {\em input} subsystem + \end{itemize} +} +{Le sous-système input} +{ + \begin{itemize} + \item Principe du sous-système {\em input} du noyau + \item API offerte aux pilotes du noyau pour exposer + des fonctionnalités de périphériques d'entrée aux + applications en espace utilisateur. + \item API en espace utilisateur offerte par le + sous-système {\em input} + \end{itemize} +} +\defagendaitem +{nunchukuserspace} +{lab} +{Expose the Nunchuk functionality to user space} +{ + {\em Using the BeagleBone Black board} + \begin{itemize} + \item Extend the Nunchuk driver to expose the Nunchuk features to + user space applications, as a {\em input} device. + \item Test the operation of the Nunchuk using \code{evtest} + \end{itemize} +} +{Exposer la fonctionnalité du Nunchuk en espace utilisateur} +{ + {\em En utilisant la carte BeagleBone Black} + \begin{itemize} + \item Extension du pilote du Nunchuk pour exposer les fonctionnalités + du Nunchuk aux applications en espace utilisateur, comme + un périphérique d'entrée. + \item S'assurer du bon fonctionnement du Nunchuk via \code{evtest} + \end{itemize} +} +\defagendaitem +{memorymanagement} +{lecture} +{Memory management} +{ + \begin{itemize} + \item Linux: memory management - Physical and virtual (kernel and user) address spaces. + \item Linux memory management implementation. + \item Allocating with \code{kmalloc()}. + \item Allocating by pages. + \item Allocating with \code{vmalloc()}. + \end{itemize} +} +{Gestion de la mémoire} +{ + \begin{itemize} + \item Linux : gestion de la mémoire. Espaces d'adressages physique et + virtuel, séparation noyau et espace utilisateur. + \item Implémentation de la gestion de la mémoire dans Linux. + \item Allocation avec \code{kmalloc()}. + \item Allocation par pages. + \item Allocation avec \code{vmalloc()}. + \end{itemize} +} +\defagendaitem +{iomemory} +{lecture} +{I/O memory} +{ + \begin{itemize} + \item I/O memory range registration. + \item I/O memory access. + \item Memory ordering and barriers + \end{itemize} +} +{Entrées-sorties avec le matériel} +{ + \begin{itemize} + \item Enregistrement des plages de mémoire d'E/S. + \item Accès aux plages de mémoire d'E/S. + \item Barrières mémoire. + \end{itemize} +} +\defagendaitem +{iomemory} +{lab} +{Minimal platform driver and access to I/O memory} +{ + {\em Using the BeagleBone Black board} + \begin{itemize} + \item Implement a minimal platform driver + \item Modify the Device Tree to instantiate the new serial port + device. + \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} +} +{Pilote "platform" minimal et accès à la mémoire d'E/S} +{ + {\em En utilisant la carte BeagleBone Black} + \begin{itemize} + \item Réalisation d'un pilote "platform" minimal + \item Modification du Device Tree pour ajouter un nouveau + port série. + \item Réservation des adresses d'E/S utilisées par le port série. + \item Lecture et écriture des registres du périphérique, pour + envoyer des caractères sur le port série. + \end{itemize} +} +\defagendaitem +{miscsubsystem} +{lecture} +{The misc kernel subsystem} +{ + \begin{itemize} + \item What the {\em misc} kernel subsystem is useful for + \item API of the {\em misc} kernel subsystem, both the kernel side + and user space side + \end{itemize} +} +{Le sous-système misc} +{ + \begin{itemize} + \item Utilité du sous-système {\em misc} du noyau + \item API du sous-système {\em misc}, à la fois du côté du noyau, et + du côté de l'espace utilisateur. + \end{itemize} +} +\defagendaitem +{output} +{lab} +{Output-only serial port driver} +{ + {\em Using the BeagleBone Black board} + \begin{itemize} + \item Extend the driver started in the previous lab by registering + it into the {\em misc} subsystem + \item Implement serial port output functionality through the {\em + misc} subsystem + \item Test serial output from user space + \end{itemize} +} +{Pilote de port série en écriture seule} +{ + {\em En utilisant la carte BeagleBone Black} + \begin{itemize} + \item Extension du pilote commencé dans le TP précédent, en + enregistrant celui-ci dans le sous-système {\em misc} + \item Implémentation de l'écriture vers le port série en + utilisant le sous-système {\em misc} + \item Tests d'écriture depuis l'espace utilisateur + \end{itemize} +} +\defagendaitem +{processes} +{lecture} +{Processes, scheduling, sleeping and interrupts} +{ + \begin{itemize} + \item Process management in the Linux kernel. + \item The Linux kernel scheduler and how processes sleep. + \item Interrupt handling in device drivers: interrupt handler + registration and programming, scheduling deferred work. + \end{itemize} +} +{Processus, ordonnancement, sommeil et interruptions} +{ + \begin{itemize} + \item Gestion des processus dans le noyau Linux. + \item L'ordonnanceur du noyau Linux et la mise en sommeil des processus. + \item Gestion des interruptions dans les pilotes de périphérique : + enregistrement et développement des gestionnaires d'interruption, + exécution différée de tâches. + \end{itemize} +} +\defagendaitem +{sleeping} +{lab} +{Sleeping and handling interrupts in a device driver} +{ + {\em Using the BeagleBone Black board} + \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 \code{read()} file operation. + \item Waking up the code when data is available from the device. + \end{itemize} +} +{Mise en sommeil et gestion d'interruptions dans un pilote de périphérique} +{ + {\em En utilisant la carte BeagleBone Black} + \begin{itemize} + \item Ajout de la fonctionnalité de lecture au pilote caractère développé + précédemment. + \item Enregistrement d'un gestionnaire d'interruption. + \item Attente de la disponibilité de données dans l'opération \code{read()} + \item Réveil lorsque les données deviennent disponibles. + \end{itemize} +} +\defagendaitem +{locking} +{lecture} +{Locking} +{ + \begin{itemize} + \item Issues with concurrent access to shared resources + \item Locking primitives: mutexes, semaphores, spinlocks. + \item Atomic operations. + \item Typical locking issues. + \item Using the lock validator to identify the sources of locking + problems. + \end{itemize} +} +{Verrouillage} +{ + \begin{itemize} + \item Problématique de l'accès concurrent à des ressources partagées + \item Primitives de verrouillage : mutexes, sémaphores, spinlocks. + \item Opérations atomiques. + \item Problèmes typiques de verrouillage. + \item Utilisation du validateur de verrouillage pour identifier les + sources de problèmes. + \end{itemize} +} +\defagendaitem +{locking} +{lab} +{Locking} +{ + {\em Using the BeagleBone Black board} + \begin{itemize} + \item Add locking to the current driver + \end{itemize} +} +{Verrouillage} +{ + {\em En utilisant la carte BeagleBone Black} + \begin{itemize} + \item Ajout de mécanismes de verrouillage au pilote en cours + \end{itemize} +} +\defagendaitem +{dma} +{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} +} +{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} +} +\defagendaitem +{dma} +{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} +} +{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} +} +\defagendaitem +{debugging} +{lecture} +{Driver debugging techniques} +{ + \begin{itemize} + \item Debugging with printing functions + \item Using Debugfs + \item Analyzing a kernel oops + \item Using kgdb, a kernel debugger + \item Using the Magic SysRq commands + \end{itemize} +} +{Techniques de débogage noyau} +{ + \begin{itemize} + \item Débogage avec les fonctions d'affichage + \item Utilisation de debugfs + \item Analyse d'un oops noyau + \item Utilisation de kgdb, un débogueur noyau + \item Utilisation des commandes SysRq + \end{itemize} +} +\defagendaitem +{debugging} +{lab} +{Investigating kernel faults} +{ + {\em Using the BeagleBone Black board} + \begin{itemize} + \item Studying a broken driver. + \item Analyzing a kernel fault message and locating the problem in the + source code. + \end{itemize} +} +{Investigation de bugs noyau} +{ + {\em En utilisant la carte BeagleBone Black} + \begin{itemize} + \item Étude d'un pilote incorrect. + \item Analyse du message d'erreur et recherche du problème dans le code + source. + \end{itemize} +} +\defagendaitem +{arm} +{lecture} +{ARM board support and SoC support} +{ + \begin{itemize} + \item Understand the organization of the ARM support code + \item Understand how the kernel can be ported to a new hardware + board + \end{itemize} +} +{Support de cartes et de SoC ARM} +{ + \begin{itemize} + \item Comprendre l'organisation du code supportant la plateforme ARM + \item Comprendre comment le noyau peut être porté vers un nouveau + matériel + \end{itemize} +} +\defagendaitem +{powermanagement} +{lecture} +{Power management} +{ + \begin{itemize} + \item Overview of the power management features of the kernel + \item Topics covered: clocks, suspend and resume, dynamic frequency + scaling, saving power during idle, runtime power management, + regulators, etc. + \end{itemize} +} +{Gestion de l'énergie} +{ + \begin{itemize} + \item Vue d'ensemble des fonctionnalités de gestion d'énergie du noyau + Linux. + \item Sujets abordés : horloges, mise en veille et réveil, ajustement + automatique de la fréquence, économie d'énergie dans la boucle idle, + "runtime power management", régulateurs, etc. + \end{itemize} +} +\defagendaitem +{kerneldevelopment} +{lecture} +{The Linux kernel development process} +{ + \begin{itemize} + \item Organization of the kernel community + \item The release schedule and process: release candidates, stable + releases, long-term support, etc. + \item Legal aspects, licensing. + \item How to submit patches to contribute code to the community. + \item Kernel resources: books, websites, conferences + \end{itemize} +} +{Le processus de développement du noyau Linux} +{ + \begin{itemize} + \item Organisation de la communauté du noyau Linux + \item Le processus de développement : versions bêta, versions stables, + versions long-terme, etc. + \item Licences et aspects légaux. + \item Comment soumettre des contributions de code à la communauté. + \item Ressources pour le développement noyau : livres, sites Internet, conférences + \end{itemize} +} +\defagendaitem +{iftimeleft} +{lecture} +{If time left} +{ + \begin{itemize} + \item mmap + \end{itemize} +} +{S'il reste du temps} +{ + \begin{itemize} + \item mmap + \end{itemize} +} + +\def \onsiteagenda { + \showagendaday{1} + \showagendaitem{intro}{lecture} + \showagendaitem{fetchkernel}{lab} + \showagendaitem{kernelsource}{lecture} + \showagendaitem{kernelsource}{lab} + \showagendaday{2} + \showagendaitem{configurekernel}{lecture} + \showagendaitem{configurekernel}{lab} + \showagendaitem{kernelmodule}{lecture} + \showagendaitem{kernelmodule}{lab} + \showagendaday{3} + \showagendaitem{describehardware}{lecture} + \showagendaitem{describehardware}{lab} + \showagendaitem{pinmux}{lecture} + \showagendaitem{pinmux}{lab} + \showagendaday{4} + \showagendaitem{devicemodel}{lecture} + \showagendaitem{i2c}{lecture} + \showagendaitem{i2c}{lab} + \showagendaday{5} + \showagendaitem{framework}{lecture} + \showagendaitem{input}{lecture} + \showagendaitem{nunchukuserspace}{lab} + \showagendaday{6} + \showagendaitem{memorymanagement}{lecture} + \showagendaitem{iomemory}{lecture} + \showagendaitem{iomemory}{lab} + \showagendaday{7} + \showagendaitem{miscsubsystem}{lecture} + \showagendaitem{output}{lab} + \showagendaitem{processes}{lecture} + \showagendaitem{sleeping}{lab} + \showagendaday{8} + \showagendaitem{locking}{lecture} + \showagendaitem{locking}{lab} + \showagendaitem{dma}{lecture} + \showagendaitem{dma}{lab} + \showagendaday{9} + \showagendaitem{debugging}{lecture} + \showagendaitem{debugging}{lab} + \showagendaday{10} + \showagendaitem{arm}{lecture} + \showagendaitem{powermanagement}{lecture} + \showagendaitem{kerneldevelopment}{lecture} + \showagendaitem{iftimeleft}{lecture} +} + +\def \onlineagenda { + \showagendaday{1} + \showagendaitem{intro}{lecture} + \showagendaitem{fetchkernel}{lab} + \showagendaitem{kernelsource}{lecture} + \showagendaitem{kernelsource}{lab} + \showagendaitem{configurekernel}{lecture} + \showagendaitem{configurekernel}{lab} + \showagendaday{2} + \showagendaitem{kernelmodule}{lecture} + \showagendaitem{kernelmodule}{lab} + \showagendaitem{describehardware}{lecture} + \showagendaitem{describehardware}{lab} + \showagendaday{3} + \showagendaitem{pinmux}{lecture} + \showagendaitem{pinmux}{lab} + \showagendaitem{devicemodel}{lecture} + \showagendaitem{i2c}{lecture} + \showagendaitem{i2c}{lab} + \showagendaday{4} + \showagendaitem{framework}{lecture} + \showagendaitem{input}{lecture} + \showagendaitem{nunchukuserspace}{lab} + \showagendaday{5} + \showagendaitem{memorymanagement}{lecture} + \showagendaitem{iomemory}{lecture} + \showagendaitem{iomemory}{lab} + \showagendaitem{miscsubsystem}{lecture} + \showagendaitem{output}{lab} + \showagendaday{6} + \showagendaitem{processes}{lecture} + \showagendaitem{sleeping}{lab} + \showagendaitem{locking}{lecture} + \showagendaitem{locking}{lab} + \showagendaday{7} + \showagendaitem{dma}{lecture} + \showagendaitem{dma}{lab} + \showagendaitem{debugging}{lecture} + \showagendaitem{debugging}{lab} + \showagendaitem{arm}{lecture} + \showagendaitem{powermanagement}{lecture} + \showagendaitem{kerneldevelopment}{lecture} + \showagendaitem{iftimeleft}{lecture} +} From a369b5474f94e0af70b6872e6ddfdfd7a693fa89 Mon Sep 17 00:00:00 2001 From: Thomas Bonnefille Date: Fri, 15 Nov 2024 16:40:53 +0100 Subject: [PATCH 08/18] agenda: use commands to refactor the linux kernel agenda Signed-off-by: Thomas Bonnefille --- agenda/linux-kernel-agenda.tex | 438 +--------------------- agenda/linux-kernel-fr-agenda.tex | 451 +---------------------- agenda/linux-kernel-online-agenda.tex | 441 +--------------------- agenda/linux-kernel-online-fr-agenda.tex | 447 +--------------------- 4 files changed, 15 insertions(+), 1762 deletions(-) diff --git a/agenda/linux-kernel-agenda.tex b/agenda/linux-kernel-agenda.tex index 2f0b8ee19a..251ac5fe2f 100644 --- a/agenda/linux-kernel-agenda.tex +++ b/agenda/linux-kernel-agenda.tex @@ -13,51 +13,8 @@ \feshowinfo -\feagendatwocolumn -{Hardware platform for practical labs, option \#1} -{ - The hardware platform used for the practical labs of this training - session is the {\bf BeagleBone Black} board, which features: - - \begin{itemize} - \item An ARM AM335x processor from Texas Instruments (Cortex-A8 - based), 3D acceleration, etc. - \item 512 MB of RAM - \item 2 GB of on-board eMMC storage - \newline(4 GB in Rev C) - \item USB host and device - \item HDMI output - \item 2 x 46 pins headers, to access UARTs, SPI buses, I2C buses - and more. - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[height=5cm]{../slides/beagleboneblack-board/beagleboneblack.png} - \end{center} -} - -\feagendatwocolumn -{Hardware platform for practical labs, option \#2} -{ - {\bf BeaglePlay} board - \begin{itemize} - \item Texas Instruments AM625x (4xARM Cortex-A53 CPU) - \item SoC with 3D acceleration, integrated MCU and many other peripherals. - \item 2 GB of RAM - \item 16 GB of on-board eMMC storage - \item USB host and USB device, microSD, HDMI - \item 2.4 and 5 GHz WiFi, Bluetooth and also Ethernet - \item 1 MicroBus Header (SPI, I2C, UART, ...), OLDI and CSI connector. - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleplay-board/beagleplay.png} - \end{center} -} +\showboarditem{beagleboneblack} +\showboarditem{beagleplay} \feagendaonecolumn {Labs} @@ -81,396 +38,7 @@ I2C, input or memory-mapped devices. } - -\section{Day 1 - Morning} - -\feagendatwocolumn -{Lecture - Introduction to the Linux kernel} -{ - \begin{itemize} - \item Roles of the Linux kernel - \item Kernel user interface (/proc and /sys) - \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 - Linux kernel source code} -{ - \begin{itemize} - \item Specifics of Linux kernel development - \item Coding standards - \item Stability of interfaces - \item Licensing aspects - \item User-space drivers - \end{itemize} -} -{Lab - Kernel sources} -{ - \begin{itemize} - \item Making searches in the Linux kernel sources: looking for C - definitions, for definitions of kernel configuration parameters, - and for other kinds of information. - \item Using the UNIX command line and then kernel source code - browsers. - \end{itemize} -} - -\section{Day 1 - Afternoon} -\feagendatwocolumn -{Lecture - Configuring, compiling and booting the Linux kernel} -{ - \begin{itemize} - \item Kernel configuration. - \item Native and cross compilation. Generated files. - \item Booting the kernel. Kernel booting parameters. - \item Mounting a root filesystem on NFS. - \end{itemize} -} -{Lab - Kernel configuration, cross-compiling and booting on NFS} -{ - {\em Using the BeagleBone Black board} - \begin{itemize} - \item Configuring, cross-compiling and booting a Linux kernel with - NFS boot support. - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Linux kernel modules} -{ - \begin{itemize} - \item Linux device drivers - \item A simple module - \item Programming constraints - \item Loading, unloading modules - \item Module dependencies - \item Adding sources to the kernel tree - \end{itemize} -} -{Lab - Writing modules} -{ - {\em Using the BeagleBone Black board} - \begin{itemize} - \item Write a kernel module with several capabilities. - \item Access kernel internals from your module. - \item Set up the environment to compile it - \end{itemize} -} - -\section{Day 2 - Morning} - -\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} -} -{Lab - 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} -} - -\feagendatwocolumn -{Lecture - Pin muxing} -{ - \begin{itemize} - \item Understand the {\em pinctrl} framework of the kernel - \item Understand how to configure the muxing of pins - \end{itemize} -} -{Lab - Pin muxing} -{ - {\em Using the BeagleBone Black board} - \begin{itemize} - \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 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 - Morning} - -\feagendaonecolumn -{Lecture - Kernel frameworks} -{ - \begin{itemize} - \item Block vs. character devices - \item Interaction of user space applications with the kernel - \item Details on character devices, \code{file_operations}, \code{ioctl()}, etc. - \item Exchanging data to/from user space - \item The principle of kernel frameworks - \end{itemize} -} - -\feagendatwocolumn -{Lecture - The input subsystem} -{ - \begin{itemize} - \item Principle of the kernel {\em input} subsystem - \item API offered to kernel drivers to expose input devices - capabilities to user space applications - \item User space API offered by the {\em input} subsystem - \end{itemize} -} -{Lab - Expose the Nunchuk functionality to user space} -{ - {\em Using the BeagleBone Black board} - \begin{itemize} - \item Extend the Nunchuk driver to expose the Nunchuk features to - user space applications, as a {\em input} device. - \item Test the operation of the Nunchuk using \code{evtest} - \end{itemize} -} - -\section{Day 3 - Afternoon} - -\feagendatwocolumn -{Lecture - Memory management} -{ - \begin{itemize} - \item Linux: memory management - Physical and virtual (kernel and user) address spaces. - \item Linux memory management implementation. - \item Allocating with \code{kmalloc()}. - \item Allocating by pages. - \item Allocating with \code{vmalloc()}. - \end{itemize} -} -{Lecture - I/O memory} -{ - \begin{itemize} - \item I/O memory range registration. - \item I/O memory access. - \item Memory ordering and barriers - \end{itemize} -} - -\feagendaonecolumn -{Lab - Minimal platform driver and access to I/O memory} -{ - {\em Using the BeagleBone Black board} - \begin{itemize} - \item Implement a minimal platform driver - \item Modify the Device Tree to instantiate the new serial port - device. - \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} -} - - -\section{Day 4 - Morning} - -\feagendatwocolumn -{Lecture - The misc kernel subsystem} -{ - \begin{itemize} - \item What the {\em misc} kernel subsystem is useful for - \item API of the {\em misc} kernel subsystem, both the kernel side - and user space side - \end{itemize} -} -{Lab - Output-only serial port driver} -{ - {\em Using the BeagleBone Black board} - \begin{itemize} - \item Extend the driver started in the previous lab by registering - it into the {\em misc} subsystem - \item Implement serial port output functionality through the {\em - misc} subsystem - \item Test serial output from user space - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Processes, scheduling, sleeping and interrupts} -{ - \begin{itemize} - \item Process management in the Linux kernel. - \item The Linux kernel scheduler and how processes sleep. - \item Interrupt handling in device drivers: interrupt handler - registration and programming, scheduling deferred work. - \end{itemize} -} -{Lab - Sleeping and handling interrupts in a device driver} -{ - {\em Using the BeagleBone Black board} - \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 \code{read()} file operation. - \item Waking up the code when data is available from the device. - \end{itemize} -} - -\section{Day 4 - Afternoon} - -\feagendatwocolumn -{Lecture - Locking} -{ - \begin{itemize} - \item Issues with concurrent access to shared resources - \item Locking primitives: mutexes, semaphores, spinlocks. - \item Atomic operations. - \item Typical locking issues. - \item Using the lock validator to identify the sources of locking - problems. - \end{itemize} -} -{Lab - Locking} -{ - {\em Using the BeagleBone Black board} - \begin{itemize} - \item Add locking to the current driver - \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} -{ - \begin{itemize} - \item Debugging with printing functions - \item Using Debugfs - \item Analyzing a kernel oops - \item Using kgdb, a kernel debugger - \item Using the Magic SysRq commands - \end{itemize} -} -{Lab - Investigating kernel faults} -{ - {\em Using the BeagleBone Black board} - \begin{itemize} - \item Studying a broken driver. - \item Analyzing a kernel fault message and locating the problem in the - source code. - \end{itemize} -} - -\section{Day 5 - Afternoon} - -\feagendatwocolumn -{Lecture - ARM board support and SoC support} -{ - \begin{itemize} - \item Understand the organization of the ARM support code - \item Understand how the kernel can be ported to a new hardware - board - \end{itemize} -} -{Lecture - Power management} -{ - \begin{itemize} - \item Overview of the power management features of the kernel - \item Topics covered: clocks, suspend and resume, dynamic frequency - scaling, saving power during idle, runtime power management, - regulators, etc. - \end{itemize} -} - -\feagendaonecolumn -{Lecture - The Linux kernel development process} -{ - \begin{itemize} - \item Organization of the kernel community - \item The release schedule and process: release candidates, stable - releases, long-term support, etc. - \item Legal aspects, licensing. - \item How to submit patches to contribute code to the community. - \item Kernel resources: books, websites, conferences - \end{itemize} -} - -\feagendatwocolumn -{Lecture - If time left} -{ - \begin{itemize} - \item mmap - \end{itemize} -} -{Questions and Answers} -{ - \begin{itemize} - \item Questions and answers with the audience about the course topics - \item Extra presentations if time is left, according what most - participants are interested in. - \end{itemize} -} +\onsiteagenda \end{document} diff --git a/agenda/linux-kernel-fr-agenda.tex b/agenda/linux-kernel-fr-agenda.tex index a92bb37e76..f0323a5b75 100644 --- a/agenda/linux-kernel-fr-agenda.tex +++ b/agenda/linux-kernel-fr-agenda.tex @@ -13,53 +13,8 @@ \feshowinfo -\feagendatwocolumn -{Plateforme matérielle pour les travaux pratiques, option \#1} -{ - La plateforme matérielle utilisée pendant les travaux pratiques de - cette formation est la carte {\bf BeagleBone Black}, dont voici les - caractéristiques : - - \begin{itemize} - \item Un processeur ARM AM335x de Texas Instruments (à base de - Cortex-A8), avec accélération 3D, etc. - \item 512 Mo de RAM - \item 2 Go de stockage eMMC embarqué sur la carte - \newline(4 Go avec la révision C) - \item USB hôte et device - \item Sortie HDMI - \item Connecteurs à 2 x 46 broches, pour accéder aux UARTs, aux - bus SPI, aux bus I2C, et à d'autres entrées/sorties du - processeur. - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[height=5cm]{../slides/beagleboneblack-board/beagleboneblack.png} - \end{center} -} - -\feagendatwocolumn -{Plateforme matérielle pour les travaux pratiques, option \#2} -{ - Carte {\bf BeaglePlay} - \begin{itemize} - \item SoC Texas Instruments AM625x (CPU 4xARM Cortex-A53) - \item SoC avec accélération 3D, MCU intégré et de nombreux autres périphériques. - \item 2 GB de RAM - \item 16 Go de stockage eMMC - \item USB hôte et device, microSD, HDMI - \item WiFi 2.4 and 5 GHz, Bluetooth et aussi Ethernet - \item 1 Header MicroBus (SPI, I2C, UART, ...), connecteurs OLDI et CSI. - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleplay-board/beagleplay.png} - \end{center} -} +\showboarditem{beagleboneblack} +\showboarditem{beagleplay} \feagendaonecolumn {Travaux pratiques} @@ -85,406 +40,6 @@ mappés en mémoire. } - -\section{1\textsuperscript{er} jour - Matin} - -\feagendatwocolumn -{Cours - Introduction au noyau Linux} -{ - \begin{itemize} - \item Fonctionnalités et rôle du noyau. - \item L'interface noyau / espace utilisateur (/proc et /sys). - \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 - Le code source du noyau} -{ - \begin{itemize} - \item Spécificités du développement noyau - \item Conventions de codage - \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 Effectuer des recherches dans les sources du noyau Linux : - recherche de définitions C, de paramètres de configuration et d'autres - informations. - \item En utilisant la ligne de commande UNIX et des outils de - navigation dans le code. - \end{itemize} -} - -\section{1\textsuperscript{er} jour - Après-midi} -\feagendatwocolumn -{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} -} -{TP – Configuration, compilation croisée et démarrage sur NFS} -{ - {\em En utilisant la carte BeagleBone Black} - \begin{itemize} - \item Configuration, compilation croisée et démarrage du noyau Linux - avec support de NFS. - \end{itemize} -} - -\feagendatwocolumn -{Cours – Modules noyau Linux} -{ - \begin{itemize} - \item Pilotes de périphériques Linux - \item Un module simple - \item Contraintes de programmation - \item Chargement et déchargement de modules - \item Dépendances entre modules - \item Ajouter du code source à l'arbre du noyau - \end{itemize} -} -{TP - Développement de module} -{ - {\em En utilisant la carte BeagleBone Black} - \begin{itemize} - \item Écriture d'un module noyau offrant quelques fonctionnalités - \item Accès aux informations internes du noyau depuis le module - \item Mise en place de l'environnement de compilation - \end{itemize} -} - -\section{2\textsuperscript{ème} jour - Matin} - -\feagendatwocolumn -{Cours - Description des périphériques matériels} -{ - \begin{itemize} - \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 - 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} -} - -\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} -} -{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 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 - Matin} - -\feagendaonecolumn -{Cours - Infrastructures du noyau} -{ - \begin{itemize} - \item Périphériques de type bloc et caractère - \item Interaction entre applications en espace utilisateur et le noyau - \item Détails sur les pilotes caractère, \code{file_operations}, - \code{ioctl()}, etc. - \item Échange de données vers ou depuis l'espace utilisateur - \item Le principe des infrastructures du noyau - \end{itemize} -} - -\feagendatwocolumn -{Cours - Le sous-système input} -{ - \begin{itemize} - \item Principe du sous-système {\em input} du noyau - \item API offerte aux pilotes du noyau pour exposer - des fonctionnalités de périphériques d'entrée aux - applications en espace utilisateur. - \item API en espace utilisateur offerte par le - sous-système {\em input} - \end{itemize} -} -{TP - Exposer la fonctionnalité du Nunchuk en espace utilisateur} -{ - {\em En utilisant la carte BeagleBone Black} - \begin{itemize} - \item Extension du pilote du Nunchuk pour exposer les fonctionnalités - du Nunchuk aux applications en espace utilisateur, comme - un périphérique d'entrée. - \item S'assurer du bon fonctionnement du Nunchuk via \code{evtest} - \end{itemize} -} - -\section{3\textsuperscript{ème} jour - Après-midi} - -\feagendatwocolumn -{Cours - Gestion de la mémoire} -{ - \begin{itemize} - \item Linux : gestion de la mémoire. Espaces d'adressages physique et - virtuel, séparation noyau et espace utilisateur. - \item Implémentation de la gestion de la mémoire dans Linux. - \item Allocation avec \code{kmalloc()}. - \item Allocation par pages. - \item Allocation avec \code{vmalloc()}. - \end{itemize} -} -{Cours - Entrées-sorties avec le matériel} -{ - \begin{itemize} - \item Enregistrement des plages de mémoire d'E/S. - \item Accès aux plages de mémoire d'E/S. - \item Barrières mémoire. - \end{itemize} -} - -\feagendaonecolumn -{TP - Pilote "platform" minimal et accès à la mémoire d'E/S} -{ - {\em En utilisant la carte BeagleBone Black} - \begin{itemize} - \item Réalisation d'un pilote "platform" minimal - \item Modification du Device Tree pour ajouter un nouveau - port série. - \item Réservation des adresses d'E/S utilisées par le port série. - \item Lecture et écriture des registres du périphérique, pour - envoyer des caractères sur le port série. - \end{itemize} -} - -\section{4\textsuperscript{ème} jour - Matin} - -\feagendatwocolumn -{Cours - Le sous-système misc} -{ - \begin{itemize} - \item Utilité du sous-système {\em misc} du noyau - \item API du sous-système {\em misc}, à la fois du côté du noyau, et - du côté de l'espace utilisateur. - \end{itemize} -} -{TP - Pilote de port série en écriture seule} -{ - {\em En utilisant la carte BeagleBone Black} - \begin{itemize} - \item Extension du pilote commencé dans le TP précédent, en - enregistrant celui-ci dans le sous-système {\em misc} - \item Implémentation de l'écriture vers le port série en - utilisant le sous-système {\em misc} - \item Tests d'écriture depuis l'espace utilisateur - \end{itemize} -} - -\feagendatwocolumn -{Cours - Processus, ordonnancement, sommeil et interruptions} -{ - \begin{itemize} - \item Gestion des processus dans le noyau Linux. - \item L'ordonnanceur du noyau Linux et la mise en sommeil des processus. - \item Gestion des interruptions dans les pilotes de périphérique : - enregistrement et développement des gestionnaires d'interruption, - exécution différée de tâches. - \end{itemize} -} -{TP - Mise en sommeil et gestion d'interruptions dans un pilote de périphérique} -{ - {\em En utilisant la carte BeagleBone Black} - \begin{itemize} - \item Ajout de la fonctionnalité de lecture au pilote caractère développé - précédemment. - \item Enregistrement d'un gestionnaire d'interruption. - \item Attente de la disponibilité de données dans l'opération \code{read()} - \item Réveil lorsque les données deviennent disponibles. - \end{itemize} -} - -\section{4\textsuperscript{ème} jour - Après-midi} - -\feagendatwocolumn -{Cours - Verrouillage} -{ - \begin{itemize} - \item Problématique de l'accès concurrent à des ressources partagées - \item Primitives de verrouillage : mutexes, sémaphores, spinlocks. - \item Opérations atomiques. - \item Problèmes typiques de verrouillage. - \item Utilisation du validateur de verrouillage pour identifier les - sources de problèmes. - \end{itemize} -} -{TP - Verrouillage} -{ - {\em En utilisant la carte BeagleBone Black} - \begin{itemize} - \item Ajout de mécanismes de verrouillage au pilote en cours - \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} -{ - \begin{itemize} - \item Débogage avec les fonctions d'affichage - \item Utilisation de debugfs - \item Analyse d'un oops noyau - \item Utilisation de kgdb, un débogueur noyau - \item Utilisation des commandes SysRq - \end{itemize} -} -{TP - Investigation de bugs noyau} -{ - {\em En utilisant la carte BeagleBone Black} - \begin{itemize} - \item Étude d'un pilote incorrect. - \item Analyse du message d'erreur et recherche du problème dans le code - source. - \end{itemize} -} - -\section{5\textsuperscript{ème} jour - Après-midi} - -\feagendatwocolumn -{Cours - Support de cartes et de SoC ARM} -{ - \begin{itemize} - \item Comprendre l'organisation du code supportant la plateforme ARM - \item Comprendre comment le noyau peut être porté vers un nouveau - matériel - \end{itemize} -} -{Cours - Gestion de l'énergie} -{ - \begin{itemize} - \item Vue d'ensemble des fonctionnalités de gestion d'énergie du noyau - Linux. - \item Sujets abordés : horloges, mise en veille et réveil, ajustement - automatique de la fréquence, économie d'énergie dans la boucle idle, - "runtime power management", régulateurs, etc. - \end{itemize} -} - -\feagendaonecolumn -{Cours - Le processus de développement du noyau Linux} -{ - \begin{itemize} - \item Organisation de la communauté du noyau Linux - \item Le processus de développement : versions bêta, versions stables, - versions long-terme, etc. - \item Licences et aspects légaux. - \item Comment soumettre des contributions de code à la communauté. - \item Ressources pour le développement noyau : livres, sites Internet, conférences - \end{itemize} -} - -% If we don't put this, strangely, the page overflows!? -\newpage - -\feagendatwocolumn -{Cours - S'il reste du temps} -{ - \begin{itemize} - \item mmap - \end{itemize} -} -{Questions / réponses} -{ - \begin{itemize} - \item Questions / réponses avec les participants autour du noyau Linux - \item Des présentations supplémentaires s'il reste du temps, selon les sujets - qui intéressent le plus les participants. - \end{itemize} -} +\onsiteagenda \end{document} diff --git a/agenda/linux-kernel-online-agenda.tex b/agenda/linux-kernel-online-agenda.tex index 904915e9b9..8556bdf2c8 100644 --- a/agenda/linux-kernel-online-agenda.tex +++ b/agenda/linux-kernel-online-agenda.tex @@ -13,56 +13,13 @@ \feshowinfo -\feagendatwocolumn -{Hardware platform for practical demos, option \#1} -{ - The hardware platform used for the practical demos of this training - session is the {\bf BeagleBone Black} board, which features: - - \begin{itemize} - \item An ARM AM335x processor from Texas Instruments (Cortex-A8 - based), 3D acceleration, etc. - \item 512 MB of RAM - \item 2 GB of on-board eMMC storage - \newline(4 GB in Rev C) - \item USB host and device - \item HDMI output - \item 2 x 46 pins headers, to access UARTs, SPI buses, I2C buses - and more. - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[height=5cm]{../slides/beagleboneblack-board/beagleboneblack.png} - \end{center} -} - -\feagendatwocolumn -{Hardware platform for practical demos, option \#2} -{ - {\bf BeaglePlay} board - \begin{itemize} - \item Texas Instruments AM625x (4xARM Cortex-A53 CPU) - \item SoC with 3D acceleration, integrated MCU and many other peripherals. - \item 2 GB of RAM - \item 16 GB of on-board eMMC storage - \item USB host and USB device, microSD, HDMI - \item 2.4 and 5 GHz WiFi, Bluetooth and also Ethernet - \item 1 MicroBus Header (SPI, I2C, UART, ...), OLDI and CSI connector. - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleplay-board/beagleplay.png} - \end{center} -} +\showboarditem{beagleboneblack} +\showboarditem{beagleplay} \feagendaonecolumn -{Demos} +{Labs} { - The practical demos of this training session use the following + The practical labs of this training session use the following hardware peripherals to illustrate the development of Linux device drivers: @@ -81,395 +38,7 @@ I2C, input or memory-mapped devices. } - -\section{Half day 1} - -\feagendatwocolumn -{Lecture - Introduction to the Linux kernel} -{ - \begin{itemize} - \item Roles of the Linux kernel - \item Kernel user interface (/proc and /sys) - \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 - Linux kernel source code} -{ - \begin{itemize} - \item Specifics of Linux kernel development - \item Coding standards - \item Stability of interfaces - \item Licensing aspects - \item User-space drivers - \end{itemize} -} -{Lab - Kernel sources} -{ - \begin{itemize} - \item Making searches in the Linux kernel sources: looking for C - definitions, for definitions of kernel configuration parameters, - and for other kinds of information. - \item Using the UNIX command line and then kernel source code - browsers. - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Configuring, compiling and booting the Linux kernel} -{ - \begin{itemize} - \item Kernel configuration. - \item Native and cross compilation. Generated files. - \item Booting the kernel. Kernel booting parameters. - \item Mounting a root filesystem on NFS. - \end{itemize} -} -{Demo - Kernel configuration, cross-compiling and booting on NFS} -{ - {\em Using the BeagleBone Black board} - \begin{itemize} - \item Configuring, cross-compiling and booting a Linux kernel with - NFS boot support. - \end{itemize} -} - -\section{Half day 2} - -\feagendatwocolumn -{Lecture - Linux kernel modules} -{ - \begin{itemize} - \item Linux device drivers - \item A simple module - \item Programming constraints - \item Loading, unloading modules - \item Module dependencies - \item Adding sources to the kernel tree - \end{itemize} -} -{Demo - Writing modules} -{ - {\em Using the BeagleBone Black board} - \begin{itemize} - \item Write a kernel module with several capabilities. - \item Access kernel internals from your module. - \item Set up the environment to compile it - \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 - Pin muxing} -{ - \begin{itemize} - \item Understand the {\em pinctrl} framework of the kernel - \item Understand how to configure the muxing of pins - \end{itemize} -} -{Demo - Pin muxing} -{ - {\em Using the BeagleBone Black board} - \begin{itemize} - \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 - 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} -} -{Demo - Communicate with the Nunchuk over I2C} -{ - {\em Using the BeagleBone Black board} - \begin{itemize} - \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{Half day 4} - -\feagendaonecolumn -{Lecture - Kernel frameworks} -{ - \begin{itemize} - \item Block vs. character devices - \item Interaction of user space applications with the kernel - \item Details on character devices, \code{file_operations}, \code{ioctl()}, etc. - \item Exchanging data to/from user space - \item The principle of kernel frameworks - \end{itemize} -} - -\feagendatwocolumn -{Lecture - The input subsystem} -{ - \begin{itemize} - \item Principle of the kernel {\em input} subsystem - \item API offered to kernel drivers to expose input devices - capabilities to user space applications - \item User space API offered by the {\em input} subsystem - \end{itemize} -} -{Demo - Expose the Nunchuk functionality to user space} -{ - {\em Using the BeagleBone Black board} - \begin{itemize} - \item Extend the Nunchuk driver to expose the Nunchuk features to - user space applications, as a {\em input} device. - \item Test the operation of the Nunchuk using \code{evtest} - \end{itemize} -} - -\section{Half day 5} - -\feagendatwocolumn -{Lecture - Memory management} -{ - \begin{itemize} - \item Linux: memory management - Physical and virtual (kernel and user) address spaces. - \item Linux memory management implementation. - \item Allocating with \code{kmalloc()}. - \item Allocating by pages. - \item Allocating with \code{vmalloc()}. - \end{itemize} -} -{Lecture - I/O memory} -{ - \begin{itemize} - \item I/O memory range registration. - \item I/O memory access. - \item Memory ordering and barriers - \end{itemize} -} - -\feagendaonecolumn -{Demo - Minimal platform driver and access to I/O memory} -{ - {\em Using the BeagleBone Black board} - \begin{itemize} - \item Implement a minimal platform driver - \item Modify the Device Tree to instantiate the new serial port - device. - \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} -} - -\feagendatwocolumn -{Lecture - The misc kernel subsystem} -{ - \begin{itemize} - \item What the {\em misc} kernel subsystem is useful for - \item API of the {\em misc} kernel subsystem, both the kernel side - and user space side - \end{itemize} -} -{Demo - Output-only serial port driver} -{ - {\em Using the BeagleBone Black board} - \begin{itemize} - \item Extend the driver started in the previous lab by registering - it into the {\em misc} subsystem - \item Implement serial port output functionality through the {\em - misc} subsystem - \item Test serial output from user space - \end{itemize} -} - -\section{Half day 6} - -\feagendatwocolumn -{Lecture - Processes, scheduling, sleeping and interrupts} -{ - \begin{itemize} - \item Process management in the Linux kernel. - \item The Linux kernel scheduler and how processes sleep. - \item Interrupt handling in device drivers: interrupt handler - registration and programming, scheduling deferred work. - \end{itemize} -} -{Demo - Sleeping and handling interrupts in a device driver} -{ - {\em Using the BeagleBone Black board} - \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 \code{read()} file operation. - \item Waking up the code when data is available from the device. - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Locking} -{ - \begin{itemize} - \item Issues with concurrent access to shared resources - \item Locking primitives: mutexes, semaphores, spinlocks. - \item Atomic operations. - \item Typical locking issues. - \item Using the lock validator to identify the sources of locking - problems. - \end{itemize} -} -{Demo - Locking} -{ - {\em Using the BeagleBone Black board} - \begin{itemize} - \item Add locking to the current driver - \end{itemize} -} - -\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} -{ - \begin{itemize} - \item Debugging with printing functions - \item Using Debugfs - \item Analyzing a kernel oops - \item Using kgdb, a kernel debugger - \item Using the Magic SysRq commands - \end{itemize} -} -{Demo - Investigating kernel faults} -{ - {\em Using the BeagleBone Black board} - \begin{itemize} - \item Studying a broken driver. - \item Analyzing a kernel fault message and locating the problem in the - source code. - \end{itemize} -} - -\feagendatwocolumn -{Lecture - ARM board support and SoC support} -{ - \begin{itemize} - \item Understand the organization of the ARM support code - \item Understand how the kernel can be ported to a new hardware - board - \end{itemize} -} -{Lecture - Power management} -{ - \begin{itemize} - \item Overview of the power management features of the kernel - \item Topics covered: clocks, suspend and resume, dynamic frequency - scaling, saving power during idle, runtime power management, - regulators, etc. - \end{itemize} -} - -\feagendaonecolumn -{Lecture - The Linux kernel development process} -{ - \begin{itemize} - \item Organization of the kernel community - \item The release schedule and process: release candidates, stable - releases, long-term support, etc. - \item Legal aspects, licensing. - \item How to submit patches to contribute code to the community. - \item Kernel resources: books, websites, conferences - \end{itemize} -} - -\feagendatwocolumn -{Lecture - If time left} -{ - \begin{itemize} - \item mmap - \end{itemize} -} -{Questions and Answers} -{ - \begin{itemize} - \item Questions and answers with the audience about the course topics - \item Extra presentations if time is left, according what most - participants are interested in. - \end{itemize} -} - -\section{Possible extra time} - -{\em Extra time (up to 4 hours) may be proposed if the agenda didn't fit in 7 half days, - according to the time spent answering questions from participants.} +\onlineagenda \end{document} diff --git a/agenda/linux-kernel-online-fr-agenda.tex b/agenda/linux-kernel-online-fr-agenda.tex index ab67842faf..e83dd14fe3 100644 --- a/agenda/linux-kernel-online-fr-agenda.tex +++ b/agenda/linux-kernel-online-fr-agenda.tex @@ -13,56 +13,11 @@ \feshowinfo -\feagendatwocolumn -{Plateforme matérielle pour les démonstrations, option \#1} -{ - La plateforme matérielle utilisée pendant les travaux pratiques de - cette formation est la carte {\bf BeagleBone Black}, dont voici les - caractéristiques : - - \begin{itemize} - \item Un processeur ARM AM335x de Texas Instruments (à base de - Cortex-A8), avec accélération 3D, etc. - \item 512 Mo de RAM - \item 2 Go de stockage eMMC embarqué sur la carte - \newline(4 Go avec la révision C) - \item USB hôte et device - \item Sortie HDMI - \item Connecteurs à 2 x 46 broches, pour accéder aux UARTs, aux - bus SPI, aux bus I2C, et à d'autres entrées/sorties du - processeur. - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[height=5cm]{../slides/beagleboneblack-board/beagleboneblack.png} - \end{center} -} - -\feagendatwocolumn -{Plateforme matérielle pour les démonstrations, option \#2} -{ - Carte {\bf BeaglePlay} - \begin{itemize} - \item SoC Texas Instruments AM625x (CPU 4xARM Cortex-A53) - \item SoC avec accélération 3D, MCU intégré et de nombreux autres périphériques. - \item 2 GB de RAM - \item 16 Go de stockage eMMC - \item USB hôte et device, microSD, HDMI - \item WiFi 2.4 and 5 GHz, Bluetooth et aussi Ethernet - \item 1 Header MicroBus (SPI, I2C, UART, ...), connecteurs OLDI et CSI. - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleplay-board/beagleplay.png} - \end{center} -} +\showboarditem{beagleboneblack} +\showboarditem{beagleplay} \feagendaonecolumn -{Démos} +{Travaux pratiques} { Les travaux pratiques de cette formation font appel aux périphériques matériels suivants, pour illustrer le développement de pilotes de @@ -85,400 +40,6 @@ mappés en mémoire. } - -\section{1\textsuperscript{ère} demi-journée} - -\feagendatwocolumn -{Cours - Introduction au noyau Linux} -{ - \begin{itemize} - \item Fonctionnalités et rôle du noyau. - \item L'interface noyau / espace utilisateur (/proc et /sys). - \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 - Le code source du noyau} -{ - \begin{itemize} - \item Spécificités du développement noyau - \item Conventions de codage - \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 Effectuer des recherches dans les sources du noyau Linux : - recherche de définitions C, de paramètres de configuration et d'autres - informations. - \item En utilisant la ligne de commande UNIX et des outils de - navigation dans le code. - \end{itemize} -} - -\feagendaonecolumn -{Démo – Configuration, compilation croisée et démarrage sur NFS} -{ - {\em En utilisant la carte BeagleBone Black} - \begin{itemize} - \item Configuration, compilation croisée et démarrage du noyau Linux - avec support de NFS. - \end{itemize} -} - -\section{2\textsuperscript{ème} demi-journée} - -\feagendatwocolumn -{Cours – Modules noyau Linux} -{ - \begin{itemize} - \item Pilotes de périphériques Linux - \item Un module simple - \item Contraintes de programmation - \item Chargement et déchargement de modules - \item Dépendances entre modules - \item Ajouter du code source à l'arbre du noyau - \end{itemize} -} -{Démo - Développement de module} -{ - {\em En utilisant la carte BeagleBone Black} - \begin{itemize} - \item Écriture d'un module noyau offrant quelques fonctionnalités - \item Accès aux informations internes du noyau depuis le module - \item Mise en place de l'environnement de compilation - \end{itemize} -} - -\feagendatwocolumn -{Cours - Description des périphériques matériels} -{ - \begin{itemize} - \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} - -\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 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} -} - -\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} -} -{Démo - Communiquer avec le Nunchuk via I2C} -{ - {\em En utilisant la carte BeagleBone Black} - \begin{itemize} - \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{4\textsuperscript{ème} demi-journée} - -\feagendaonecolumn -{Cours - Infrastructures du noyau} -{ - \begin{itemize} - \item Périphériques de type bloc et caractère - \item Interaction entre applications en espace utilisateur et le noyau - \item Détails sur les pilotes caractère, \code{file_operations}, - \code{ioctl()}, etc. - \item Échange de données vers ou depuis l'espace utilisateur - \item Le principe des infrastructures du noyau - \end{itemize} -} - -\feagendatwocolumn -{Cours - Le sous-système input} -{ - \begin{itemize} - \item Principe du sous-système {\em input} du noyau - \item API offerte aux pilotes du noyau pour exposer - des fonctionnalités de périphériques d'entrée aux - applications en espace utilisateur. - \item API en espace utilisateur offerte par le - sous-système {\em input} - \end{itemize} -} -{Démo - Exposer la fonctionnalité du Nunchuk en espace utilisateur} -{ - {\em En utilisant la carte BeagleBone Black} - \begin{itemize} - \item Extension du pilote du Nunchuk pour exposer les fonctionnalités - du Nunchuk aux applications en espace utilisateur, comme - un périphérique d'entrée. - \item S'assurer du bon fonctionnement du Nunchuk via \code{evtest} - \end{itemize} -} - -\section{5\textsuperscript{ème} demi-journée} - -\feagendatwocolumn -{Cours - Gestion de la mémoire} -{ - \begin{itemize} - \item Linux : gestion de la mémoire. Espaces d'adressages physique et - virtuel, séparation noyau et espace utilisateur. - \item Implémentation de la gestion de la mémoire dans Linux. - \item Allocation avec \code{kmalloc()}. - \item Allocation par pages. - \item Allocation avec \code{vmalloc()}. - \end{itemize} -} -{Cours - Entrées-sorties avec le matériel} -{ - \begin{itemize} - \item Enregistrement des plages de mémoire d'E/S. - \item Accès aux plages de mémoire d'E/S. - \item Barrières mémoire. - \end{itemize} -} - -\feagendaonecolumn -{Démo - Pilote "platform" minimal et accès à la mémoire d'E/S} -{ - {\em En utilisant la carte BeagleBone Black} - \begin{itemize} - \item Réalisation d'un pilote "platform" minimal - \item Modification du Device Tree pour ajouter un nouveau - port série. - \item Réservation des adresses d'E/S utilisées par le port série. - \item Lecture et écriture des registres du périphérique, pour - envoyer des caractères sur le port série. - \end{itemize} -} - -\feagendatwocolumn -{Cours - Le sous-système misc} -{ - \begin{itemize} - \item Utilité du sous-système {\em misc} du noyau - \item API du sous-système {\em misc}, à la fois du côté du noyau, et - du côté de l'espace utilisateur. - \end{itemize} -} -{Démo - Pilote de port série en écriture seule} -{ - {\em En utilisant la carte BeagleBone Black} - \begin{itemize} - \item Extension du pilote commencé dans la démo précédente, en - enregistrant celui-ci dans le sous-système {\em misc} - \item Implémentation de l'écriture vers le port série en - utilisant le sous-système {\em misc} - \item Tests d'écriture depuis l'espace utilisateur - \end{itemize} -} - -\section{6\textsuperscript{ème} demi-journée} - -\feagendatwocolumn -{Cours - Processus, ordonnancement, sommeil et interruptions} -{ - \begin{itemize} - \item Gestion des processus dans le noyau Linux. - \item L'ordonnanceur du noyau Linux et la mise en sommeil des processus. - \item Gestion des interruptions dans les pilotes de périphérique : - enregistrement et développement des gestionnaires d'interruption, - exécution différée de tâches. - \end{itemize} -} -{Démo - Mise en sommeil et gestion d'interruptions dans un pilote de périphérique} -{ - {\em En utilisant la carte BeagleBone Black} - \begin{itemize} - \item Ajout de la fonctionnalité de lecture au pilote caractère développé - précédemment. - \item Enregistrement d'un gestionnaire d'interruption. - \item Attente de la disponibilité de données dans l'opération \code{read()} - \item Réveil lorsque les données deviennent disponibles. - \end{itemize} -} - -\feagendatwocolumn -{Cours - Verrouillage} -{ - \begin{itemize} - \item Problématique de l'accès concurrent à des ressources partagées - \item Primitives de verrouillage : mutexes, sémaphores, spinlocks. - \item Opérations atomiques. - \item Problèmes typiques de verrouillage. - \item Utilisation du validateur de verrouillage pour identifier les - sources de problèmes. - \end{itemize} -} -{Démo - Verrouillage} -{ - {\em En utilisant la carte BeagleBone Black} - \begin{itemize} - \item Ajout de mécanismes de verrouillage au pilote en cours - \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} -{ - \begin{itemize} - \item Débogage avec les fonctions d'affichage - \item Utilisation de debugfs - \item Analyse d'un oops noyau - \item Utilisation de kgdb, un débogueur noyau - \item Utilisation des commandes SysRq - \end{itemize} -} -{Démo - Investigation de bugs noyau} -{ - {\em En utilisant la carte BeagleBone Black} - \begin{itemize} - \item Étude d'un pilote incorrect. - \item Analyse du message d'erreur et recherche du problème dans le code - source. - \end{itemize} -} - -\feagendaonecolumn -{Cours - Support de cartes et de SoC ARM} -{ - \begin{itemize} - \item Comprendre l'organisation du code supportant la plateforme ARM - \item Comprendre comment le noyau peut être porté vers un nouveau - matériel - \end{itemize} -} - -\feagendaonecolumn -{Cours - Gestion de l'énergie} -{ - \begin{itemize} - \item Vue d'ensemble des fonctionnalités de gestion d'énergie du noyau - Linux. - \item Sujets abordés : horloges, mise en veille et réveil, ajustement - automatique de la fréquence, économie d'énergie dans la boucle idle, - "runtime power management", régulateurs, etc. - \end{itemize} -} - -\feagendaonecolumn -{Cours - Le processus de développement du noyau Linux} -{ - \begin{itemize} - \item Organisation de la communauté du noyau Linux - \item Le processus de développement : versions bêta, versions stables, - versions long-terme, etc. - \item Licences et aspects légaux. - \item Comment soumettre des contributions de code à la communauté. - \item Ressources pour le développement noyau : livres, sites Internet, conférences - \end{itemize} -} - -% If we don't put this, strangely, the page overflows!? -\newpage - -\feagendatwocolumn -{Cours - S'il reste du temps} -{ - \begin{itemize} - \item DMA - \item mmap - \end{itemize} -} -{Questions / réponses} -{ - \begin{itemize} - \item Questions / réponses avec les participants autour du noyau Linux - \item Des présentations supplémentaires s'il reste du temps, selon les sujets - qui intéressent le plus les participants. - \end{itemize} -} - -\section{Temps supplémentaire possible} - -{\em Du temps supplémentaire (jusqu'à 4 heures) pourrait être proposé si le programme ne tenait - pas en 7 demi-journées, selon le temps passé à répondre aux questions des participants.} +\onlineagenda \end{document} From 444cd9566151bd389762159e264cc75819f8ecc6 Mon Sep 17 00:00:00 2001 From: Thomas Bonnefille Date: Fri, 15 Nov 2024 17:22:26 +0100 Subject: [PATCH 09/18] agenda: define different section for the buildroot course Signed-off-by: Thomas Bonnefille --- agenda/buildroot.inc | 572 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 572 insertions(+) diff --git a/agenda/buildroot.inc b/agenda/buildroot.inc index b6a8de48dd..0c797382b7 100644 --- a/agenda/buildroot.inc +++ b/agenda/buildroot.inc @@ -1,4 +1,6 @@ \usepackage{ifthen} +\input{agenda/common.inc} + \def \training{buildroot} % Title @@ -95,3 +97,573 @@ % Time ratio \def \onsitelecturetimeratio{40} \def \onsitelabtimeratio{60} + +% Agenda items + +\defagendaitem +{intro} +{lecture} +{Embedded Linux and build system introduction} +{ + \begin{itemize} + \item The general architecture of an embedded Linux system + \item Build systems vs. binary distributions + \item Role of a build system + \item Comparison of existing build systems + \end{itemize} +} +{Introduction à Buildroot et aux systèmes de build} +{ + \begin{itemize} + \item Architecture générale d'une système Linux embarqué + \item Choix entre systèmes de build et distributions binaires + \item Rôle d'un système de build + \item Comparaison des systèmes de build existants + \end{itemize} +} +\defagendaitem +{introbuildroot} +{lecture} +{Introduction to Buildroot} +{ + \begin{itemize} + \item Key facts about the project + \item Getting Buildroot + \item Basic configuration of Buildroot + \item Doing a first build + \end{itemize} +} +{Présentation de Buildroot} +{ + \begin{itemize} + \item Points clés autour du projet + \item Téléchargement des sources de Buildroot + \item Configuration simple de Buildroot + \item Exécution d'une premières compilation + \end{itemize} +} +\defagendaitem +{basic} +{lab} +{Basic Buildroot usage} +{ + \begin{itemize} + \item Getting and setting up Buildroot + \item Configuring and building a basic system with Buildroot for an + embedded platform + \item Flash and test the generated system on the embedded platform + \end{itemize} +} +{Utilisation simple de Buildroot} +{ + \begin{itemize} + \item Téléchargement et configuration de Buildroot + \item Configurer et compiler un système simple avec Buildroot pour + un système embarqué + \item Flasher et tester le système généré par Buildroot + \end{itemize} +} +\defagendaitem +{configuration} +{lecture} +{Managing the build and configuration} +{ + \begin{itemize} + \item Out of tree build + \item Using and creating {\em defconfigs} + \item Defconfig fragments + \item Other building tips + \end{itemize} +} +{Gestion de la compilation et de la configuration} +{ + \begin{itemize} + \item Compilation en dehors des sources + \item Utiliser et créer des fichiers {\em defconfigs} + \item Fragments de {\em defconfigs} + \item Autres astuces pour la compilation + \end{itemize} +} +\defagendaitem +{buildrootsource} +{lecture} +{Buildroot source and build trees} +{ + \begin{itemize} + \item Details about the Buildroot source code organization + \item Details about the Buildroot build tree + \end{itemize} +} +{Sources de Buildroot et arborescence des fichiers générés} +{ + \begin{itemize} + \item Détails sur l'organisation du code source de Buildroot + \item Détails sur l'arborescence des fichiers générés + \end{itemize} +} +\defagendaitem +{toolchain} +{lecture} +{Toolchains in Buildroot} +{ + \begin{itemize} + \item The different choices for using toolchains in Buildroot + \item Overview of the toolchain options + \item Using existing binary toolchains, such as Bootlin + toolchains, understanding {\em multilib} capabilities and + integration of toolchains in Buildroot + \item Generating custom toolchains with {\em Crosstool-NG}, and + re-use them as external toolchains + \end{itemize} +} +{Chaînes de compilation {\em toolchains} dans Buildroot} +{ + \begin{itemize} + \item Les différents possibilités d'usage de chaînes de compilation + dans Buildroot. + \item Tour d'horizon des options liées aux chaînes de compilation. + \item Utilisation de chaînes des compilation binaires, comme + celles de Bootlin. Détails sur les fonctionnalités + {\em multilib} et l'intégration des toolchains dans Buildroot. + \item Génération de toolchains sur mesure avec {\em Crosstool-NG}, + et leur utilisation comme chaînes externes. + \end{itemize} +} +\defagendaitem +{manageconfiguration} +{lecture} +{Managing the Linux kernel configuration} +{ + \begin{itemize} + \item Loading, changing and saving the kernel configuration + \end{itemize} +} +{Gestion de la configuration du noyau Linux} +{ + \begin{itemize} + \item Charger, modifier et sauvegarder la configuration du noyau. + \end{itemize} +} +\defagendaitem +{rootfsconstruction} +{lecture} +{Root filesystem construction in Buildroot} +{ + \begin{itemize} + \item Understand how Buildroot builds the root filesystem: {\em + skeleton}, installation of packages, overlays, {\em post-build} + and {\em post-image} scripts. + \item Customization of the root filesystem contents + \item System configuration: {\em console} selection, various {\tt + /dev} management methods, the different {\tt init} + implementations, etc. + \item Understand how Buildroot generates filesystem images + \end{itemize} +} +{Construction du système de fichier racine dans Buildroot} +{ + \begin{itemize} + \item Comprendre comment Buildroot construit le système de fichiers + racine : {\em skeleton}, installation de composants, {\em + overlays}, scripts {\em post-build} et {\em post-image}. + \item Personnalisation du contenu du système de fichiers + \item Configuration du système : sélection de la {\em console}, + plusieurs méthode de gestion de {\tt /dev}, les différentes + implémentations d'{\tt init}, etc. + \item Comprendre comment Buildroot génère les images de systèmes de + fichiers. + \end{itemize} +} +\defagendaitem +{rootfscustomization} +{lab} +{Root filesystem customization} +{ + \begin{itemize} + \item Explore the build output + \item Customize the root filesystem using a {\em rootfs overlay} + \item Customize the kernel with patches and additional configuration + options + \item Add more packages + \item Use {\em defconfig} files and {\em out of tree} build + \end{itemize} +} +{Personnalisation du système de fichiers} +{ + \begin{itemize} + \item Exploration des fichiers générés + \item Personnalisation du système de fichiers racine en utilisant un {\em rootfs overlay} + \item Personnaliser le noyau avec des correctifs et des options de + configuration supplémentaires + \item Rajout de nouveaux composants + \item Utilisation de fichiers {\em defconfig} et compilation en + dehors des sources. + \end{itemize} +} +\defagendaitem +{downloadbuildroot} +{lecture} +{Download infrastructure in Buildroot} +{ + \begin{itemize} + \item Downloading logic + \item Primary site and backup site, doing offline builds + \item VCS download, integrity checking + \item Download-related {\em make} targets + \end{itemize} +} +{Infrastructure de téléchargement dans Buildroot} +{ + \begin{itemize} + \item Méthodologie de téléchargement + \item Site primaire et sites de backup, compilation en mode déconnecté + \item Téléchargement via systèmes de contrôle de versions, + vérification d'intégrité + \item Cibles {\em make} en rapport avec les téléchargements + \end{itemize} +} +\defagendaitem +{gnumake} +{lecture} +{GNU Make 101} +{ + \begin{itemize} + \item Basics of make rules + \item Defining and referencing variables + \item Conditions, functions + \item Writing recipes + \end{itemize} +} +{Introduction à GNU Make} +{ + \begin{itemize} + \item Éléments de base des règles de make + \item Définition et utilisation de variables + \item Conditions et fonctions + \item Écriture de recettes + \end{itemize} +} +\defagendaitem +{newpackage} +{lecture} +{Integrating new packages in Buildroot} +{ + \begin{itemize} + \item How to integrate new packages in the Buildroot configuration + system + \item Understand the different package infrastructures: for {\em + generic}, {\em autotools}, {\em CMake}, {\em Python} packages + and more. + \item Writing a package \code{Config.in} file: how to express + dependencies on other packages, on toolchain options, etc. + \item Details on writing a package recipe: describing the package + source code location, download method, configuration, build and + installation steps, handling dependencies, etc. + \end{itemize} +} +{Intégration de nouveaux composants dans Buildroot} +{ + \begin{itemize} + \item Comment rajouter de nouveaux paquetages au système de + configuration de Buildroot + \item Comprendre les différentes infrastructures de paquetages : pour + des composants {\em generic}, {\em autotools}, {\em CMake}, {\em + Python} et autres + \item Écriture un fichier \code{Config.in} pour un composant : comment + exprimer des dépendances vers d'autres composants, vers des options + de toolchains, etc. + \item Détails sur l'écriture d'une recette pour un composant : + description de l'emplacement du code source, de la méthode de + téléchargement, de configuration, de compilation et + d'installation, gestion des dépendances, etc. + \end{itemize} +} +\defagendaitem +{newpackage} +{lab} +{New packages in Buildroot} +{ + \begin{itemize} + \item Create a new package for {\em nInvaders} + \item Understand how to add dependencies + \item Add patches to {\em nInvaders} for {\em Nunchuk} support + \end{itemize} +} +{Nouveaux composants dans Buildroot} +{ + \begin{itemize} + \item Création d'un nouveau paquetage pour {\em nInvaders} + \item Comprendre comment rajouter des dépendances + \item Ajouter des correctifs pour {\em nInvaders} pour prendre en + charge le contrôle via un {\em Nunchuk} + \end{itemize} +} +\defagendaitem +{advancepackage} +{lecture} +{Advanced package aspects} +{ + \begin{itemize} + \item Licensing report + \item Patching support: patch ordering and format, global patch directory, etc. + \item User, permission, device tables + \item Init scripts and systemd unit files + \item Config scripts + \item Understanding {\em hooks} + \item Overriding commands + \item Legacy handling + \item Virtual packages + \end{itemize} +} +{Notions avancées sur les paquetages} +{ + \begin{itemize} + \item Rapport de licences + \item Prise en charge des correctifs : ordre d'application et format, + répertoire global pour les correctifs, etc. + \item Utilisateur, droit d'accès, tables de fichiers devices + \item Script d'init et fichiers unitaires pour systemd + \item Scripts de configuration + \item Compréhension des {\em hooks} + \item Surcharger des commandes + \item Gestion des paquetages legacy + \item Paquetages virtuels + \end{itemize} +} +\defagendaitem +{advancepackage} +{lab} +{Advanced packages} +{ + \begin{itemize} + \item Package an application with a mandatory dependency and an + optional dependency + \item Package a library, hosted on GitHub + \item Use {\em hooks} to tweak packages + \item Add a patch to a package + \end{itemize} +} +{Paquetages avancés} +{ + \begin{itemize} + \item Packager une application avec une dépendance obligatoire et + une dépendance optionnelle + \item Packager une bibliothèque, hébergée sur GitHub + \item Utilisation de {\em hooks} pour ajuster les paquetages + \item Rajouter un correctif à un paquetage + \end{itemize} +} +\defagendaitem +{analyzebuild} +{lecture} +{Analyzing the build: licensing, dependencies, build time} +{ + \begin{itemize} + \item Usage of the legal information infrastructure + \item Graphing dependencies of packages + \item Collecting and graphing build time information + \end{itemize} +} +{Analyse d'une compilation : licences, dépendances, temps de +construction} +{ + \begin{itemize} + \item Utilisation de l'infrastructure de gestion des informations + légales + \item Représentation graphique des dépendances entre paquetages + \item Collecte d'informations et représentation du temps de + compilation + \end{itemize} +} +\defagendaitem +{advanced} +{lecture} +{Advanced topics} +{ + \begin{itemize} + \item \code{BR2_EXTERNAL} to store customizations outside of the + Buildroot sources + \item Package-specific targets + \item Understanding rebuilds + \item Tips for building faster + \end{itemize} +} +{Sujets avancés} +{ + \begin{itemize} + \item \code{BR2_EXTERNAL} pour stocker des personnalisations à + l'extérieur des sources de Buildroot + \item Cibles make spécifiques pour les paquetages + \item Comprendre les recompilations + \item Astuces pour compiler plus vite + \end{itemize} +} +\defagendaitem +{advanced} +{lab} +{Advanced aspects} +{ + \begin{itemize} + \item Use build time graphing capabilities + \item Use dependency graphing capabilities + \item Use licensing report generation, and add licensing + information to your own packages + \item Use \code{BR2_EXTERNAL} + \end{itemize} +} +{Sujets avancés} +{ + \begin{itemize} + \item Utilisation des capacités de génération de graphes de temps de + compilation + \item Génération de graphes de dépendances + \item Utilisation du rapport sur les licences, et ajout d'informations + légales à vos propres paquetages + \item Utilisation de \code{BR2_EXTERNAL} + \end{itemize} +} +\defagendaitem +{appdevelopment} +{lecture} +{Application development with Buildroot} +{ + \begin{itemize} + \item Using Buildroot during application development + \item Usage of the Buildroot environment to build applications + outside of Buildroot + \item Generate an SDK for other developers + \item Remote debugging with Buildroot + \end{itemize} +} +{Développement applicatif avec Buildroot} +{ + \begin{itemize} + \item Utilisation de Buildroot pendant le développement d'applications + \item Utilisation de l'environnement de Buildroot pour compiler des + applications en dehors de Buildroot + \item Générer un SDK pour d'autres développeurs + \item Débug à distance avec Buildroot + \end{itemize} +} +\defagendaitem +{appdevelopment} +{lab} +{Application development with Buildroot} +{ + \begin{itemize} + \item Build and run your own application + \item Remote debug your application + \item Use \code{_OVERRIDE_SRCDIR} + \end{itemize} +} +{Développement applicatif avec Buildroot} +{ + \begin{itemize} + \item Compiler et exécuter votre propre application + \item Débug à distance de votre application + \item Utilisation de \code{_OVERRIDE_SRCDIR} + \end{itemize} +} +\defagendaitem +{internals} +{lecture} +{Understanding Buildroot internals} +{ + \begin{itemize} + \item Detailed description of the Buildroot build process: + toolchain, packages, root filesystem construction, stamp files, + etc. + \item Understanding virtual packages. + \end{itemize} +} +{Comprendre les mécanismes internes de Buildroot} +{ + \begin{itemize} + \item Description détaillée du processus de compilation de Buildroot : + toolchain, paquetages, construction du système de fichiers race, + fichiers {\em stamp}, etc. + \item Comprendre les paquetages virtuels. + \end{itemize} +} +\defagendaitem +{support} +{lecture} +{Getting support and contributing} +{ + \begin{itemize} + \item Getting support: {\em Bugzilla}, {\em mailing list}, {\em IRC} + \item Contributing: understanding the development process, how to + submit patches + \end{itemize} +} +{Obtenir de l'aide et s'impliquer} +{ + \begin{itemize} + \item Obtenir de l'assistance technique : {\em Bugzilla}, {\em liste de + discussion}, {\em IRC} + \item Contribuer : comprendre le processus de développement, comment + soumettre des correctifs + \end{itemize} +} + +\def \onlineagenda { + \showagendaday{1} + \showagendaitem{intro}{lecture} + \showagendaitem{introbuildroot}{lecture} + \showagendaitem{basic}{lab} + \showagendaitem{configuration}{lecture} + \showagendaitem{buildrootsource}{lecture} + \showagendaday{2} + \showagendaitem{toolchain}{lecture} + \showagendaitem{manageconfiguration}{lecture} + \showagendaitem{rootfsconstruction}{lecture} + \showagendaitem{rootfscustomization}{lab} + \showagendaitem{downloadbuildroot}{lecture} + \showagendaday{3} + \showagendaitem{gnumake}{lecture} + \showagendaitem{newpackage}{lecture} + \showagendaitem{newpackage}{lab} + \showagendaitem{advancepackage}{lecture} + \showagendaday{4} + \showagendaitem{advancepackage}{lab} + \showagendaitem{analyzebuild}{lecture} + \showagendaitem{advanced}{lecture} + \showagendaitem{advanced}{lab} + \showagendaday{5} + \showagendaitem{appdevelopment}{lecture} + \showagendaitem{appdevelopment}{lab} + \showagendaitem{internals}{lecture} + \showagendaitem{support}{lecture} + \showagendaitem{qna}{misc} +} + +\def \onsiteagenda { + \showagendaday{1} + \showagendaitem{intro}{lecture} + \showagendaitem{introbuildroot}{lecture} + \showagendaitem{basic}{lab} + \showagendaitem{configuration}{lecture} + \showagendaday{2} + \showagendaitem{buildrootsource}{lecture} + \showagendaitem{toolchain}{lecture} + \showagendaitem{manageconfiguration}{lecture} + \showagendaitem{rootfsconstruction}{lecture} + \showagendaitem{rootfscustomization}{lab} + \showagendaday{3} + \showagendaitem{downloadbuildroot}{lecture} + \showagendaitem{gnumake}{lecture} + \showagendaitem{newpackage}{lecture} + \showagendaitem{newpackage}{lab} + \showagendaday{4} + \showagendaitem{advancepackage}{lecture} + \showagendaitem{advancepackage}{lab} + \showagendaday{5} + \showagendaitem{analyzebuild}{lecture} + \showagendaitem{advanced}{lecture} + \showagendaitem{advanced}{lab} + \showagendaday{6} + \showagendaitem{appdevelopment}{lecture} + \showagendaitem{appdevelopment}{lab} + \showagendaitem{internals}{lecture} + \showagendaitem{support}{lecture} +} From d058fcd3ace49cdd9713044bdf66a7a39bac01b4 Mon Sep 17 00:00:00 2001 From: Thomas Bonnefille Date: Sat, 16 Nov 2024 11:42:47 +0100 Subject: [PATCH 10/18] agenda: use commands to refactor the buildroot agenda Signed-off-by: Thomas Bonnefille --- agenda/buildroot-agenda.tex | 298 +---------------------- agenda/buildroot-fr-agenda.tex | 310 +----------------------- agenda/buildroot-online-agenda.tex | 318 +------------------------ agenda/buildroot-online-fr-agenda.tex | 327 +------------------------- 4 files changed, 12 insertions(+), 1241 deletions(-) diff --git a/agenda/buildroot-agenda.tex b/agenda/buildroot-agenda.tex index ade2266557..8cd09ebcac 100644 --- a/agenda/buildroot-agenda.tex +++ b/agenda/buildroot-agenda.tex @@ -13,301 +13,9 @@ \feshowinfo -\feagendatwocolumn -{Hardware platform for practical labs, option \#1} -{ - {\bf BeagleBone Black} board - \begin{itemize} - \item An ARM AM335x (single Cortex-A8) processor from Texas - Instruments - \item USB powered - \item 512 MB of RAM - \item 2 or 4 GB of on-board eMMC storage - \item USB host and device - \item HDMI output - \item 2 x 46 pins headers, to access UARTs, SPI buses, I2C buses - and more. - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleboneblack-board/beagleboneblack.png} - \end{center} -} +\showboarditem{stm32mp1} +\showboarditem{beagleboneblack} -\feagendatwocolumn -{Hardware platform for practical labs, option \#2} -{ - {\bf STMicroelectronics STM32MP157D Discovery Kit~1} board - \begin{itemize} - \item STM32MP157D (dual Cortex-A7) processor from STMicroelectronics - \item USB powered - \item 512 MB DDR3L RAM - \item Gigabit Ethernet port - \item 4 USB 2.0 host ports - \item 1 USB-C OTG port - \item 1 Micro SD slot - \item On-board ST-LINK/V2-1 debugger - \item Arduino compatible headers - \item Audio codec, buttons, LEDs - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} - \end{center} -} - -\section{Day 1 - Morning} - -\feagendatwocolumn -{Lecture - Embedded Linux and build system introduction} -{ - \begin{itemize} - \item The general architecture of an embedded Linux system - \item Build systems vs. binary distributions - \item Role of a build system - \item Comparison of existing build systems - \end{itemize} -} -{Lecture - Introduction to Buildroot} -{ - \begin{itemize} - \item Key facts about the project - \item Getting Buildroot - \item Basic configuration of Buildroot - \item Doing a first build - \end{itemize} -} -\\ -\feagendatwocolumn -{Lab - Basic Buildroot usage} -{ - \begin{itemize} - \item Getting and setting up Buildroot - \item Configuring and building a basic system with Buildroot for an - embedded platform - \item Flash and test the generated system on the embedded platform - \end{itemize} -} -{Lecture - Managing the build and configuration} -{ - \begin{itemize} - \item Out of tree build - \item Using and creating {\em defconfigs} - \item Defconfig fragments - \item Other building tips - \end{itemize} -} - -\section{Day 1 - Afternoon} - - -\feagendatwocolumn -{Lecture - Buildroot source and build trees} -{ - \begin{itemize} - \item Details about the Buildroot source code organization - \item Details about the Buildroot build tree - \end{itemize} -} -{Lecture - Toolchains in Buildroot} -{ - \begin{itemize} - \item The different choices for using toolchains in Buildroot - \item Overview of the toolchain options - \item Using existing binary toolchains, such as Bootlin - toolchains, understanding {\em multilib} capabilities and - integration of toolchains in Buildroot - \item Generating custom toolchains with {\em Crosstool-NG}, and - re-use them as external toolchains - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Managing the Linux kernel configuration} -{ - \begin{itemize} - \item Loading, changing and saving the kernel configuration - \end{itemize} -} -{Lecture - Root filesystem construction in Buildroot} -{ - \begin{itemize} - \item Understand how Buildroot builds the root filesystem: {\em - skeleton}, installation of packages, overlays, {\em post-build} - and {\em post-image} scripts. - \item Customization of the root filesystem contents - \item System configuration: {\em console} selection, various {\tt - /dev} management methods, the different {\tt init} - implementations, etc. - \item Understand how Buildroot generates filesystem images - \end{itemize} -} - -\feagendaonecolumn -{Lab - Root filesystem customization} -{ - \begin{itemize} - \item Explore the build output - \item Customize the root filesystem using a {\em rootfs overlay} - \item Customize the kernel with patches and additional configuration - options - \item Add more packages - \item Use {\em defconfig} files and {\em out of tree} build - \end{itemize} -} - -\section{Day 2 - Morning} - -\feagendatwocolumn -{Lecture - Download infrastructure in Buildroot} -{ - \begin{itemize} - \item Downloading logic - \item Primary site and backup site, doing offline builds - \item VCS download, integrity checking - \item Download-related {\em make} targets - \end{itemize} -} -{Lecture - GNU Make 101} -{ - \begin{itemize} - \item Basics of make rules - \item Defining and referencing variables - \item Conditions, functions - \item Writing recipes - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Integrating new packages in Buildroot} -{ - \begin{itemize} - \item How to integrate new packages in the Buildroot configuration - system - \item Understand the different package infrastructures: for {\em - generic}, {\em autotools}, {\em CMake}, {\em Python} packages - and more. - \item Writing a package \code{Config.in} file: how to express - dependencies on other packages, on toolchain options, etc. - \item Details on writing a package recipe: describing the package - source code location, download method, configuration, build and - installation steps, handling dependencies, etc. - \end{itemize} -} -{Lab - New packages in Buildroot} -{ - \begin{itemize} - \item Create a new package for {\em nInvaders} - \item Understand how to add dependencies - \item Add patches to {\em nInvaders} for {\em Nunchuk} support - \end{itemize} -} - -\section{Day 2 - Afternoon} - -\feagendatwocolumn -{Lecture - Advanced package aspects} -{ - \begin{itemize} - \item Licensing report - \item Patching support: patch ordering and format, global patch directory, etc. - \item User, permission, device tables - \item Init scripts and systemd unit files - \item Config scripts - \item Understanding {\em hooks} - \item Overriding commands - \item Legacy handling - \item Virtual packages - \end{itemize} -} -{Lab - Advanced packages} -{ - \begin{itemize} - \item Package an application with a mandatory dependency and an - optional dependency - \item Package a library, hosted on GitHub - \item Use {\em hooks} to tweak packages - \item Add a patch to a package - \end{itemize} -} - -\section{Day 3 - Morning} - -\feagendatwocolumn -{Lecture - Analyzing the build: licensing, dependencies, build time} -{ - \begin{itemize} - \item Usage of the legal information infrastructure - \item Graphing dependencies of packages - \item Collecting and graphing build time information - \end{itemize} -} -{Lecture - Advanced topics} -{ - \begin{itemize} - \item \code{BR2_EXTERNAL} to store customizations outside of the - Buildroot sources - \item Package-specific targets - \item Understanding rebuilds - \item Tips for building faster - \end{itemize} -} - -\feagendaonecolumn -{Lab - Advanced aspects} -{ - \begin{itemize} - \item Use build time graphing capabilities - \item Use dependency graphing capabilities - \item Use licensing report generation, and add licensing - information to your own packages - \item Use \code{BR2_EXTERNAL} - \end{itemize} -} - -\section{Day 3 - Afternoon} - -\feagendatwocolumn -{Lecture - Application development with Buildroot} -{ - \begin{itemize} - \item Using Buildroot during application development - \item Usage of the Buildroot environment to build applications - outside of Buildroot - \item Generate an SDK for other developers - \item Remote debugging with Buildroot - \end{itemize} -} -{Lab - Application development with Buildroot} -{ - \begin{itemize} - \item Build and run your own application - \item Remote debug your application - \item Use \code{_OVERRIDE_SRCDIR} - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Understanding Buildroot internals} -{ - \begin{itemize} - \item Detailed description of the Buildroot build process: - toolchain, packages, root filesystem construction, stamp files, - etc. - \item Understanding virtual packages. - \end{itemize} -} -{Lecture - Getting support and contributing} -{ - \begin{itemize} - \item Getting support: {\em Bugzilla}, {\em mailing list}, {\em IRC} - \item Contributing: understanding the development process, how to - submit patches - \end{itemize} -} +\onsiteagenda \end{document} diff --git a/agenda/buildroot-fr-agenda.tex b/agenda/buildroot-fr-agenda.tex index 01d7a44adc..1f711156bd 100644 --- a/agenda/buildroot-fr-agenda.tex +++ b/agenda/buildroot-fr-agenda.tex @@ -13,313 +13,9 @@ \feshowinfo -\feagendatwocolumn -{Plateforme matérielle pour les travaux pratiques, option \#1} -{ - Carte {\bf BeagleBone Black} - \begin{itemize} - \item Processeur ARM AM335x (single Cortex-A8) de Texas Instruments - \item Alimentation par USB - \item 512 MB de RAM - \item 2 ou 4 GB de stockage eMMC - \item USB hôte et périphérique - \item 1 slot Micro SD - \item Sortie HDMI - \item Connecteur 2 x 46 broches, pour accéder aux UARTs, bus SPIs, I2Cs, etc. - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleboneblack-board/beagleboneblack.png} - \end{center} -} +\showboarditem{stm32mp1} +\showboarditem{beagleboneblack} -\feagendatwocolumn -{Plateforme matérielle pour les travaux pratiques, option \#2} -{ - Carte {\bf STMicroelectronics STM32MP157D Discovery Kit~1} - \begin{itemize} - \item Processeur STM32MP157D (dual Cortex-A7) de STMicroelectronics - \item Alimentation par USB - \item 512 MB DDR3L RAM - \item Ethernet Gigabit - \item 4 ports USB 2.0 hôte - \item 1 port USB-C OTG - \item 1 slot Micro SD - \item Debugger ST-LINK/V2-1 - \item Connecteurs compatibles Arduino - \item Codec audio, boutons, LEDs - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} - \end{center} -} - -\section{1\textsuperscript{er} jour - Matin} - -\feagendatwocolumn -{Cours - Introduction à Buildroot et aux systèmes de build} -{ - \begin{itemize} - \item Architecture générale d'une système Linux embarqué - \item Choix entre systèmes de build et distributions binaires - \item Rôle d'un système de build - \item Comparaison des systèmes de build existants - \end{itemize} -} -{Cours - Présentation de Buildroot} -{ - \begin{itemize} - \item Points clés autour du projet - \item Téléchargement des sources de Buildroot - \item Configuration simple de Buildroot - \item Exécution d'une premières compilation - \end{itemize} -} -\\ -\feagendatwocolumn -{TP - Utilisation simple de Buildroot} -{ - \begin{itemize} - \item Téléchargement et configuration de Buildroot - \item Configurer et compiler un système simple avec Buildroot pour - un système embarqué - \item Flasher et tester le système généré par Buildroot - \end{itemize} -} -{Cours - Gestion de la compilation et de la configuration} -{ - \begin{itemize} - \item Compilation en dehors des sources - \item Utiliser et créer des fichiers {\em defconfigs} - \item Fragments de {\em defconfigs} - \item Autres astuces pour la compilation - \end{itemize} -} - - -\section{1\textsuperscript{er} jour - Après-midi} - -\feagendatwocolumn -{Cours - Sources de Buildroot et arborescence des fichiers générés} -{ - \begin{itemize} - \item Détails sur l'organisation du code source de Buildroot - \item Détails sur l'arborescence des fichiers générés - \end{itemize} -} -{Cours - Chaînes de compilation {\em toolchains} dans Buildroot} -{ - \begin{itemize} - \item Les différents possibilités d'usage de chaînes de compilation - dans Buildroot. - \item Tour d'horizon des options liées aux chaînes de compilation. - \item Utilisation de chaînes des compilation binaires, comme - celles de Bootlin. Détails sur les fonctionnalités - {\em multilib} et l'intégration des toolchains dans Buildroot. - \item Génération de toolchains sur mesure avec {\em Crosstool-NG}, - et leur utilisation comme chaînes externes. - \end{itemize} -} - -\feagendatwocolumn -{Cours - Gestion de la configuration du noyau Linux} -{ - \begin{itemize} - \item Charger, modifier et sauvegarder la configuration du noyau. - \end{itemize} -} -{Cours - Construction du système de fichier racine dans Buildroot} -{ - \begin{itemize} - \item Comprendre comment Buildroot construit le système de fichiers - racine : {\em skeleton}, installation de composants, {\em - overlays}, scripts {\em post-build} et {\em post-image}. - \item Personnalisation du contenu du système de fichiers - \item Configuration du système : sélection de la {\em console}, - plusieurs méthode de gestion de {\tt /dev}, les différentes - implémentations d'{\tt init}, etc. - \item Comprendre comment Buildroot génère les images de systèmes de - fichiers. - \end{itemize} -} - -\feagendaonecolumn -{TP - Personnalisation du système de fichiers} -{ - \begin{itemize} - \item Exploration des fichiers générés - \item Personnalisation du système de fichiers racine en utilisant un {\em rootfs overlay} - \item Personnaliser le noyau avec des correctifs et des options de - configuration supplémentaires - \item Rajout de nouveaux composants - \item Utilisation de fichiers {\em defconfig} et compilation en - dehors des sources. - \end{itemize} -} - -\section{2\textsuperscript{ème} jour - Matin} - -\feagendatwocolumn -{Cours - Infrastructure de téléchargement dans Buildroot} -{ - \begin{itemize} - \item Méthodologie de téléchargement - \item Site primaire et sites de backup, compilation en mode déconnecté - \item Téléchargement via systèmes de contrôle de versions, - vérification d'intégrité - \item Cibles {\em make} en rapport avec les téléchargements - \end{itemize} -} -{Cours - Introduction à GNU Make} -{ - \begin{itemize} - \item Éléments de base des règles de make - \item Définition et utilisation de variables - \item Conditions et fonctions - \item Écriture de recettes - \end{itemize} -} - -\feagendatwocolumn -{Cours - Intégration de nouveaux composants dans Buildroot} -{ - \begin{itemize} - \item Comment rajouter de nouveaux paquetages au système de - configuration de Buildroot - \item Comprendre les différentes infrastructures de paquetages : pour - des composants {\em generic}, {\em autotools}, {\em CMake}, {\em - Python} et autres - \item Écriture un fichier \code{Config.in} pour un composant : comment - exprimer des dépendances vers d'autres composants, vers des options - de toolchains, etc. - \item Détails sur l'écriture d'une recette pour un composant : - description de l'emplacement du code source, de la méthode de - téléchargement, de configuration, de compilation et - d'installation, gestion des dépendances, etc. - \end{itemize} -} -{TP - Nouveaux composants dans Buildroot} -{ - \begin{itemize} - \item Création d'un nouveau paquetage pour {\em nInvaders} - \item Comprendre comment rajouter des dépendances - \item Ajouter des correctifs pour {\em nInvaders} pour prendre en - charge le contrôle via un {\em Nunchuk} - \end{itemize} -} - -\section{2\textsuperscript{ème} jour - Après-midi} - -\feagendatwocolumn -{Cours - Notions avancées sur les paquetages} -{ - \begin{itemize} - \item Rapport de licences - \item Prise en charge des correctifs : ordre d'application et format, - répertoire global pour les correctifs, etc. - \item Utilisateur, droit d'accès, tables de fichiers devices - \item Script d'init et fichiers unitaires pour systemd - \item Scripts de configuration - \item Compréhension des {\em hooks} - \item Surcharger des commandes - \item Gestion des paquetages legacy - \item Paquetages virtuels - \end{itemize} -} -{TP - Paquetages avancés} -{ - \begin{itemize} - \item Packager une application avec une dépendance obligatoire et - une dépendance optionnelle - \item Packager une bibliothèque, hébergée sur GitHub - \item Utilisation de {\em hooks} pour ajuster les paquetages - \item Rajouter un correctif à un paquetage - \end{itemize} -} - -\section{3\textsuperscript{ème} jour - Matin} - -\feagendatwocolumn -{Cours - Analyse d'une compilation : licences, dépendances, temps de -construction} -{ - \begin{itemize} - \item Utilisation de l'infrastructure de gestion des informations - légales - \item Représentation graphique des dépendances entre paquetages - \item Collecte d'informations et représentation du temps de - compilation - \end{itemize} -} -{Cours - Sujets avancés} -{ - \begin{itemize} - \item \code{BR2_EXTERNAL} pour stocker des personnalisations à - l'extérieur des sources de Buildroot - \item Cibles make spécifiques pour les paquetages - \item Comprendre les recompilations - \item Astuces pour compiler plus vite - \end{itemize} -} - -\feagendaonecolumn -{TP - Sujets avancés} -{ - \begin{itemize} - \item Utilisation des capacités de génération de graphes de temps de - compilation - \item Génération de graphes de dépendances - \item Utilisation du rapport sur les licences, et ajout d'informations - légales à vos propres paquetages - \item Utilisation de \code{BR2_EXTERNAL} - \end{itemize} -} - -\section{3\textsuperscript{ème} jour - Après-midi} - -\feagendatwocolumn -{Cours - Développement applicatif avec Buildroot} -{ - \begin{itemize} - \item Utilisation de Buildroot pendant le développement d'applications - \item Utilisation de l'environnement de Buildroot pour compiler des - applications en dehors de Buildroot - \item Générer un SDK pour d'autres développeurs - \item Débug à distance avec Buildroot - \end{itemize} -} -{TP - Développement applicatif avec Buildroot} -{ - \begin{itemize} - \item Compiler et exécuter votre propre application - \item Débug à distance de votre application - \item Utilisation de \code{_OVERRIDE_SRCDIR} - \end{itemize} -} - -\feagendatwocolumn -{Cours - Comprendre les mécanismes internes de Buildroot} -{ - \begin{itemize} - \item Description détaillée du processus de compilation de Buildroot : - toolchain, paquetages, construction du système de fichiers race, - fichiers {\em stamp}, etc. - \item Comprendre les paquetages virtuels. - \end{itemize} -} -{Cours - Obtenir de l'aide et s'impliquer} -{ - \begin{itemize} - \item Obtenir de l'assistance technique : {\em Bugzilla}, {\em liste de - discussion}, {\em IRC} - \item Contribuer : comprendre le processus de développement, comment - soumettre des correctifs - \end{itemize} -} +\onsiteagenda \end{document} diff --git a/agenda/buildroot-online-agenda.tex b/agenda/buildroot-online-agenda.tex index eacdc53e21..6b7f45b71c 100644 --- a/agenda/buildroot-online-agenda.tex +++ b/agenda/buildroot-online-agenda.tex @@ -13,321 +13,9 @@ \feshowinfo -\feagendatwocolumn -{Hardware platform for practical labs, option \#1} -{ - {\bf BeagleBone Black} board - \begin{itemize} - \item An ARM AM335x (single Cortex-A8) processor from Texas - Instruments - \item USB powered - \item 512 MB of RAM - \item 2 or 4 GB of on-board eMMC storage - \item USB host and device - \item HDMI output - \item 2 x 46 pins headers, to access UARTs, SPI buses, I2C buses - and more. - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleboneblack-board/beagleboneblack.png} - \end{center} -} +\showboarditem{stm32mp1} +\showboarditem{beagleboneblack} -\feagendatwocolumn -{Hardware platform for practical labs, option \#2} -{ - {\bf STMicroelectronics STM32MP157D Discovery Kit~1} board - \begin{itemize} - \item STM32MP157D (dual Cortex-A7) processor from STMicroelectronics - \item USB powered - \item 512 MB DDR3L RAM - \item Gigabit Ethernet port - \item 4 USB 2.0 host ports - \item 1 USB-C OTG port - \item 1 Micro SD slot - \item On-board ST-LINK/V2-1 debugger - \item Arduino compatible headers - \item Audio codec, buttons, LEDs - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} - \end{center} -} - -\section{Half day 1} - -\feagendatwocolumn -{Lecture - Embedded Linux and build system introduction} -{ - \begin{itemize} - \item The general architecture of an embedded Linux system - \item Build systems vs. binary distributions - \item Role of a build system - \item Comparison of existing build systems - \end{itemize} -} -{Lecture - Introduction to Buildroot} -{ - \begin{itemize} - \item Key facts about the project - \item Getting Buildroot - \item Basic configuration of Buildroot - \item Doing a first build - \end{itemize} -} -\\ -\feagendatwocolumn -{Demo - Basic Buildroot usage} -{ - \begin{itemize} - \item Getting and setting up Buildroot - \item Configuring and building a basic system with Buildroot for an - embedded platform - \item Flash and test the generated system - \end{itemize} -} -{Lecture - Managing the build and configuration} -{ - \begin{itemize} - \item Out of tree build - \item Using and creating {\em defconfigs} - \item Defconfig fragments - \item Other building tips - \end{itemize} -} - -\feagendaonecolumn -{Lecture - Buildroot source and build trees} -{ - \begin{itemize} - \item Details about the Buildroot source code organization - \item Details about the Buildroot build tree - \end{itemize} -} - - -\section{Half day 2} - -\feagendaonecolumn -{Lecture - Toolchains in Buildroot} -{ - \begin{itemize} - \item The different choices for using toolchains in Buildroot - \item Overview of the toolchain options - \item Using existing binary toolchains, such as Bootlin - toolchains, understanding {\em multilib} capabilities and - integration of toolchains in Buildroot - \item Generating custom toolchains with {\em Crosstool-NG}, and - re-use them as external toolchains - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Managing the Linux kernel configuration} -{ - \begin{itemize} - \item Loading, changing and saving the kernel configuration - \end{itemize} -} -{Lecture - Root filesystem construction in Buildroot} -{ - \begin{itemize} - \item Understand how Buildroot builds the root filesystem: {\em - skeleton}, installation of packages, overlays, {\em post-build} - and {\em post-image} scripts. - \item Customization of the root filesystem contents - \item System configuration: {\em console} selection, various {\tt - /dev} management methods, the different {\tt init} - implementations, etc. - \item Understand how Buildroot generates filesystem images - \end{itemize} -} - -\feagendaonecolumn -{Demo - Root filesystem customization} -{ - \begin{itemize} - \item Explore the build output - \item Customize the root filesystem using a {\em rootfs overlay} - \item Customize the kernel with patches and additional configuration - options - \item Add more packages - \item Use {\em defconfig} files and {\em out of tree} build - \end{itemize} -} - -\feagendaonecolumn -{Lecture - Download infrastructure in Buildroot} -{ - \begin{itemize} - \item Downloading logic - \item Primary site and backup site, doing offline builds - \item VCS download, integrity checking - \item Download-related {\em make} targets - \end{itemize} -} - -\section{Half day 3} - -\feagendaonecolumn -{Lecture - GNU Make 101} -{ - \begin{itemize} - \item Basics of make rules - \item Defining and referencing variables - \item Conditions, functions - \item Writing recipes - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Integrating new packages in Buildroot} -{ - \begin{itemize} - \item How to integrate new packages in the Buildroot configuration - system - \item Understand the different package infrastructures: for {\em - generic}, {\em autotools}, {\em CMake}, {\em Python} packages - and more. - \item Writing a package \code{Config.in} file: how to express - dependencies on other packages, on toolchain options, etc. - \item Details on writing a package recipe: describing the package - source code location, download method, configuration, build and - installation steps, handling dependencies, etc. - \end{itemize} -} -{Demo - New packages in Buildroot} -{ - \begin{itemize} - \item Create a new package for {\em nInvaders} - \item Understand how to add dependencies - \item Add patches to {\em nInvaders} for {\em Nunchuk} support - \end{itemize} -} - -\feagendaonecolumn -{Lecture - Advanced package aspects} -{ - \begin{itemize} - \item Licensing report - \item Patching support: patch ordering and format, global patch directory, etc. - \item User, permission, device tables - \item Init scripts and systemd unit files - \item Config scripts - \item Understanding {\em hooks} - \item Overriding commands - \item Legacy handling - \item Virtual packages - \end{itemize} -} - -\section{Half day 4} - -\feagendaonecolumn -{Demo - Advanced packages} -{ - \begin{itemize} - \item Package an application with a mandatory dependency and an - optional dependency - \item Package a library, hosted on GitHub - \item Use {\em hooks} to tweak packages - \item Add a patch to a package - \end{itemize} -} - -\feagendaonecolumn -{Lecture - Analyzing the build: licensing, dependencies, build time} -{ - \begin{itemize} - \item Usage of the legal information infrastructure - \item Graphing dependencies of packages - \item Collecting and graphing build time information - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Advanced topics} -{ - \begin{itemize} - \item \code{BR2_EXTERNAL} to store customizations outside of the - Buildroot sources - \item Package-specific targets - \item Understanding rebuilds - \item Tips for building faster - \end{itemize} -} -{Demo - Advanced aspects} -{ - \begin{itemize} - \item Use build time graphing capabilities - \item Use dependency graphing capabilities - \item Use licensing report generation, and add licensing - information to your own packages - \item Use \code{BR2_EXTERNAL} - \end{itemize} -} - -\newpage - -\section{Half day 5} - -\feagendatwocolumn -{Lecture - Application development with Buildroot} -{ - \begin{itemize} - \item Using Buildroot during application development - \item Usage of the Buildroot environment to build applications - outside of Buildroot - \item Generate an SDK for other developers - \item Remote debugging with Buildroot - \end{itemize} -} -{Demo - Application development with Buildroot} -{ - \begin{itemize} - \item Build and run your own application - \item Remote debug your application - \item Use \code{_OVERRIDE_SRCDIR} - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Understanding Buildroot internals} -{ - \begin{itemize} - \item Detailed description of the Buildroot build process: - toolchain, packages, root filesystem construction, stamp files, - etc. - \item Understanding virtual packages. - \end{itemize} -} -{Lecture - Getting support and contributing} -{ - \begin{itemize} - \item Getting support: {\em Bugzilla}, {\em mailing list}, {\em IRC} - \item Contributing: understanding the development process, how to - submit patches - \end{itemize} -} - -\feagendaonecolumn -{Questions and Answers} -{ - \begin{itemize} - \item Questions and answers with the audience about the course topics - \item Extra presentations if time is left, according what most - participants are interested in. - \end{itemize} -} - -Note: the last session might be shorter than the other sessions and -finish earlier, depending on the progress and questions from the -participants. +\onlineagenda \end{document} diff --git a/agenda/buildroot-online-fr-agenda.tex b/agenda/buildroot-online-fr-agenda.tex index e97dbd676e..b3f7196079 100644 --- a/agenda/buildroot-online-fr-agenda.tex +++ b/agenda/buildroot-online-fr-agenda.tex @@ -13,330 +13,9 @@ \feshowinfo -\feagendatwocolumn -{Plateforme matérielle pour les travaux pratiques, option \#1} -{ - Carte {\bf BeagleBone Black} - \begin{itemize} - \item Processeur ARM AM335x (single Cortex-A8) de Texas Instruments - \item Alimentation par USB - \item 512 MB de RAM - \item 2 ou 4 GB de stockage eMMC - \item USB hôte et périphérique - \item 1 slot Micro SD - \item Sortie HDMI - \item Connecteur 2 x 46 broches, pour accéder aux UARTs, bus SPIs, I2Cs, etc. - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/beagleboneblack-board/beagleboneblack.png} - \end{center} -} +\showboarditem{stm32mp1} +\showboarditem{beagleboneblack} -\feagendatwocolumn -{Plateforme matérielle pour les travaux pratiques, option \#2} -{ - Carte {\bf STMicroelectronics STM32MP157D Discovery Kit~1} - \begin{itemize} - \item Processeur STM32MP157D (dual Cortex-A7) de STMicroelectronics - \item Alimentation par USB - \item 512 MB DDR3L RAM - \item Ethernet Gigabit - \item 4 ports USB 2.0 hôte - \item 1 port USB-C OTG - \item 1 slot Micro SD - \item Debugger ST-LINK/V2-1 - \item Connecteurs compatibles Arduino - \item Codec audio, boutons, LEDs - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} - \end{center} -} - -\section{1\textsuperscript{ère} demi-journée} - -\feagendatwocolumn -{Cours - Introduction à Buildroot et aux systèmes de build} -{ - \begin{itemize} - \item Architecture générale d'une système Linux embarqué - \item Choix entre systèmes de build et distributions binaires - \item Rôle d'un système de build - \item Comparaison des systèmes de build existants - \end{itemize} -} -{Cours - Présentation de Buildroot} -{ - \begin{itemize} - \item Points clés autour du projet - \item Téléchargement des sources de Buildroot - \item Configuration simple de Buildroot - \item Exécution d'une premières compilation - \end{itemize} -} -\\ -\feagendatwocolumn -{Démo - Utilisation simple de Buildroot} -{ - \begin{itemize} - \item Téléchargement et configuration de Buildroot - \item Configurer et compiler un système simple avec Buildroot pour - un système embarqué - \item Flasher et tester le système généré par Buildroot - \end{itemize} -} -{Cours - Gestion de la compilation et de la configuration} -{ - \begin{itemize} - \item Compilation en dehors des sources - \item Utiliser et créer des fichiers {\em defconfigs} - \item Fragments de {\em defconfigs} - \item Autres astuces pour la compilation - \end{itemize} -} - -\feagendaonecolumn -{Cours - Sources de Buildroot et arborescence des fichiers générés} -{ - \begin{itemize} - \item Détails sur l'organisation du code source de Buildroot - \item Détails sur l'arborescence des fichiers générés - \end{itemize} -} - -\section{2\textsuperscript{ème} demi-journée} - -\feagendaonecolumn -{Cours - Chaînes de compilation {\em toolchains} dans Buildroot} -{ - \begin{itemize} - \item Les différents possibilités d'usage de chaînes de compilation - dans Buildroot. - \item Tour d'horizon des options liées aux chaînes de compilation. - \item Utilisation de chaînes des compilation binaires, comme - celles de Bootlin. Détails sur les fonctionnalités - {\em multilib} et l'intégration des toolchains dans Buildroot. - \item Génération de toolchains sur mesure avec {\em Crosstool-NG}, - et leur utilisation comme chaînes externes. - \end{itemize} -} - -\feagendatwocolumn -{Cours - Gestion de la configuration du noyau Linux} -{ - \begin{itemize} - \item Charger, modifier et sauvegarder la configuration du noyau. - \end{itemize} -} -{Cours - Construction du système de fichier racine dans Buildroot} -{ - \begin{itemize} - \item Comprendre comment Buildroot construit le système de fichiers - racine : {\em skeleton}, installation de composants, {\em - overlays}, scripts {\em post-build} et {\em post-image}. - \item Personnalisation du contenu du système de fichiers - \item Configuration du système : sélection de la {\em console}, - plusieurs méthode de gestion de {\tt /dev}, les différentes - implémentations d'{\tt init}, etc. - \item Comprendre comment Buildroot génère les images de systèmes de - fichiers. - \end{itemize} -} - -\feagendaonecolumn -{Démo - Personnalisation du système de fichiers} -{ - \begin{itemize} - \item Exploration des fichiers générés - \item Personnalisation du système de fichiers racine en utilisant un {\em rootfs overlay} - \item Personnaliser le noyau avec des correctifs et des options de - configuration supplémentaires - \item Rajout de nouveaux composants - \item Utilisation de fichiers {\em defconfig} et compilation en - dehors des sources. - \end{itemize} -} - -\feagendaonecolumn -{Cours - Infrastructure de téléchargement dans Buildroot} -{ - \begin{itemize} - \item Méthodologie de téléchargement - \item Site primaire et sites de backup, compilation en mode déconnecté - \item Téléchargement via systèmes de contrôle de versions, - vérification d'intégrité - \item Cibles {\em make} en rapport avec les téléchargements - \end{itemize} -} - -\section{3\textsuperscript{ème} demi-journée} - -\feagendaonecolumn -{Cours - Introduction à GNU Make} -{ - \begin{itemize} - \item Éléments de base des règles de make - \item Définition et utilisation de variables - \item Conditions et fonctions - \item Écriture de recettes - \end{itemize} -} - -\feagendatwocolumn -{Cours - Intégration de nouveaux composants dans Buildroot} -{ - \begin{itemize} - \item Comment rajouter de nouveaux paquetages au système de - configuration de Buildroot - \item Comprendre les différentes infrastructures de paquetages : pour - des composants {\em generic}, {\em autotools}, {\em CMake}, {\em - Python} et autres - \item Écriture un fichier \code{Config.in} pour un composant : comment - exprimer des dépendances vers d'autres composants, vers des options - de toolchains, etc. - \item Détails sur l'écriture d'une recette pour un composant : - description de l'emplacement du code source, de la méthode de - téléchargement, de configuration, de compilation et - d'installation, gestion des dépendances, etc. - \end{itemize} -} -{Démo - Nouveaux composants dans Buildroot} -{ - \begin{itemize} - \item Création d'un nouveau paquetage pour {\em nInvaders} - \item Comprendre comment rajouter des dépendances - \item Ajouter des correctifs pour {\em nInvaders} pour prendre en - charge le contrôle via un {\em Nunchuk} - \end{itemize} -} - -\feagendaonecolumn -{Cours - Notions avancées sur les paquetages} -{ - \begin{itemize} - \item Rapport de licences - \item Prise en charge des correctifs : ordre d'application et format, - répertoire global pour les correctifs, etc. - \item Utilisateur, droit d'accès, tables de fichiers devices - \item Script d'init et fichiers unitaires pour systemd - \item Scripts de configuration - \item Compréhension des {\em hooks} - \item Surcharger des commandes - \item Gestion des paquetages legacy - \item Paquetages virtuels - \end{itemize} -} - -\section{4\textsuperscript{ème} demi-journée} - -\feagendaonecolumn -{Démo - Paquetages avancés} -{ - \begin{itemize} - \item Packager une application avec une dépendance obligatoire et - une dépendance optionnelle - \item Packager une bibliothèque, hébergée sur GitHub - \item Utilisation de {\em hooks} pour ajuster les paquetages - \item Rajouter un correctif à un paquetage - \end{itemize} -} - -\feagendatwocolumn -{Cours - Analyse d'une compilation : licences, dépendances, temps de -construction} -{ - \begin{itemize} - \item Utilisation de l'infrastructure de gestion des informations - légales - \item Représentation graphique des dépendances entre paquetages - \item Collecte d'informations et représentation du temps de - compilation - \end{itemize} -} -{Cours - Sujets avancés} -{ - \begin{itemize} - \item \code{BR2_EXTERNAL} pour stocker des personnalisations à - l'extérieur des sources de Buildroot - \item Cibles make spécifiques pour les paquetages - \item Comprendre les recompilations - \item Astuces pour compiler plus vite - \end{itemize} -} - -\feagendaonecolumn -{Démo - Sujets avancés} -{ - \begin{itemize} - \item Utilisation des capacités de génération de graphes de temps de - compilation - \item Génération de graphes de dépendances - \item Utilisation du rapport sur les licences, et ajout d'informations - légales à vos propres paquetages - \item Utilisation de \code{BR2_EXTERNAL} - \end{itemize} -} - -\section{5\textsuperscript{ème} demi-journée} - -\feagendatwocolumn -{Cours - Développement applicatif avec Buildroot} -{ - \begin{itemize} - \item Utilisation de Buildroot pendant le développement d'applications - \item Utilisation de l'environnement de Buildroot pour compiler des - applications en dehors de Buildroot - \item Générer un SDK pour d'autres développeurs - \item Débug à distance avec Buildroot - \end{itemize} -} -{Démo - Développement applicatif avec Buildroot} -{ - \begin{itemize} - \item Compiler et exécuter votre propre application - \item Débug à distance de votre application - \item Utilisation de \code{_OVERRIDE_SRCDIR} - \end{itemize} -} - -\feagendatwocolumn -{Cours - Comprendre les mécanismes internes de Buildroot} -{ - \begin{itemize} - \item Description détaillée du processus de compilation de Buildroot : - toolchain, paquetages, construction du système de fichiers race, - fichiers {\em stamp}, etc. - \item Comprendre les paquetages virtuels. - \end{itemize} -} -{Cours - Obtenir de l'aide et s'impliquer} -{ - \begin{itemize} - \item Obtenir de l'assistance technique : {\em Bugzilla}, {\em liste de - discussion}, {\em IRC} - \item Contribuer : comprendre le processus de développement, comment - soumettre des correctifs - \end{itemize} -} - -\feagendaonecolumn -{Questions / réponses} -{ - \begin{itemize} - \item Questions et réponses avec les participants à propos des sujets abordés. - \item Présentations supplémentaires s'il reste du temps, en fonction des demandes - de la majorité des participants. - \end{itemize} -} - -Note : la dernière session peut être plus courte que les autres -sessions et se terminer plus tôt, selon le nombre de questions des -participants. +\onlineagenda \end{document} From 8462ff039156488ead047ff6f93ed767eae130a4 Mon Sep 17 00:00:00 2001 From: Thomas Bonnefille Date: Mon, 18 Nov 2024 13:55:41 +0100 Subject: [PATCH 11/18] agenda: define different section for the debugging course Signed-off-by: Thomas Bonnefille --- agenda/debugging.inc | 434 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 434 insertions(+) diff --git a/agenda/debugging.inc b/agenda/debugging.inc index 160333f14c..6d7acfd953 100644 --- a/agenda/debugging.inc +++ b/agenda/debugging.inc @@ -1,4 +1,6 @@ \usepackage{ifthen} +\input{agenda/common.inc} + \def \training{debugging} % Title @@ -100,3 +102,435 @@ % Time ratio \def \onsitelecturetimeratio{40} \def \onsitelabtimeratio{60} + +% Agenda items + +\defagendaitem +{appstack} +{lecture} +{Linux application stack} +{ + \begin{itemize} + \item Global picture: understanding the general architecture of a + Linux system, overview of the major components. + \item What is the difference between a process and a thread, how + applications run concurrently. + \item ELF files and associated analysis tools. + \item Userspace application memory layout (heap, stack, shared + libraries mappings, etc). + \item MMU and memory management: physical/virtual address spaces. + \item Kernel context switching and scheduling + \item Kernel execution contexts: kernel threads, workqueues, + interrupt, threaded interrupts, softirq + \end{itemize} +} +{Pile logicielle Linux} +{ + \begin{itemize} + \item Vue d'ensemble : comprendre l'architecture général d'un système + Linux, aperçu des principaux composants + \item Différence entre un processus et un thread, comment les + applications fonctionnent de façon concurrente. + \item Fichiers ELF et outils d'analyse associés. + \item Organisation de l'espace d'adressage des applications : heap, + stack, bibliothèques partagées, etc. + \item MMU et gestion mémoire : espaces d'adressage physique et + virtuel + \item Contexte d'exécution dans le noyau : threads noyau, workqueues, + interruptions, interruptions threadées, softirq + \end{itemize} +} +\defagendaitem +{commontools} +{lecture} +{Common analysis \& observability tools} +{ + \begin{itemize} + \item Analyzing an ELF file with GNU binary utilities + ({\em objdump}, {\em addr2line}). + \item Tools to monitor a Linux system: processes, memory + usage and mapping, resources. + \item Using {\em vmstat}, {\em iostat}, {\em ps}, {\em top}, {\em + iotop}, {\em free} and understanding the metrics they provide. + \item Pseudo filesystems: {\em procfs}, {\em sysfs} and {\em + debugfs}. + \end{itemize} +} +{Outils usuels d'analyse et d'observation} +{ + \begin{itemize} + \item Analyse d'un binaire ELF avec les outils GNU ({\em objdump}, + {\em addr2line}) + \item Outils pour monitorer un système Linux : processus, + consommation et mapping mémoire, ressources + \item Utilisation de {\em vmstat}, {\em iostat}, {\em ps}, {\em + top}, {\em iotop}, {\em free} et compréhension des métriques + qu'ils fournissent. + \item Systèmes de fichiers virtuels : {\em procfs}, {\em sysfs} et + {\em debugfs} + \end{itemize} +} +\defagendaitem +{checksystem} +{lab} +{Check what is running on a system and its load} +{ + \begin{itemize} + \item Observe running processes using {\em ps} and {\em top}. + \item Check memory allocation and mapping with {\em procfs} and {\em + pmap}. + \item Monitor other resources usage using {\em iostat}, {\em vmstat} + and {\em netstat}. + \end{itemize} +} +{Comprendre ce qui fonctionne sur un système et sa charge} +{ + \begin{itemize} + \item Observation des processus en cours d'exécution avec {\em ps} et {\em top} + \item Observation des mappings mémoire avec {\em procfs} et {\em pmap} + \item Monitoring d'aurtres ressources avec {\em iostat}, {\em + vmstat} et {\em netstat} + \end{itemize} +} +\defagendaitem +{debugapp} +{lecture} +{Debugging an application} +{ + \begin{itemize} + \item Using {\em gdb} on a live process. + \item Understanding compiler optimizations impact on debuggability. + \item Postmortem diagnostic using core files. + \item Remote debugging with {\em gdbserver}. + \item Extending {\em gdb} capabilities using python scripting + \end{itemize} +} +{Debug d'une application} +{ + \begin{itemize} + \item Utilisation de {\em gdb} sur un processus en cours d'exécution. + \item Comprendre l'impact des optimisations du compilateur sur la + capacité à débugger un programme. + \item Analyse post-mortem avec des fichiers {\em core} + \item Debug à distance avec {\em gdbserver}. + \item Étendre les capacités de {\em gdb} en utilisant des scripts + Python. + \end{itemize} +} +\defagendaitem +{solvecrash} +{lab} +{Solving an application crash} +{ + \begin{itemize} + \item Analysis of compiled C code with compiler-explorer to understand + optimizations. + \item Managing {\em gdb} from the command line, then from an IDE. + \item Using {\em gdb} Python scripting capabilities. + \item Debugging a crashed application using a coredump with {\em gdb}. + \end{itemize} +} +{Résoudre un crash applicatif} +{ + \begin{itemize} + \item Analyse d'un code C compilé avec \code{compiler-explorer} pour + comprendre les optimisations. + \item Utilisation de {\em gdb} en ligne de commande, puis depuis un + IDE. + \item Utilisation des possibilités de scripting Python dans {\em gdb}. + \item Debugger une application {\em post mortem} avec un {\em core + dump} et {\em gdb} + \end{itemize} +} +\defagendaitem +{tracing} +{lecture} +{Tracing an application} +{ + \begin{itemize} + \item Tracing system calls with {\em strace}. + \item Tracing library calls with {\em ltrace}. + \item Overloading library functions using {\em LD\_PRELOAD}. + \end{itemize} +} +{Tracing d'une application} +{ + \begin{itemize} + \item Tracing des appels systèmes avec {\em strace}. + \item Tracing des appels à des bibliothèques partagées avec {\em ltrace}. + \end{itemize} +} +\defagendaitem +{debugappissue} +{lab} +{Debugging application issues} +{ + \begin{itemize} + \item Analyze dynamic library calls from an application using + {\em ltrace}. + \item Overloading library functions using {\em LD\_PRELOAD}. + \item Analyzing an application system calls using {\em strace}. + \end{itemize} +} +{Débugger des problèmes applicatifs} +{ + \begin{itemize} + \item Analyser les appels à des bibliothèques partagées d'une + application en utilisant {\em ltrace}. + \item Débugger une application qui fonctionne de manière incorrecte + en utilisant {\em strace}. + \end{itemize} +} +\defagendaitem +{memory} +{lecture} +{Memory issues} +{ + \begin{itemize} + \item Usual memory issues: buffer overflow, segmentation fault, + memory leaks, heap-stack collision. + \item Memory corruption tooling, {\em valgrind}, {\em libefence}, + etc. + \item Heap profiling using {\em Massif} and {\em heaptrack} + \end{itemize} +} +{Problèmes liés à la mémoire} +{ + \begin{itemize} + \item Problèmes classiques liés à la mémoire : {\em buffer overflow}, + {\em segmentation fault}, fuite mémoire, collision pile/tas. + \item Outils de détection/investigation de problèmes mémoires : {\em + valgrind}, {\em libefence}, etc. + \item Profiling de l'utilisation du tas en utilisant {\em Massif} + \end{itemize} +} +\defagendaitem +{memory} +{lab} +{Debugging memory issues} +{ + \begin{itemize} + \item Memory leak and misbehavior detection with {\em valgrind} and + {\em vgdb}. + \item Visualizing application heap using {\em Massif}. + \end{itemize} +} +{Débugger des problèmes liés à la mémoire} +{ + \begin{itemize} + \item Fuites mémoire et détection de comportement incorrects avec + {\em valgrind} et {\em vgdb}. + \item Problèmes de performance liés à une sur-allocation. + \item Visualisation de l'utilisation du tas par une application en + utilisant {\em Massif}. + \end{itemize} +} +\defagendaitem +{appprofile} +{lecture} +{Application profiling} +{ + \begin{itemize} + \item Performances issues. + \item Gathering profiling data with {\em perf}. + \item Analyzing an application callgraph using {\em Callgrind} + and {\em KCachegrind}. + \item Interpreting the data recorded by {\em perf}. + \end{itemize} +} +{Profiling d'application} +{ + \begin{itemize} + \item Problèmes de performance. + \item Récupération d'informations de profiling avec {\em perf}. + \item Analyse du graphe d'appel d'une application avec {\em + Callgrind} et {\em KCachegrind}. + \item Filtrage du jeu de données récupéré. + \item Interprétation, des données enregistrées avec {\em perf}. + \end{itemize} +} +\defagendaitem +{appprofile} +{lab} +{Application profiling} +{ + \begin{itemize} + \item Profiling an application with {\em Callgrind}/{\em + KCachegrind}. + \item Analyzing application performance with {\em perf}. + \item Generating a flamegraph using {\em FlameGraph}. + \end{itemize} +} +{Profiling d'application} +{ + \begin{itemize} + \item Profiling d'une application avec {\em Callgrind}/{\em + KCachegrind}. + \item Analyse des performances d'une application avec {\em perf}. + \item Générer un {\em flamegraph} avec {\em FlameGraph}. + \end{itemize} +} +\defagendaitem +{profiling} +{lecture} +{System wide profiling and tracing} +{ + \begin{itemize} + \item System wide profiling using {\em perf}. + \item Using {\em kprobes} to hook on kernel code without + recompiling. + \item Application and kernel tracing and visualization using {\em + ftrace}, {\em kernelshark} or {\em LTTng} + \item Tracing with {\em eBPF}: core principles, usage with BCC and with libbpf + \end{itemize} +} +{Profiling et tracing de l'ensemble du système} +{ + \begin{itemize} + \item Profiling du système complet avec {\em perf}. + \item Utilisation de {\em kprobes} pour ajouter des points de trace + supplémentaires sans recompilation + \item Tracing d'application et du noyau et visualisation des traces + avec {\em ftrace}, {\em kernelshark} ou {\em LTTng} + \item Tracing avec eBPF: principes généraux, développements d'outils avec BCC + puis libbpf + \end{itemize} +} +\defagendaitem +{profiling} +{lab} +{System wide profiling and tracing} +{ + \begin{itemize} + \item System profiling with {\em perf}. + \item System wide latencies debugging using {\em ftrace} and {\em + kernelshark}. + \end{itemize} +} +{Profiling et tracing de l'ensemble du système} +{ + \begin{itemize} + \item Profiling du système complet avec {\em perf}. + \item Analyse de latences système avec {\em ftrace} et {\em kernelshark}. + \end{itemize} +} +\defagendaitem +{ebpf} +{lab} +{Tracing tool with eBPF} +{ + \begin{itemize} + \item Python scripting with{\em bcc}. + \item Custom tool development with libbpf. + \end{itemize} +} +{Développement d'outils en eBPF} +{ + \begin{itemize} + \item Scripting python avec {\em BCC}. + \item Développement d'un outil personnalisé de tracing avec libbpf. + \end{itemize} +} +\defagendaitem +{kernel} +{lecture} +{Kernel debugging} +{ + \begin{itemize} + \item Kernel compilation results (\code{vmlinux}, \code{System.map}). + \item Understanding and configuring kernel {\em oops} behavior. + \item Post mortem analysis using kernel crash dump with {\em crash}. + \item Memory issues ({\em KASAN}, {\em UBSAN}, {\em Kmemleak}). + \item Debugging the kernel using {\em KGDB} and {\em KDB}. + \item Kernel locking debug configuration options (lockdep). + \item Other kernel configuration options that are useful for debug. + \end{itemize} +} +{Debugging du noyau Linux} +{ + \begin{itemize} + \item Sorties de la compilation du noyau Linux utiles pour le + debugging (\code{vmlinux}, \code{System.map}). + \item Comprendre et configurer le comportement des {\em kernel oops}. + \item Analyse post-mortem d'un crash kernel avec {\em crash}. + \item Problèmes mémoire au niveau kernel ({\em KASAN}, {\em UBSAN}, {\em Kmemleak}). + \item Debugging du noyau Linux avec {\em KGDB} et {\em KDB}. + \item Options du noyau Linux pour le debug des problèmes de verrous + (lockdep) + \item Autres options de configuration du noyau Linux utiles pour le + debug. + \end{itemize} +} +\defagendaitem +{kernel} +{lab} +{Kernel debugging} +{ + \begin{itemize} + \item Analyzing an {\em oops} after using a faulty module with + {\em obdjump} and {\em addr2line}. + \item Debugging a deadlock problem using {\em PROVE\_LOCKING} options. + \item Detecting undefined behavior with {\em UBSAN} in kernel code. + \item Find a module memory leak using {\em kmemleak}. + \item Debugging a module with {\em KGDB}. + \end{itemize} +} +{Debugging du noyau Linux} +{ + \begin{itemize} + \item Analyse d'un {\em oops} après utilisation d'un module noyau + incorrect, avec {\em obdjump} et {\em addr2line}. + \item Debugging d'un {\em deadlock} avec les options {\em PROVE\_LOCKING}. + \item Détecter un {\em undefined behavior} avec {\em UBSAN} dans le noyau Linux. + \item Trouver une fuite mémoire avec {\em kmemleak}. + \item Débugger un module noyau avec {\em KGDB}. + \end{itemize} +} + +\def \onsiteagenda { + \showagendaday{1} + \showagendaitem{appstack}{lecture} + \showagendaitem{commontools}{lecture} + \showagendaday{2} + \showagendaitem{checksystem}{lab} + \showagendaitem{debugapp}{lecture} + \showagendaitem{solvecrash}{lab} + \showagendaday{3} + \showagendaitem{tracing}{lecture} + \showagendaitem{debugappissue}{lab} + \showagendaitem{memory}{lecture} + \showagendaitem{memory}{lab} + \showagendaday{4} + \showagendaitem{appprofile}{lecture} + \showagendaitem{appprofile}{lab} + \showagendaday{5} + \showagendaitem{profiling}{lecture} + \showagendaitem{profiling}{lab} + \showagendaitem{ebpf}{lab} + \showagendaday{6} + \showagendaitem{kernel}{lecture} + \showagendaitem{kernel}{lab} +} + +\def \onlineagenda { + \showagendaday{1} + \showagendaitem{appstack}{lecture} + \showagendaitem{commontools}{lecture} + \showagendaitem{checksystem}{lab} + \showagendaitem{debugapp}{lecture} + \showagendaday{2} + \showagendaitem{solvecrash}{lab} + \showagendaitem{tracing}{lecture} + \showagendaitem{debugappissue}{lab} + \showagendaitem{memory}{lecture} + \showagendaitem{memory}{lab} + \showagendaday{3} + \showagendaitem{appprofile}{lecture} + \showagendaitem{appprofile}{lab} + \showagendaitem{profiling}{lecture} + \showagendaitem{profiling}{lab} + \showagendaday{4} + \showagendaitem{ebpf}{lab} + \showagendaitem{kernel}{lecture} + \showagendaitem{kernel}{lab} +} From 4f2097a671b7282c5ee4db4ca42059c06e4e5a38 Mon Sep 17 00:00:00 2001 From: Thomas Bonnefille Date: Tue, 19 Nov 2024 10:41:22 +0100 Subject: [PATCH 12/18] agenda: use commands to refactor the debugging agenda Signed-off-by: Thomas Bonnefille --- agenda/debugging-agenda.tex | 221 +----------------------- agenda/debugging-fr-agenda.tex | 230 +------------------------ agenda/debugging-online-agenda.tex | 225 +----------------------- agenda/debugging-online-fr-agenda.tex | 238 +------------------------- 4 files changed, 8 insertions(+), 906 deletions(-) diff --git a/agenda/debugging-agenda.tex b/agenda/debugging-agenda.tex index e9e8af7f33..263c27a815 100644 --- a/agenda/debugging-agenda.tex +++ b/agenda/debugging-agenda.tex @@ -13,225 +13,8 @@ \feshowinfo -\feagendatwocolumn -{Hardware in practical labs} -{ - The hardware platform used for the practical labs of this training - session is the {\bf STMicroelectronics STM32MP157D-DK1 Discovery - board} board, which features: +\showboarditem{stm32mp1} - \begin{itemize} - \item STM32MP157D (dual Cortex-A7) CPU from STMicroelectronics - \item USB powered - \item 512 MB DDR3L RAM - \item Gigabit Ethernet port - \item 4 USB 2.0 host ports - \item 1 USB-C OTG port - \item 1 Micro SD slot - \item On-board ST-LINK/V2-1 debugger - \item Arduino Uno v3-compatible headers - \item Audio codec - \item Misc: buttons, LEDs - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} - \end{center} -} - -\section{Day 1 - Morning} - -\feagendaonecolumn -{Lecture - Linux application stack} -{ - \begin{itemize} - \item Global picture: understanding the general architecture of a - Linux system, overview of the major components. - \item What is the difference between a process and a thread, how - applications run concurrently. - \item ELF files and associated analysis tools. - \item Userspace application memory layout (heap, stack, shared - libraries mappings, etc). - \item MMU and memory management: physical/virtual address spaces. - \item Kernel context switching and scheduling - \item Kernel execution contexts: kernel threads, workqueues, - interrupt, threaded interrupts, softirq - \end{itemize} -} - -\feagendaonecolumn -{Lecture - Common analysis \& observability tools} -{ - \begin{itemize} - \item Analyzing an ELF file with GNU binary utilities - ({\em objdump}, {\em addr2line}). - \item Tools to monitor a Linux system: processes, memory - usage and mapping, resources. - \item Using {\em vmstat}, {\em iostat}, {\em ps}, {\em top}, {\em - iotop}, {\em free} and understanding the metrics they provide. - \item Pseudo filesystems: {\em procfs}, {\em sysfs} and {\em - debugfs}. - \end{itemize} -} -\section{Day 1 - Afternoon} -\feagendaonecolumn -{Lab - Check what is running on a system and its load} -{ - \begin{itemize} - \item Observe running processes using {\em ps} and {\em top}. - \item Check memory allocation and mapping with {\em procfs} and {\em - pmap}. - \item Monitor other resources usage using {\em iostat}, {\em vmstat} - and {\em netstat}. - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Debugging an application} -{ - \begin{itemize} - \item Using {\em gdb} on a live process. - \item Understanding compiler optimizations impact on debuggability. - \item Postmortem diagnostic using core files. - \item Remote debugging with {\em gdbserver}. - \item Extending {\em gdb} capabilities using python scripting - \end{itemize} -} -{Lab - Solving an application crash} -{ - \begin{itemize} - \item Analysis of compiled C code with compiler-explorer to understand - optimizations. - \item Managing {\em gdb} from the command line, then from an IDE. - \item Using {\em gdb} Python scripting capabilities. - \item Debugging a crashed application using a coredump with {\em gdb}. - \end{itemize} -} - -\section{Day 2 - Morning} - -\feagendatwocolumn -{Lecture - Tracing an application} -{ - \begin{itemize} - \item Tracing system calls with {\em strace}. - \item Tracing library calls with {\em ltrace}. - \item Overloading library functions using {\em LD\_PRELOAD}. - \end{itemize} -} -{Lab – Debugging application issues} -{ - \begin{itemize} - \item Analyze dynamic library calls from an application using - {\em ltrace}. - \item Overloading library functions using {\em LD\_PRELOAD}. - \item Analyzing an application system calls using {\em strace}. - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Memory issues} -{ - \begin{itemize} - \item Usual memory issues: buffer overflow, segmentation fault, - memory leaks, heap-stack collision. - \item Memory corruption tooling, {\em valgrind}, {\em libefence}, - etc. - \item Heap profiling using {\em Massif} and {\em heaptrack} - \end{itemize} -} -{Lab – Debugging memory issues} -{ - \begin{itemize} - \item Memory leak and misbehavior detection with {\em valgrind} and - {\em vgdb}. - \item Visualizing application heap using {\em Massif}. - \end{itemize} -} - -\section{Day 2 - Afternoon} - -\feagendatwocolumn -{Lecture – Application profiling} -{ - \begin{itemize} - \item Performances issues. - \item Gathering profiling data with {\em perf}. - \item Analyzing an application callgraph using {\em Callgrind} - and {\em KCachegrind}. - \item Interpreting the data recorded by {\em perf}. - \end{itemize} -} -{Lab - Application profiling} -{ - \begin{itemize} - \item Profiling an application with {\em Callgrind}/{\em - KCachegrind}. - \item Analyzing application performance with {\em perf}. - \item Generating a flamegraph using {\em FlameGraph}. - \end{itemize} -} - -\section{Day 3 - Morning} - -\feagendaonecolumn -{Lecture - System wide profiling and tracing} -{ - \begin{itemize} - \item System wide profiling using {\em perf}. - \item Using {\em kprobes} to hook on kernel code without - recompiling. - \item Application and kernel tracing and visualization using {\em - ftrace}, {\em kernelshark} or {\em LTTng} - \item Tracing with {\em eBPF}: core principles, usage with BCC and with libbpf - \end{itemize} -} - -\feagendatwocolumn -{Lab - System wide profiling and tracing} -{ - \begin{itemize} - \item System profiling with {\em perf}. - \item System wide latencies debugging using {\em ftrace} and {\em - kernelshark}. - \end{itemize} -} -{Lab - Tracing tool with eBPF} -{ - \begin{itemize} - \item Python scripting with{\em bcc}. - \item Custom tool development with libbpf. - \end{itemize} -} - -\section{Day 3 - Afternoon} - -\feagendatwocolumn -{Lecture - Kernel debugging} -{ - \begin{itemize} - \item Kernel compilation results (\code{vmlinux}, \code{System.map}). - \item Understanding and configuring kernel {\em oops} behavior. - \item Post mortem analysis using kernel crash dump with {\em crash}. - \item Memory issues ({\em KASAN}, {\em UBSAN}, {\em Kmemleak}). - \item Debugging the kernel using {\em KGDB} and {\em KDB}. - \item Kernel locking debug configuration options (lockdep). - \item Other kernel configuration options that are useful for debug. - \end{itemize} -} -{Lab - Kernel debugging} -{ - \begin{itemize} - \item Analyzing an {\em oops} after using a faulty module with - {\em obdjump} and {\em addr2line}. - \item Debugging a deadlock problem using {\em PROVE\_LOCKING} options. - \item Detecting undefined behavior with {\em UBSAN} in kernel code. - \item Find a module memory leak using {\em kmemleak}. - \item Debugging a module with {\em KGDB}. - \end{itemize} -} +\onsiteagenda \end{document} - diff --git a/agenda/debugging-fr-agenda.tex b/agenda/debugging-fr-agenda.tex index 8d52343f7a..4343e02dff 100644 --- a/agenda/debugging-fr-agenda.tex +++ b/agenda/debugging-fr-agenda.tex @@ -13,234 +13,8 @@ \feshowinfo -\feagendatwocolumn -{Matériel utilisé pour les travaux pratiques} -{ - Une de ces cartes de STMicroelectronics : {\bf - STM32MP157A-DK1}, {\bf STM32MP157D-DK1}, {\bf STM32MP157C-DK2} ou - {\bf STM32MP157F-DK2} - \begin{itemize} - \item Processeur STM32MP157, double Cortex-A7, de STMicroelectronics - \item Alimentée par USB - \item 512 Mo DDR3L RAM - \item Port Gigabit Ethernet port - \item 4 ports hôte USB 2.0 - \item 1 port USB-C OTG - \item 1 connecteur Micro SD - \item Debugger ST-LINK/V2-1 sur la carte - \item Connecteurs compatibles Arduino Uno v3 - \item Codec audio - \item Divers : boutons, LEDs - \item Écran LCD tactile (uniquement sur cartes DK2) - \end{itemize} -}{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} - \end{center} -} +\showboarditem{stm32mp1} -\section{1\textsuperscript{er} Jour - Matin} - -\feagendaonecolumn -{Cours - Pile logicielle Linux} -{ - \begin{itemize} - \item Vue d'ensemble : comprendre l'architecture général d'un système - Linux, aperçu des principaux composants - \item Différence entre un processus et un thread, comment les - applications fonctionnent de façon concurrente. - \item Fichiers ELF et outils d'analyse associés. - \item Organisation de l'espace d'adressage des applications : heap, - stack, bibliothèques partagées, etc. - \item MMU et gestion mémoire : espaces d'adressage physique et - virtuel - \item Contexte d'exécution dans le noyau : threads noyau, workqueues, - interruptions, interruptions threadées, softirq - \end{itemize} -} - -\feagendaonecolumn -{Cours - Outils usuels d'analyse et d'observation} -{ - \begin{itemize} - \item Analyse d'un binaire ELF avec les outils GNU ({\em objdump}, - {\em addr2line}) - \item Outils pour monitorer un système Linux : processus, - consommation et mapping mémoire, ressources - \item Utilisation de {\em vmstat}, {\em iostat}, {\em ps}, {\em - top}, {\em iotop}, {\em free} et compréhension des métriques - qu'ils fournissent. - \item Systèmes de fichiers virtuels : {\em procfs}, {\em sysfs} et - {\em debugfs} - \end{itemize} -} - -\section{1\textsuperscript{er} Jour - Après-midi} - -\feagendaonecolumn -{Démo - Comprendre ce qui fonctionne sur un système et sa charge} -{ - \begin{itemize} - \item Observation des processus en cours d'exécution avec {\em ps} et {\em top} - \item Observation des mappings mémoire avec {\em procfs} et {\em pmap} - \item Monitoring d'aurtres ressources avec {\em iostat}, {\em - vmstat} et {\em netstat} - \end{itemize} -} - -\feagendatwocolumn -{Cours - Debug d'une application} -{ - \begin{itemize} - \item Utilisation de {\em gdb} sur un processus en cours d'exécution. - \item Comprendre l'impact des optimisations du compilateur sur la - capacité à débugger un programme. - \item Analyse post-mortem avec des fichiers {\em core} - \item Debug à distance avec {\em gdbserver}. - \item Étendre les capacités de {\em gdb} en utilisant des scripts - Python. - \end{itemize} -} -{Démo - Résoudre un crash applicatif} -{ - \begin{itemize} - \item Analyse d'un code C compilé avec \code{compiler-explorer} pour - comprendre les optimisations. - \item Utilisation de {\em gdb} en ligne de commande, puis depuis un - IDE. - \item Utilisation des possibilités de scripting Python dans {\em gdb}. - \item Debugger une application {\em post mortem} avec un {\em core - dump} et {\em gdb} - \end{itemize} -} - -\section{2\textsuperscript{ème} Jour - Matin} - -\feagendatwocolumn -{Cours - Tracing d'une application} -{ - \begin{itemize} - \item Tracing des appels systèmes avec {\em strace}. - \item Tracing des appels à des bibliothèques partagées avec {\em ltrace}. - \end{itemize} -} -{Démo – Débugger des problèmes applicatifs} -{ - \begin{itemize} - \item Analyser les appels à des bibliothèques partagées d'une - application en utilisant {\em ltrace}. - \item Débugger une application qui fonctionne de manière incorrecte - en utilisant {\em strace}. - \end{itemize} -} - -\feagendatwocolumn -{Cours - Problèmes liés à la mémoire} -{ - \begin{itemize} - \item Problèmes classiques liés à la mémoire : {\em buffer overflow}, - {\em segmentation fault}, fuite mémoire, collision pile/tas. - \item Outils de détection/investigation de problèmes mémoires : {\em - valgrind}, {\em libefence}, etc. - \item Profiling de l'utilisation du tas en utilisant {\em Massif} - \end{itemize} -} -{Démo – Débugger des problèmes liés à la mémoire} -{ - \begin{itemize} - \item Fuites mémoire et détection de comportement incorrects avec - {\em valgrind} et {\em vgdb}. - \item Problèmes de performance liés à une sur-allocation. - \item Visualisation de l'utilisation du tas par une application en - utilisant {\em Massif}. - \end{itemize} -} - -\section{2\textsuperscript{ème} Jour - Après-midi} - -\feagendatwocolumn -{Cours – Profiling d'application} -{ - \begin{itemize} - \item Problèmes de performance. - \item Récupération d'informations de profiling avec {\em perf}. - \item Analyse du graphe d'appel d'une application avec {\em - Callgrind} et {\em KCachegrind}. - \item Filtrage du jeu de données récupéré. - \item Interprétation, des données enregistrées avec {\em perf}. - \end{itemize} -} -{Démo - Profiling d'application} -{ - \begin{itemize} - \item Profiling d'une application avec {\em Callgrind}/{\em - KCachegrind}. - \item Analyse des performances d'une application avec {\em perf}. - \item Générer un {\em flamegraph} avec {\em FlameGraph}. - \end{itemize} -} - -\section{3\textsuperscript{ème} Jour - Matin} - -\feagendaonecolumn -{Cours - Profiling et tracing de l'ensemble du système} -{ - \begin{itemize} - \item Profiling du système complet avec {\em perf}. - \item Utilisation de {\em kprobes} pour ajouter des points de trace - supplémentaires sans recompilation - \item Tracing d'application et du noyau et visualisation des traces - avec {\em ftrace}, {\em kernelshark} ou {\em LTTng} - \item Tracing avec eBPF: principes généraux, développements d'outils avec BCC - puis libbpf - \end{itemize} -} -\feagendatwocolumn -{Démo - Profiling et tracing de l'ensemble du système} -{ - \begin{itemize} - \item Profiling du système complet avec {\em perf}. - \item Analyse de latences système avec {\em ftrace} et {\em kernelshark}. - \end{itemize} -} -{Démo - Développement d'outils en eBPF} -{ - \begin{itemize} - \item Scripting python avec {\em BCC}. - \item Développement d'un outil personnalisé de tracing avec libbpf. - \end{itemize} -} - -\section{3\textsuperscript{ème} Jour - Après-midi} - -\feagendatwocolumn -{Cours - Debugging du noyau Linux} -{ - \begin{itemize} - \item Sorties de la compilation du noyau Linux utiles pour le - debugging (\code{vmlinux}, \code{System.map}). - \item Comprendre et configurer le comportement des {\em kernel oops}. - \item Analyse post-mortem d'un crash kernel avec {\em crash}. - \item Problèmes mémoire au niveau kernel ({\em KASAN}, {\em UBSAN}, {\em Kmemleak}). - \item Debugging du noyau Linux avec {\em KGDB} et {\em KDB}. - \item Options du noyau Linux pour le debug des problèmes de verrous - (lockdep) - \item Autres options de configuration du noyau Linux utiles pour le - debug. - \end{itemize} -} -{Démo - Debugging du noyau Linux} -{ - \begin{itemize} - \item Analyse d'un {\em oops} après utilisation d'un module noyau - incorrect, avec {\em obdjump} et {\em addr2line}. - \item Debugging d'un {\em deadlock} avec les options {\em PROVE\_LOCKING}. - \item Détecter un {\em undefined behavior} avec {\em UBSAN} dans le noyau Linux. - \item Trouver une fuite mémoire avec {\em kmemleak}. - \item Débugger un module noyau avec {\em KGDB}. - \end{itemize} -} +\onsiteagenda \end{document} - diff --git a/agenda/debugging-online-agenda.tex b/agenda/debugging-online-agenda.tex index 3998fba2e0..922978150f 100644 --- a/agenda/debugging-online-agenda.tex +++ b/agenda/debugging-online-agenda.tex @@ -13,229 +13,8 @@ \feshowinfo -\feagendatwocolumn -{Real hardware in practical demos} -{ - The hardware platform used for the practical demos of this training - session is the {\bf STMicroelectronics STM32MP157D-DK1 Discovery - board} board, which features: +\showboarditem{stm32mp1} - \begin{itemize} - \item STM32MP157D (dual Cortex-A7) CPU from STMicroelectronics - \item USB powered - \item 512 MB DDR3L RAM - \item Gigabit Ethernet port - \item 4 USB 2.0 host ports - \item 1 USB-C OTG port - \item 1 Micro SD slot - \item On-board ST-LINK/V2-1 debugger - \item Arduino Uno v3-compatible headers - \item Audio codec - \item Misc: buttons, LEDs - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} - \end{center} -} - -\section{Half day 1} - -\feagendaonecolumn -{Lecture - Linux application stack} -{ - \begin{itemize} - \item Global picture: understanding the general architecture of a - Linux system, overview of the major components. - \item What is the difference between a process and a thread, how - applications run concurrently. - \item ELF files and associated analysis tools. - \item Userspace application memory layout (heap, stack, shared - libraries mappings, etc). - \item MMU and memory management: physical/virtual address spaces. - \item Kernel context switching and scheduling - \item Kernel execution contexts: kernel threads, workqueues, - interrupt, threaded interrupts, softirq - \end{itemize} -} - -\feagendaonecolumn -{Lecture - Common analysis \& observability tools} -{ - \begin{itemize} - \item Analyzing an ELF file with GNU binary utilities - ({\em objdump}, {\em addr2line}). - \item Tools to monitor a Linux system: processes, memory - usage and mapping, resources. - \item Using {\em vmstat}, {\em iostat}, {\em ps}, {\em top}, {\em - iotop}, {\em free} and understanding the metrics they provide. - \item Pseudo filesystems: {\em procfs}, {\em sysfs} and {\em - debugfs}. - \end{itemize} -} - -\feagendaonecolumn -{Demo - Check what is running on a system and its load} -{ - \begin{itemize} - \item Observe running processes using {\em ps} and {\em top}. - \item Check memory allocation and mapping with {\em procfs} and {\em - pmap}. - \item Monitor other resources usage using {\em iostat}, {\em vmstat} - and {\em netstat}. - \end{itemize} -} - -\feagendaonecolumn -{Lecture - Debugging an application} -{ - \begin{itemize} - \item Using {\em gdb} on a live process. - \item Understanding compiler optimizations impact on debuggability. - \item Postmortem diagnostic using core files. - \item Remote debugging with {\em gdbserver}. - \item Extending {\em gdb} capabilities using python scripting - \end{itemize} -} - -\section{Half day 2} - -\feagendaonecolumn{Demo - Solving an application crash} -{ - \begin{itemize} - \item Analysis of compiled C code with compiler-explorer to understand - optimizations. - \item Managing {\em gdb} from the command line. - \item Debugging a crashed application using a coredump with {\em gdb}. - \item Using {\em gdb} Python scripting capabilities. - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Tracing an application} -{ - \begin{itemize} - \item Tracing system calls with {\em strace}. - \item Tracing library calls with {\em ltrace}. - \item Overloading library functions using {\em LD\_PRELOAD}. - \end{itemize} -} -{Demo – Debugging application issues} -{ - \begin{itemize} - \item Analyze dynamic library calls from an application using - {\em ltrace}. - \item Overloading library functions using {\em LD\_PRELOAD}. - \item Analyzing an application system calls using {\em strace}. - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Memory issues} -{ - \begin{itemize} - \item Usual memory issues: buffer overflow, segmentation fault, - memory leaks, heap-stack collision. - \item Memory corruption tooling, {\em valgrind}, {\em libefence}, - etc. - \item Heap profiling using {\em Massif} and {\em heaptrack} - \end{itemize} -} -{Demo – Debugging memory issues} -{ - \begin{itemize} - \item Memory leak and misbehavior detection with {\em valgrind} and - {\em vgdb}. - \item Visualizing application heap using {\em Massif}. - \end{itemize} -} - -\section{Half day 3} - -\feagendatwocolumn -{Lecture – Application profiling} -{ - \begin{itemize} - \item Performances issues. - \item Gathering profiling data with {\em perf}. - \item Analyzing an application callgraph using {\em Callgrind} - and {\em KCachegrind}. - \item Interpreting the data recorded by {\em perf}. - \end{itemize} -} -{Demo - Application profiling} -{ - \begin{itemize} - \item Profiling an application with {\em Callgrind}/{\em - KCachegrind}. - \item Analyzing application performance with {\em perf}. - \item Generating a flamegraph using {\em FlameGraph}. - \end{itemize} -} - -\feagendatwocolumn -{Lecture - System wide profiling and tracing} -{ - \begin{itemize} - \item System wide profiling using {\em perf}. - \item Using {\em kprobes} to hook on kernel code without - recompiling. - \item Application and kernel tracing and visualization using {\em - ftrace}, {\em kernelshark} or {\em LTTng} - \end{itemize} -} -{Demo - System wide profiling and tracing} -{ - \begin{itemize} - \item System profiling with {\em perf}. - \item System wide latencies debugging using {\em ftrace} and {\em - kernelshark}. - \end{itemize} -} - -\section{Half day 4} - -\feagendatwocolumn -{Lecture - System wide profiling and tracing} -{ - \begin{itemize} - \item {\em eBPF} tools ({\em bcctools}, {\em bpftrace}, etc) for - complex tracing scenarios. - \end{itemize} -} -{Lab - Tracing tool with eBPF} -{ - \begin{itemize} - \item Python scripting with{\em bcc}. - \item Custom tool development with libbpf. - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Kernel debugging} -{ - \begin{itemize} - \item Kernel compilation results (\code{vmlinux}, \code{System.map}). - \item Understanding and configuring kernel {\em oops} behavior. - \item Post mortem analysis using kernel crash dump with {\em crash}. - \item Memory issues ({\em KASAN}, {\em UBSAN}, {\em Kmemleak}). - \item Debugging the kernel using {\em KGDB} and {\em KDB}. - \item Kernel locking debug configuration options (lockdep). - \item Other kernel configuration options that are useful for debug. - \end{itemize} -} -{Demo - Kernel debugging} -{ - \begin{itemize} - \item Analyzing an {\em oops} after using a faulty module with - {\em obdjump} and {\em addr2line}. - \item Debugging a deadlock problem using {\em PROVE\_LOCKING} options. - \item Detecting undefined behavior with {\em UBSAN} in kernel code. - \item Find a module memory leak using {\em kmemleak}. - \item Debugging a module with {\em KGDB}. - \end{itemize} -} +\onlineagenda \end{document} diff --git a/agenda/debugging-online-fr-agenda.tex b/agenda/debugging-online-fr-agenda.tex index 1bca458b2f..d28eb52c63 100644 --- a/agenda/debugging-online-fr-agenda.tex +++ b/agenda/debugging-online-fr-agenda.tex @@ -13,242 +13,8 @@ \feshowinfo -\feagendatwocolumn -{Matériel utilisé pour les démonstrations pratiques} -{ - Une de ces cartes de STMicroelectronics : {\bf - STM32MP157A-DK1}, {\bf STM32MP157D-DK1}, {\bf STM32MP157C-DK2} ou - {\bf STM32MP157F-DK2} - \begin{itemize} - \item Processeur STM32MP157, double Cortex-A7, de STMicroelectronics - \item Alimentée par USB - \item 512 Mo DDR3L RAM - \item Port Gigabit Ethernet port - \item 4 ports hôte USB 2.0 - \item 1 port USB-C OTG - \item 1 connecteur Micro SD - \item Debugger ST-LINK/V2-1 sur la carte - \item Connecteurs compatibles Arduino Uno v3 - \item Codec audio - \item Divers : boutons, LEDs - \item Écran LCD tactile (uniquement sur cartes DK2) - \end{itemize} -}{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} - \end{center} -} +\showboarditem{stm32mp1} -\section{1\textsuperscript{ère} demi-journée} - -\feagendaonecolumn -{Cours - Pile logicielle Linux} -{ - \begin{itemize} - \item Vue d'ensemble : comprendre l'architecture général d'un système - Linux, aperçu des principaux composants - \item Différence entre un processus et un thread, comment les - applications fonctionnent de façon concurrente. - \item Fichiers ELF et outils d'analyse associés. - \item Organisation de l'espace d'adressage des applications : heap, - stack, bibliothèques partagées, etc. - \item MMU et gestion mémoire : espaces d'adressage physique et - virtuel - \item Contexte d'exécution dans le noyau : threads noyau, workqueues, - interruptions, interruptions threadées, softirq - \end{itemize} -} - -\feagendatwocolumn -{Cours - Outils usuels d'analyse et d'observation} -{ - \begin{itemize} - \item Analyse d'un binaire ELF avec les outils GNU ({\em objdump}, - {\em addr2line}) - \item Outils pour monitorer un système Linux : processus, - consommation et mapping mémoire, ressources - \item Utilisation de {\em vmstat}, {\em iostat}, {\em ps}, {\em - top}, {\em iotop}, {\em free} et compréhension des métriques - qu'ils fournissent. - \item Systèmes de fichiers virtuels : {\em procfs}, {\em sysfs} et - {\em debugfs} - \end{itemize} -} -{Démo - Comprendre ce qui fonctionne sur un système et sa charge} -{ - \begin{itemize} - \item Observation des processus en cours d'exécution avec {\em ps} et {\em top} - \item Observation des mappings mémoire avec {\em procfs} et {\em pmap} - \item Monitoring d'aurtres ressources avec {\em iostat}, {\em - vmstat} et {\em netstat} - \end{itemize} -} - -\feagendaonecolumn -{Cours - Debug d'une application} -{ - \begin{itemize} - \item Utilisation de {\em gdb} sur un processus en cours d'exécution. - \item Comprendre l'impact des optimisations du compilateur sur la - capacité à débugger un programme. - \item Analyse post-mortem avec des fichiers {\em core} - \item Debug à distance avec {\em gdbserver}. - \item Étendre les capacités de {\em gdb} en utilisant des scripts - Python. - \end{itemize} -} - -\section{2\textsuperscript{ème} demi-journée} - -\feagendaonecolumn{Démo - Résoudre un crash applicatif} -{ - \begin{itemize} - \item Analyse d'un code C compilé avec \code{compiler-explorer} pour - comprendre les optimisations. - \item Utilisation de {\em gdb} en ligne de commande, puis depuis un - IDE. - \item Utilisation des possibilités de scripting Python dans {\em gdb}. - \item Debugger une application {\em post mortem} avec un {\em core - dump} et {\em gdb} - \end{itemize} -} - -\feagendatwocolumn -{Cours - Tracing d'une application} -{ - \begin{itemize} - \item Tracing des appels systèmes avec {\em strace}. - \item Tracing des appels à des bibliothèques partagées avec {\em ltrace}. - \end{itemize} -} -{Démo – Débugger des problèmes applicatifs} -{ - \begin{itemize} - \item Analyser les appels à des bibliothèques partagées d'une - application en utilisant {\em ltrace}. - \item Débugger une application qui fonctionne de manière incorrecte - en utilisant {\em strace}. - \end{itemize} -} - -\feagendatwocolumn -{Cours - Problèmes liés à la mémoire} -{ - \begin{itemize} - \item Problèmes classiques liés à la mémoire : {\em buffer overflow}, - {\em segmentation fault}, fuite mémoire, collision pile/tas. - \item Outils de détection/investigation de problèmes mémoires : {\em - valgrind}, {\em libefence}, etc. - \item Profiling de l'utilisation du tas en utilisant {\em Massif} - \end{itemize} -} -{Démo – Débugger des problèmes liés à la mémoire} -{ - \begin{itemize} - \item Fuites mémoire et détection de comportement incorrects avec - {\em valgrind} et {\em vgdb}. - \item Problèmes de performance liés à une sur-allocation. - \item Visualisation de l'utilisation du tas par une application en - utilisant {\em Massif}. - \end{itemize} -} - -\section{3\textsuperscript{ème} demi-journée} - -\feagendatwocolumn -{Cours – Profiling d'application} -{ - \begin{itemize} - \item Problèmes de performance. - \item Récupération d'informations de profiling avec {\em perf}. - \item Analyse du graphe d'appel d'une application avec {\em - Callgrind} et {\em KCachegrind}. - \item Filtrage du jeu de données récupéré. - \item Interprétation, des données enregistrées avec {\em perf}. - \end{itemize} -} -{Démo - Profiling d'application} -{ - \begin{itemize} - \item Profiling d'une application avec {\em Callgrind}/{\em - KCachegrind}. - \item Analyse des performances d'une application avec {\em perf}. - \item Générer un {\em flamegraph} avec {\em FlameGraph}. - \end{itemize} -} - -\feagendatwocolumn -{Cours - Profiling et tracing de l'ensemble du système} -{ - \begin{itemize} - \item Profiling du système complet avec {\em perf}. - \item Utilisation de {\em kprobes} pour ajouter des points de trace - supplémentaires sans recompilation - \item Outils {\em eBPF} ({\em bcctools}, {\em bpftrace}, etc) pour - les scénarios de tracing complexes. - \item Tracing d'application et du noyau et visualisation des traces - avec {\em ftrace}, {\em kernelshark} ou {\em LTTng} - \end{itemize} -} -{Démo - Profiling et tracing de l'ensemble du système} -{ - \begin{itemize} - \item Profiling du système complet avec {\em perf}. - \item Analyse de latences système avec {\em ftrace} et {\em - kernelshark} - \end{itemize} -} - -\section{4\textsuperscript{ème} demi-journée} - -\feagendatwocolumn -{Cours - Profiling et tracing de l'ensemble du système} -{ - \begin{itemize} - \item Tracing avec eBPF: principes généraux, développements d'outils avec BCC - puis libbpf - \end{itemize} -} -{Démo - Profiling et tracing de l'ensemble du système} -{ - \begin{itemize} - \item Scripting python avec {\em BCC}. - \item Développement d'un outil personnalisé de tracing avec libbpf. - \end{itemize} -} - -\feagendatwocolumn -{Cours - Debugging du noyau Linux} -{ - \begin{itemize} - \item Sorties de la compilation du noyau Linux utiles pour le - debugging (\code{vmlinux}, \code{System.map}). - \item Comprendre et configurer le comportement des {\em kernel oops}. - \item Analyse post-mortem d'un crash kernel avec {\em crash}. - \item Problèmes mémoire au niveau kernel ({\em KASAN}, {\em UBSAN}, {\em Kmemleak}). - \item Debugging du noyau Linux avec {\em KGDB} et {\em KDB}. - \item Options du noyau Linux pour le debug des problèmes de verrous - (lockdep) - \item Autres options de configuration du noyau Linux utiles pour le - debug. - \end{itemize} -} -{Démo - Debugging du noyau Linux} -{ - \begin{itemize} - \item Analyse d'un {\em oops} après utilisation d'un module noyau - incorrect, avec {\em obdjump} et {\em addr2line}. - \item Debugging d'un {\em deadlock} avec les options {\em PROVE\_LOCKING}. - \item Détecter un {\em undefined behavior} avec {\em UBSAN} dans le noyau Linux. - \item Trouver une fuite mémoire avec {\em kmemleak}. - \item Débugger un module noyau avec {\em KGDB}. - \end{itemize} -} - -\section{Temps supplémentaire possible} - -{\em Du temps supplémentaire (jusqu'à 4 heures) pourrait être proposé si le programme ne tenait - pas en 4 demi-journées, selon le temps passé à répondre aux questions des participants.} +\onlineagenda \end{document} From 8e6acc7b463d2deef19c8173637295b85855d8fd Mon Sep 17 00:00:00 2001 From: Thomas Bonnefille Date: Mon, 25 Nov 2024 15:45:30 +0100 Subject: [PATCH 13/18] agenda: define different section for the graphics course Signed-off-by: Thomas Bonnefille --- agenda/graphics.inc | 544 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 544 insertions(+) diff --git a/agenda/graphics.inc b/agenda/graphics.inc index 3fc3e120ff..dc6902c802 100644 --- a/agenda/graphics.inc +++ b/agenda/graphics.inc @@ -1,4 +1,6 @@ \usepackage{ifthen} +\input{agenda/common.inc} + \def \training{graphics} % Title @@ -99,3 +101,545 @@ % Time ratio \def \onsitelecturetimeratio{75} \def \onsitedemotimeratio{25} + +% Agenda items + +\defagendaitem +{imageandcolor} +{lecture} +{Image and Color Representation} +{ + \begin{itemize} + \item Light, pixels and pictures + \item Sampling, frequency domain, aliasing + \item Color quantization and representation + \item Colorspaces and channels, alpha + \item YUV and chroma sub-sampling + \item Pixel data planes, scan order + \item Pixel formats, FourCC codes, modifiers + \end{itemize} + \vspace{0.5em} + {\em Introducing the basic notions used for representing color images in graphics.} +} +{Représentation des images et des couleurs} +{ + \begin{itemize} + \item Lumière, pixels et images + \item Échantillonage, domaine de fréquence, aliasing + \item Quantification et représentation des couleurs + \item Espaces colorimétriques et canaux, canal alpha + \item Sous-échantillonnage YUV et chroma + \item Plans de données de pixels, ordre d'analyse + \item Formats de pixels, codes FourCC codes, modificateurs + \end{itemize} + \vspace{0.5em} + {\em Introduction aux notions de base utilisées pour représenter les images en couleur.} +} +\defagendaitem +{pixeldrawing} +{lecture} +{Pixel Drawing} +{ + \begin{itemize} + \item Accessing and iterating over pixel data + \item Concepts about rasterization + \item Rectangle drawing + \item Linear gradient drawing + \item Disk drawing + \item Circular gradient drawing + \item Line drawing + \item Line and shape aliasing, sub-pixel drawing + \item Circles and polar coordinates + \item Parametric curves + \end{itemize} + \vspace{0.5em} + {\em Presenting how to access pixel data in memory and draw basic shapes.} +} +{Dessin des pixels} +{ + \begin{itemize} + \item Accès aux données de pixels et itération + \item Concepts autour de la pixellisation + \item Dessin de rectangles + \item Dessin de gradients linéaires + \item Dessin de disques + \item Dessin de gradients circulaires + \item Dessin de lignes + \item Aliasing de lignes et de formes, dessin sub-pixel + \item Cercles et coordonnées polaires + \item Courbes paramétriques + \end{itemize} + \vspace{0.5em} + {\em Comment accéder aux données de pixels en mémoire et dessiner des formes simples.} +} +\defagendaitem +{pixeloperation} +{lecture} +{Pixel Operations} +{ + \begin{itemize} + \item Region copy + \item Alpha blending + \item Color-keying + \item Scaling and interpolation + \item Linear filtering and convolution + \item Blur filters + \item Dithering + \end{itemize} + \vspace{0.5em} + {\em Providing basic notions about filtering, with very common examples of how it's used.} +} +{Opérations sur les pixels} +{ + \begin{itemize} + \item Copie de région + \item Alpha blending + \item Keying de couleur + \item Mise à l'échelle et interpolation + \item Filtrage linéaire et convolution + \item Filtres de floutage + \item Dithering + \end{itemize} + \vspace{0.5em} + {\em Notions de base autour du filtrage, avec des exemples d'utilisation très courants.} +} +\defagendaitem +{drawing} +{lab} +{Drawing and operations} +{ + \begin{itemize} + \item Examples of various shapes and region drawing + \item Examples of basic pixel operations + \end{itemize} + \vspace{0.5em} + {\em Illustrating the concepts presented along the way.} +} +{Dessin et opérations} +{ + \begin{itemize} + \item Exemples de dessin de divers types de formes et de régions + \item Exemples d'opérations de base sur les pixels + \end{itemize} + \vspace{0.5em} + {\em Illustration des concepts présentés au fur et à mesure.} +} +\defagendaitem +{pipeline} +{lecture} +{Pipeline Components Overview and Generalities} +{ + \begin{itemize} + \item Types of graphics hardware implementations + \item Graphics memory and buffers + \item Graphics pipelines + \item Display, render and video hardware overview + \end{itemize} + \vspace{0.5em} + {\em Presenting the hardware involved in graphics pipelines.} +} +{Vue d'ensembe des composants du pipeline et généralités} +{ + \begin{itemize} + \item Types d'implémentations de matériel graphique + \item Mémoire graphique et buffers + \item Pipelines graphiques + \item Vue d'ensemble du matériel d'affichage, de rendu et de vidéo + \end{itemize} + \vspace{0.5em} + {\em Cours du matériel impliqué dans les pipelines graphiques.} +} +\defagendaitem +{displayhardware} +{lecture} +{Display hardware} +{ + \begin{itemize} + \item Visual display technologies: CRT, plasma, LCD, OLED, EPD + \item Display timings, modes and EDID + \item DIsplay interfaces: VGA, DVI, HDMI, DP, LVDS, DSI, DP + \item Bridges and transcoders + \end{itemize} + \vspace{0.5em} + {\em Presenting the inner workings of display hardware.} +} +{Matériel d'affichage} +{ + \begin{itemize} + \item Technologies d'affichage visuel : CRT, plasma, LCD, OLED, EPD + \item Timings d'affichage, modes et EDID + \item Interfaces d'affichage : VGA, DVI, HDMI, DP, LVDS, DSI, DP + \item Bridges et transcodeurs + \end{itemize} + \vspace{0.5em} + {\em Cours du fonctionnement interne du matériel d'affichage.} +} +\defagendaitem +{renderinghardware} +{lecture} +{Rendering Hardware Specifics} +{ + \begin{itemize} + \item Digital Signal Processors (DSPs) + \item Dedicated hardware accelerators + \item Graphics Processing Unit (GPUs) + \end{itemize} + \vspace{0.5em} + {\em Describing the architecture of processing and rendering hardware.} +} +{Spécificités du matériel de rendu} +{ + \begin{itemize} + \item Digital Signal Processors (DSPs) + \item Accélérateurs matériels dédiés + \item Graphics Processing Unit (GPUs) + \end{itemize} + \vspace{0.5em} + {\em Description de l'architecture du matériel de traitement et de rendu.} +} +\defagendaitem +{systemintegration} +{lecture} +{System Integration, Memory and Performance} +{ + \begin{itemize} + \item Graphics integration and memory + \item Shared graphics memory access + \item Graphics memory constraints and performance + \item Offloading graphics to hardware + \item Graphics performance tips + \end{itemize} + \vspace{0.5em} + {\em Topics related to graphics integration, memory management and performance aspects.} +} +{Intégration système, mémoire et performance} +{ + \begin{itemize} + \item Intégration graphique et mémoire + \item Mémoire partagée pour les graphiques + \item Contraintes et performance de la mémoire graphique + \item Soulager le processeur en utilisant du matériel dédié au graphisme + \item Conseils pour les performances graphiques + \end{itemize} + \vspace{0.5em} + {\em Sujets autour de l'intégration système, la gestion de la mémoire et les performances.} +} +\defagendaitem +{displaystack} +{lecture} +{Display Stack Overview} +{ + \begin{itemize} + \item System-agnostic overview: kernel, userspace display and rendering + \item Linux kernel overview + \item Linux-compatible low-level userspace overview + \item X Window and Wayland overview + \item High-level graphics libraries and desktop environments overview + \end{itemize} + \vspace{0.5em} + {\em Presenting what software components are required for modern computer graphics and how they are divided between kernel and userspace.} +} +{Pile d'affichage} +{ + \begin{itemize} + \item Vue d'ensemble indépendante du système : noyau, affichage et + rendu en espace utilisateur + \item Vue d'ensemble de la partie dans le noyau Linux + \item Vue d'ensemble de la partie bas niveau en espace utilisateur + \item X Window et Wayland + \item Bibliothèques graphiques haut niveau et environnements de bureau + \end{itemize} + \vspace{0.5em} + {\em Cours des composants nécessaires à un traitement graphique + moderne, et comment ceux-ci sont répartis entre les espace noyau et + utilisateur} +} +\defagendaitem +{tty} +{lecture} +{TTY Kernel Aspects, Framebuffer Device Kernel Aspects} +{ + \begin{itemize} + \item Linux TTY subsystem introduction + \item Virtual terminals and graphics + \item Virtual terminals switching and graphics + \end{itemize} + \vspace{0.5em} + \begin{itemize} + \item Fbdev overview + \item Fbdev basic operations + \item Fbdev limitations + \end{itemize} + \vspace{0.5em} + {\em How TTYs interact with graphics in Linux along with a short presentation of fbdev and why it's deprecated.} +} +{Aspects noyau TTY et device framebuffer} +{ + \begin{itemize} + \item Introduction au sous-système TTY de Linux + \item Terminaux virtuels et graphiques + \item Basculer entre terminaux virtuels et graphiques + \end{itemize} + \vspace{0.5em} + \begin{itemize} + \item Vue d'ensemble de fbdev + \item Opérations de base de fbdev + \item Limitations de fbdev + \end{itemize} + \vspace{0.5em} + {\em Comment les TTYs interagissent avec les graphiques sous Linux et + brève présentation de fbdev et pourquoi ce composant n'est plus + recommandé} +} +\defagendaitem +{drm} +{lecture} +{DRM Kernel Aspects} +{ + \begin{itemize} + \item DRM devices + \item DRM driver identification and capabilities + \item DRM master, magic and authentication + \item DRM memory management + \item DRM KMS dumb buffer API + \item DRM FourCCs and modifiers + \item DRM KMS resources probing + \item DRM KMS modes + \item DRM KMS framebuffer management + \item DRM KMS legacy configuration and page flipping + \item DRM event notification + \item DRM KMS object properties + \item DRM KMS atomic + \item DRM render + \item DRM Prime zero-copy memory sharing (dma-buf) + \item DRM sync object fencing + \item DRM debug and documentation + \end{itemize} + \vspace{0.5em} + {\em An exaustive presentation of the DRM interface.} +} +{DRM dans le noyau} +{ + \begin{itemize} + \item Devices DRM + \item Identification et fonctionnalités des pilotes DRM + \item Maître DRM, "magic authentification" + \item Gestion de la mémoire des DRM + \item API "dumb buffer" de DRM KMS + \item Modificateurs et FourCCs dans DRM + \item Détection des ressources dans DRM KMS + \item Modes DRM KMS + \item Gestion de framebuffer dans DRM KMS + \item Ancien système de configuration de DRM KMS et échange de pages + \item Notification d´évènements dans DRM + \item Propriétés d'objets dans DRM KMS + \item DRM KMS atomic + \item Rendu DRM + \item Partage mémoire sans copie (dma-buf) avec DRM Prime + \item Barrières d'objets DRM sync + \item Débug et documentation dans DRM + \end{itemize} + \vspace{0.5em} + {\em Une présentation complète de l'interface DRM.} +} +\defagendaitem +{kernel} +{lab} +{Kernel Aspects} +{ + \begin{itemize} + \item Linux TTY and virtual terminals + \item DRM KMS mode-setting + \item DRM KMS driver walkthrough + \item DRM render driver walkthrough + \end{itemize} + \vspace{0.5em} + {\em Illustrating how kernel aspects work.} +} +{Aspects noyau} +{ + \begin{itemize} + \item Terminaux virtuels et TTYs dans Linux + \item Configuration des modes DRM KMS + \item Visite guidée d'un pilote DRM KMS + \item Visite guidée d'un pilote de rendu DRM + \end{itemize} + \vspace{0.5em} + {\em Illustration du fonctionnement en espace noyau.} +} +\defagendaitem +{xwindow} +{lecture} +{X Window Userspace Aspects} +{ + \begin{itemize} + \item X11 protocol and architecture + \item X11 protocol extensions + \item Xorg architecture and acceleration + \item Xorg drivers overview + \item X11 and OpenGL acceleration: GLX and DRI2 + \item Xorg usage, integration and configuration + \item Major issues with X11 + \item Xorg debug and documentation + \end{itemize} + \vspace{0.5em} + {\em Presenting all things related to X11 and Xorg.} +} +{Aspects X Window en espace utilisateur} +{ + \begin{itemize} + \item Protocole X11 et son architecture + \item Extensions au protocole X11 + \item Architecture de Xorg et accélération + \item Cours des pilotes Xorg + \item Accélération X11 et OpenGL : GLX et DRI2 + \item Utilisation de Xorg, intégration et configuration + \item Principaux problèmes avec X11 + \item Débug et documentation de Xorg + \end{itemize} + \vspace{0.5em} + {\em Cours des tous les aspects de X11 et Xorg.} +} +\defagendaitem +{wayland} +{lecture} +{Wayland Userspace Aspects} +{ + \begin{itemize} + \item Wayland overview and paradigm + \item Wayland protocol and architecture + \item Wayland core protocol details + \item Wayland extra protocols + \item Wayland asynchronous interface + \item Wayland OpenGL integration + \item Wayland status and adoption + \item Wayland debug and documentation + \end{itemize} + \vspace{0.5em} + {\em An in-depth presentation of Wayland.} +} +{Aspects Wayland en espace utilisateur} +{ + \begin{itemize} + \item Vue d'ensemble et paradigmes de Wayland + \item Protocole Wayland et son architecture + \item Détails sur le coeur du protocole Wayland + \item Protocoles supplémentaires de Wayland + \item Interface asynchrone de Wayland + \item Intégration OpenGL de Wayland + \item Statut et adoption de Wayland + \item Débug et documentation de Wayland + \end{itemize} + \vspace{0.5em} + {\em Une présentation approfondie de Wayland.} +} +\defagendaitem +{mesa} +{lecture} +{Mesa 3D Userspace Aspects} +{ + \begin{itemize} + \item Standardized 3D rendering APIs: OpenGL, OpenGL ES, EGL and Vulkan + \item Mesa 3D overview + \item Mesa 3D implementation highlights + \item Mesa 3D internals: Gallium 3D + \item Mesa 3D internals: intermediate representations + \item Mesa 3D Generic Buffer Management (GBM) + \item Mesa 3D hardware support status + \item Mesa 3D versus proprietary implementations + \item Mesa 3D hardware support: debug and documentation + \end{itemize} + \vspace{0.5em} + {\em Presenting 3D APIs and the Mesa 3D implementation.} +} +{Aspects Mesa 3D en espace utilisateur} +{ + \begin{itemize} + \item APIs de rendu 3D standardisées : OpenGL, OpenGL ES, EGL and Vulkan + \item Vue d'ensemble de Mesa 3D + \item Principaux détails d'implémentation de Mesa 3D + \item Détails internes de Mesa 3D : Gallium 3D + \item Détails internes de Mesa 3D : représentations intermédiaires + \item Generic Buffer Management (GBM) dans Mesa 3D + \item Point sur la prise en charge du matériel par Mesa 3D + \item Mesa 3D comparée aux implémentations propriétaires + \item Prise en charge du matériel par Mesa 3D : débug et documentation + \end{itemize} + \vspace{0.5em} + {\em Cours des APIs 3D et implémentation de Mesa 3D.} +} +\defagendaitem +{userspace} +{lab} +{Userspace Aspects} +{ + \begin{itemize} + \item Xorg code walkthrough + \item Wayland compositor core walkthrough + \item Wayland client examples + \item Mesa code walk-through + \item OpenGL and EGL examples + \end{itemize} + \vspace{0.5em} + {\em Illustrating userspace aspects, client and server implementations.} +} +{Aspects en espace utilisateur} +{ + \begin{itemize} + \item Visite guidée du code de Xorg + \item Visite guidée du coeur du compositeur Wayland + \item Exemples de clients Wayland + \item Visite guidée du code de Mesa + \item Exemples OpenGL et EGL + \end{itemize} + \vspace{0.5em} + {\em Illustration des aspects en espace utilisateur et + d'implémentations de clients et de serveurs.} +} + +\def \onlineagenda { + \showagendaday{1} + \showagendaitem{imageandcolor}{lecture} + \showagendaitem{pixeldrawing}{lecture} + \showagendaitem{pixeloperation}{lecture} + \showagendaitem{drawing}{lab} + \showagendaday{2} + \showagendaitem{pipeline}{lecture} + \showagendaitem{displayhardware}{lecture} + \showagendaitem{renderinghardware}{lecture} + \showagendaitem{systemintegration}{lecture} + \showagendaday{3} + \showagendaitem{displaystack}{lecture} + \showagendaitem{tty}{lecture} + \showagendaitem{drm}{lecture} + \showagendaitem{kernel}{lab} + \showagendaday{4} + \showagendaitem{xwindow}{lecture} + \showagendaitem{wayland}{lecture} + \showagendaitem{mesa}{lecture} + \showagendaitem{userspace}{lab} + \showagendaitem{qna}{misc} +} + +\def \onsiteagenda { + \showagendaday{1} + \showagendaitem{imageandcolor}{lecture} + \showagendaitem{pixeldrawing}{lecture} + \showagendaitem{pixeloperation}{lecture} + \showagendaitem{drawing}{lab} + \showagendaday{2} + \showagendaitem{pipeline}{lecture} + \showagendaitem{displayhardware}{lecture} + \showagendaitem{renderinghardware}{lecture} + \showagendaitem{systemintegration}{lecture} + \showagendaday{3} + \showagendaitem{displaystack}{lecture} + \showagendaitem{tty}{lecture} + \showagendaitem{drm}{lecture} + \showagendaitem{kernel}{lab} + \showagendaday{4} + \showagendaitem{xwindow}{lecture} + \showagendaitem{wayland}{lecture} + \showagendaitem{mesa}{lecture} + \showagendaitem{userspace}{lab} +} From 6bd41bcfb2f154472a9ffb85286dc399f255d495 Mon Sep 17 00:00:00 2001 From: Thomas Bonnefille Date: Mon, 25 Nov 2024 15:45:50 +0100 Subject: [PATCH 14/18] agenda: use commands to refactor the graphics agenda Signed-off-by: Thomas Bonnefille --- agenda/graphics-agenda.tex | 245 +------------------------ agenda/graphics-fr-agenda.tex | 251 +------------------------ agenda/graphics-online-agenda.tex | 255 +------------------------- agenda/graphics-online-fr-agenda.tex | 263 +-------------------------- 4 files changed, 5 insertions(+), 1009 deletions(-) diff --git a/agenda/graphics-agenda.tex b/agenda/graphics-agenda.tex index c8a3639216..e58ae956db 100644 --- a/agenda/graphics-agenda.tex +++ b/agenda/graphics-agenda.tex @@ -13,250 +13,7 @@ \feshowinfo -\section{Day 1 - Morning} - -\feagendatwocolumn -{Lecture - Image and Color Representation} -{ - \begin{itemize} - \item Light, pixels and pictures - \item Sampling, frequency domain, aliasing - \item Color quantization and representation - \item Colorspaces and channels, alpha - \item YUV and chroma sub-sampling - \item Pixel data planes, scan order - \item Pixel formats, FourCC codes, modifiers - \end{itemize} - \vspace{0.5em} - {\em Introducing the basic notions used for representing color images in graphics.} -} -{Lecture - Pixel Drawing} -{ - \begin{itemize} - \item Accessing and iterating over pixel data - \item Concepts about rasterization - \item Rectangle drawing - \item Linear gradient drawing - \item Disk drawing - \item Circular gradient drawing - \item Line drawing - \item Line and shape aliasing, sub-pixel drawing - \item Circles and polar coordinates - \item Parametric curves - \end{itemize} - \vspace{0.5em} - {\em Presenting how to access pixel data in memory and draw basic shapes.} -} -\\ -\feagendatwocolumn -{Lecture - Pixel Operations} -{ - \begin{itemize} - \item Region copy - \item Alpha blending - \item Color-keying - \item Scaling and interpolation - \item Linear filtering and convolution - \item Blur filters - \item Dithering - \end{itemize} - \vspace{0.5em} - {\em Providing basic notions about filtering, with very common examples of how it's used.} -} -{Demo - Drawing and operations} -{ - \begin{itemize} - \item Examples of various shapes and region drawing - \item Examples of basic pixel operations - \end{itemize} - \vspace{0.5em} - {\em Illustrating the concepts presented along the way.} -} - -\section{Day 1 - Afternoon} - -\feagendatwocolumn -{Lecture - Pipeline Components Overview and Generalities} -{ - \begin{itemize} - \item Types of graphics hardware implementations - \item Graphics memory and buffers - \item Graphics pipelines - \item Display, render and video hardware overview - \end{itemize} - \vspace{0.5em} - {\em Presenting the hardware involved in graphics pipelines.} -} -{Lecture - Display hardware} -{ - \begin{itemize} - \item Visual display technologies: CRT, plasma, LCD, OLED, EPD - \item Display timings, modes and EDID - \item DIsplay interfaces: VGA, DVI, HDMI, DP, LVDS, DSI, DP - \item Bridges and transcoders - \end{itemize} - \vspace{0.5em} - {\em Presenting the inner workings of display hardware.} -} -\\ - -\feagendatwocolumn -{Lecture - Rendering Hardware Specifics} -{ - \begin{itemize} - \item Digital Signal Processors (DSPs) - \item Dedicated hardware accelerators - \item Graphics Processing Unit (GPUs) - \end{itemize} - \vspace{0.5em} - {\em Describing the architecture of processing and rendering hardware.} -} -{Lecture - System Integration, Memory and Performance} -{ - \begin{itemize} - \item Graphics integration and memory - \item Shared graphics memory access - \item Graphics memory constraints and performance - \item Offloading graphics to hardware - \item Graphics performance tips - \end{itemize} - \vspace{0.5em} - {\em Topics related to graphics integration, memory management and performance aspects.} -} - -\section{Day 2 - Morning} - -\feagendatwocolumn -{Lecture - Display Stack Overview} -{ - \begin{itemize} - \item System-agnostic overview: kernel, userspace display and rendering - \item Linux kernel overview - \item Linux-compatible low-level userspace overview - \item X Window and Wayland overview - \item High-level graphics libraries and desktop environments overview - \end{itemize} - \vspace{0.5em} - {\em Presenting what software components are required for modern computer graphics and how they are divided between kernel and userspace.} -} -{Lecture - TTY Kernel Aspects, Framebuffer Device Kernel Aspects} -{ - \begin{itemize} - \item Linux TTY subsystem introduction - \item Virtual terminals and graphics - \item Virtual terminals switching and graphics - \end{itemize} - \vspace{0.5em} - \begin{itemize} - \item Fbdev overview - \item Fbdev basic operations - \item Fbdev limitations - \end{itemize} - \vspace{0.5em} - {\em How TTYs interact with graphics in Linux along with a short presentation of fbdev and why it's deprecated.} -} -\\ - -\feagendatwocolumn -{Lecture - DRM Kernel Aspects} -{ - \begin{itemize} - \item DRM devices - \item DRM driver identification and capabilities - \item DRM master, magic and authentication - \item DRM memory management - \item DRM KMS dumb buffer API - \item DRM FourCCs and modifiers - \item DRM KMS resources probing - \item DRM KMS modes - \item DRM KMS framebuffer management - \item DRM KMS legacy configuration and page flipping - \item DRM event notification - \item DRM KMS object properties - \item DRM KMS atomic - \item DRM render - \item DRM Prime zero-copy memory sharing (dma-buf) - \item DRM sync object fencing - \item DRM debug and documentation - \end{itemize} - \vspace{0.5em} - {\em An exaustive presentation of the DRM interface.} -} -{Demo - Kernel Aspects} -{ - \begin{itemize} - \item Linux TTY and virtual terminals - \item DRM KMS mode-setting - \item DRM KMS driver walkthrough - \item DRM render driver walkthrough - \end{itemize} - \vspace{0.5em} - {\em Illustrating how kernel aspects work.} -} - -\section{Day 2 - Afternoon} - -\feagendatwocolumn -{Lecture - X Window Userspace Aspects} -{ - \begin{itemize} - \item X11 protocol and architecture - \item X11 protocol extensions - \item Xorg architecture and acceleration - \item Xorg drivers overview - \item X11 and OpenGL acceleration: GLX and DRI2 - \item Xorg usage, integration and configuration - \item Major issues with X11 - \item Xorg debug and documentation - \end{itemize} - \vspace{0.5em} - {\em Presenting all things related to X11 and Xorg.} -} -{Lecture - Wayland Userspace Aspects} -{ - \begin{itemize} - \item Wayland overview and paradigm - \item Wayland protocol and architecture - \item Wayland core protocol details - \item Wayland extra protocols - \item Wayland asynchronous interface - \item Wayland OpenGL integration - \item Wayland status and adoption - \item Wayland debug and documentation - \end{itemize} - \vspace{0.5em} - {\em An in-depth presentation of Wayland.} -}\\ - -\feagendatwocolumn -{Lecture - Mesa 3D Userspace Aspects} -{ - \begin{itemize} - \item Standardized 3D rendering APIs: OpenGL, OpenGL ES, EGL and Vulkan - \item Mesa 3D overview - \item Mesa 3D implementation highlights - \item Mesa 3D internals: Gallium 3D - \item Mesa 3D internals: intermediate representations - \item Mesa 3D Generic Buffer Management (GBM) - \item Mesa 3D hardware support status - \item Mesa 3D versus proprietary implementations - \item Mesa 3D hardware support: debug and documentation - \end{itemize} - \vspace{0.5em} - {\em Presenting 3D APIs and the Mesa 3D implementation.} -} -{Demo - Userspace Aspects} -{ - \begin{itemize} - \item Xorg code walkthrough - \item Wayland compositor core walkthrough - \item Wayland client examples - \item Mesa code walk-through - \item OpenGL and EGL examples - \end{itemize} - \vspace{0.5em} - {\em Illustrating userspace aspects, client and server implementations.} -} +\onsiteagenda \end{document} diff --git a/agenda/graphics-fr-agenda.tex b/agenda/graphics-fr-agenda.tex index 6bcea5cbc8..645ebe3cb2 100644 --- a/agenda/graphics-fr-agenda.tex +++ b/agenda/graphics-fr-agenda.tex @@ -13,256 +13,7 @@ \feshowinfo -\section{Jour 1 - Matin} - -\feagendatwocolumn -{Présentation - Représentation des images et des couleurs} -{ - \begin{itemize} - \item Lumière, pixels et images - \item Échantillonage, domaine de fréquence, aliasing - \item Quantification et représentation des couleurs - \item Espaces colorimétriques et canaux, canal alpha - \item Sous-échantillonnage YUV et chroma - \item Plans de données de pixels, ordre d'analyse - \item Formats de pixels, codes FourCC codes, modificateurs - \end{itemize} - \vspace{0.5em} - {\em Introduction aux notions de base utilisées pour représenter les images en couleur.} -} -{Présentation - Dessin des pixels} -{ - \begin{itemize} - \item Accès aux données de pixels et itération - \item Concepts autour de la pixellisation - \item Dessin de rectangles - \item Dessin de gradients linéaires - \item Dessin de disques - \item Dessin de gradients circulaires - \item Dessin de lignes - \item Aliasing de lignes et de formes, dessin sub-pixel - \item Cercles et coordonnées polaires - \item Courbes paramétriques - \end{itemize} - \vspace{0.5em} - {\em Comment accéder aux données de pixels en mémoire et dessiner des formes simples.} -} -\\ -\feagendatwocolumn -{Présentation - Opérations sur les pixels} -{ - \begin{itemize} - \item Copie de région - \item Alpha blending - \item Keying de couleur - \item Mise à l'échelle et interpolation - \item Filtrage linéaire et convolution - \item Filtres de floutage - \item Dithering - \end{itemize} - \vspace{0.5em} - {\em Notions de base autour du filtrage, avec des exemples d'utilisation très courants.} -} -{Démo - Dessin et opérations} -{ - \begin{itemize} - \item Exemples de dessin de divers types de formes et de régions - \item Exemples d'opérations de base sur les pixels - \end{itemize} - \vspace{0.5em} - {\em Illustration des concepts présentés au fur et à mesure.} -} - -\section{Jour 1 - Après-midi} - -\feagendatwocolumn -{Présentation - Vue d'ensembe des composants du pipeline et généralités} -{ - \begin{itemize} - \item Types d'implémentations de matériel graphique - \item Mémoire graphique et buffers - \item Pipelines graphiques - \item Vue d'ensemble du matériel d'affichage, de rendu et de vidéo - \end{itemize} - \vspace{0.5em} - {\em Présentation du matériel impliqué dans les pipelines graphiques.} -} -{Présentation - Matériel d'affichage} -{ - \begin{itemize} - \item Technologies d'affichage visuel : CRT, plasma, LCD, OLED, EPD - \item Timings d'affichage, modes et EDID - \item Interfaces d'affichage : VGA, DVI, HDMI, DP, LVDS, DSI, DP - \item Bridges et transcodeurs - \end{itemize} - \vspace{0.5em} - {\em Présentation du fonctionnement interne du matériel d'affichage.} -} -\\ - -\feagendatwocolumn -{Présentation - Spécificités du matériel de rendu} -{ - \begin{itemize} - \item Digital Signal Processors (DSPs) - \item Accélérateurs matériels dédiés - \item Graphics Processing Unit (GPUs) - \end{itemize} - \vspace{0.5em} - {\em Description de l'architecture du matériel de traitement et de rendu.} -} -{Présentation - Intégration système, mémoire et performance} -{ - \begin{itemize} - \item Intégration graphique et mémoire - \item Mémoire partagée pour les graphiques - \item Contraintes et performance de la mémoire graphique - \item Soulager le processeur en utilisant du matériel dédié au graphisme - \item Conseils pour les performances graphiques - \end{itemize} - \vspace{0.5em} - {\em Sujets autour de l'intégration système, la gestion de la mémoire et les performances.} -} - -\section{Jour 2 - Matin} - -\feagendatwocolumn -{Présentation - Pile d'affichage} -{ - \begin{itemize} - \item Vue d'ensemble indépendante du système : noyau, affichage et - rendu en espace utilisateur - \item Vue d'ensemble de la partie dans le noyau Linux - \item Vue d'ensemble de la partie bas niveau en espace utilisateur - \item X Window et Wayland - \item Bibliothèques graphiques haut niveau et environnements de bureau - \end{itemize} - \vspace{0.5em} - {\em Présentation des composants nécessaires à un traitement graphique - moderne, et comment ceux-ci sont répartis entre les espace noyau et - utilisateur} -} -{Présentation - Aspects noyau TTY et device framebuffer} -{ - \begin{itemize} - \item Introduction au sous-système TTY de Linux - \item Terminaux virtuels et graphiques - \item Basculer entre terminaux virtuels et graphiques - \end{itemize} - \vspace{0.5em} - \begin{itemize} - \item Vue d'ensemble de fbdev - \item Opérations de base de fbdev - \item Limitations de fbdev - \end{itemize} - \vspace{0.5em} - {\em Comment les TTYs interagissent avec les graphiques sous Linux et - brève présentation de fbdev et pourquoi ce composant n'est plus - recommandé} -} -\\ - -\feagendatwocolumn -{Présentation - DRM dans le noyau} -{ - \begin{itemize} - \item Devices DRM - \item Identification et fonctionnalités des pilotes DRM - \item Maître DRM, "magic authentification" - \item Gestion de la mémoire des DRM - \item API "dumb buffer" de DRM KMS - \item Modificateurs et FourCCs dans DRM - \item Détection des ressources dans DRM KMS - \item Modes DRM KMS - \item Gestion de framebuffer dans DRM KMS - \item Ancien système de configuration de DRM KMS et échange de pages - \item Notification d´évènements dans DRM - \item Propriétés d'objets dans DRM KMS - \item DRM KMS atomic - \item Rendu DRM - \item Partage mémoire sans copie (dma-buf) avec DRM Prime - \item Barrières d'objets DRM sync - \item Débug et documentation dans DRM - \end{itemize} - \vspace{0.5em} - {\em Une présentation complète de l'interface DRM.} -} -{Démo - Aspects noyau} -{ - \begin{itemize} - \item Terminaux virtuels et TTYs dans Linux - \item Configuration des modes DRM KMS - \item Visite guidée d'un pilote DRM KMS - \item Visite guidée d'un pilote de rendu DRM - \end{itemize} - \vspace{0.5em} - {\em Illustration du fonctionnement en espace noyau.} -} - -\section{Jour 2 - Après-midi} - -\feagendatwocolumn -{Présentation - Aspects X Window en espace utilisateur} -{ - \begin{itemize} - \item Protocole X11 et son architecture - \item Extensions au protocole X11 - \item Architecture de Xorg et accélération - \item Présentation des pilotes Xorg - \item Accélération X11 et OpenGL : GLX et DRI2 - \item Utilisation de Xorg, intégration et configuration - \item Principaux problèmes avec X11 - \item Débug et documentation de Xorg - \end{itemize} - \vspace{0.5em} - {\em Présentation des tous les aspects de X11 et Xorg.} -} -{Présentation - Aspects Wayland en espace utilisateur} -{ - \begin{itemize} - \item Vue d'ensemble et paradigmes de Wayland - \item Protocole Wayland et son architecture - \item Détails sur le coeur du protocole Wayland - \item Protocoles supplémentaires de Wayland - \item Interface asynchrone de Wayland - \item Intégration OpenGL de Wayland - \item Statut et adoption de Wayland - \item Débug et documentation de Wayland - \end{itemize} - \vspace{0.5em} - {\em Une présentation approfondie de Wayland.} -}\\ - -\feagendatwocolumn -{Présentation - Aspects Mesa 3D en espace utilisateur} -{ - \begin{itemize} - \item APIs de rendu 3D standardisées : OpenGL, OpenGL ES, EGL and Vulkan - \item Vue d'ensemble de Mesa 3D - \item Principaux détails d'implémentation de Mesa 3D - \item Détails internes de Mesa 3D : Gallium 3D - \item Détails internes de Mesa 3D : représentations intermédiaires - \item Generic Buffer Management (GBM) dans Mesa 3D - \item Point sur la prise en charge du matériel par Mesa 3D - \item Mesa 3D comparée aux implémentations propriétaires - \item Prise en charge du matériel par Mesa 3D : débug et documentation - \end{itemize} - \vspace{0.5em} - {\em Présentation des APIs 3D et implémentation de Mesa 3D.} -} -{Démo - Aspects en espace utilisateur} -{ - \begin{itemize} - \item Visite guidée du code de Xorg - \item Visite guidée du coeur du compositeur Wayland - \item Exemples de clients Wayland - \item Visite guidée du code de Mesa - \item Exemples OpenGL et EGL - \end{itemize} - \vspace{0.5em} - {\em Illustration des aspects en espace utilisateur et - d'implémentations de clients et de serveurs.} -} +\onsiteagenda \end{document} diff --git a/agenda/graphics-online-agenda.tex b/agenda/graphics-online-agenda.tex index 1906cf62ba..3848562e19 100644 --- a/agenda/graphics-online-agenda.tex +++ b/agenda/graphics-online-agenda.tex @@ -13,260 +13,7 @@ \feshowinfo -\section{Half day 1} - -\feagendatwocolumn -{Lecture - Image and Color Representation} -{ - \begin{itemize} - \item Light, pixels and pictures - \item Sampling, frequency domain, aliasing - \item Color quantization and representation - \item Colorspaces and channels, alpha - \item YUV and chroma sub-sampling - \item Pixel data planes, scan order - \item Pixel formats, FourCC codes, modifiers - \end{itemize} - \vspace{0.5em} - {\em Introducing the basic notions used for representing color images in graphics.} -} -{Lecture - Pixel Drawing} -{ - \begin{itemize} - \item Accessing and itegrating over pixel data - \item Concepts about rasterization - \item Rectangle drawing - \item Linear gradient drawing - \item Disk drawing - \item Circular gradient drawing - \item Line drawing - \item Line and shape aliasing, sub-pixel drawing - \item Circles and polar coordinates - \item Parametric curves - \end{itemize} - \vspace{0.5em} - {\em Presenting how to access pixel data in memory and draw basic shapes.} -} -\\ -\feagendatwocolumn -{Lecture - Pixel Operations} -{ - \begin{itemize} - \item Region copy - \item Alpha blending - \item Color-keying - \item Scaling and interpolation - \item Linear filtering and convolution - \item Blur filters - \item Dithering - \end{itemize} - \vspace{0.5em} - {\em Providing basic notions about filtering, with very common examples of how it's used.} -} -{Demo - Drawing and operations} -{ - \begin{itemize} - \item Examples of various shapes and region drawing - \item Examples of basic pixel operations - \end{itemize} - \vspace{0.5em} - {\em Illustrating the concepts presented along the way.} -} - -\section{Half day 2} - -\feagendatwocolumn -{Lecture - Pipeline Components Overview and Generalities} -{ - \begin{itemize} - \item Types of graphics hardware implementations - \item Graphics memory and buffers - \item Graphics pipelines - \item Display, render and video hardware overview - \end{itemize} - \vspace{0.5em} - {\em Presenting the hardware involved in graphics pipelines.} -} -{Lecture - Display hardware} -{ - \begin{itemize} - \item Visual display technologies: CRT, plasma, LCD, OLED, EPD - \item Display timings, modes and EDID - \item Display interfaces: VGA, DVI, HDMI, DP, LVDS, DSI, DP - \item Bridges and transcoders - \end{itemize} - \vspace{0.5em} - {\em Presenting the inner workings of display hardware.} -} -\\ - -\feagendatwocolumn -{Lecture - Rendering Hardware Specifics} -{ - \begin{itemize} - \item Digital Signal Processors (DSPs) - \item Dedicated hardware accelerators - \item Graphics Processing Unit (GPUs) - \end{itemize} - \vspace{0.5em} - {\em Describing the architecture of processing and rendering hardware.} -} -{Lecture - System Integration, Memory and Performance} -{ - \begin{itemize} - \item Graphics integration and memory - \item Shared graphics memory access - \item Graphics memory constraints and performance - \item Offloading graphics to hardware - \item Graphics performance tips - \end{itemize} - \vspace{0.5em} - {\em Topics related to graphics integration, memory management and performance aspects.} -} - -\section{Half day 3} - -\feagendatwocolumn -{Lecture - Display Stack Overview} -{ - \begin{itemize} - \item System-agnostic overview: kernel, user-space display and rendering - \item Linux kernel overview - \item Linux-compatible low-level userspace overview - \item X Window and Wayland overview - \item High-level graphics libraries and desktop environments overview - \end{itemize} - \vspace{0.5em} - {\em Presenting what software components are required for modern computer graphics and how they are divided between kernel and userspace.} -} -{Lecture - TTY Kernel Aspects, Framebuffer Device Kernel Aspects} -{ - \begin{itemize} - \item Linux TTY subsystem introduction - \item Virtual terminals and graphics - \item Virtual terminals switching and graphics - \end{itemize} - \vspace{0.5em} - \begin{itemize} - \item Fbdev overview - \item Fbdev basic operations - \item Fbdev limitations - \end{itemize} - \vspace{0.5em} - {\em How TTYs interact with graphics in Linux along with a short presentation of fbdev and why it's deprecated.} -} -\\ - -\feagendatwocolumn -{Lecture - DRM Kernel Aspects} -{ - \begin{itemize} - \item DRM devices - \item DRM driver identification and capabilities - \item DRM master, magic and authentication - \item DRM memory management - \item DRM KMS dumb buffer API - \item DRM FourCCs and modifiers - \item DRM KMS resources probing - \item DRM KMS modes - \item DRM KMS framebuffer management - \item DRM KMS legacy configuration and page flipping - \item DRM event notification - \item DRM KMS object properties - \item DRM KMS atomic - \item DRM render - \item DRM Prime zero-copy memory sharing (dma-buf) - \item DRM sync object fencing - \item DRM debug and documentation - \end{itemize} - \vspace{0.5em} - {\em An exaustive presentation of the DRM interface.} -} -{Demo - Kernel Aspects} -{ - \begin{itemize} - \item Linux TTY and virtual terminals - \item DRM KMS mode-setting - \item DRM KMS driver walkthrough - \item DRM render driver walkthrough - \end{itemize} - \vspace{0.5em} - {\em Illustrating how kernel aspects work.} -} - -\section{Half day 4} - -\feagendatwocolumn -{Lecture - X Window Userspace Aspects} -{ - \begin{itemize} - \item X11 protocol and architecture - \item X11 protocol extensions - \item Xorg architecture and acceleration - \item Xorg drivers overview - \item X11 and OpenGL acceleration: GLX and DRI2 - \item Xorg usage, integration and configuration - \item Major issues with X11 - \item Xorg debug and documentation - \end{itemize} - \vspace{0.5em} - {\em Presenting all things related to X11 and Xorg.} -} -{Lecture - Wayland Userspace Aspects} -{ - \begin{itemize} - \item Wayland overview and paradigm - \item Wayland protocol and architecture - \item Wayland core protocol detail - \item Wayland extra protocols - \item Wayland asynchronous interface - \item Wayland OpenGL integration - \item Wayland status and adoption - \item Wayland debug and documentation - \end{itemize} - \vspace{0.5em} - {\em An in-depth presentation of Wayland.} -}\\ - -\feagendatwocolumn -{Lecture - Mesa 3D Userspace Aspects} -{ - \begin{itemize} - \item Standardized 3D rendering APIs: OpenGL, OpenGL ES, EGL and Vulkan - \item Mesa 3D overview - \item Mesa 3D implementation highlights - \item Mesa 3D internals: Gallium 3D - \item Mesa 3D internals: intermediate representations - \item Mesa 3D Generic Buffer Management (GBM) - \item Mesa 3D hardware support status - \item Mesa 3D versus proprietary implementations - \item Mesa 3D hardware support: debug and documentation - \end{itemize} - \vspace{0.5em} - {\em Presenting 3D APIs and the Mesa 3D implementation.} -} -{Demo - Userspace Aspects} -{ - \begin{itemize} - \item Xorg code walkthrough - \item Wayland compositor core walkthrough - \item Wayland client examples - \item Mesa code walk-through - \item OpenGL and EGL examples - \end{itemize} - \vspace{0.5em} - {\em Illustrating userspace aspects, client and server implementations.} -} - -\feagendaonecolumn -{Questions and Answers} -{ - \begin{itemize} - \item Questions and answers with the audience about the course topics - \item Extra presentations if time is left, according what most - participants are interested in. - \end{itemize} -} +\onlineagenda \end{document} diff --git a/agenda/graphics-online-fr-agenda.tex b/agenda/graphics-online-fr-agenda.tex index b5fb6f1528..90be23fbf8 100644 --- a/agenda/graphics-online-fr-agenda.tex +++ b/agenda/graphics-online-fr-agenda.tex @@ -1,7 +1,7 @@ \documentclass[a4paper,12pt,obeyspaces,spaces,hyphens]{article} \def \trainingtype{online} -\def \agendalanguage{french} +\def \agendalanguage{english} \input{agenda/graphics.inc} @@ -13,265 +13,6 @@ \feshowinfo -\section{1\textsuperscript{ère} demi-journée} - -\feagendatwocolumn -{Présentation - Représentation des images et des couleurs} -{ - \begin{itemize} - \item Lumière, pixels et images - \item Échantillonage, domaine de fréquence, aliasing - \item Quantification et représentation des couleurs - \item Espaces colorimétriques et canaux, canal alpha - \item Sous-échantillonnage YUV et chroma - \item Plans de données de pixels, ordre d'analyse - \item Formats de pixels, codes FourCC codes, modificateurs - \end{itemize} - \vspace{0.5em} - {\em Introduction aux notions de base utilisées pour représenter les images en couleur.} -} -{Présentation - Dessin des pixels} -{ - \begin{itemize} - \item Accès aux données de pixels et itération - \item Concepts autour de la pixellisation - \item Dessin de rectangles - \item Dessin de gradients linéaires - \item Dessin de disques - \item Dessin de gradients circulaires - \item Dessin de lignes - \item Aliasing de lignes et de formes, dessin sub-pixel - \item Cercles et coordonnées polaires - \item Courbes paramétriques - \end{itemize} - \vspace{0.5em} - {\em Comment accéder aux données de pixels en mémoire et dessiner des formes simples.} -} -\\ -\feagendatwocolumn -{Présentation - Opérations sur les pixels} -{ - \begin{itemize} - \item Copie de région - \item Alpha blending - \item Keying de couleur - \item Mise à l'échelle et interpolation - \item Filtrage linéaire et convolution - \item Filtres de floutage - \item Dithering - \end{itemize} - \vspace{0.5em} - {\em Notions de base autour du filtrage, avec des exemples d'utilisation très courants.} -} -{Démo - Dessin et opérations} -{ - \begin{itemize} - \item Exemples de dessin de divers types de formes et de régions - \item Exemples d'opérations de base sur les pixels - \end{itemize} - \vspace{0.5em} - {\em Illustration des concepts présentés au fur et à mesure.} -} - -\section{2\textsuperscript{ème} demi-journée} - -\feagendatwocolumn -{Présentation - Vue d'ensembe des composants du pipeline et généralités} -{ - \begin{itemize} - \item Types d'implémentations de matériel graphique - \item Mémoire graphique et buffers - \item Pipelines graphiques - \item Vue d'ensemble du matériel d'affichage, de rendu et de vidéo - \end{itemize} - \vspace{0.5em} - {\em Présentation du matériel impliqué dans les pipelines graphiques.} -} -{Présentation - Matériel d'affichage} -{ - \begin{itemize} - \item Technologies d'affichage visuel : CRT, plasma, LCD, OLED, EPD - \item Timings d'affichage, modes et EDID - \item Interfaces d'affichage : VGA, DVI, HDMI, DP, LVDS, DSI, DP - \item Bridges et transcodeurs - \end{itemize} - \vspace{0.5em} - {\em Présentation du fonctionnement interne du matériel d'affichage.} -} -\\ - -\feagendatwocolumn -{Présentation - Spécificités du matériel de rendu} -{ - \begin{itemize} - \item Digital Signal Processors (DSPs) - \item Accélérateurs matériels dédiés - \item Graphics Processing Unit (GPUs) - \end{itemize} - \vspace{0.5em} - {\em Description de l'architecture du matériel de traitement et de rendu.} -} -{Présentation - Intégration système, mémoire et performance} -{ - \begin{itemize} - \item Intégration graphique et mémoire - \item Mémoire partagée pour les graphiques - \item Contraintes et performance de la mémoire graphique - \item Soulager le processeur en utilisant du matériel dédié au graphisme - \item Conseils pour les performances graphiques - \end{itemize} - \vspace{0.5em} - {\em Sujets autour de l'intégration système, la gestion de la mémoire et les performances.} -} - -\section{3\textsuperscript{ème} demi-journée} - -\feagendatwocolumn -{Présentation - Pile d'affichage} -{ - \begin{itemize} - \item Vue d'ensemble indépendante du système : noyau, affichage et - rendu en espace utilisateur - \item Vue d'ensemble de la partie dans le noyau Linux - \item Vue d'ensemble de la partie bas niveau en espace utilisateur - \item X Window et Wayland - \item Bibliothèques graphiques haut niveau et environnements de bureau - \end{itemize} - \vspace{0.5em} - {\em Présentation des composants nécessaires à un traitement graphique - moderne, et comment ceux-ci sont répartis entre les espace noyau et - utilisateur} -} -{Présentation - Aspects noyau TTY et device framebuffer} -{ - \begin{itemize} - \item Introduction au sous-système TTY de Linux - \item Terminaux virtuels et graphiques - \item Basculer entre terminaux virtuels et graphiques - \end{itemize} - \vspace{0.5em} - \begin{itemize} - \item Vue d'ensemble de fbdev - \item Opérations de base de fbdev - \item Limitations de fbdev - \end{itemize} - \vspace{0.5em} - {\em Comment les TTYs interagissent avec les graphiques sous Linux et - brève présentation de fbdev et pourquoi ce composant n'est plus - recommandé} -} -\\ - -\feagendatwocolumn -{Présentation - DRM dans le noyau} -{ - \begin{itemize} - \item Devices DRM - \item Identification et fonctionnalités des pilotes DRM - \item Maître DRM, "magic authentification" - \item Gestion de la mémoire des DRM - \item API "dumb buffer" de DRM KMS - \item Modificateurs et FourCCs dans DRM - \item Détection des ressources dans DRM KMS - \item Modes DRM KMS - \item Gestion de framebuffer dans DRM KMS - \item Ancien système de configuration de DRM KMS et échange de pages - \item Notification d´évènements dans DRM - \item Propriétés d'objets dans DRM KMS - \item DRM KMS atomic - \item Rendu DRM - \item Partage mémoire sans copie (dma-buf) avec DRM Prime - \item Barrières d'objets DRM sync - \item Débug et documentation dans DRM - \end{itemize} - \vspace{0.5em} - {\em Une présentation complète de l'interface DRM.} -} -{Démo - Aspects noyau} -{ - \begin{itemize} - \item Terminaux virtuels et TTYs dans Linux - \item Configuration des modes DRM KMS - \item Visite guidée d'un pilote DRM KMS - \item Visite guidée d'un pilote de rendu DRM - \end{itemize} - \vspace{0.5em} - {\em Illustration du fonctionnement en espace noyau.} -} - -\section{4\textsuperscript{ème} demi-journée} - -\feagendatwocolumn -{Présentation - Aspects X Window en espace utilisateur} -{ - \begin{itemize} - \item Protocole X11 et son architecture - \item Extensions au protocole X11 - \item Architecture de Xorg et accélération - \item Présentation des pilotes Xorg - \item Accélération X11 et OpenGL : GLX et DRI2 - \item Utilisation de Xorg, intégration et configuration - \item Principaux problèmes avec X11 - \item Débug et documentation de Xorg - \end{itemize} - \vspace{0.5em} - {\em Présentation des tous les aspects de X11 et Xorg.} -} -{Présentation - Aspects Wayland en espace utilisateur} -{ - \begin{itemize} - \item Vue d'ensemble et paradigmes de Wayland - \item Protocole Wayland et son architecture - \item Détails sur le coeur du protocole Wayland - \item Protocoles supplémentaires de Wayland - \item Interface asynchrone de Wayland - \item Intégration OpenGL de Wayland - \item Statut et adoption de Wayland - \item Débug et documentation de Wayland - \end{itemize} - \vspace{0.5em} - {\em Une présentation approfondie de Wayland.} -}\\ - -\feagendatwocolumn -{Présentation - Aspects Mesa 3D en espace utilisateur} -{ - \begin{itemize} - \item APIs de rendu 3D standardisées : OpenGL, OpenGL ES, EGL and Vulkan - \item Vue d'ensemble de Mesa 3D - \item Principaux détails d'implémentation de Mesa 3D - \item Détails internes de Mesa 3D : Gallium 3D - \item Détails internes de Mesa 3D : représentations intermédiaires - \item Generic Buffer Management (GBM) dans Mesa 3D - \item Point sur la prise en charge du matériel par Mesa 3D - \item Mesa 3D comparée aux implémentations propriétaires - \item Prise en charge du matériel par Mesa 3D : débug et documentation - \end{itemize} - \vspace{0.5em} - {\em Présentation des APIs 3D et implémentation de Mesa 3D.} -} -{Démo - Aspects en espace utilisateur} -{ - \begin{itemize} - \item Visite guidée du code de Xorg - \item Visite guidée du coeur du compositeur Wayland - \item Exemples de clients Wayland - \item Visite guidée du code de Mesa - \item Exemples OpenGL et EGL - \end{itemize} - \vspace{0.5em} - {\em Illustration des aspects en espace utilisateur et - d'implémentations de clients et de serveurs.} -} - -\feagendaonecolumn -{Questions / réponses} -{ - \begin{itemize} - \item Questions et réponses avec les participants à propos des sujets abordés. - \item Présentations supplémentaires s'il reste du temps, en fonction des demandes - de la majorité des participants. - \end{itemize} -} +\onlineagenda \end{document} From e6db7c45806d7f146e522aeb3fcbfa863a9ea925 Mon Sep 17 00:00:00 2001 From: Thomas Bonnefille Date: Mon, 25 Nov 2024 16:01:30 +0100 Subject: [PATCH 15/18] agenda: define different section for the premptrt course Signed-off-by: Thomas Bonnefille --- agenda/preempt-rt.inc | 239 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 239 insertions(+) diff --git a/agenda/preempt-rt.inc b/agenda/preempt-rt.inc index 9e8dab9070..3ab9aed62d 100644 --- a/agenda/preempt-rt.inc +++ b/agenda/preempt-rt.inc @@ -1,4 +1,6 @@ \usepackage{ifthen} +\input{agenda/common.inc} + \def \training{preempt-rt} % Title @@ -83,3 +85,240 @@ % Time ratio \def \onsitelecturetimeratio{50} \def \onsitelabtimeratio{50} + +% Agenda items + +\defagendaitem +{intro} +{lecture} +{Introduction to Real-Time behaviour and determinism} +{ + \begin{itemize} + \item Definition of a Real-Time Operating System + \item Specificities of multi-task systems + \item Common locking and prioritizing patterns + \item Overview of existing Real-Time Operating Systems + \item Approaches to bring Real-Time capabilities to Linux + \end{itemize} +} +{Introduction au comportement temps-réel et au déterminisme} +{ + \begin{itemize} + \item Définition d'un système d'exploitation temps-réel + \item Spécificigés des systèmes multi-tâches + \item Principaux patterns de verrouillage et de gestion des priorités + \item Aperçu des systèmes temps-réel existants + \item Approches pour apporter un comportement temps-réel à Linux + \end{itemize} +} +\defagendaitem +{preemptrtpatch} +{lecture} +{The {\em PREEMPT\_RT} patch} +{ + \begin{itemize} + \item History and future of the {\em PREEMPT\_RT} patch + \item Real-Time improvements from {\em PREEMPT\_RT} in mainline Linux + \item The internals of {\em PREEMPT\_RT} + \item Interrupt handling: threaded interrupts, softirqs + \item Locking primitives: mutexes and spinlocks, sleeping spinlocks + \item Preemption models + \end{itemize} +} +{Le patch {\em PREEMPT\_RT}} +{ + \begin{itemize} + \item Histoire et avenir du patch {\em PREEMPT\_RT} + \item Améliorations temps-réel provenant de {\em PREEMPT\_RT} dans le noyau Linux officiel + \item Fonctionnement interne de {\em PREEMPT\_RT} + \item Gestion des interruptions : interruptions threadées, softirqs + \item Primitives de verouillage : mutexes et spinlocks, spinlocks avec sommeil + \item Modèles de préemption + \end{itemize} +} +\defagendaitem +{buildkernel} +{lab} +{Building a mainline Linux Kernel with the {\em PREEMPT\_RT} patch} +{ + \begin{itemize} + \item Downloading the Linux Kernel, and applying the patch + \item Configuring the Kernel + \item Booting the Kernel on the target hardware + \end{itemize} +} +{Compiler un noyau Linux avec {\em PREEMPT\_RT}} +{ + \begin{itemize} + \item Télécharger le noyau Linux et appliquer le patch {\em PREEMPT\_RT} + \item Configurer le noyau Linux + \item Démarrer le kernel sur une plateforme matérielle + \end{itemize} +} +\defagendaitem +{configuration} +{lecture} +{Hardware configuration and limitations for Real-Time} +{ + \begin{itemize} + \item Interrupts and deep firmware + \item Interaction with power management features: CPU frequency + scaling and sleep states + \item DMA + \end{itemize} +} +{Configuration et limites du matériel pour le temps-réel} +{ + \begin{itemize} + \item Interruptions et firmware + \item Interaction avec les fonctionnalités de gestion d'énergie : + gestion dynamique de la fréquence du CPU et états de sommeil + \item DMA + \end{itemize} +} +\defagendaitem +{tools} +{lecture} +{Tools: Benchmarking, Stressing and Analyzing} +{ + \begin{itemize} + \item Benchmarking with {\em cyclictest} + \item System stressing with {\em stress-ng} and {\em hackbench} + \item The Linux Kernel tracing infrastructure + \item Latency and scheduling analysis with {\em ftrace}, {\em + kernelshark} or {\em LTTng} + \end{itemize} +} +{Outils : Benchmarking, Stress et Analyse} +{ + \begin{itemize} + \item Benchmarking avec {\em cyclictest} + \item Stress du système avec {\em stress-ng} et {\em hackbench} + \item L'infrastructure de {\em tracing} du noyau Linux + \item Analyse de la latence et de l'ordonnancement avec {\em + ftrace}, {\em kernelshark} ou {\em LTTng} + \end{itemize} +} +\defagendaitem +{tools} +{lab} +{Tools: Benchmarking, Stressing and Analyzing} +{ + \begin{itemize} + \item Usage of benchmarking and stress tools + \item Common benchmarking techniques + \item Benchmarking and configuring the hardware platform + \end{itemize} +} +{Outils : Benchmarking, Stress et Analyse} +{ + \begin{itemize} + \item Utilisation des outils de benchmark et de stress + \item Techniques classiques de benchmarking + \item Benchmarking et configuration de la plateforme matérielle + \end{itemize} +} +\defagendaitem +{kernelinfrastructure} +{lecture} +{Kernel infrastructures and configuration} +{ + \begin{itemize} + \item Good practices when writing Linux kernel drivers + \item Scheduling policies and priorities: {\em SCHED\_FIFO}, {\em + SCHED\_RR}, {\em SCHED\_DEADLINE} + \item CPU and IRQ Affinity + \item Memory management + \item CPU isolation with {\em isolcpus} + \end{itemize} +} +{Infrastructures du noyau Linux et configuration} +{ + \begin{itemize} + \item Bonnes pratiques pour le développement de drivers noyau Linux + pour des systèmes temps-réel + \item Politiques d'ordonnancement et priorités : {\em SCHED\_FIFO}, + {\em SCHED\_RR}, {\em SCHED\_DEADLINE} + \item Affinité CPU et IRQ + \item Gestion mémoire + \item Isolution des CPUs avec {\em isolcpus} + \end{itemize} +} +\defagendaitem +{realtime} +{lecture} +{Real-Time Applications programming patterns} +{ + \begin{itemize} + \item POSIX real-time API + \item Thread management and configuration + \item Memory management: memory allocation and memory locking, stack + \item Locking patterns: mutexes, priority inheritance + \item Inter-Process Communication + \item Signaling + \end{itemize} +} +{Patterns de développement d'applications temps-réel} +{ + \begin{itemize} + \item API POSIX pour les applications temps-réel + \item Gestion et configuration des threads + \item Gestion mémoire : allocation mémoire et verouillage mémoire, gestion de la pile + \item Patterns de verrouillage : mutexes, héritage de priorité + \item Communication inter-processus (IPC) + \item Signalisation + \end{itemize} +} +\defagendaitem +{debug} +{lab} +{Debugging a demo application} +{ + \begin{itemize} + \item Make a demo userspace application deterministic + \item Use the tracing infrastructure to identify the cause of a latency + \item Learn how to use the POSIX API to manage threads, locking and memory + \item Learn how to use the CPU affinities and configure the scheduling policy + \end{itemize} +} +{Débugger une application de démonstration} +{ + \begin{itemize} + \item Créer une application de démonstration déterministe + \item Utiliser l'infrastructure de {\em tracing} pour identifier la source de latence + \item Apprendre à utiliser l'API POSIX pour gérer les threads, le verouillage, la mémoire + \item Apprendre à utiliser l'affinité CPU et configurer la politique d'ordonnancement + \end{itemize} +} + +\def \onlineagenda { + \showagendaday{1} + \showagendaitem{intro}{lecture} + \showagendaitem{preemptrtpatch}{lecture} + \showagendaitem{buildkernel}{lab} + \showagendaitem{configuration}{lecture} + \showagendaday{2} + \showagendaitem{tools}{lecture} + \showagendaitem{tools}{lab} + \showagendaitem{kernelinfrastructure}{lecture} + \showagendaday{3} + \showagendaitem{realtime}{lecture} + \showagendaitem{debug}{lab} + \showagendaitem{qna}{misc} +} +\def \onsiteagenda { + \showagendaday{1} + \showagendaitem{intro}{lecture} + \showagendaitem{preemptrtpatch}{lecture} + \showagendaitem{buildkernel}{lab} + \showagendaday{2} + \showagendaitem{configuration}{lecture} + \showagendaitem{tools}{lecture} + \showagendaitem{tools}{lab} + \showagendaday{3} + \showagendaitem{kernelinfrastructure}{lecture} + \showagendaitem{realtime}{lecture} + \showagendaday{4} + \showagendaitem{debug}{lab} + \showagendaitem{qna}{misc} +} From e5abd8cb060b238a7f039f434a59ab0e5150c8e8 Mon Sep 17 00:00:00 2001 From: Thomas Bonnefille Date: Mon, 25 Nov 2024 16:07:24 +0100 Subject: [PATCH 16/18] agenda: use commands to refactor the preempt-rt agenda Signed-off-by: Thomas Bonnefille --- agenda/preempt-rt-agenda.tex | 143 +----------------------- agenda/preempt-rt-fr-agenda.tex | 144 +------------------------ agenda/preempt-rt-online-agenda.tex | 139 +----------------------- agenda/preempt-rt-online-fr-agenda.tex | 140 +----------------------- 4 files changed, 8 insertions(+), 558 deletions(-) diff --git a/agenda/preempt-rt-agenda.tex b/agenda/preempt-rt-agenda.tex index d9b86f1919..413f9876d6 100644 --- a/agenda/preempt-rt-agenda.tex +++ b/agenda/preempt-rt-agenda.tex @@ -13,147 +13,8 @@ \feshowinfo -\feagendatwocolumn -{Hardware platform for practical labs} -{ - {\bf STMicroelectronics STM32MP157D Discovery Kit~1} board - \begin{itemize} - \item STM32MP157D (dual Cortex-A7) processor from STMicroelectronics - \item USB powered - \item 512 MB DDR3L RAM - \item Gigabit Ethernet port - \item 4 USB 2.0 host ports - \item 1 USB-C OTG port - \item 1 Micro SD slot - \item On-board ST-LINK/V2-1 debugger - \item Arduino compatible headers - \item Audio codec, buttons, LEDs - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} - \end{center} -} +\showboarditem{stm32mp1} -\section{Day 1 - Morning} - -\feagendaonecolumn -{Lecture - Introduction to Real-Time behaviour and determinism} -{ - \begin{itemize} - \item Definition of a Real-Time Operating System - \item Specificities of multi-task systems - \item Common locking and prioritizing patterns - \item Overview of existing Real-Time Operating Systems - \item Approaches to bring Real-Time capabilities to Linux - \end{itemize} -} - -\feagendatwocolumn -{Lecture - The {\em PREEMPT\_RT} patch} -{ - \begin{itemize} - \item History and future of the {\em PREEMPT\_RT} patch - \item Real-Time improvements from {\em PREEMPT\_RT} in mainline Linux - \item The internals of {\em PREEMPT\_RT} - \item Interrupt handling: threaded interrupts, softirqs - \item Locking primitives: mutexes and spinlocks, sleeping spinlocks - \item Preemption models - \end{itemize} -} -{Lab - Building a mainline Linux Kernel with the {\em PREEMPT\_RT} patch} -{ - \begin{itemize} - \item Downloading the Linux Kernel, and applying the patch - \item Configuring the Kernel - \item Booting the Kernel on the target hardware - \end{itemize} -} - -\section{Day 1 - Afternoon} - -\feagendaonecolumn -{Lecture - Hardware configuration and limitations for Real-Time} -{ - \begin{itemize} - \item Interrupts and deep firmware - \item Interaction with power management features: CPU frequency - scaling and sleep states - \item DMA - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Tools: Benchmarking, Stressing and Analyzing} -{ - \begin{itemize} - \item Benchmarking with {\em cyclictest} - \item System stressing with {\em stress-ng} and {\em hackbench} - \item The Linux Kernel tracing infrastructure - \item Latency and scheduling analysis with {\em ftrace}, {\em - kernelshark} or {\em LTTng} - \end{itemize} -} -{Lab - Tools: Benchmarking, Stressing and Analyzing} -{ - \begin{itemize} - \item Usage of benchmarking and stress tools - \item Common benchmarking techniques - \item Benchmarking and configuring the hardware platform - \end{itemize} -} - -\section{Day 2 - Morning} - -\feagendaonecolumn -{Lecture - Kernel infrastructures and configuration} -{ - \begin{itemize} - \item Good practices when writing Linux kernel drivers - \item Scheduling policies and priorities: {\em SCHED\_FIFO}, {\em - SCHED\_RR}, {\em SCHED\_DEADLINE} - \item CPU and IRQ Affinity - \item Memory management - \item CPU isolation with {\em isolcpus} - \end{itemize} -} - -\feagendaonecolumn -{Lecture - Real-Time Applications programming patterns} -{ - \begin{itemize} - \item POSIX real-time API - \item Thread management and configuration - \item Memory management: memory allocation and memory locking, stack - \item Locking patterns: mutexes, priority inheritance - \item Inter-Process Communication - \item Signaling - \end{itemize} -} - -\section{Day 2 - Afternoon} - -\feagendaonecolumn -{Lab - Debugging a demo application} -{ - \begin{itemize} - \item Make a demo userspace application deterministic - \item Use the tracing infrastructure to identify the cause of a latency - \item Learn how to use the POSIX API to manage threads, locking and memory - \item Learn how to use the CPU affinities and configure the scheduling policy - \end{itemize} -} - -\feagendaonecolumn -{Questions and Answers} -{ - \begin{itemize} - \item Questions and answers with the audience about the course topics - \item Extra presentations if time is left, according what most - participants are interested in. - \end{itemize} -} +\onsiteagenda \end{document} diff --git a/agenda/preempt-rt-fr-agenda.tex b/agenda/preempt-rt-fr-agenda.tex index 614b29807d..6599ed6ef1 100644 --- a/agenda/preempt-rt-fr-agenda.tex +++ b/agenda/preempt-rt-fr-agenda.tex @@ -13,148 +13,8 @@ \feshowinfo -\feagendatwocolumn -{Plateforme matérielle pour les travaux pratiques} -{ - Carte {\bf STMicroelectronics STM32MP157D Discovery Kit~1} - \begin{itemize} - \item Processeur STM32MP157D (dual Cortex-A7) de STMicroelectronics - \item Alimentation par USB - \item 512 MB DDR3L RAM - \item Ethernet Gigabit - \item 4 ports USB 2.0 hôte - \item 1 port USB-C OTG - \item 1 slot Micro SD - \item Debugger ST-LINK/V2-1 - \item Connecteurs compatibles Arduino - \item Codec audio, boutons, LEDs - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} - \end{center} -} +\showboarditem{stm32mp1} -\section{1\textsuperscript{ère} journée - Matin} - -\feagendaonecolumn -{Cours - Introduction au comportement temps-réel et au déterminisme} -{ - \begin{itemize} - \item Définition d'un système d'exploitation temps-réel - \item Spécificigés des systèmes multi-tâches - \item Principaux patterns de verrouillage et de gestion des priorités - \item Aperçu des systèmes temps-réel existants - \item Approches pour apporter un comportement temps-réel à Linux - \end{itemize} -} - -\feagendatwocolumn -{Cours - Le patch {\em PREEMPT\_RT}} -{ - \begin{itemize} - \item Histoire et avenir du patch {\em PREEMPT\_RT} - \item Améliorations temps-réel provenant de {\em PREEMPT\_RT} dans le noyau Linux officiel - \item Fonctionnement interne de {\em PREEMPT\_RT} - \item Gestion des interruptions : interruptions threadées, softirqs - \item Primitives de verouillage : mutexes et spinlocks, spinlocks avec sommeil - \item Modèles de préemption - \end{itemize} -} -{TP - Compiler un noyau Linux avec {\em PREEMPT\_RT}} -{ - \begin{itemize} - \item Télécharger le noyau Linux et appliquer le patch {\em PREEMPT\_RT} - \item Configurer le noyau Linux - \item Démarrer le kernel sur une plateforme matérielle - \end{itemize} -} - -\section{1\textsuperscript{ère} journée - Après-midi} - -\feagendaonecolumn -{Cours - Configuration et limites du matériel pour le temps-réel} -{ - \begin{itemize} - \item Interruptions et firmware - \item Interaction avec les fonctionnalités de gestion d'énergie : - gestion dynamique de la fréquence du CPU et états de sommeil - \item DMA - \end{itemize} -} - -\feagendatwocolumn -{Cours - Outils : Benchmarking, Stress et Analyse} -{ - \begin{itemize} - \item Benchmarking avec {\em cyclictest} - \item Stress du système avec {\em stress-ng} et {\em hackbench} - \item L'infrastructure de {\em tracing} du noyau Linux - \item Analyse de la latence et de l'ordonnancement avec {\em - ftrace}, {\em kernelshark} ou {\em LTTng} - \end{itemize} -} -{TP - Outils : Benchmarking, Stress et Analyse} -{ - \begin{itemize} - \item Utilisation des outils de benchmark et de stress - \item Techniques classiques de benchmarking - \item Benchmarking et configuration de la plateforme matérielle - \end{itemize} -} - -\section{2\textsuperscript{ème} journée - Matin} - -\feagendaonecolumn -{Cours - Infrastructures du noyau Linux et configuration} -{ - \begin{itemize} - \item Bonnes pratiques pour le développement de drivers noyau Linux - pour des systèmes temps-réel - \item Politiques d'ordonnancement et priorités : {\em SCHED\_FIFO}, - {\em SCHED\_RR}, {\em SCHED\_DEADLINE} - \item Affinité CPU et IRQ - \item Gestion mémoire - \item Isolution des CPUs avec {\em isolcpus} - \end{itemize} -} - -\feagendaonecolumn -{Cours - Patterns de développement d'applications temps-réel} -{ - \begin{itemize} - \item API POSIX pour les applications temps-réel - \item Gestion et configuration des threads - \item Gestion mémoire : allocation mémoire et verouillage mémoire, gestion de la pile - \item Patterns de verrouillage : mutexes, héritage de priorité - \item Communication inter-processus (IPC) - \item Signalisation - \end{itemize} -} - -\section{2\textsuperscript{ème} journée - Après-midi} - -\feagendaonecolumn -{TP - Débugger une application de démonstration} -{ - \begin{itemize} - \item Créer une application de démonstration déterministe - \item Utiliser l'infrastructure de {\em tracing} pour identifier la source de latence - \item Apprendre à utiliser l'API POSIX pour gérer les threads, le verouillage, la mémoire - \item Apprendre à utiliser l'affinité CPU et configurer la politique d'ordonnancement - \end{itemize} -} - -\feagendaonecolumn -{Questions / réponses} -{ - \begin{itemize} - \item Questions / réponses avec les participants autour du noyau Linux - \item Des présentations supplémentaires s'il reste du temps, selon les sujets - qui intéressent le plus les participants. - \end{itemize} -} +\onsiteagenda \end{document} diff --git a/agenda/preempt-rt-online-agenda.tex b/agenda/preempt-rt-online-agenda.tex index a40ec6040d..dc4491d2a7 100644 --- a/agenda/preempt-rt-online-agenda.tex +++ b/agenda/preempt-rt-online-agenda.tex @@ -13,143 +13,8 @@ \feshowinfo -\feagendatwocolumn -{Hardware platform for practical labs} -{ - {\bf STMicroelectronics STM32MP157D Discovery Kit~1} board - \begin{itemize} - \item STM32MP157D (dual Cortex-A7) processor from STMicroelectronics - \item USB powered - \item 512 MB DDR3L RAM - \item Gigabit Ethernet port - \item 4 USB 2.0 host ports - \item 1 USB-C OTG port - \item 1 Micro SD slot - \item On-board ST-LINK/V2-1 debugger - \item Arduino compatible headers - \item Audio codec, buttons, LEDs - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} - \end{center} -} +\showboarditem{stm32mp1} -\section{Half day 1} - -\feagendaonecolumn -{Lecture - Introduction to Real-Time behaviour and determinism} -{ - \begin{itemize} - \item Definition of a Real-Time Operating System - \item Specificities of multi-task systems - \item Common locking and prioritizing patterns - \item Overview of existing Real-Time Operating Systems - \item Approaches to bring Real-Time capabilities to Linux - \end{itemize} -} - -\feagendatwocolumn -{Lecture - The {\em PREEMPT\_RT} patch} -{ - \begin{itemize} - \item History and future of the {\em PREEMPT\_RT} patch - \item Real-Time improvements from {\em PREEMPT\_RT} in mainline Linux - \item The internals of {\em PREEMPT\_RT} - \item Interrupt handling: threaded interrupts, softirqs - \item Locking primitives: mutexes and spinlocks, sleeping spinlocks - \item Preemption models - \end{itemize} -} -{Demo - Building a mainline Linux Kernel with the {\em PREEMPT\_RT} patch} -{ - \begin{itemize} - \item Downloading the Linux Kernel, and applying the patch - \item Configuring the Kernel - \item Booting the Kernel on the target hardware - \end{itemize} -} - -\feagendaonecolumn -{Lecture - Hardware configuration and limitations for Real-Time} -{ - \begin{itemize} - \item Interrupts and deep firmware - \item Interaction with power management features: CPU frequency - scaling and sleep states - \item DMA - \end{itemize} -} - -\section{Half day 2} - -\feagendatwocolumn -{Lecture - Tools: Benchmarking, Stressing and Analyzing} -{ - \begin{itemize} - \item Benchmarking with {\em cyclictest} - \item System stressing with {\em stress-ng} and {\em hackbench} - \item The Linux Kernel tracing infrastructure - \item Latency and scheduling analysis with {\em ftrace}, {\em - kernelshark} or {\em LTTng} - \end{itemize} -} -{Demo - Tools: Benchmarking, Stressing and Analyzing} -{ - \begin{itemize} - \item Usage of benchmarking and stress tools - \item Common benchmarking techniques - \item Benchmarking and configuring the hardware platform - \end{itemize} -} - -\feagendaonecolumn -{Lecture - Kernel infrastructures and configuration} -{ - \begin{itemize} - \item Good practices when writing Linux kernel drivers - \item Scheduling policies and priorities: {\em SCHED\_FIFO}, {\em - SCHED\_RR}, {\em SCHED\_DEADLINE} - \item CPU and IRQ Affinity - \item Memory management - \item CPU isolation with {\em isolcpus} - \end{itemize} -} - -\section{Half day 3} - -\feagendatwocolumn -{Lecture - Real-Time Applications programming patterns} -{ - \begin{itemize} - \item POSIX real-time API - \item Thread management and configuration - \item Memory management: memory allocation and memory locking, stack - \item Locking patterns: mutexes, priority inheritance - \item Inter-Process Communication - \item Signaling - \end{itemize} -} -{Demo - Debugging a demo application} -{ - \begin{itemize} - \item Make a demo userspace application deterministic - \item Use the tracing infrastructure to identify the cause of a latency - \item Learn how to use the POSIX API to manage threads, locking and memory - \item Learn how to use the CPU affinities and configure the scheduling policy - \end{itemize} -} - -\feagendaonecolumn -{Questions and Answers} -{ - \begin{itemize} - \item Questions and answers with the audience about the course topics - \item Extra presentations if time is left, according what most - participants are interested in. - \end{itemize} -} +\onlineagenda \end{document} diff --git a/agenda/preempt-rt-online-fr-agenda.tex b/agenda/preempt-rt-online-fr-agenda.tex index c3dd4cc37c..d44d7f4675 100644 --- a/agenda/preempt-rt-online-fr-agenda.tex +++ b/agenda/preempt-rt-online-fr-agenda.tex @@ -13,144 +13,8 @@ \feshowinfo -\feagendatwocolumn -{Plateforme matérielle pour les travaux pratiques} -{ - Carte {\bf STMicroelectronics STM32MP157D Discovery Kit~1} - \begin{itemize} - \item Processeur STM32MP157D (dual Cortex-A7) de STMicroelectronics - \item Alimentation par USB - \item 512 MB DDR3L RAM - \item Ethernet Gigabit - \item 4 ports USB 2.0 hôte - \item 1 port USB-C OTG - \item 1 slot Micro SD - \item Debugger ST-LINK/V2-1 - \item Connecteurs compatibles Arduino - \item Codec audio, boutons, LEDs - \end{itemize} -} -{} -{ - \begin{center} - \includegraphics[width=5cm]{../slides/discovery-board-dk1/discovery-board-dk1.png} - \end{center} -} +\showboarditem{stm32mp1} -\section{1\textsuperscript{ère} demi-journée} - -\feagendaonecolumn -{Cours - Introduction au comportement temps-réel et au déterminisme} -{ - \begin{itemize} - \item Définition d'un système d'exploitation temps-réel - \item Spécificigés des systèmes multi-tâches - \item Principaux patterns de verrouillage et de gestion des priorités - \item Aperçu des systèmes temps-réel existants - \item Approches pour apporter un comportement temps-réel à Linux - \end{itemize} -} - -\feagendatwocolumn -{Cours - Le patch {\em PREEMPT\_RT}} -{ - \begin{itemize} - \item Histoire et avenir du patch {\em PREEMPT\_RT} - \item Améliorations temps-réel provenant de {\em PREEMPT\_RT} dans le noyau Linux officiel - \item Fonctionnement interne de {\em PREEMPT\_RT} - \item Gestion des interruptions : interruptions threadées, softirqs - \item Primitives de verouillage : mutexes et spinlocks, spinlocks avec sommeil - \item Modèles de préemption - \end{itemize} -} -{Démo - Compiler un noyau Linux avec {\em PREEMPT\_RT}} -{ - \begin{itemize} - \item Télécharger le noyau Linux et appliquer le patch {\em PREEMPT\_RT} - \item Configurer le noyau Linux - \item Démarrer le kernel sur une plateforme matérielle - \end{itemize} -} - -\feagendaonecolumn -{Cours - Configuration et limites du matériel pour le temps-réel} -{ - \begin{itemize} - \item Interruptions et firmware - \item Interaction avec les fonctionnalités de gestion d'énergie : - gestion dynamique de la fréquence du CPU et états de sommeil - \item DMA - \end{itemize} -} - -\section{2\textsuperscript{ème} demi-journée} - -\feagendatwocolumn -{Cours - Outils : Benchmarking, Stress et Analyse} -{ - \begin{itemize} - \item Benchmarking avec {\em cyclictest} - \item Stress du système avec {\em stress-ng} et {\em hackbench} - \item L'infrastructure de {\em tracing} du noyau Linux - \item Analyse de la latence et de l'ordonnancement avec {\em - ftrace}, {\em kernelshark} ou {\em LTTng} - \end{itemize} -} -{Démo - Outils : Benchmarking, Stress et Analyse} -{ - \begin{itemize} - \item Utilisation des outils de benchmark et de stress - \item Techniques classiques de benchmarking - \item Benchmarking et configuration de la plateforme matérielle - \end{itemize} -} - -\feagendaonecolumn -{Cours - Infrastructures du noyau Linux et configuration} -{ - \begin{itemize} - \item Bonnes pratiques pour le développement de drivers noyau Linux - pour des systèmes temps-réel - \item Politiques d'ordonnancement et priorités : {\em SCHED\_FIFO}, - {\em SCHED\_RR}, {\em SCHED\_DEADLINE} - \item Affinité CPU et IRQ - \item Gestion mémoire - \item Isolution des CPUs avec {\em isolcpus} - \end{itemize} -} - -\section{3\textsuperscript{ème} demi-journée} - -\feagendatwocolumn -{Cours - Patterns de développement d'applications temps-réel} -{ - \begin{itemize} - \item API POSIX pour les applications temps-réel - \item Gestion et configuration des threads - \item Gestion mémoire : allocation mémoire et verouillage mémoire, gestion de la pile - \item Patterns de verrouillage : mutexes, héritage de priorité - \item Communication inter-processus (IPC) - \item Signalisation - \end{itemize} -} -{Démo - Débugger une application de démonstration} -{ - \begin{itemize} - \item Créer une application de démonstration déterministe - \item Utiliser l'infrastructure de {\em tracing} pour identifier la source de latence - \item Apprendre à utiliser l'API POSIX pour gérer les threads, le verouillage, la mémoire - \item Apprendre à utiliser l'affinité CPU et configurer la politique d'ordonnancement - \end{itemize} -} - -\feagendaonecolumn -{Questions / réponses} -{ - \begin{itemize} - \item Questions / réponses avec les participants autour du noyau Linux - \item Des présentations supplémentaires s'il reste du temps, selon les sujets - qui intéressent le plus les participants. - \end{itemize} -} +\onlineagenda \end{document} From 18a66f4749152b9ee2af793a6adf197ce99da716 Mon Sep 17 00:00:00 2001 From: Thomas Bonnefille Date: Wed, 27 Nov 2024 16:01:58 +0100 Subject: [PATCH 17/18] agenda: define different section for the audio course Signed-off-by: Thomas Bonnefille --- agenda/audio.inc | 460 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 460 insertions(+) diff --git a/agenda/audio.inc b/agenda/audio.inc index 8b1fec3ae1..a964da2b99 100644 --- a/agenda/audio.inc +++ b/agenda/audio.inc @@ -1,4 +1,6 @@ \usepackage{ifthen} +\input{agenda/common.inc} + \def \training{audio} % Title @@ -117,3 +119,461 @@ % Time ratio \def \onsitelecturetimeratio{75} \def \onsitedemotimeratio{25} + +% Agenda items + +\defagendaitem +{representation} +{lecture} +{Digital Audio Representation} +{ + \begin{itemize} + \item What is sound? + \item Sampling theory + \item Sample size, sample rate + \item Audio formats: I2S, LJ, RJ, DSPA, DSPB + \item AC97 + \item IEC 61937 (S/PDIF and HDMI) + \item PDM + \end{itemize} + \vspace{0.5em} + {\em Introducing the basic notions used for representing audio waveforms.} +} +{Représentation audio numérique} +{ + \begin{itemize} + \item Qu'est-ce que le son? + \item Théorie de l'échantillonage + \item Taille des échantillons, fréquence d'échantillonage + \item Formats audio : I2S, LJ, RJ, DSPA, DSPB + \item AC97 + \item IEC 61937 (S/PDIF and HDMI) + \item PDM + \end{itemize} + \vspace{0.5em} + {\em Introduction des notions de base utilisées pour représenter des ondes audio.} +} +\defagendaitem +{hardware} +{lecture} +{Hardware} +{ + \begin{itemize} + \item Signals + \item CPU Digital Audio Interfaces + \item CODEC Digital Audio Interfaces + \item Amplifiers + \item Clocks and clock providers + \end{itemize} + \vspace{0.5em} + {\em Presenting the hardware involved in the audio playback or capture.} +} +{Matériel} +{ + \begin{itemize} + \item Signaux + \item Interfaces audio numériques sur les System-on-chip + \item Interfaces audio numériques sur les codecs audio + \item Amplificateurs + \item Horloges et fournisseurs d'horloges + \end{itemize} + \vspace{0.5em} + {\em Présentation du matériel impliqué dans la lecture ou l'enregistrement audio.} +} +\defagendaitem +{asoc} +{lecture} +{Linux kernel ASoC subsystem} +{ + \begin{itemize} + \item ASoC: the ALSA System-on-Chip subsystem in the Linux kernel + \item Describing audio cards with Device Tree: {\em + audio-graph-card}, {\em simple-audio-card} + \item Linux kernel drivers for audio cards + \item Linux kernel drivers for audio codecs + \item Controls + \item Linux kernel drivers for CPU audio interfaces + \end{itemize} + \vspace{0.5em} + {\em Introducing the Linux kernel subsystem for audio on embedded systems.} +} +{Le sous-système ASoC du noyau Linux} +{ + \begin{itemize} + \item ASoC : le sous-système ALSA pour les System-on-chip dans le noyau Linux + \item Description des cartes audio dans le Device Tree : {\em + audio-graph-card}, {\em simple-audio-card} + \item Drivers dans le noyau Linux pour les cartes audio + \item Drivers dans le noyau Linux pour les codecs audio + \item Controles audio dans le kernel + \item Drivers dans le noyau Linux pour les interfaces audio des + System-on-chip + \end{itemize} + \vspace{0.5em} + {\em Introduction au sous-système du noyau Linux pour la gestion audio dans les systèmes embarqués.} +} +\defagendaitem +{kernelhelpers} +{lecture} +{Linux kernel helpers} +{ + \begin{itemize} + \item {\em regmap}, {\em regcache} + \item DMA handling + \end{itemize} + \vspace{0.5em} + {\em Presenting the common helper APIs.} +} +{Mécanismes supplémentaires du noyau Linux relatifs à l'audio} +{ + \begin{itemize} + \item {\em regmap}, {\em regcache} + \item Support DMA + \end{itemize} + \vspace{0.5em} + {\em Présentation des mécanismes du noyau Linux couramment utilisés en lien avec le support audio.} +} +\defagendaitem +{audiocomponents} +{lecture} +{More audio components} +{ + \begin{itemize} + \item Auxiliary devices, amplifiers, muxing + \item Jack detection + \item Asynchronous Sample Rate Converter + \end{itemize} + \vspace{0.5em} + {\em Presenting more components of the sound cards.} +} +{Autres composants audio} +{ + \begin{itemize} + \item Périphériques auxilliaires, amplificateurs, muxing + \item Detection Jack + \item Convertisseur de fréquence d'échantillonage asynchrone + \end{itemize} + \vspace{0.5em} + {\em Présentation de composants supplémentaires utilisés pour certaines cartes audio.} +} +\defagendaitem +{routing} +{lecture} +{Routing} +{ + \begin{itemize} + \item Routing audio + \item DAPM: Dynamic Audio Power Management + \end{itemize} + \vspace{0.5em} + {\em Presenting the audio routes and power management.} +} +{Routage} +{ + \begin{itemize} + \item Routage de flux audio + \item DAPM : {\em Dynamic Audio Power Management} + \end{itemize} + \vspace{0.5em} + {\em Présentation du routage audio et de la gestion d'énergie pour l'audio.} +} +\defagendaitem +{userspacehardwareconfiguration} +{lecture} +{Userspace, hardware configuration} +{ + \begin{itemize} + \item ALSA plugins + \item \code{asound.conf} + \item Sound card configuration + \end{itemize} + \vspace{0.5em} + {\em Configuring the userspace audio paths and effects.} +} +{Espace utilisateur et configuation matérielle} +{ + \begin{itemize} + \item Plug-ins ALSA + \item \code{asound.conf} + \item Configuration de cartes son en espace utilisateur + \end{itemize} + \vspace{0.5em} + {\em Configuration des chemins et effets audio depuis l'espace utilisateur.} +} +\defagendaitem +{userspacehardwareconfiguration} +{lab} +{Card configuration examples} +{ + \begin{itemize} + \item Reordering channels + \item Splitting channels + \item Resampling + \item Mixing + \item LADSPA + \end{itemize} + \vspace{0.5em} + {\em Exercising the ALSA plugins.} +} +{Exemples de configuration de cartes audio} +{ + \begin{itemize} + \item Changement d'ordre des canaux audio + \item Séparation de canaux audio + \item Ré-échantillonage + \item Mixing + \item LADSPA + \end{itemize} + \vspace{0.5em} + {\em Mise en oeuvre des plug-ins ALSA} +} +\defagendaitem +{userspacecontrolconfiguration} +{lecture} +{Userspace, controls configuration} +{ + \begin{itemize} + \item {\em amixer} + \item {\em alsamixer} + \item Userspace API + \item Saving state: {\em alsactl}, \code{asound.state} + \end{itemize} + \vspace{0.5em} + {\em Configuring the userspace audio paths and effects.} +} +{Espace utilisateur et configuration des contrôles audio} +{ + \begin{itemize} + \item {\em amixer} + \item {\em alsamixer} + \item API en espace utilisateur + \item Sauvegarde de l'état des contrôles : {\em alsactl}, \code{asound.state} + \end{itemize} + \vspace{0.5em} + {\em Configuration des chemins et effets audio depuis l'espace utilisateur.} +} +\defagendaitem +{userspacecontrolconfiguration} +{lab} +{Configuring controls} +{ + \begin{itemize} + \item {\em alsamixer} demonstration + \item \code{asound.state} examples + \item Custom application + \end{itemize} + \vspace{0.5em} + {\em Configuring the sound card controls.} +} +{Configuration des contrôles} +{ + \begin{itemize} + \item TPnstration de {\em alsamixer} + \item Exemples de fichiers \code{asound.state} + \item Application custom + \end{itemize} + \vspace{0.5em} + {\em Configuration des contrôles de cartes audio.} +} +\defagendaitem +{userspaceplayaudio} +{lecture} +{Userspace, playing and capturing audio} +{ + \begin{itemize} + \item Userspace ALSA API + \end{itemize} + \vspace{0.5em} + {\em Playing and capturing audio samples.} +} +{Espace utilisateur : lecture et enregistrement audio} +{ + \begin{itemize} + \item API de ALSA en espace utilisateur + \end{itemize} + \vspace{0.5em} + {\em Lecture et enregistrement de samples audio} +} +\defagendaitem +{troubleshooting} +{lecture} +{Troubleshooting} +{ + \begin{itemize} + \item Debugging + \item {\em vizdapm} + \end{itemize} + \vspace{0.5em} + {\em Presenting how to debug common issues.} +} +{Résolution de problèmes} +{ + \begin{itemize} + \item Résolution de problèmes courants + \item {\em vizdapm} + \end{itemize} + \vspace{0.5em} + {\em Présentation de la résolution de problèmes courants.} +} +\defagendaitem +{debugging} +{lab} +{Debugging} +{ + \begin{itemize} + \item Examples of common issues and their resolutions + \end{itemize} +} +{Résolution de problèmes} +{ + \begin{itemize} + \item Exemples de problèmes courants et leur résolution. + \end{itemize} +} +\defagendaitem +{pipewire} +{lecture} +{Pipewire} +{ + \begin{itemize} + \item Pipewire introduction + \item Pipewire configuration + \item Pipewire tools (pwdump, pw-cli, ...) + \item Pipewire session and policy management + \item Pipewire modules and filtering + \item {\em WirePlumber} + \end{itemize} + \vspace{0.5em} + {\em Using Pipewire as the sound server.} +} +{Pipewire} +{ + \begin{itemize} + \item Introduction à Pipewire + \item Configuration de Pipewire + \item Outils autour de Pipewire (pwdump, pw-cli, ...) + \item Gestion de session et de {\em policy} avec Pipewire + \item Modules de Pipewire et filtrage + \item {\em WirePlumber} + \end{itemize} + \vspace{0.5em} + {\em Utiliser Pipewire comme serveur audio.} +} +\defagendaitem +{pipewire} +{lab} +{Pipewire} +{ + \begin{itemize} + \item Running pipewire on the target + \item Inspecting the configuration and setting properties + \item Dynamic routing and patchbay + \item Using modules and Filter-Chain + \end{itemize} + \vspace{0.5em} + {\em Running Pipewire and exercising advanced configuration.} +} +{Pipewire} +{ + \begin{itemize} + \item Lancer pipewire sur une cible embarquée + \item Inspecter la configuration et les propriétés + \item Routage dynamique et {\em patchbay} + \item Utilisation des modules et de {\em Filter-Chain} + \end{itemize} + \vspace{0.5em} + {\em Utiliser Pipewire et des configurations avancées.} +} +\defagendaitem +{gstreamer} +{lecture} +{The GStreamer multimedia framework} +{ + \begin{itemize} + \item {\em GStreamer} + \item GStreamer pipelines + \item GStreamer plugins + \end{itemize} + \vspace{0.5em} + {\em Using Gstreamer for audio capture and playback.} +} +{Le framework multimedia GStreamer} +{ + \begin{itemize} + \item {\em GStreamer} + \item Pipelines GStreamer + \item Plugins GStreamer + \end{itemize} + \vspace{0.5em} + {\em Utiliser GStreamer pour la lecture et l'enregistrement audio.} +} +\defagendaitem +{gstreamer} +{lab} +{GStreamer} +{ + \begin{itemize} + \item Running gstreamer on the target + \item Creating multiple pipelines + \end{itemize} + \vspace{0.5em} + {\em Running Gstreamer using different audio pipelines.} +} +{GStreamer} +{ + \begin{itemize} + \item Lancer gstreamer sur une cible embarquée + \item Créer différents pipelines + \end{itemize} + \vspace{0.5em} + {\em Exécuter Gstreamer et utiliser différents pipelines audio.} +} + +\def \onlineagenda { + \showagendaday{1} + \showagendaitem{representation}{lecture} + \showagendaitem{hardware}{lecture} + \showagendaitem{asoc}{lecture} + \showagendaday{2} + \showagendaitem{kernelhelpers}{lecture} + \showagendaitem{audiocomponents}{lecture} + \showagendaitem{routing}{lecture} + \showagendaday{3} + \showagendaitem{userspacehardwareconfiguration}{lecture} + \showagendaitem{userspacehardwareconfiguration}{lab} + \showagendaitem{userspacecontrolconfiguration}{lecture} + \showagendaitem{userspacecontrolconfiguration}{lab} + \showagendaitem{userspaceplayaudio}{lecture} + \showagendaday{4} + \showagendaitem{troubleshooting}{lecture} + \showagendaitem{debugging}{lab} + \showagendaitem{pipewire}{lecture} + \showagendaitem{pipewire}{lab} + \showagendaitem{gstreamer}{lecture} + \showagendaitem{gstreamer}{lab} +} + +\def \onsiteagenda { + \showagendaday{1} + \showagendaitem{representation}{lecture} + \showagendaitem{hardware}{lecture} + \showagendaitem{asoc}{lecture} + \showagendaday{2} + \showagendaitem{kernelhelpers}{lecture} + \showagendaitem{audiocomponents}{lecture} + \showagendaitem{routing}{lecture} + \showagendaday{3} + \showagendaitem{userspacehardwareconfiguration}{lecture} + \showagendaitem{userspacehardwareconfiguration}{lab} + \showagendaitem{userspacecontrolconfiguration}{lecture} + \showagendaitem{userspacecontrolconfiguration}{lab} + \showagendaitem{userspaceplayaudio}{lecture} + \showagendaday{4} + \showagendaitem{troubleshooting}{lecture} + \showagendaitem{debugging}{lab} + \showagendaitem{pipewire}{lecture} + \showagendaitem{pipewire}{lab} + \showagendaitem{gstreamer}{lecture} + \showagendaitem{gstreamer}{lab} +} + From 5cd3aac6efa0cf866a07a95dbb0543af2dfc5e62 Mon Sep 17 00:00:00 2001 From: Thomas Bonnefille Date: Wed, 27 Nov 2024 16:29:10 +0100 Subject: [PATCH 18/18] agenda: use commands to refactor the audio agenda Signed-off-by: Thomas Bonnefille --- agenda/audio-agenda.tex | 205 +---------------------------- agenda/audio-fr-agenda.tex | 206 +----------------------------- agenda/audio-online-agenda.tex | 205 +---------------------------- agenda/audio-online-fr-agenda.tex | 206 +----------------------------- 4 files changed, 4 insertions(+), 818 deletions(-) diff --git a/agenda/audio-agenda.tex b/agenda/audio-agenda.tex index 7e821b6bb2..8538ed3a59 100644 --- a/agenda/audio-agenda.tex +++ b/agenda/audio-agenda.tex @@ -13,209 +13,6 @@ \feshowinfo -\section{Day 1 - Morning} - -\feagendatwocolumn -{Lecture - Digital Audio Representation} -{ - \begin{itemize} - \item What is sound? - \item Sampling theory - \item Sample size, sample rate - \item Audio formats: I2S, LJ, RJ, DSPA, DSPB - \item AC97 - \item IEC 61937 (S/PDIF and HDMI) - \item PDM - \end{itemize} - \vspace{0.5em} - {\em Introducing the basic notions used for representing audio waveforms.} -} -{Lecture - Hardware} -{ - \begin{itemize} - \item Signals - \item CPU Digital Audio Interfaces - \item CODEC Digital Audio Interfaces - \item Amplifiers - \item Clocks and clock providers - \end{itemize} - \vspace{0.5em} - {\em Presenting the hardware involved in the audio playback or capture.} -} - -\feagendaonecolumn -{Lecture - Linux kernel ASoC subsystem} -{ - \begin{itemize} - \item ASoC: the ALSA System-on-Chip subsystem in the Linux kernel - \item Describing audio cards with Device Tree: {\em - audio-graph-card}, {\em simple-audio-card} - \item Linux kernel drivers for audio cards - \item Linux kernel drivers for audio codecs - \item Controls - \item Linux kernel drivers for CPU audio interfaces - \end{itemize} - \vspace{0.5em} - {\em Introducing the Linux kernel subsystem for audio on embedded systems.} -} - -\section{Day 1 - Afternoon} - -\feagendatwocolumn -{Lecture - Linux kernel helpers} -{ - \begin{itemize} - \item {\em regmap}, {\em regcache} - \item DMA handling - \end{itemize} - \vspace{0.5em} - {\em Presenting the common helper APIs.} -} -{Lecture - More audio components} -{ - \begin{itemize} - \item Auxiliary devices, amplifiers, muxing - \item Jack detection - \item Asynchronous Sample Rate Converter - \end{itemize} - \vspace{0.5em} - {\em Presenting more components of the sound cards.} -} - -\feagendaonecolumn -{Lecture - Routing} -{ - \begin{itemize} - \item Routing audio - \item DAPM: Dynamic Audio Power Management - \end{itemize} - \vspace{0.5em} - {\em Presenting the audio routes and power management.} -} - -\section{Day 2 - Morning} - -\feagendatwocolumn -{Lecture - Userspace, hardware configuration} -{ - \begin{itemize} - \item ALSA plugins - \item \code{asound.conf} - \item Sound card configuration - \end{itemize} - \vspace{0.5em} - {\em Configuring the userspace audio paths and effects.} -} -{Demo - Card configuration examples} -{ - \begin{itemize} - \item Reordering channels - \item Splitting channels - \item Resampling - \item Mixing - \item LADSPA - \end{itemize} - \vspace{0.5em} - {\em Exercising the ALSA plugins.} -} - -\feagendatwocolumn -{Lecture - Userspace, controls configuration} -{ - \begin{itemize} - \item {\em amixer} - \item {\em alsamixer} - \item Userspace API - \item Saving state: {\em alsactl}, \code{asound.state} - \end{itemize} - \vspace{0.5em} - {\em Configuring the userspace audio paths and effects.} -} -{Demo - Configuring controls} -{ - \begin{itemize} - \item {\em alsamixer} demonstration - \item \code{asound.state} examples - \item Custom application - \end{itemize} - \vspace{0.5em} - {\em Configuring the sound card controls.} -} - -\feagendaonecolumn -{Lecture - Userspace, playing and capturing audio} -{ - \begin{itemize} - \item Userspace ALSA API - \end{itemize} - \vspace{0.5em} - {\em Playing and capturing audio samples.} -} - -\section{Day 2 - Afternoon} - -\feagendatwocolumn -{Lecture - Troubleshooting} -{ - \begin{itemize} - \item Debugging - \item {\em vizdapm} - \end{itemize} - \vspace{0.5em} - {\em Presenting how to debug common issues.} -} -{Demo - Debugging} -{ - \begin{itemize} - \item Examples of common issues and their resolutions - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Pipewire} -{ - \begin{itemize} - \item Pipewire introduction - \item Pipewire configuration - \item Pipewire tools (pwdump, pw-cli, ...) - \item Pipewire session and policy management - \item Pipewire modules and filtering - \item {\em WirePlumber} - \end{itemize} - \vspace{0.5em} - {\em Using Pipewire as the sound server.} -} -{Demo - Pipewire} -{ - \begin{itemize} - \item Running pipewire on the target - \item Inspecting the configuration and setting properties - \item Dynamic routing and patchbay - \item Using modules and Filter-Chain - \end{itemize} - \vspace{0.5em} - {\em Running Pipewire and exercising advanced configuration.} -} - -\feagendatwocolumn -{Lecture - The GStreamer multimedia framework} -{ - \begin{itemize} - \item {\em GStreamer} - \item GStreamer pipelines - \item GStreamer plugins - \end{itemize} - \vspace{0.5em} - {\em Using Gstreamer for audio capture and playback.} -} -{Demo - GStreamer} -{ - \begin{itemize} - \item Running gstreamer on the target - \item Creating multiple pipelines - \end{itemize} - \vspace{0.5em} - {\em Running Gstreamer using different audio pipelines.} -} +\onsiteagenda \end{document} diff --git a/agenda/audio-fr-agenda.tex b/agenda/audio-fr-agenda.tex index c3dc781b4a..c8282b1f63 100644 --- a/agenda/audio-fr-agenda.tex +++ b/agenda/audio-fr-agenda.tex @@ -13,210 +13,6 @@ \feshowinfo -\section{1\textsuperscript{er} jour - Matin} - -\feagendatwocolumn -{Cours - Représentation audio numérique} -{ - \begin{itemize} - \item Qu'est-ce que le son? - \item Théorie de l'échantillonage - \item Taille des échantillons, fréquence d'échantillonage - \item Formats audio : I2S, LJ, RJ, DSPA, DSPB - \item AC97 - \item IEC 61937 (S/PDIF and HDMI) - \item PDM - \end{itemize} - \vspace{0.5em} - {\em Introduction des notions de base utilisées pour représenter des ondes audio.} -} -{Cours - Matériel} -{ - \begin{itemize} - \item Signaux - \item Interfaces audio numériques sur les System-on-chip - \item Interfaces audio numériques sur les codecs audio - \item Amplificateurs - \item Horloges et fournisseurs d'horloges - \end{itemize} - \vspace{0.5em} - {\em Présentation du matériel impliqué dans la lecture ou l'enregistrement audio.} -} - -\feagendaonecolumn -{Cours - Le sous-système ASoC du noyau Linux} -{ - \begin{itemize} - \item ASoC : le sous-système ALSA pour les System-on-chip dans le noyau Linux - \item Description des cartes audio dans le Device Tree : {\em - audio-graph-card}, {\em simple-audio-card} - \item Drivers dans le noyau Linux pour les cartes audio - \item Drivers dans le noyau Linux pour les codecs audio - \item Controles audio dans le kernel - \item Drivers dans le noyau Linux pour les interfaces audio des - System-on-chip - \end{itemize} - \vspace{0.5em} - {\em Introduction au sous-système du noyau Linux pour la gestion audio dans les systèmes embarqués.} -} - -\section{1\textsuperscript{er} jour - Après-midi} - -\feagendatwocolumn -{Cours - Mécanismes supplémentaires du noyau Linux relatifs à l'audio} -{ - \begin{itemize} - \item {\em regmap}, {\em regcache} - \item Support DMA - \end{itemize} - \vspace{0.5em} - {\em Présentation des mécanismes du noyau Linux couramment utilisés en lien avec le support audio.} -} -{Cours - Autres composants audio} -{ - \begin{itemize} - \item Périphériques auxilliaires, amplificateurs, muxing - \item Detection Jack - \item Convertisseur de fréquence d'échantillonage asynchrone - \end{itemize} - \vspace{0.5em} - {\em Présentation de composants supplémentaires utilisés pour certaines cartes audio.} -} - -\feagendaonecolumn -{Cours - Routage} -{ - \begin{itemize} - \item Routage de flux audio - \item DAPM : {\em Dynamic Audio Power Management} - \end{itemize} - \vspace{0.5em} - {\em Présentation du routage audio et de la gestion d'énergie pour l'audio.} -} - -\section{2\textsuperscript{ème} jour - Matin} - -\feagendatwocolumn -{Cours - Espace utilisateur et configuation matérielle} -{ - \begin{itemize} - \item Plug-ins ALSA - \item \code{asound.conf} - \item Configuration de cartes son en espace utilisateur - \end{itemize} - \vspace{0.5em} - {\em Configuration des chemins et effets audio depuis l'espace utilisateur.} -} -{Démo - Exemples de configuration de cartes audio} -{ - \begin{itemize} - \item Changement d'ordre des canaux audio - \item Séparation de canaux audio - \item Ré-échantillonage - \item Mixing - \item LADSPA - \end{itemize} - \vspace{0.5em} - {\em Mise en oeuvre des plug-ins ALSA} -} - -\feagendatwocolumn -{Cours - Espace utilisateur et configuration des contrôles audio} -{ - \begin{itemize} - \item {\em amixer} - \item {\em alsamixer} - \item API en espace utilisateur - \item Sauvegarde de l'état des contrôles : {\em alsactl}, \code{asound.state} - \end{itemize} - \vspace{0.5em} - {\em Configuration des chemins et effets audio depuis l'espace utilisateur.} -} -{Démo - Configuration des contrôles} -{ - \begin{itemize} - \item Démonstration de {\em alsamixer} - \item Exemples de fichiers \code{asound.state} - \item Application custom - \end{itemize} - \vspace{0.5em} - {\em Configuration des contrôles de cartes audio.} -} - -\feagendaonecolumn -{Cours - Espace utilisateur : lecture et enregistrement audio} -{ - \begin{itemize} - \item API de ALSA en espace utilisateur - \end{itemize} - \vspace{0.5em} - {\em Lecture et enregistrement de samples audio} -} - -\section{2\textsuperscript{ème} jour - Après-midi} - -\feagendatwocolumn -{Cours - Résolution de problèmes} -{ - \begin{itemize} - \item Résolution de problèmes courants - \item {\em vizdapm} - \end{itemize} - \vspace{0.5em} - {\em Présentation de la résolution de problèmes courants.} -} -{Démo - Résolution de problèmes} -{ - \begin{itemize} - \item Exemples de problèmes courants et leur résolution. - \end{itemize} -} - -\feagendatwocolumn -{Cours - Pipewire} -{ - \begin{itemize} - \item Introduction à Pipewire - \item Configuration de Pipewire - \item Outils autour de Pipewire (pwdump, pw-cli, ...) - \item Gestion de session et de {\em policy} avec Pipewire - \item Modules de Pipewire et filtrage - \item {\em WirePlumber} - \end{itemize} - \vspace{0.5em} - {\em Utiliser Pipewire comme serveur audio.} -} -{Démo - Pipewire} -{ - \begin{itemize} - \item Lancer pipewire sur une cible embarquée - \item Inspecter la configuration et les propriétés - \item Routage dynamique et {\em patchbay} - \item Utilisation des modules et de {\em Filter-Chain} - \end{itemize} - \vspace{0.5em} - {\em Utiliser Pipewire et des configurations avancées.} -} - -\feagendatwocolumn -{Cours - Le framework multimedia GStreamer} -{ - \begin{itemize} - \item {\em GStreamer} - \item Pipelines GStreamer - \item Plugins GStreamer - \end{itemize} - \vspace{0.5em} - {\em Utiliser GStreamer pour la lecture et l'enregistrement audio.} -} -{Démo - GStreamer} -{ - \begin{itemize} - \item Lancer gstreamer sur une cible embarquée - \item Créer différents pipelines - \end{itemize} - \vspace{0.5em} - {\em Exécuter Gstreamer et utiliser différents pipelines audio.} -} +\onsiteagenda \end{document} diff --git a/agenda/audio-online-agenda.tex b/agenda/audio-online-agenda.tex index ea32926794..3fc55aab56 100644 --- a/agenda/audio-online-agenda.tex +++ b/agenda/audio-online-agenda.tex @@ -13,209 +13,6 @@ \feshowinfo -\section{Half day 1} - -\feagendatwocolumn -{Lecture - Digital Audio Representation} -{ - \begin{itemize} - \item What is sound? - \item Sampling theory - \item Sample size, sample rate - \item Audio formats: I2S, LJ, RJ, DSPA, DSPB - \item AC97 - \item IEC 61937 (S/PDIF and HDMI) - \item PDM - \end{itemize} - \vspace{0.5em} - {\em Introducing the basic notions used for representing audio waveforms.} -} -{Lecture - Hardware} -{ - \begin{itemize} - \item Signals - \item CPU Digital Audio Interfaces - \item CODEC Digital Audio Interfaces - \item Amplifiers - \item Clocks and clock providers - \end{itemize} - \vspace{0.5em} - {\em Presenting the hardware involved in the audio playback or capture.} -} - -\feagendaonecolumn -{Lecture - Linux kernel ASoC subsystem} -{ - \begin{itemize} - \item ASoC: the ALSA System-on-Chip subsystem in the Linux kernel - \item Describing audio cards with Device Tree: {\em - audio-graph-card}, {\em simple-audio-card} - \item Linux kernel drivers for audio cards - \item Linux kernel drivers for audio codecs - \item Controls - \item Linux kernel drivers for CPU audio interfaces - \end{itemize} - \vspace{0.5em} - {\em Introducing the Linux kernel subsystem for audio on embedded systems.} -} - -\section{Half day 2} - -\feagendatwocolumn -{Lecture - Linux kernel helpers} -{ - \begin{itemize} - \item {\em regmap}, {\em regcache} - \item DMA handling - \end{itemize} - \vspace{0.5em} - {\em Presenting the common helper APIs.} -} -{Lecture - More audio components} -{ - \begin{itemize} - \item Auxiliary devices, amplifiers, muxing - \item Jack detection - \item Asynchronous Sample Rate Converter - \end{itemize} - \vspace{0.5em} - {\em Presenting more components of the sound cards.} -} - -\feagendaonecolumn -{Lecture - Routing} -{ - \begin{itemize} - \item Routing audio - \item DAPM: Dynamic Audio Power Management - \end{itemize} - \vspace{0.5em} - {\em Presenting the audio routes and power management.} -} - -\section{Half day 3} - -\feagendatwocolumn -{Lecture - Userspace, hardware configuration} -{ - \begin{itemize} - \item ALSA plugins - \item \code{asound.conf} - \item Sound card configuration - \end{itemize} - \vspace{0.5em} - {\em Configuring the userspace audio paths and effects.} -} -{Demo - Card configuration examples} -{ - \begin{itemize} - \item Reordering channels - \item Splitting channels - \item Resampling - \item Mixing - \item LADSPA - \end{itemize} - \vspace{0.5em} - {\em Exercising the ALSA plugins.} -} - -\feagendatwocolumn -{Lecture - Userspace, controls configuration} -{ - \begin{itemize} - \item {\em amixer} - \item {\em alsamixer} - \item Userspace API - \item Saving state: {\em alsactl}, \code{asound.state} - \end{itemize} - \vspace{0.5em} - {\em Configuring the userspace audio paths and effects.} -} -{Demo - Configuring controls} -{ - \begin{itemize} - \item {\em alsamixer} demonstration - \item \code{asound.state} examples - \item Custom application - \end{itemize} - \vspace{0.5em} - {\em Configuring the sound card controls.} -} - -\feagendaonecolumn -{Lecture - Userspace, playing and capturing audio} -{ - \begin{itemize} - \item Userspace ALSA API - \end{itemize} - \vspace{0.5em} - {\em Playing and capturing audio samples.} -} - -\section{Half day 4} - -\feagendatwocolumn -{Lecture - Troubleshooting} -{ - \begin{itemize} - \item Debugging - \item {\em vizdapm} - \end{itemize} - \vspace{0.5em} - {\em Presenting how to debug common issues.} -} -{Demo - Debugging} -{ - \begin{itemize} - \item Examples of common issues and their resolutions - \end{itemize} -} - -\feagendatwocolumn -{Lecture - Pipewire} -{ - \begin{itemize} - \item Pipewire introduction - \item Pipewire configuration - \item Pipewire tools (pwdump, pw-cli, ...) - \item Pipewire session and policy management - \item Pipewire modules and filtering - \item {\em WirePlumber} - \end{itemize} - \vspace{0.5em} - {\em Using Pipewire as the sound server.} -} -{Demo - Pipewire} -{ - \begin{itemize} - \item Running pipewire on the target - \item Inspecting the configuration and setting properties - \item Dynamic routing and patchbay - \item Using modules and Filter-Chain - \end{itemize} - \vspace{0.5em} - {\em Running Pipewire and exercising advanced configuration.} -} - -\feagendatwocolumn -{Lecture - The GStreamer multimedia framework} -{ - \begin{itemize} - \item {\em GStreamer} - \item GStreamer pipelines - \item GStreamer plugins - \end{itemize} - \vspace{0.5em} - {\em Using Gstreamer for audio capture and playback.} -} -{Demo - GStreamer} -{ - \begin{itemize} - \item Running gstreamer on the target - \item Creating multiple pipelines - \end{itemize} - \vspace{0.5em} - {\em Running Gstreamer using different audio pipelines.} -} +\onlineagenda \end{document} diff --git a/agenda/audio-online-fr-agenda.tex b/agenda/audio-online-fr-agenda.tex index ff2aaa81de..0745352634 100644 --- a/agenda/audio-online-fr-agenda.tex +++ b/agenda/audio-online-fr-agenda.tex @@ -13,210 +13,6 @@ \feshowinfo -\section{1\textsuperscript{ère} demi-journée} - -\feagendatwocolumn -{Cours - Représentation audio numérique} -{ - \begin{itemize} - \item Qu'est-ce que le son? - \item Théorie de l'échantillonage - \item Taille des échantillons, fréquence d'échantillonage - \item Formats audio : I2S, LJ, RJ, DSPA, DSPB - \item AC97 - \item IEC 61937 (S/PDIF and HDMI) - \item PDM - \end{itemize} - \vspace{0.5em} - {\em Introduction des notions de base utilisées pour représenter des ondes audio.} -} -{Cours - Matériel} -{ - \begin{itemize} - \item Signaux - \item Interfaces audio numériques sur les System-on-chip - \item Interfaces audio numériques sur les codecs audio - \item Amplificateurs - \item Horloges et fournisseurs d'horloges - \end{itemize} - \vspace{0.5em} - {\em Présentation du matériel impliqué dans la lecture ou l'enregistrement audio.} -} - -\feagendaonecolumn -{Cours - Le sous-système ASoC du noyau Linux} -{ - \begin{itemize} - \item ASoC : le sous-système ALSA pour les System-on-chip dans le noyau Linux - \item Description des cartes audio dans le Device Tree : {\em - audio-graph-card}, {\em simple-audio-card} - \item Drivers dans le noyau Linux pour les cartes audio - \item Drivers dans le noyau Linux pour les codecs audio - \item Contrôles audio dans le kernel - \item Drivers dans le noyau Linux pour les interfaces audio des - System-on-chip - \end{itemize} - \vspace{0.5em} - {\em Introduction au sous-système du noyau Linux pour la gestion audio dans les systèmes embarqués.} -} - -\section{2\textsuperscript{ème} demi-journée} - -\feagendatwocolumn -{Cours - Mécanismes supplémentaires du noyau Linux relatifs à l'audio} -{ - \begin{itemize} - \item {\em regmap}, {\em regcache} - \item Support DMA - \end{itemize} - \vspace{0.5em} - {\em Présentation des mécanismes du noyau Linux couramment utilisés en lien avec le support audio.} -} -{Cours - Autres composants audio} -{ - \begin{itemize} - \item Périphériques auxilliaires, amplificateurs, muxing - \item Detection Jack - \item Convertisseur de fréquence d'échantillonage asynchrone - \end{itemize} - \vspace{0.5em} - {\em Présentation de composants supplémentaires utilisés pour certaines cartes audio.} -} - -\feagendaonecolumn -{Cours - Routage} -{ - \begin{itemize} - \item Routage de flux audio - \item DAPM : {\em Dynamic Audio Power Management} - \end{itemize} - \vspace{0.5em} - {\em Présentation du routage audio et de la gestion d'énergie pour l'audio.} -} - -\section{3\textsuperscript{ème} demi-journée} - -\feagendatwocolumn -{Cours - Espace utilisateur et configuation matérielle} -{ - \begin{itemize} - \item Plug-ins ALSA - \item \code{asound.conf} - \item Configuration de cartes son en espace utilisateur - \end{itemize} - \vspace{0.5em} - {\em Configuration des chemins et effets audio depuis l'espace utilisateur.} -} -{Démo - Exemples de configuration de cartes audio} -{ - \begin{itemize} - \item Changement d'ordre des canaux audio - \item Séparation de canaux audio - \item Ré-échantillonage - \item Mixing - \item LADSPA - \end{itemize} - \vspace{0.5em} - {\em Mise en oeuvre des plug-ins ALSA} -} - -\feagendatwocolumn -{Cours - Espace utilisateur et configuration des contrôles audio} -{ - \begin{itemize} - \item {\em amixer} - \item {\em alsamixer} - \item API en espace utilisateur - \item Sauvegarde de l'état des contrôles : {\em alsactl}, \code{asound.state} - \end{itemize} - \vspace{0.5em} - {\em Configuration des chemins et effets audio depuis l'espace utilisateur.} -} -{Démo - Configuration des contrôles} -{ - \begin{itemize} - \item Démonstration de {\em alsamixer} - \item Exemples de fichiers \code{asound.state} - \item Application custom - \end{itemize} - \vspace{0.5em} - {\em Configuration des contrôles de cartes audio.} -} - -\feagendaonecolumn -{Cours - Espace utilisateur : lecture et enregistrement audio} -{ - \begin{itemize} - \item API de ALSA en espace utilisateur - \end{itemize} - \vspace{0.5em} - {\em Lecture et enregistrement de samples audio} -} - -\section{4\textsuperscript{ème} demi-journée} - -\feagendatwocolumn -{Cours - Résolution de problèmes} -{ - \begin{itemize} - \item Résolution de problèmes courants - \item {\em vizdapm} - \end{itemize} - \vspace{0.5em} - {\em Présentation de la résolution de problèmes courants.} -} -{Démo - Résolution de problèmes} -{ - \begin{itemize} - \item Exemples de problèmes courants et leur résolution. - \end{itemize} -} - -\feagendatwocolumn -{Cours - Pipewire} -{ - \begin{itemize} - \item Introduction à Pipewire - \item Configuration de Pipewire - \item Outils autour de Pipewire (pwdump, pw-cli, ...) - \item Gestion de session et de {\em policy} avec Pipewire - \item Modules de Pipewire et filtrage - \item {\em WirePlumber} - \end{itemize} - \vspace{0.5em} - {\em Utiliser Pipewire comme serveur audio.} -} -{Démo - Pipewire} -{ - \begin{itemize} - \item Lancer pipewire sur une cible embarquée - \item Inspecter la configuration et les propriétés - \item Routage dynamique et {\em patchbay} - \item Utilisation des modules et de {\em Filter-Chain} - \end{itemize} - \vspace{0.5em} - {\em Utiliser Pipewire et des configurations avancées.} -} - -\feagendatwocolumn -{Cours - Le framework multimedia GStreamer} -{ - \begin{itemize} - \item {\em GStreamer} - \item Pipelines GStreamer - \item Plugins GStreamer - \end{itemize} - \vspace{0.5em} - {\em Utiliser GStreamer pour la lecture et l'enregistrement audio.} -} -{Démo - GStreamer} -{ - \begin{itemize} - \item Lancer gstreamer sur une cible embarquée - \item Créer différents pipelines - \end{itemize} - \vspace{0.5em} - {\em Exécuter Gstreamer et utiliser différents pipelines audio.} -} +\onlineagenda \end{document}