[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