[bootlin/training-materials updates] master: Kernel agenda updates (bbc90c4d)
Michael Opdenacker
michael.opdenacker at bootlin.com
Mon Mar 23 18:48:25 CET 2020
Repository : https://github.com/bootlin/training-materials
On branch : master
Link : https://github.com/bootlin/training-materials/commit/bbc90c4d6cf1e4221b6c07583371935c04984ccc
>---------------------------------------------------------------
commit bbc90c4d6cf1e4221b6c07583371935c04984ccc
Author: Michael Opdenacker <michael.opdenacker at bootlin.com>
Date: Mon Mar 23 18:48:25 2020 +0100
Kernel agenda updates
- Version for the online course with demos
- Improvements / updates to the normal agendas
Signed-off-by: Michael Opdenacker <michael.opdenacker at bootlin.com>
>---------------------------------------------------------------
bbc90c4d6cf1e4221b6c07583371935c04984ccc
agenda/linux-kernel-agenda.tex | 33 ++-
agenda/linux-kernel-fr-agenda.tex | 37 ++-
agenda/linux-kernel-online-agenda.tex | 517 ++++++++++++++++++++++++++++++++++
3 files changed, 580 insertions(+), 7 deletions(-)
diff --git a/agenda/linux-kernel-agenda.tex b/agenda/linux-kernel-agenda.tex
index 2eda5aeb..dc0a51ba 100644
--- a/agenda/linux-kernel-agenda.tex
+++ b/agenda/linux-kernel-agenda.tex
@@ -432,8 +432,7 @@ Embedded Linux kernel and driver development training\\
{
{\em Using the BeagleBone Black board}
\begin{itemize}
- \item Observe problems due to concurrent accesses to the device.
- \item Add locking to the driver to fix these issues.
+ \item Add locking to the current driver
\end{itemize}
}
@@ -489,6 +488,36 @@ Embedded Linux kernel and driver development training\\
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 DMA
+ \item mmap
+ \item Introduction to Git
+ \end{itemize}
+}
+{Demo - If time left}
+{
+ \begin{itemize}
+ \item Get familiar with git by contributing to a real
+ project: the Linux kernel
+ \item Send your patches to the maintainers and
+ mailing lists.
+ \end{itemize}
+}
+
+\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}
}
diff --git a/agenda/linux-kernel-fr-agenda.tex b/agenda/linux-kernel-fr-agenda.tex
index 7cdd5daf..06a99ecc 100644
--- a/agenda/linux-kernel-fr-agenda.tex
+++ b/agenda/linux-kernel-fr-agenda.tex
@@ -452,10 +452,7 @@ Session de 5 jours
{
{\em En utilisant la carte BeagleBone Black}
\begin{itemize}
- \item Observation de problèmes liés à des accès concurrents au
- périphérique.
- \item Ajout de mécanismes de verrouillage au pilote pour corriger
- ces problèmes.
+ \item Ajout de mécanismes de verrouillage au pilote en cours
\end{itemize}
}
@@ -512,8 +509,38 @@ Session de 5 jours
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}
}
-\end{document}
+% If we don't put this, strangely, the page overflows !?
+\newpage
+
+\feagendatwocolumn
+{Cours - S'il reste du temps}
+{
+ \begin{itemize}
+ \item DMA
+ \item mmap
+ \item Introduction à Git
+ \end{itemize}
+}
+{TP - S'il reste du temps}
+{
+ \begin{itemize}
+ \item Se familiariser avec git en contribuant à un vrai projet: le noyau Linux
+ \item Envoyez vos patches aux mainteneurs et aux listes de discussion.
+ \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}
+}
+
+\end{document}
diff --git a/agenda/linux-kernel-online-agenda.tex b/agenda/linux-kernel-online-agenda.tex
new file mode 100644
index 00000000..66a3da04
--- /dev/null
+++ b/agenda/linux-kernel-online-agenda.tex
@@ -0,0 +1,517 @@
+\documentclass[a4paper,12pt,obeyspaces,spaces,hyphens]{article}
+
+\usepackage{agenda}
+\usepackage{colortbl}
+\usepackage{xcolor}
+\usepackage{calc}
+
+\hypersetup{pdftitle={Embedded Linux kernel and driver development training},
+ pdfauthor={Bootlin}}
+
+\renewcommand{\arraystretch}{2.0}
+
+\begin{document}
+
+\thispagestyle{fancy}
+
+\setlength{\arrayrulewidth}{0.8pt}
+
+\begin{center}
+\LARGE
+Embedded Linux kernel and driver development training\\
+\large
+On-line seminar
+\end{center}
+\vspace{1cm}
+
+\small
+\newcolumntype{g}{>{\columncolor{fedarkblue}}m{4cm}}
+\newcolumntype{h}{>{\columncolor{felightblue}}X}
+
+\arrayrulecolor{lightgray} {
+ \setlist[1]{itemsep=-5pt}
+ \begin{tabularx}{\textwidth}{|g|h|}
+ {\bf Title} & {\bf Embedded Linux kernel and driver development training} \\
+ \hline
+
+ {\bf Overview} &
+ Understanding the Linux kernel \par
+ Developing Linux device drivers \par
+ Linux kernel debugging \par
+ Porting the Linux kernel to a new board \par
+ Working with the kernel development community \par
+ Practical demos with the ARM-based BeagleBone Black board
+ (or with its Wireless variant).\\
+ \hline
+ {\bf Materials} &
+ Check that the course contents correspond to your needs:
+ \newline \url{https://bootlin.com/doc/training/linux-kernel}. \\
+ \hline
+
+ {\bf Duration} & {\bf Seven } half days - 28 hours (4 hours per half day).
+ \newline 80\% of lectures, 20\% of practical demos. \\
+ \hline
+
+ {\bf Trainer} & One of the engineers listed on
+ \newline \url{https://bootlin.com/training/trainers/}\\
+ \hline
+
+ {\bf Language} & Oral lectures: English
+ \newline Materials: English.\\
+ \hline
+
+ {\bf Audience} & People developing devices using the Linux kernel
+ \newline People supporting embedded Linux system developers. \\
+ \hline
+
+ {\bf Prerequisites} &
+
+ {\bf Familiarity with C programming}
+ \newline In particular, participants should understand
+ complex data types and structures, pointers and function pointers.\vspace{1em}
+ \newline {\bf Familiarity with UNIX or GNU/Linux commands}
+ \newline People lacking experience on this topic could get
+ trained by themselves, for example with our freely available on-line slides
+ (\url{https://bootlin.com/blog/command-line/}).\vspace{1em}
+ \newline {\bf Familiarity with embedded Linux development}.
+ \newline Taking our Embedded Linux course
+ (\url{https://bootlin.com/training/embedded-linux/})
+ first is not a requirement, but it will definitely
+ allow to understand the development environment
+ and board manipulations, allowing to concentrate on
+ kernel code programming.
+ \\
+ \hline
+ \end{tabularx}
+
+ \begin{tabularx}{\textwidth}{|g|h|}
+ {\bf Required equipment} &
+ \begin{itemize}
+ \item Computer with the operating system of your choice, provided
+ it is supported by Zoom (\url{https://zoom.us} for videoconferencing
+ \item Webcam and microphone (preferably from an audio headset)
+ \item High speed access to the Internet
+ \end{itemize}\\
+ \hline
+
+ {\bf Materials} & Electronic copies of presentations,
+ demo instructions and data.\\
+ \hline
+
+\end{tabularx}}
+\normalsize
+
+\feagendatwocolumn
+{Hardware}
+{
+ 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}
+}
+
+\feagendaonecolumn
+{Demos}
+{
+ The practical demos of this training session use the following
+ hardware peripherals to illustrate the development of Linux device
+ drivers:
+
+ \begin{itemize}
+ \item A Wii Nunchuk, which is connected over the I2C bus to the
+ BeagleBone Black board. Its driver will use the Linux {\em input}
+ subsystem.
+ \item An additional UART, which is memory-mapped, and will use the
+ Linux {\em misc} subsystem.
+ \end{itemize}
+
+ While our explanations will be focused on specifically the Linux
+ subsystems needed to implement these drivers, they will always be
+ generic enough to convey the general design philosophy of the Linux
+ kernel. The information learnt will therefore apply beyond just
+ I2C, input or memory-mapped devices.
+}
+
+
+\section{Half day 1}
+
+\feagendaonecolumn
+{Lecture - Introduction to the Linux kernel}
+{
+ \begin{itemize}
+ \item Kernel features
+ \item Understanding the development process.
+ \item Legal constraints with device drivers.
+ \item Kernel user interface (/proc and /sys)
+ \item User space device drivers
+ \end{itemize}
+}
+\\
+\feagendatwocolumn
+{Lecture - Kernel sources}
+{
+ \begin{itemize}
+ \item Specifics of Linux kernel development
+ \item Coding standards
+ \item Retrieving Linux kernel sources
+ \item Tour of the Linux kernel sources
+ \item Kernel source code browsers: cscope, Kscope, Elixir
+ \end{itemize}
+}
+{Demo - 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}
+}
+
+\feagendaonecolumn
+{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}
+}
+
+\section{Half day 2}
+
+\feagendaonecolumn
+{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}
+}
+
+\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}
+}
+
+\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}
+}
+
+\section{Half day 3}
+
+\feagendaonecolumn
+{Demo - Linux device model for an I2C driver}
+{
+ {\em Using the BeagleBone Black board}
+ \begin{itemize}
+ \item Implement a driver that registers as an I2C driver
+ \item Modify the Device Tree to list an I2C device
+ \item Get the driver called when the I2C device is enumerated at
+ boot time
+ \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}
+}
+{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}
+}
+
+\feagendaonecolumn
+{Demo - Communicate with the Nunchuk over I2C}
+{
+ {\em Using the BeagleBone Black board}
+ \begin{itemize}
+ \item Configure the pin muxing for the I2C bus used to communicate
+ with the Nunchuk
+ \item Extend the I2C driver started in the previous lab to
+ communicate with the Nunchuk via I2C
+ \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}
+}
+
+\feagendaonecolumn
+{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}
+}
+
+\section{Half day 4}
+
+\feagendaonecolumn
+{Lecture - I/O memory and ports}
+{
+ \begin{itemize}
+ \item I/O register and memory range registration.
+ \item I/O register and memory access.
+ \item Read / write memory 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 5}
+
+\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 6}
+
+\feagendatwocolumn
+{Lecture - Driver debugging techniques}
+{
+ \begin{itemize}
+ \item Debugging with printk
+ \item Using Debugfs
+ \item Analyzing a kernel oops
+ \item Using kgdb, a kernel debugger
+ \item Using the Magic SysRq commands
+ \item Debugging through a JTAG probe
+ \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}
+}
+
+\feagendaonecolumn
+{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}
+}
+
+\section{Half day 7}
+
+\feagendaonecolumn
+{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 DMA
+ \item mmap
+ \item Introduction to Git
+ \end{itemize}
+}
+{Demo - If time left}
+{
+ \begin{itemize}
+ \item Get familiar with git by contributing to a real
+ project: the Linux kernel
+ \item Send your patches to the maintainers and
+ mailing lists.
+ \end{itemize}
+}
+
+\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}
+}
+
+\end{document}
+
More information about the training-materials-updates
mailing list