[FE training-materials-updates] agenda/kernel: rework the agenda according to our discussions
Thomas Petazzoni
thomas.petazzoni at free-electrons.com
Tue Aug 27 15:02:04 CEST 2013
Repository : git://git.free-electrons.com/training-materials.git
On branch : kernel-ng
Link : http://git.free-electrons.com/training-materials/commit/?id=372f3506adbec8dcc65a2b064f4a7dea099e151e
>---------------------------------------------------------------
commit 372f3506adbec8dcc65a2b064f4a7dea099e151e
Author: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
Date: Tue Aug 27 15:00:57 2013 +0200
agenda/kernel: rework the agenda according to our discussions
Signed-off-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
>---------------------------------------------------------------
372f3506adbec8dcc65a2b064f4a7dea099e151e
agenda/kernel-agenda.tex | 304 +++++++++++++++++++++-------------------------
1 file changed, 139 insertions(+), 165 deletions(-)
diff --git a/agenda/kernel-agenda.tex b/agenda/kernel-agenda.tex
index 647503f..82975e0 100644
--- a/agenda/kernel-agenda.tex
+++ b/agenda/kernel-agenda.tex
@@ -178,23 +178,14 @@ Embedded Linux kernel and driver development training\\
}
\section{Day 1 - Afternoon}
-\feagendaonecolumn
+\feagendatwocolumn
{Lecture - Configuring, compiling and booting the Linux kernel}
{
\begin{itemize}
\item Kernel configuration.
- \item Native compiling. Generated files.
+ \item Native and cross-compilation. Generated files.
\item Booting the kernel. Kernel booting parameters.
- \end{itemize}
-}
-\\
-\feagendatwocolumn
-{Lecture - NFS booting and cross-compiling}
-{
- \begin{itemize}
- \item Booting on a directory on your GNU/Linux workstation, through
- NFS.
- \item Kernel cross-compiling
+ \item Booting the kernel using NFS.
\end{itemize}
}
{Lab - Kernel configuration, cross-compiling and booting on NFS}
@@ -216,7 +207,6 @@ Embedded Linux kernel and driver development training\\
\item A simple module
\item Programming constraints
\item Loading, unloading modules
- \item Module parameters
\item Module dependencies
\item Adding sources to the kernel tree
\item Generating patches to share them with others
@@ -224,16 +214,17 @@ Embedded Linux kernel and driver development training\\
}
{Lab - Writing modules}
{
- {\em Continued from the previous lab}
+ {\em Using the BeagleBoneBlack}
\begin{itemize}
- \item Write a kernel module with several capabilities, including
- module parameters.
+ \item Write a kernel module with several capabilities.
\item Access kernel internals from your module.
\item Setup the environment to compile it
\end{itemize}
}
-\\
-\feagendaonecolumn
+
+\section{Day 2 - Afternoon}
+
+\feagendatwocolumn
{Lecture - Memory management}
{
\begin{itemize}
@@ -244,8 +235,97 @@ Embedded Linux kernel and driver development training\\
\item Allocating with \code{vmalloc()}.
\end{itemize}
}
+{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 userspace: \code{/sys}
+ \end{itemize}
+}
-\section{Day 2 - Afternoon}
+\feagendaonecolumn
+{Lab - Linux device model for an I2C driver}
+{
+ {\em Using the BeagleBoneBlack}
+ \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}
+}
+
+\section{Day 3 - Morning}
+
+\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
+{Lab - Communicate with the Nunchuk over I2C}
+{
+ {\em Using the BeagleBoneBlack}
+ \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{Day 3 - Afternoon}
+
+\feagendaonecolumn
+{Lecture - Kernel frameworks}
+{
+ \begin{itemize}
+ \item Block vs. character devices
+ \item Interaction of userspace applications with the kernel
+ \item Details on character devices, \code{file_operations}, \code{ioctl()}, etc.
+ \item Exchanging data to/from userspace
+ \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 userspace application
+ \item Userspace API offered by the {\em input} subsystem
+ \end{itemize}
+}
+{Lab - Expose the Nunchuk functionality to userspace}
+{
+ {\em Using the BeagleBoneBlack}
+ \begin{itemize}
+ \item Extend the Nunchuk driver to expose the Nunchuk features to
+ userspace applications, as a {\em input} device.
+ \item Test the operation of the Nunchuk using sample userspace
+ applications
+ \end{itemize}
+}
+
+\section{Day 4 - Morning}
\feagendatwocolumn
{Lecture - I/O memory and ports}
@@ -256,44 +336,43 @@ Embedded Linux kernel and driver development training\\
\item Read / write memory barriers.
\end{itemize}
}
-{Lab - I/O memory and ports}
+{Lab - Minimal platform driver and access to I/O memory}
{
+ {\em Using the BeagleBoneBlack}
\begin{itemize}
- \item Make a remote connection to your board through ssh.
- \item Access the system console through the network.
+ \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 - Character drivers}
+{Lecture - The misc kernel subsystem}
{
\begin{itemize}
- \item Device numbers
- \item Getting free device numbers
- \item Implementing file operations: read, write, open, close,
- ioctl...
- \item Exchanging data between kernelspace and userspace
- \item Character driver registration
+ \item What the {\em misc} kernel subsystem is useful for
+ \item API of the {\em misc} kernel subsystem, both the kernel side
+ and userspace side
\end{itemize}
}
-{Lab - Character drivers}
+{Lab - Output-only serial port driver}
{
{\em Using the BeagleBoneBlack}
\begin{itemize}
- \item Writing a simple character driver, to write data to the serial port.
- \item On your workstation, checking that transmitted data is received correctly.
- \item Exchanging data between userspace and kernel space.
- \item Practicing with the character device driver API.
- \item Using kernel standard error codes.
+ \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 userspace
\end{itemize}
}
-\section{Day 3 - Morning}
+\section{Day 4 - Afternoon}
-\feagendaonecolumn
+\feagendatwocolumn
{Lecture - Processes, scheduling, sleeping and interrupts}
{
\begin{itemize}
@@ -303,8 +382,6 @@ Embedded Linux kernel and driver development training\\
registration and programming, scheduling deferred work.
\end{itemize}
}
-\\
-\feagendaonecolumn
{Lab - Sleeping and handling interrupts in a device driver}
{
{\em Using the BeagleBoneBlack}
@@ -317,8 +394,6 @@ Embedded Linux kernel and driver development training\\
\end{itemize}
}
-\section{Day 3 - Afternoon}
-
\feagendatwocolumn
{Lecture - Locking}
{
@@ -333,168 +408,67 @@ Embedded Linux kernel and driver development training\\
}
{Lab - Locking}
{
- {\em Continued from the previous lab}
+ {\em Using the BeagleBoneBlack}
\begin{itemize}
\item Observe problems due to concurrent accesses to the device.
\item Add locking to the driver to fix these issues.
\end{itemize}
}
-\\
+
+\section{Day 5 - Morning}
+
\feagendatwocolumn
{Lecture - Driver debugging techniques}
{
\begin{itemize}
\item Debugging with printk
- \item Proc and debugfs entries
+ \item Debugfs entries
\item Analyzing a kernel oops
\item Using kgdb, a kernel debugger
\item Using the Magic SysRq commands
\item Debugging through a JTAG probe
- \item SystemTap and demonstration
\end{itemize}
}
{Lab - Investigating kernel faults}
{
- {\em Using the BeagleBoneBlack}
+ {\em Using the BeagleBoneBlack}
\begin{itemize}
\item Studying a broken driver.
\item Analyzing a kernel fault and locating the problem in the
source code.
\end{itemize}
}
-\section{Day 4 - Morning}
-\feagendatwocolumn
-{Lecture - mmap}
-{
- \begin{itemize}
- \item Process virtual memory areas
- \item Maximizing performance with mmap, allowing applications to
- access the hardware directly.
- \item Implementing mmap in drivers
- \end{itemize}
-}
-{Lecture - The DMA API}
-{
- \begin{itemize}
- \item The Linux kernel DMA API.
- \item Using it in device drivers.
- \end{itemize}
-}
-\\
-\feagendaonecolumn
-{Lecture - Kernel architecture for device drivers}
-{
- \begin{itemize}
- \item Understand how the kernel is designed to support device
- drivers
- \item The kernel device driver ``framework'' for common types of
- devices
- \item The device model
- \item Binding devices and drivers
- \item Platform devices
- \item Interface in userspace: \code{/sys}
- \end{itemize}
-}
-
-\section{Day 4 - Afternoon}
-
-\feagendatwocolumn
-{Lecture - Serial drivers}
-{
- \begin{itemize}
- \item As an illustration of one particular kernel framework, details
- on the serial driver framework.
- \end{itemize}
-}
-{Lab - Implement a serial driver}
-{
- {\em Using the BeagleBoneBlack}
- \begin{itemize}
- \item Implement parts of a serial driver through the kernel's serial
- framework.
- \end{itemize}
-}
+\section{Day 5 - Afternoon}
-\section{Day 5 - Morning}
-\feagendaonecolumn
-{Lecture - Kernel boot-up details}
-{
- \begin{itemize}
- \item Detailed description of the kernel boot-up process, from
- execution by the bootloader to the execution of the first
- userspace program.
- \item Initcalls: how to register your own initialization routines.
- \end{itemize}
-}
-\\
\feagendatwocolumn
-{Lecture - Porting the Linux kernel}
+{Lecture - ARM board support and SoC support}
{
\begin{itemize}
- \item Porting the Linux kernel. Creating board dependent code.
- \item Detail study of code for an ARM board.
+ \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 - Lecture - Introduction to power management}
+{Lecture - Power management}
{
\begin{itemize}
- \item Supporting frequency scaling
- \item CPU and board specific power management.
- \item Power management in device drivers.
- \item Control from user space.
- \item Saving power in the idle loop.
- \item Voltage and current regulator framework
- \item Studying power management implementations in the Linux kernel.
- \end{itemize}
-}
-\\
-\feagendaonecolumn
-{Lab - Power management}
-{
- {\em Using the Linux workstation and if possible, the BeagleBoneBlack}
- \begin{itemize}
- \item Practicing with the standard power management interfaces:
- suspend / resume and cpu frequency control.
- \item Identifying top sources of power consumption with
- \code{PowerTop}.
+ \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}
}
-\section{Day 5 - Afternoon}
\feagendaonecolumn
-{Lecture - Working with the community}
-{
- \begin{itemize}
- \item How to get help from the community.
- \item Report bugs.
- \item Generate and send patches.
- \item Useful resources about the kernel
- \end{itemize}
-}
-\\
-\feagendatwocolumn
-{Lecture - Managing kernel sources with git}
-{
- {\em Very useful to manage your changes to the Linux kernel
- (drivers, board support code), staying in sync with mainline
- updates.}
- \begin{itemize}
- \item Cloning an existing git tree
- \item Creating your own branch with your own changes.
- \item Generating patches against the reference tree.
- \item Review of useful git commands.
- \item Understanding the work flow used by kernel developers, through
- the study of typical scenarios.
- \end{itemize}
-}
-{Lab - Using git}
+{Lecture - The Linux kernel development process}
{
\begin{itemize}
- \item Create your own git branch from the mainline tree.
- \item Get changes from trees and generate your own patchset.
- \item Keep your branch updated with the changes in your reference
- tree.
+ \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.
\end{itemize}
}
More information about the training-materials-updates
mailing list