summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Traut <manut@linutronix.de>2011-07-18 14:04:20 +0200
committerManuel Traut <manut@linutronix.de>2011-07-18 14:04:20 +0200
commit5cd3321d946c14cd99d6a23cffa09a8316aadceb (patch)
treeee42f905f7e62edd61103d4965a0aa037d861ffc
parentf9f7f47856be59b1e446a846d4b0306c39a6186c (diff)
parenta794d7231410f16747e44b690fcc03a96274894c (diff)
Merge ../../../vorlesung into vorlesung
-rw-r--r--Makefile58
-rw-r--r--application-devel/cross-devel/pres_cross-devel_de-userspace.tex64
-rw-r--r--application-devel/devel-environment/pres_devel-environment_de_short.tex70
-rw-r--r--basics/Makefile6
-rw-r--r--basics/cpu-arch/Makefile9
-rw-r--r--basics/cpu-arch/hints_cpu-arch_de.tex15
-rw-r--r--basics/cpu-arch/pres_cpu-arch.tex332
-rw-r--r--basics/section.tex3
-rw-r--r--confighandout.tex13
-rw-r--r--configmasterpres.tex4
-rw-r--r--configpres.tex4
-rw-r--r--flash-memory/mtd/pres_mtd_de.tex40
-rw-r--r--flash-memory/mtd/pres_mtd_en.tex75
-rw-r--r--flash-memory/ubi/handout_ubi_de.tex2
-rw-r--r--flash-memory/ubi/pres_ubi_de.tex24
-rw-r--r--flash-memory/ubi/pres_ubi_en.tex52
-rw-r--r--images/alan.pngbin0 -> 99516 bytes
-rw-r--r--images/caches.diabin0 -> 2379 bytes
-rw-r--r--images/caches.pngbin0 -> 5870 bytes
-rw-r--r--images/fcse.diabin0 -> 1175 bytes
-rw-r--r--images/fcse.pngbin0 -> 4187 bytes
-rw-r--r--images/greg.jpgbin0 -> 127796 bytes
-rw-r--r--images/hch.jpgbin0 -> 204302 bytes
-rw-r--r--images/linus7.jpgbin0 -> 182495 bytes
-rw-r--r--images/linux-found-changes-hour.pngbin0 -> 14459 bytes
-rw-r--r--images/linux-found-changes-version.pngbin0 -> 14466 bytes
-rw-r--r--images/linux-found-devel-cycle.pngbin0 -> 57924 bytes
-rw-r--r--images/morton.jpgbin0 -> 31468 bytes
-rw-r--r--images/tglx.jpgbin0 -> 208605 bytes
-rw-r--r--images/ubi-big-picture.diabin0 -> 2203 bytes
-rw-r--r--images/ubi-big-picture.pngbin0 -> 23701 bytes
-rw-r--r--kernel-devel/kernel-basics/pres_kernel-basics_de.tex263
-rw-r--r--kernel-devel/kernel-best-practices/handout_kernel-best-practices_en.tex498
-rw-r--r--linux-basics/filesystems/handout_filesystems_en.tex16
-rw-r--r--linux-basics/fromscratch_vs_debian/Makefile9
-rwxr-xr-xlinux-basics/fromscratch_vs_debian/deb.sh36
-rw-r--r--linux-basics/fromscratch_vs_debian/pres_fromscatch_vs_debian_en.tex55
-rw-r--r--linux-basics/what-is-linux/handout_what-is-linux_de.tex21
-rw-r--r--linux-basics/what-is-linux/pres_what-is-linux_de.tex2
-rw-r--r--tailhandout.tex1
40 files changed, 1518 insertions, 154 deletions
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 1ef20b1..0000000
--- a/Makefile
+++ /dev/null
@@ -1,58 +0,0 @@
-SUBDIRS = application-devel flash-memory frameworks kernel-devel linux-basics protocols realtime
-
-default:
- make all
-
-all clean::
- for dir in $(SUBDIRS) ; do \
- (cd $$dir && make $@); \
- done
- rm -rf pdf
- rm -f *.aux
- rm -f *.log
- rm -f *.nav
- rm -f *.toc
- rm -f *.pdf
- rm -f *.snm
- rm -f *.bbl
- rm -f *.blg
- rm -f *.out
- rm -f *.vrb
-pres::
- mv configpres.tex _configpres.tex
- touch configpres.tex
- mv tailpres.tex _tailpres.tex
- touch tailpres.tex
- pdflatex pres_master.tex
- bibtex pres_master.aux
- pdflatex pres_master.tex
- pdflatex pres_master.tex
- mv _configpres.tex configpres.tex
- mv _tailpres.tex tailpres.tex
- rm configpres.tex tailpres.tex
-book::
- mv confighandout.tex _confighandout.tex
- touch confighandout.tex
- mv tailhandout.tex _tailhandout.tex
- touch tailhandout.tex
- TEXINPUTS=`pwd`/wise:.:$(TEXINPUTS) pdflatex handout_master.tex
- bibtex handout_master.tex
- TEXINPUTS=`pwd`/wise:.:$(TEXINPUTS) pdflatex handout_master.tex
- TEXINPUTS=`pwd`/wise:.:$(TEXINPUTS) pdflatex handout_master.tex
- rm confighandout.tailhandout.tex
- mv _confighandout.tex confighandout.tex
- mv _tailhandout.tex tailhandout.tex
-pdf::
- rm -rf pdf
- mkdir -p pdf/pres
- mkdir -p pdf/handout
- mkdir -p pdf/hints
- find . -name pres_*.pdf | xargs cp -t pdf/pres
- find . -name hints_*.pdf | xargs cp -t pdf/hints
- find . -name handout_*.pdf | xargs cp -t pdf/handout
- cd pdf/pres && \
- pdfsam-console -o `pwd`/../pres.pdf -d `pwd` concat
- cd pdf/hints && \
- pdfsam-console -o `pwd`/../hints.pdf -d `pwd` concat
- cd pdf/handout && \
- pdfsam-console -o `pwd`/../handout.pdf -d `pwd` concat
diff --git a/application-devel/cross-devel/pres_cross-devel_de-userspace.tex b/application-devel/cross-devel/pres_cross-devel_de-userspace.tex
new file mode 100644
index 0000000..6ab48d2
--- /dev/null
+++ b/application-devel/cross-devel/pres_cross-devel_de-userspace.tex
@@ -0,0 +1,64 @@
+\input{configpres}
+
+\subsection{ARM Cross Development}
+
+\title{\lq ARM Cross Development\rq}
+\maketitle
+
+\begin{frame}
+\frametitle{Übersicht}
+\tableofcontents
+\end{frame}
+
+\subsubsection{Cross Übersetzen}
+\begin{frame}[containsverbatim]
+\frametitle{Cross ''Hello world''}
+\begin{lstlisting}[language=c]
+/* cross_hello.c */
+#include <stdio.h>
+
+int main(void)
+{
+ printf("Hello cross compiling world\n");
+ return 0;
+}
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[containsverbatim]
+\frametitle{Übersetzen für das Zielsystem}
+\begin{lstlisting}[language=bash]
+# Uebersetzen
+$ arm-none-linux-gnueabi-gcc -static \
+-o cross_hello cross_hello.c
+\end{lstlisting}
+\begin{lstlisting}[language=bash]
+# Executable ueberpruefen
+$ file cross_hello
+cross_hello: ELF 32-bit LSB executable, ARM,
+version 1 (SYSV), dynamically
+linked (uses shared libs),
+for GNU/Linux 2.6.14, not stripped
+\end{lstlisting}
+\end{frame}
+
+\subsubsection{Testing auf dem Host}
+
+\begin{frame}
+\frametitle{Qemu als Werkzeug zur Cross Entwicklung}
+\begin{alertblock}{Was ist Qemu?}
+Qemu ist eine sehr performante Emulations- und Virtualisierungsumgebung für alle
+gängigen CPU Architekturen.
+\end{alertblock}
+\end{frame}
+
+\begin{frame}[containsverbatim]
+\frametitle{Testen eines Executables mit der Qemu user emulation}
+\begin{lstlisting}[language=bash]
+$ ./cross_hello
+ : ./cross_hello: cannot execute binary file
+$ qemu-arm ./cross_hello
+Hello cross compiling world
+\end{lstlisting}
+\end{frame}
+\input{tailpres}
diff --git a/application-devel/devel-environment/pres_devel-environment_de_short.tex b/application-devel/devel-environment/pres_devel-environment_de_short.tex
new file mode 100644
index 0000000..1feb253
--- /dev/null
+++ b/application-devel/devel-environment/pres_devel-environment_de_short.tex
@@ -0,0 +1,70 @@
+\input{configpres}
+
+\subsection{Entwicklungsumgebungen}
+\title{Entwicklungsumgebungen}
+\maketitle
+
+\subsubsection{Grundlagen}
+\begin{frame}
+\frametitle{Bestandteile}
+Eine Entwicklungsumgebung besteht mindestens aus:
+\begin{itemize}
+\item Editor
+\item Buildsystem
+\end{itemize}
+\end{frame}
+
+\subsubsection{Editoren}
+
+\begin{frame}
+\frametitle{beliebte Editoren}
+\begin{itemize}
+\item vim
+\item emacs
+\item kate
+\item \dots
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{vim Editor}
+\begin{figure}[h]
+\centering
+\includegraphics[width=8cm]{images/vim.png}
+\end{figure}
+\end{frame}
+
+\begin{frame}
+\frametitle{emacs Editor}
+\begin{figure}[h]
+\centering
+\includegraphics[width=8cm]{images/emacs.png}
+\end{figure}
+\end{frame}
+
+\subsubsection{Tools}
+
+\begin{frame}
+\frametitle{praktische, kleine Helfer}
+\begin{itemize}
+\item ctags
+\item screen
+\item ssh
+\item mc
+\item quilt
+\end{itemize}
+\end{frame}
+
+\subsubsection{Buildsysteme}
+
+\begin{frame}
+\frametitle{h\"aufig eingesetzte Buildsysteme}
+\begin{itemize}
+\item KConfig (Linux Kernel)
+\item Autotools / GNU Build System
+\item CMake
+\item Ant
+\item \dots
+\end{itemize}
+\end{frame}
+\input{tailpres}
diff --git a/basics/Makefile b/basics/Makefile
new file mode 100644
index 0000000..c0c47ad
--- /dev/null
+++ b/basics/Makefile
@@ -0,0 +1,6 @@
+SUBDIRS = `ls -1 | grep -v *.tex | grep -v Makefile`
+
+all clean::
+ for dir in $(SUBDIRS) ; do \
+ (cd $$dir && make $@); \
+ done
diff --git a/basics/cpu-arch/Makefile b/basics/cpu-arch/Makefile
new file mode 100644
index 0000000..d641258
--- /dev/null
+++ b/basics/cpu-arch/Makefile
@@ -0,0 +1,9 @@
+all:
+ for pdf in `ls -1 *.tex` ; do \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ done
+
+clean:
+ rm -f *.aux *.log *.pdf *.log *.snm *.toc *.vrb *.nav *.out
+
diff --git a/basics/cpu-arch/hints_cpu-arch_de.tex b/basics/cpu-arch/hints_cpu-arch_de.tex
new file mode 100644
index 0000000..62ddc81
--- /dev/null
+++ b/basics/cpu-arch/hints_cpu-arch_de.tex
@@ -0,0 +1,15 @@
+\documentclass{article}
+\usepackage{german}
+\usepackage[utf8]{inputenc}
+
+\begin{document}
+
+\section{CPU Architekturen}
+
+\subsection{Lernziele}
+\begin{itemize}
+\item Was bedeutet 8, 16, 32, \dots bit ?
+\item Bedeutung MMU / keine MMU und Linux?
+\item ARM, PowerPC / CELL, x86
+\end{itemize}
+\end{document}
diff --git a/basics/cpu-arch/pres_cpu-arch.tex b/basics/cpu-arch/pres_cpu-arch.tex
new file mode 100644
index 0000000..141c194
--- /dev/null
+++ b/basics/cpu-arch/pres_cpu-arch.tex
@@ -0,0 +1,332 @@
+\input{configpres}
+
+\subsection{Prozessor Architekturen}
+
+\title{\lq Prozessor Architekturen\rq}
+\maketitle
+
+\begin{frame}
+\frametitle{Übersicht}
+\tableofcontents
+\end{frame}
+
+\subsubsection{Prozessoren}
+\begin{frame}
+\frametitle{Aufbau}
+Register - Rechenwerk - Befehlsdekoder - Bus - Cache (optional)
+
+\begin{description}
+\item[Register] Konfiguration, Zwischenspeicher, Operanden, Stack, I/O
+\item[Rechenwerk] mind. eine ALU (Arithmetic Logical Unit: ADD, NOT, AND, \dots)
+\end{description}
+\end{frame}
+
+\begin{frame}
+\frametitle{Aufbau}
+Register - Rechenwerk - Befehlsdekoder - Bus - Cache (optional)
+
+\begin{description}
+\item[Befehlsdekoder]
+ \begin{itemize}
+ \item FETCH - Befehl (OPCODE) aus RAM / ROM laden
+ (Prefetch - laden mehrere Befehle in ein Prefetch Register)
+ \item DECODE - OPCODE in ALU-Schaltinstruktionen wandeln
+ \item FETCH - Operanden (OPERANDS) aus RAM / ROM laden
+ \item EXECUTE
+ \item WRITE BACK - schreiben des Ergebnisses in RAM / ROM (OPCOUNTER++)
+ \end{itemize}
+\item[Bus] Adressbus (zentraler Adressdecoder -> Chip Select), Datenbus
+\end{description}
+\end{frame}
+
+\begin{frame}
+\frametitle{Aufbau}
+Register - Rechenwerk - Befehlsdekoder - Bus - Cache (optional)
+
+\begin{description}
+\item[Cache] beinhaltet zuletzt verwendete Daten
+ \begin{itemize}
+ \item L1 im Kern / wenige KB gross / am Schnellsten abrufbar
+ \item L2 nicht im Kern / wenige MB gross
+ \item L3 von allen Kernen geteilt / einige MB gross
+ \end{itemize}
+\end{description}
+\end{frame}
+
+\subsubsection{OPCODE vs Assembler}
+\begin{frame}[containsverbatim]
+\frametitle{OPCODE vs Assembler}
+\begin{description}
+\item[OPCODES] sind immer prozessorspezifisch
+\item[OPCODE] eindeutige Nummer eines Befehls
+\item[Befehlssatz] Summe aller OPCODES eines Prozessors
+\item[Mnemonic] lesbare Abk. eines OPCODES -> Assemblerbefehl
+\end{description}
+
+Beispiel 8086:
+\begin{verbatim}
+OPCODE: 0130
+Mnemonic: INC
+SI (Sourceindexregister) wird um den Wert eins inkrementiert.
+\end{verbatim}
+\end{frame}
+
+\begin{frame}
+\frametitle{Aufgabe}
+\begin{itemize}
+\item Schreiben Sie ein sehr einfaches C Programm
+\item Disassemblen Sie das Programm
+\item Betrachten Sie das Programm in einem HEX Editor und versuchen Sie die OPCODES zu finden
+\end{itemize}
+\end{frame}
+
+\begin{frame}[containsverbatim]
+\frametitle{Disassemble}
+\begin{verbatim}
+simple.c:
+int main(int argc, char **argv)
+{
+ return argc++;
+}
+
+$ gcc -o simple.c
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[containsverbatim]
+\frametitle{Disassemble}
+\begin{verbatim}
+$ objdump -d a.out
+
+00000000004004b4 <main>:
+ 4004b4: 55 push %rbp
+ 4004b5: 48 89 e5 mov %rsp,%rbp
+ 4004b8: 89 7d fc mov %edi,-0x4(%rbp)
+ 4004bb: 48 89 75 f0 mov %rsi,-0x10(%rbp)
+ 4004bf: 8b 45 fc mov -0x4(%rbp),%eax
+ 4004c2: 83 45 fc 01 addl $0x1,-0x4(%rbp)
+ 4004c6: c9 leaveq
+ 4004c7: c3 retq
+ 4004c8: 90 nop
+ 4004c9: 90 nop
+ 4004ca: 90 nop
+ 4004cb: 90 nop
+ 4004cc: 90 nop
+ 4004cd: 90 nop
+ 4004ce: 90 nop
+ 4004cf: 90 nop
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[containsverbatim]
+\frametitle{Disassemble}
+\begin{verbatim}
+$ hexdump a.out | less
+
+00004b0 c3c9 9090 4855 e589 7d89 48fc 7589 8bf0
+00004c0 fc45 4583 01fc c3c9 9090 9090 9090 9090
+00004d0 c3f3 0ceb 9090 9090 9090 9090 9090 9090
+00004e0 8948 246c 4cd8 6489 e024 8d48 332d 2009
+00004f0 4c00 258d 092c 0020 894c 246c 4ce8 7489
+0000500 f024 894c 247c 48f8 5c89 d024 8348 38ec
+\end{verbatim}
+\end{frame}
+
+\subsubsection{8, 16, 32, \dots bit?}
+\begin{frame}
+\frametitle{n-Bit-Architektur}
+Pro Takt werden max. n-Bit Daten verarbeitet.
+
+Hieraus leitet sich i.d.R. auch die Breite der internen Register, sowie des
+Adress- und des Datenbusses ab.
+
+Vorteil: Adressraum / Datenbreite
+Nachteil: Speicherbedarf Pointer
+\end{frame}
+
+\subsubsection{Memory Management Unit}
+
+\begin{frame}
+\frametitle{Memory Management Unit (MMU)}
+\begin{itemize}
+\item Prozess sieht zusammenh\"angenden, konstanten, virtuellen Speicher
+\item Kernel programmiert den TLB (Translation Look-aside Buffer) der MMU
+\item Speicherzugriff auf virtuelle Adresse wird von der MMU in tats\"achliche,
+ physikalische Adresse \"ubersetzt
+\end{itemize}
+\end{frame}
+
+\subsubsection{ARM, PowerPC / CELL, x86}
+
+\begin{frame}
+\frametitle{ARM - Advanced RISC Machines Ltd.}
+\begin{itemize}
+\item erstellt CPU Design
+\item ARM Architektur:
+\begin{itemize}
+\item Handy, Smartphone, Nintendo DS, iPad, \dots
+\item RISC - schlanker, effizienter Befehlssatz
+\item LE / BE umschaltbar
+\end{itemize}
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{ARM: ARM9}
+\begin{itemize}
+\item 32-bit RISC CPU design
+\item ARM9T (based on ARMv4T)
+\item ARM9E (based on ARMv5TE, longer pipelines, enhanced instruction set)
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Xscale}
+\begin{itemize}
+\item Xscale is Marvell's implementation of the ARMv5 architecture
+\item The Xscale family consists of five different families:
+\begin{itemize}
+\item IXP (network processors)
+\item IXC (control plane processors)
+\item IOP (i/o processors)
+\item PXA (application processors)
+\item CE (consumer electronics processors)
+\end{itemize}
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{ARM: ARM9 - Caches}
+\begin{itemize}
+\item V irtually I ndexed, V irtually T agged (VIVT)
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{ARM: Caches}
+\begin{figure}[h]
+\centering
+\includegraphics[width=11cm]{images/caches.png}
+\label{img:caches}
+\end{figure}
+\end{frame}
+
+\begin{frame}
+\frametitle{ARM: ARM9 - Caches: Latency drawbacks}
+\begin{itemize}
+\item BUT: On Linux each process has its own virtual address space.
+\pause
+\item VIVT leads to a more frequent cache flushing
+\pause
+\item The cost of the cache flushing is about 1k - 18k CPU cycles
+\pause
+\item ''indirect cost'' up to 50k CPU cycles\\
+(200us on a 250MHz CPU!!)
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{ARM: ARM9 - Fast Context Switching Extension}
+\begin{figure}[h]
+\centering
+\includegraphics[width=11cm]{images/fcse.png}
+\label{img:fcse}
+\end{figure}
+\pause
+\begin{itemize}
+\item The first 32MB of the address space are augmented with the contents of the 7 bit
+PID register.
+\pause
+\item This leads to 128 x 32MB address spaces
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{ARM: ARM11}
+\begin{itemize}
+\item V irtually I ndexed, P hysically T agged caches (VIPT)
+\item High performance memory system
+\item Designed to run at high CPU frequencies
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{ARM: Cortex - The new generation of ARM CPUs}
+Splitted into three families:
+\begin{itemize}
+\item Cortex A: Application (variable caches, MMU / MPU)
+\item Cortex M: Microcontroller (no cache, MPU optional)
+\item Cortex R: Realtime (variable cache, MPU optional)
+\end{itemize}
+\end{frame}
+
+\subsubsection{PowerPC}
+\begin{frame}
+\frametitle{PowerPC}
+\begin{itemize}
+\item 32 und 64 bit Versionen
+\item Big Endian (einige CPUs umschaltbar)
+\item Gleitkommazahlen: double, float
+\item dual cores und 2 CPU Betrieb möglich
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{PowerPC: Einsatzgebiete}
+\begin{itemize}
+\item embedded Systeme
+\item Konsolen: GameCube, Wii, XBox 360
+\item frühere Apple Systeme (G4, G5)
+\item IBM System p: 1-64 Single/Quad Core CPUs (i5 OS, AIX, Linux)
+\item IBM Blades
+\end{itemize}
+\end{frame}
+
+\subsubsection{CELL}
+\begin{frame}
+\frametitle{CELL}
+\begin{itemize}
+\item 64-bit PowerPC Kern:
+\begin{itemize}
+\item 2 Threads gleichzeitig
+\item 512kB L2 Cache
+\end{itemize}
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{CELL}
+\begin{itemize}
+\item 8 Synergistic Processing Units (SPU):
+\begin{itemize}
+\item 128 128 Bit Register
+\item Memory Flow Controller (DMA in Hauptspeicher, andere SPU)
+\item 256kB Speicher
+\end{itemize}
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{CELL}
+\begin{itemize}
+\item Element Interconnect Bus (EIB):
+\begin{itemize}
+\item 96 bytes / Takt
+\item 8 byte Zugriff je SPU / PPE
+\end{itemize}
+\item Einsatz: IBM Blades, PS3 (3.2 GHz, 7 SPEs), \dots
+\end{itemize}
+\end{frame}
+
+\subsubsection{Voraussetzungen f\"ur Linux}
+\begin{frame}
+\frametitle{Voraussetzungen f\"ur Linux}
+\begin{description}
+\item[Bit:] 32
+\item[MMU:] ja / ucLinux nein
+\item[ARCH:] gcc sollte verfügbar sein
+\item[RAM:] Größenordnung 2MB / Übung
+\end{description}
+\end{frame}
+
+\input{tailpres}
diff --git a/basics/section.tex b/basics/section.tex
new file mode 100644
index 0000000..547ad23
--- /dev/null
+++ b/basics/section.tex
@@ -0,0 +1,3 @@
+\section{verschiedene Grundlagen}
+
+%In diesem Kapitel werden Grundlagen behandelt, welche nicht direkt mit Linux zu tun haben, aber f\"ur ein allgemeines Verst\"andnis notwendig sind.
diff --git a/confighandout.tex b/confighandout.tex
index 963125a..e69de29 100644
--- a/confighandout.tex
+++ b/confighandout.tex
@@ -1,13 +0,0 @@
-\documentclass{lxarticle}
-\usepackage{german}
-\usepackage[utf8]{inputenc}
-\usepackage{lxheaders}
-\usepackage{lxextras}
-\lstset{keywordstyle=\color{blue}}
-
-\begin{document}
-
-% disables chapter, section and subsection numbering
-\setcounter{secnumdepth}{-1}
-
-\input{section}
diff --git a/configmasterpres.tex b/configmasterpres.tex
index 2fd1ddf..3491653 100644
--- a/configmasterpres.tex
+++ b/configmasterpres.tex
@@ -1,7 +1,7 @@
\documentclass{beamer}
\mode<presentation>
{
- \usetheme{Dresden}
+ \usetheme{default}
}
\usepackage{german}
\usepackage[utf8]{inputenc}
@@ -11,7 +11,7 @@
\usepackage{graphicx}
\usepackage{lxextras}
-\institute{Linutronix GmbH}
+\institute{Hochschule Ravensburg-Weingarten}
\definecolor{lbcolor}{RGB}{255,210,150}
\lstset{
language=C++,
diff --git a/configpres.tex b/configpres.tex
index c8f0c5d..6417db2 100644
--- a/configpres.tex
+++ b/configpres.tex
@@ -1,7 +1,7 @@
\documentclass{beamer}
\mode<presentation>
{
- \usetheme{linutronix}
+ \usetheme{Dresden}
}
\usepackage{german}
\usepackage[utf8]{inputenc}
@@ -11,7 +11,7 @@
\usepackage{graphicx}
\usepackage{lxextras}
-\institute{Linutronix GmbH}
+\author{Manuel Traut}
\definecolor{lbcolor}{RGB}{255,210,150}
\lstset{
language=C++,
diff --git a/flash-memory/mtd/pres_mtd_de.tex b/flash-memory/mtd/pres_mtd_de.tex
deleted file mode 100644
index 80ffff5..0000000
--- a/flash-memory/mtd/pres_mtd_de.tex
+++ /dev/null
@@ -1,40 +0,0 @@
-\input{configpres}
-
-\subsection{Memory Technology Devices (MTD)}
-
-\title{\lq Memory Technology Devices (MTD)\rq}
-\maketitle
-
-\begin{frame}
- \tableofcontents
-\end{frame}
-
-\subsubsection{Einführung}
-\begin{frame}
-\frametitle{Memory Technology Devices}
-\begin{itemize}
-\item NAND
-\pause
-\item NOR
-\pause
-\item Schnittstellen: Parallel, SPI...
-\end{itemize}
-
-\end{frame}
-
-\subsubsection{MTD Kernelsubsystem}
-\begin{frame}
-\frametitle{MTD subsystem im Kernel}
-\begin{itemize}
-\item Einheitliche Schnittstelle zum Userspace
-\pause
-\item Partitionierung
-\pause
-\item Vermeidung von Code-Duplizierung in den Treibern
-\pause
-\item Vereinheitlichung der Treiber
-\end{itemize}
-
-\end{frame}
-
-\input{tailpres}
diff --git a/flash-memory/mtd/pres_mtd_en.tex b/flash-memory/mtd/pres_mtd_en.tex
new file mode 100644
index 0000000..398a591
--- /dev/null
+++ b/flash-memory/mtd/pres_mtd_en.tex
@@ -0,0 +1,75 @@
+\input{configpres}
+
+\subsection{Memory Technology Devices (MTD)}
+
+\title{\lq Memory Technology Devices (MTD)\rq}
+\maketitle
+
+\begin{frame}
+ \tableofcontents
+\end{frame}
+
+\subsubsection{Overview}
+\begin{frame}
+\frametitle{Overview}
+\begin{itemize}
+\item designed for flash devices (NAND, NOR, DataFlash, OneNAND, \dots)
+\pause
+\item software- and hardware-ECC support
+\pause
+\item takes care on deletion of specified eraseblocksizes
+\pause
+\item wiring of chip is not relevant (Localbus, SPI, \dots)
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{None MTD Flash Devices}
+\begin{itemize}
+\item USB sticks, CompactFlash Cards, SD Cards, SSD\dots
+\pause
+\item devices have NAND flash, but own flashcontroller
+\pause
+\item kernel handles them as block device, like a regular HDD
+\pause
+\item flash properties, like eraseblocksize, are hidden by flashcontroller
+\end{itemize}
+\end{frame}
+
+\subsubsection{MTD Kernelsubsystem}
+\begin{frame}
+\frametitle{responsibility of the MTD subsystem}
+\begin{itemize}
+\item definition of a userspace interface
+\pause
+\item partitioning of mtd devices (mtd0, mtd1, \dots)
+\pause
+\item hides flash internals from user
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{NOT part of the MTD subsystem}
+\begin{itemize}
+\item filesystems
+\pause
+\item wear-leveling
+\pause
+\item protection of writing to bad blocks
+\pause
+\item data protection for writes during power loss
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{mtdblock}
+\begin{itemize}
+\item enable use of common filesystem on flash devices
+\pause
+\item bad idea: no wear-leveling, bad performance, \dots
+\pause
+\item obsoleted by UBI
+\end{itemize}
+\end{frame}
+
+\input{tailpres}
diff --git a/flash-memory/ubi/handout_ubi_de.tex b/flash-memory/ubi/handout_ubi_de.tex
index 0f4b4cb..d7d03fb 100644
--- a/flash-memory/ubi/handout_ubi_de.tex
+++ b/flash-memory/ubi/handout_ubi_de.tex
@@ -83,6 +83,8 @@ Heute gibt es ubifs, das direkt auf UBI aufsetzt und folglich kein
mtd-Device benötigt. Da ubifs ohnehin in allen Bereichen deutliche Vorteile
gegenüber jffs2 hat, wird UBIGLUEBI in der Regel nicht mehr benötigt.
+\includegraphics[width=8cm]{images/ubi-big-picture.png}
+
\subsubsection{UBI-Tools}
Da UBI von den MTD-Entwicklern implementiert wurde, sind die UBI-Tools
diff --git a/flash-memory/ubi/pres_ubi_de.tex b/flash-memory/ubi/pres_ubi_de.tex
deleted file mode 100644
index 410b899..0000000
--- a/flash-memory/ubi/pres_ubi_de.tex
+++ /dev/null
@@ -1,24 +0,0 @@
-\input{configpres}
-
-\subsection{UBI - Unsorted Block Images}
-\title{\lq UBI - Unsorted Block Images\rq}
-\institute{Linutronix GmbH}
-
-\maketitle
-
-\begin{frame}
- \tableofcontents
-\end{frame}
-
-\begin{frame}
-\frametitle{UBI - Unsorted Block Images}
-\begin{itemize}
-\item NAND
-\pause
-\item NOR
-\pause
-\item Schnittstellen: Parallel, SPI...
-\end{itemize}
-\end{frame}
-
-\input{tailpres}
diff --git a/flash-memory/ubi/pres_ubi_en.tex b/flash-memory/ubi/pres_ubi_en.tex
new file mode 100644
index 0000000..fc5703f
--- /dev/null
+++ b/flash-memory/ubi/pres_ubi_en.tex
@@ -0,0 +1,52 @@
+\input{configpres}
+
+\subsection{UBI - Unsorted Block Images}
+
+\begin{frame}
+ \tableofcontents
+\end{frame}
+
+\begin{frame}
+\frametitle{UBI - Unsorted Block Images}
+\begin{itemize}
+\item scans list of eraseblocks
+\item generates a mapping between eraseblocks and ubi volumes
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{UBI works on top of MTD}
+\includegraphics[width=8cm]{images/ubi-big-picture.png}
+\end{frame}
+
+\begin{frame}
+\frametitle{UBI Volumes}
+\begin{itemize}
+\item something like a partition in common systems
+\item but more flexible
+\item ubi exchanges eraseblocks between volumes (for bad block handling,
+wear-leveling)
+\item non-linear mapping of physical eraseblocks (peb) to logical eraseblocks
+(leb)
+\item e.g. a volume out of 3 blocks could use peb 813, 28, 1017
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Volume type}
+\begin{itemize}
+\item static
+\begin{itemize}
+\item used for a single binary
+\item no filesystem
+\item easy readable e.g. by a bootloader
+\end{itemize}
+\pause
+\item dynamic
+\begin{itemize}
+\item used for filesystems
+\end{itemize}
+\end{itemize}
+\end{frame}
+
+\input{tailpres}
diff --git a/images/alan.png b/images/alan.png
new file mode 100644
index 0000000..f740b69
--- /dev/null
+++ b/images/alan.png
Binary files differ
diff --git a/images/caches.dia b/images/caches.dia
new file mode 100644
index 0000000..a990772
--- /dev/null
+++ b/images/caches.dia
Binary files differ
diff --git a/images/caches.png b/images/caches.png
new file mode 100644
index 0000000..37d266a
--- /dev/null
+++ b/images/caches.png
Binary files differ
diff --git a/images/fcse.dia b/images/fcse.dia
new file mode 100644
index 0000000..418be7d
--- /dev/null
+++ b/images/fcse.dia
Binary files differ
diff --git a/images/fcse.png b/images/fcse.png
new file mode 100644
index 0000000..85d6997
--- /dev/null
+++ b/images/fcse.png
Binary files differ
diff --git a/images/greg.jpg b/images/greg.jpg
new file mode 100644
index 0000000..a0c86c4
--- /dev/null
+++ b/images/greg.jpg
Binary files differ
diff --git a/images/hch.jpg b/images/hch.jpg
new file mode 100644
index 0000000..608fd00
--- /dev/null
+++ b/images/hch.jpg
Binary files differ
diff --git a/images/linus7.jpg b/images/linus7.jpg
new file mode 100644
index 0000000..a582077
--- /dev/null
+++ b/images/linus7.jpg
Binary files differ
diff --git a/images/linux-found-changes-hour.png b/images/linux-found-changes-hour.png
new file mode 100644
index 0000000..675156b
--- /dev/null
+++ b/images/linux-found-changes-hour.png
Binary files differ
diff --git a/images/linux-found-changes-version.png b/images/linux-found-changes-version.png
new file mode 100644
index 0000000..a647975
--- /dev/null
+++ b/images/linux-found-changes-version.png
Binary files differ
diff --git a/images/linux-found-devel-cycle.png b/images/linux-found-devel-cycle.png
new file mode 100644
index 0000000..b5691c3
--- /dev/null
+++ b/images/linux-found-devel-cycle.png
Binary files differ
diff --git a/images/morton.jpg b/images/morton.jpg
new file mode 100644
index 0000000..0ded5db
--- /dev/null
+++ b/images/morton.jpg
Binary files differ
diff --git a/images/tglx.jpg b/images/tglx.jpg
new file mode 100644
index 0000000..a319fa4
--- /dev/null
+++ b/images/tglx.jpg
Binary files differ
diff --git a/images/ubi-big-picture.dia b/images/ubi-big-picture.dia
new file mode 100644
index 0000000..57a6fa5
--- /dev/null
+++ b/images/ubi-big-picture.dia
Binary files differ
diff --git a/images/ubi-big-picture.png b/images/ubi-big-picture.png
new file mode 100644
index 0000000..c980e36
--- /dev/null
+++ b/images/ubi-big-picture.png
Binary files differ
diff --git a/kernel-devel/kernel-basics/pres_kernel-basics_de.tex b/kernel-devel/kernel-basics/pres_kernel-basics_de.tex
index 372ada2..1cfb985 100644
--- a/kernel-devel/kernel-basics/pres_kernel-basics_de.tex
+++ b/kernel-devel/kernel-basics/pres_kernel-basics_de.tex
@@ -56,6 +56,61 @@
\end{itemize}
\end{frame}
+\begin{frame}
+\includegraphics[height=7cm]{images/linus7.jpg}
+
+Maintains: THE REST
+
+Company: linuxfoundation
+\end{frame}
+
+\begin{frame}
+\includegraphics[height=7cm]{images/alan.png}
+
+Credits: NET2Debugged/NET3 author, Network layer debugging, Initial AX.25 and
+IPX releases, Original Linux netatalk patches, Current 3c501 hacker, Watchdog
+timer drivers, Linux/SMP
+
+Company: intel
+\end{frame}
+
+\begin{frame}
+\includegraphics[height=7cm]{images/morton.jpg}
+
+Maintains: EXT3, JOURNALLING LAYER FOR BLOCK DEVICES (JBD)
+
+Credits: Linux Quality Management
+
+Company: Google
+\end{frame}
+
+\begin{frame}
+\includegraphics[height=7cm]{images/greg.jpg}
+
+Maintains: SERIAL DRIVER, DRIVER CORE, KOBJECTS, DEBUGFS AND SYSFS, STABLE
+BRANCH, STAGING SUBSYSTEM, TTY LAYER, USB SERIAL DRIVER, USB SUBSYSTEM,
+USERSPACE I/O
+
+Company: SuSE
+\end{frame}
+
+\begin{frame}
+\includegraphics[height=7cm]{images/hch.jpg}
+
+Maintains: FREEVXFS FILESYSTEM, PERSONALITY HANDLING, SYSV FILESYSTEM, XFS
+FILESYSTEM
+Company: ??
+\end{frame}
+
+\begin{frame}
+\includegraphics[height=7cm]{images/tglx.jpg}
+
+Maintains: HIGH-RESOLUTION TIMERS, CLOCKEVENTS, DYNTICKS, POSIX CLOCKS and
+TIMERS, X86 ARCHITECTURE (32-BIT AND 64-BIT), PREEMPT RT
+
+Company: linutronix
+\end{frame}
+
\subsubsection{Entwicklungsprozess}
\begin{frame}
\frametitle{Entwicklungsprozess}
@@ -63,13 +118,221 @@
\item Änderungsvorschläge in Form von Patchen
\pause
\item Review und Diskussion auf Mailinglisten
+\item z.B. Subsystem Mailinglisten und LKML
\pause
\item strenge Richtlinien für Coding Style
+\item siehe Documentation/CodingStyle im Kernel Source Tree
\pause
\item strenge Richtlinien für Form und Weitergabe von Patchen
+\item scripts/checkpatch.pl zur Kontrolle verwenden!
\pause
\item Nur technische Argumente zählen!
+\pause
+\item Dokumentation siehe MAINTAINER Datei im Kernel Source Tree
+\end{itemize}
+\end{frame}
+
+\subsubsection{Versionierung}
+\begin{frame}
+\frametitle{Versionierung}
+\begin{itemize}
+\item 2.6.38.1 oder 2.6.39-rc1
+\pause
+\item 2.6 - historisch gegeben (aus altem Schema)
+\pause
+\item .38 - aktuelle Version
+\pause
+\item .1 - Security Fix
+\pause
+\item .rc1 - Release Candidate
+\end{itemize}
+\end{frame}
+
+\subsubsection{Entwicklungstempo}
+\begin{frame}
+\frametitle{Entwicklungstempo}
+\begin{itemize}
+\item 2 \dots 3 months release cycle
+\item \dots about 10,000 patches each cycle
+\item \dots from over 1000 developers
+\item \dots about 200 companies
+\end{itemize}
+Quelle: http://www.linuxfoundation.org/docs/lf\_linux\_kernel\_development\_2010.pdf
+\end{frame}
+
+\begin{frame}
+\includegraphics[height=7cm]{images/linux-found-devel-cycle.png}
+
+Source: Linux Foundation
+\end{frame}
+
+\begin{frame}
+\includegraphics[height=6.5cm]{images/linux-found-changes-version.png}
+\begin{tabular}{ l | l| }
+2.6.25 & 12,243 \\
+2.6.26 & 9,941 \\
+2.6.27 & 10,628 \\
+2.6.28 & 9,048 \\
+2.6.29 & 11,678 \\
+2.6.30 & 11,989 \\
+2.6.31 & 10,883 \\
+2.6.32 & 10,989 \\
+2.6.33 & 10,871 \\
+2.6.34 & 9,443 \\
+2.6.35 & 9,801 \\
+\end{tabular}
+
+Source: Linux Foundation
+\end{frame}
+
+\begin{frame}
+\includegraphics[height=6.5cm]{images/linux-found-changes-hour.png}
+\begin{tabular}{ l | l| }
+2.6.25 & 6.15 \\
+2.6.26 & 4.71 \\
+2.6.27 & 5.03 \\
+2.6.28 & 4.96 \\
+2.6.29 & 5.47 \\
+2.6.30 & 6.40 \\
+2.6.31 & 4.93 \\
+2.6.32 & 5.46 \\
+2.6.33 & 5.39 \\
+2.6.34 & 4.86 \\
+2.6.35 & 5.30 \\
+\end{tabular}
+
+Source: Linux Foundation
+\end{frame}
+
+\begin{frame}
+\frametitle{Kernel size}
+\begin{tabular}{ l | l | r }
+Version & Files & Lines \\
+\hline
+2.6.11 & 17,090 & 6,624,076 \\
+2.6.13 & 18,090 & 6,988,800 \\
+2.6.15 & 18,811 & 7,290,070 \\
+2.6.17 & 19,553 & 7,588,014 \\
+2.6.19 & 20,936 & 7,976,221 \\
+2.6.21 & 21,614 & 8,246,517 \\
+2.6.23 & 22,530 & 8,566,606 \\
+2.6.25 & 23,813 & 9,232,592 \\
+2.6.27 & 24,356 & 9,630,074 \\
+2.6.29 & 26,702 & 10,934,554 \\
+2.6.31 & 29,143 & 11,970,124 \\
+2.6.33 & 31,584 & 12,912,684 \\
+2.6.35 & 33,335 & 13,468,253 \\
+\end{tabular}
+
+Source: Linux Foundation
+\end{frame}
+
+\begin{frame}
+\frametitle{Kernel lines per day}
+\begin{tabular}{ l | r | l | r }
+Version & Added & Deleted & Modified \\
+\hline
+2.6.11 & 3,224 & 1,360 & 1,290 \\
+2.6.13 & 4,443 & 1,553 & 1,711 \\
+2.6.15 & 5,614 & 3,454 & 2,219 \\
+2.6.17 & 3,635 & 2,469 & 1,329 \\
+2.6.19 & 6,013 & 2,900 & 1,862 \\
+2.6.21 & 3,256 & 1,479 & 982 \\
+2.6.23 & 3,747 & 3,034 & 1,343 \\
+2.6.25 & 7,980 & 3,488 & 2,430 \\
+2.6.27 & 12,270 & 9,791 & 2,102 \\
+2.6.29 & 14,678 & 5,516 & 2,454 \\
+2.6.31 & 9,408 & 4,962 & 1,635 \\
+2.6.33 & 8,925 & 4,379 & 2,841 \\
+2.6.35 & 7,896 & 5,037 & 1,802 \\
+\end{tabular}
+
+Source: Linux Foundation
+\end{frame}
+
+\begin{frame}
+\frametitle{Linux Companies}
+contribution between 2.6.11 and 2.6.35
+\begin{tabular}{ l | r | r }
+Company & Changes & Percent of Total \\
+\hline
+None & 35,663 & 18.9 \\
+Red Hat & 23,356 & 12.4 \\
+Novell & 13,120 & 7.0 \\
+IBM & 13,026 & 6.9 \\
+Unknown & 12,060 & 6.4 \\
+Intel & 11,028 & 5.8 \\
+consultants & 4,817 & 2.6 \\
+Oracle & 4,367 & 2.3 \\
+Renesas Technology & 2,621 & 1.4 \\
+The Linux Foundation & 2,488 & 1.3 \\
+academics & 2,464 & 1.3 \\
+SGI & 2,450 & 1.3 \\
+Fujitsu & 2,293 & 1.2 \\
+Parallels & 2,226 & 1.2 \\
+Analog Devices & 1,955 & 1.0 \\
+Nokia & 1,896 & 1.0 \\
+\end{tabular}
+\end{frame}
+
+\begin{frame}
+\frametitle{Linux Companies (cont.)}
+contribution between 2.6.11 and 2.6.35
+\begin{tabular}{ l | r | r }
+Company & Changes & Percent of Total \\
+\hline
+HP & 1,854 & 1.0 \\
+MontaVista & 1,821 & 1.0 \\
+Google & 1,565 & 0.8 \\
+AMD & 1,518 & 0.8 \\
+Freescale & 1,501 & 0.8 \\
+linutronix & 1,470 & 0.8 \\
+MIPS Technologies & 1,410 & 0.7 \\
+NetApp & 1,322 & 0.7 \\
+Marvell & 1,241 & 0.7 \\
+Atheros Communications & 1,234 & 0.7 \\
+Astaro & 1,222 & 0.6 \\
+Broadcom & 1,130 & 0.6 \\
+QLogic & 1,076 & 0.6 \\
+NTT & 1,068 & 0.6 \\
+\end{tabular}
+
+Source: Linux Foundation
+\end{frame}
+
+\subsubsection{staging und next}
+\begin{frame}
+\frametitle{staging}
+\begin{itemize}
+\item Verzeichnis im Kernelsourcetree
+\pause
+\item erm\"oglicht Entwicklung im Mainline Tree
+\pause
+\item enth\"alt haupts\"achlich Treiber
+\pause
+\item Voraussetzung: aktive Weiterentwicklung im Code
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{next}
+\begin{itemize}
+\item \"Anderungen welche vermutlich in die n\"achste Version aufgenommen
+werden
+\item tracked andere Trees und quilt queues
\end{itemize}
+\begin{lstlisting}
+Feb-2008, Stephen Rothwell:
+I hope to recreate this tree every day automatically.
+In order to do this, any tree that has a conflict will
+be dropped from that days tree.
+The maintainer will be notified. I hope to provide some
+clue as to what the conflict is with, but probably not
+initially. I will attempt to build the tree between each
+merge (and a failed build will again cause the offending
+tree to be dropped). These builds will be necessarily
+restricted to probably one architecture/config.
+\end{lstlisting}
\end{frame}
\subsubsection{Konfiguration}
diff --git a/kernel-devel/kernel-best-practices/handout_kernel-best-practices_en.tex b/kernel-devel/kernel-best-practices/handout_kernel-best-practices_en.tex
new file mode 100644
index 0000000..bd1140b
--- /dev/null
+++ b/kernel-devel/kernel-best-practices/handout_kernel-best-practices_en.tex
@@ -0,0 +1,498 @@
+\input{confighandout}
+
+\subsection{Kernel Best-Practices}
+
+Linux development is heavily distributed. There are many powerful tools, which
+assist the distributed development. The most important and powerful ones, will
+be presented in this chapter.
+
+\subsubsection{diff and patch - the basics}
+
+Linux kernel development is based on patches. A patch is a file which describes
+the changes between an original version of a source tree and a modified one.
+
+For simplicity, a source tree with only one file will be used as example:
+
+orig/hello.c
+
+\begin{lstlisting}
+int main (int argc, char **argv)
+{
+ return 0;
+}
+\end{lstlisting}
+
+This source tree will be copied:
+
+\begin{lstlisting}
+cp -a orig new
+\end{lstlisting}
+
+The new source tree be modified:
+
+new/hello.c
+
+\begin{lstlisting}
+#include <stdio.h>
+
+int main (int argc, char **argv)
+{
+ printf ("Huhu World\n");
+ return 0;
+}
+\end{lstlisting}
+
+The diff commands generates a patch file:
+
+\begin{lstlisting}
+diff -Nur orig new > hello.patch
+\end{lstlisting}
+
+The content of hello.patch is:
+
+\begin{lstlisting}
+--- orig/hello.c 2011-03-22 22:38:40.796426752 +0100
++++ new/hello.c 2011-03-22 22:39:02.472155769 +0100
+@@ -1,4 +1,7 @@
++#include <stdio.h>
++
+ int main (int argc, char **argv)
+ {
++ printf ("Huhu World\n");
+ return 0;
+ }
+\end{lstlisting}
+
+The newly added lines are prefixed with a '+', removed lines with a '-'.
+
+If the patch file is more complex, diffstat informs you about the content:
+
+\begin{lstlisting}
+diffstat hello.patch
+ hello.c | 3 +++
+ 1 file changed, 3 insertions(+)
+\end{lstlisting}
+
+Anyone who has the original source version, can apply the generated patch. The
+result is an updated version of the source tree:
+
+\begin{lstlisting}
+cd orig
+patch -p1 < ../hello.patch
+\end{lstlisting}
+
+With the argument -pX the numbers of stripped directories (in our case new) can be defined.
+
+With the argument -R a patch can be 'reverse applied' aka removed. The result
+will be the original source tree.
+
+Don't apply or remove the same patch more then once. If you have more than one
+patch, apply and revert the patches in the right order. Else the resulting
+source tree will be undefined.
+
+If the original source differs from the one, the patch was created. The patch
+may apply with 'HUNKS'. This means, the changes can be applied, but the line
+numbers, given after the @@@ tag don't fit exactly.
+
+If the original source differs from the one, the patch was created. It is
+possible, that the patch won't apply anymore. Then all rejects are saved in a
+file called <original file name>.rej
+
+\subsubsection{quilt}
+
+diff and patch work fine for one patch. But if you have to handle a queuqe of
+patches it will be hard to keep the order of the patches, update a single patch,etc. quilt is a tool, for managing patch queques.
+
+The above example, using quilt:
+
+orig/hello.c
+
+\begin{lstlisting}
+int main (int argc, char **argv)
+{
+ return 0;
+}
+\end{lstlisting}
+
+create a new patch:
+
+\begin{lstlisting}
+cd orig
+quilt new hello.patch
+quilt edit hello.c
+\end{lstlisting}
+
+your default editor will be opened, make your changes to the source:
+
+\begin{lstlisting}
+#include <stdio.h>
+
+int main (int argc, char **argv)
+{
+ printf ("Huhu World\n");
+ return 0;
+}
+\end{lstlisting}
+
+write the changes into the patch file:
+
+\begin{lstlisting}
+quilt refresh
+\end{lstlisting}
+
+two files will be generated:
+
+\begin{lstlisting}
+ls patches/
+hello.patch series
+\end{lstlisting}
+
+hello.patch is our well-known patch. series contains the name of our patch.
+
+The patch can be applied
+
+\begin{lstlisting}
+quilt push
+File series fully applied, ends at patch patches/hello.patch
+\end{lstlisting}
+
+Then we create a new patch on top of our current queque:
+
+\begin{lstlisting}
+quilt new seperate-print-in-own-function.patch
+quilt edit hello.c
+\end{lstlisting}
+
+\begin{lstlisting}
+#include <stdio.h>
+
+void print ()
+{
+ printf ("Huhu World\n");
+}
+
+int main (int argc, char **argv)
+{
+ print ();
+ return 0;
+}
+\end{lstlisting}
+
+both patches are now listed in the series file:
+
+\begin{lstlisting}
+cat patches/series
+hello.patch
+seperate-print-in-own-function.patch
+\end{lstlisting}
+
+All patches can be reverted at once:
+
+\begin{lstlisting}
+quilt pop -a
+Removing patch patches/seperate-print-in-own-function.patch
+Restoring hello.c
+
+Removing patch patches/hello.patch
+Restoring hello.c
+
+No patches applied
+\end{lstlisting}
+
+You can zip the quilt queque and share it with other programmers.
+
+\subsubsection{git}
+
+But if they modify the quilt queque at the same time, as you. Merging the
+queques by hand may be hard. In projects like the linux kernel, it is a no go.
+
+Currently Linus' (and many others) Kernel trees are managed by git. Git is a
+very powerful version control system. The most important difference to other
+systems, like subversion, is that the hole history of a project is held local.
+Nobody should commit into your git tree. In git you pull the changes from other
+people into your tree.
+
+Let's have a look at git:
+
+orig/hello.c
+
+\begin{lstlisting}
+int main (int argc, char **argv)
+{
+ return 0;
+}
+\end{lstlisting}
+
+init git:
+
+\begin{lstlisting}
+$cd orig
+$git init .
+Initialized empty Git repository in /home/manut/vorlesung.git/orig/.git/
+$git config user.email "manut@mecka.net"
+$git config user.name "Manuel Traut"
+\end{lstlisting}
+
+The configuration is saved at .git/config
+If git config --global is used the configuration will be used by all
+repositories which don't have a own configuration. Then it is saved at
+~/.gitconfig
+
+Now add the files to version control and commit your initial code.
+
+\begin{lstlisting}
+$git add hello.c
+$git commit -sa
+\end{lstlisting}
+
+The default editor will be opened, to enter a commit message:
+
+\begin{lstlisting}
+initial import of the hello world source
+
+this projects is aimed to show the use of git.
+
+Signed-off-by: Manuel Traut <manut@mecka.net>
+
+# Please enter the commit message for your changes. Lines starting
+# with '#' will be ignored, and an empty message aborts the commit.
+# On branch master
+#
+# Initial commit
+#
+# Changes to be committed:
+# (use "git rm --cached <file>..." to unstage)
+#
+# new file: hello.c
+#
+
+[master (root-commit) 473cf10] initial import of the hello world source
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+ create mode 100644 hello.c
+
+\end{lstlisting}
+
+Now edit the source tree and generate commit your changes:
+
+\begin{lstlisting}
+$patch -p1 < ../hello.patch
+$git commit -sa
+
+add stdio include, print hello world
+
+prints 'Huhu World' to stdout
+
+Signed-off-by: Manuel Traut <manut@mecka.net>
+
+# Please enter the commit message for your changes. Lines starting
+# with '#' will be ignored, and an empty message aborts the commit.
+# On branch master
+# Changes to be committed:
+# (use "git reset HEAD <file>..." to unstage)
+#
+# modified: hello.c
+
+[master 6ea27e6] add stdio include, print hello world
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+\end{lstlisting}
+
+A hash will be generated that can be used to identify each patch. A history
+and a single patch can be displayed with these commands:
+
+\begin{lstlisting}
+$git log
+commit 6ea27e6199aeac63055d845ef40fecd4b594f1d7
+Author: Manuel Traut <manut@mecka.net>
+Date: Tue Mar 22 23:37:13 2011 +0100
+
+ add stdio include, print hello world
+
+ prints 'Huhu World' to stdout
+
+ Signed-off-by: Manuel Traut <manut@mecka.net>
+
+commit 473cf10e95778c54d49fc6ea368e196f1347ac8a
+Author: Manuel Traut <manut@mecka.net>
+Date: Tue Mar 22 23:31:50 2011 +0100
+
+ initial import of the hello world source
+
+ this projects is aimed to show the use of git.
+
+ Signed-off-by: Manuel Traut <manut@mecka.net>
+
+
+$git shortlog
+Manuel Traut (2):
+ initial import of the hello world source
+ add stdio include, print hello world
+
+$git show 473cf10e95778c54d49fc6ea368e196f1347ac8a
+commit 473cf10e95778c54d49fc6ea368e196f1347ac8a
+Author: Manuel Traut <manut@mecka.net>
+Date: Tue Mar 22 23:31:50 2011 +0100
+
+ initial import of the hello world source
+
+ this projects is aimed to show the use of git.
+
+ Signed-off-by: Manuel Traut <manut@mecka.net>
+
+diff --git a/hello.c b/hello.c
+new file mode 100644
+index 0000000..b891504
+--- /dev/null
++++ b/hello.c
+@@ -0,0 +1,4 @@
++int main (int argc, char **argv)
++{
++ return 0;
++}
+
+\end{lstlisting}
+
+To add some new functionality it's a good idea to temporarily create a new
+branch:
+
+\begin{lstlisting}
+$git branch fancy-new-stuff
+$git checkout fancy-new-stuff
+Switched to branch 'fance-new-stuff'
+\end{lstlisting}
+
+It's possible to go back in history:
+
+\begin{lstlisting}
+git reset --hard 473cf10e95778c54d49fc6ea368e196f1347ac8a
+HEAD is now at 473cf10 initial import of the hello world source
+\end{lstlisting}
+
+Make changes:
+
+\begin{lstlisting}
+#include <stdio.h>
+
+int main (int argc, char **argv)
+{
+ printf ("Hello World\n");
+ return 0;
+}
+\end{lstlisting}
+
+and commit them:
+
+\begin{lstlisting}
+$git commit -sa
+
+HELLO world
+
+..not huhu world
+
+Signed-off-by: Manuel Traut <manut@mecka.net>
+
+[fance-new-stuff 72e3346] HELLO world
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+\end{lstlisting}
+
+You like the new version and want to merge it into your master tree:
+
+\begin{lstlisting}
+$git checkout master
+Switched to branch 'master'
+$git merge fancy-new-stuff
+Auto-merging hello.c
+CONFLICT (content): Merge conflict in hello.c
+Automatic merge failed; fix conflicts and then commit the result.
+\end{lstlisting}
+
+Git reports an CONFLICT because an automatic merge is not possible. The same
+line (printf) has different content in master and fancy-new-stuff. So the merge
+conflict has to be resolved by hand.
+
+hello.c
+
+\begin{lstlisting}
+#include <stdio.h>
+
+int main (int argc, char **argv)
+{
+<<<<<<< HEAD
+ printf ("Huhu World\n");
+=======
+ printf ("Hello World\n");
+>>>>>>> fancy-new-stuff
+ return 0;
+}
+\end{lstlisting}
+
+All lines which shouldn't be there can be removed by hand. This result needs
+to be commited:
+
+\begin{lstlisting}
+$git commit -sa
+
+Merge branch 'fance-new-stuff'
+
+Conflicts:
+ hello.c
+
+Signed-off-by: Manuel Traut <manut@mecka.net>
+#
+# It looks like you may be committing a MERGE.
+# If this is not correct, please remove the file
+# .git/MERGE_HEAD
+# and try again.
+#
+
+# Please enter the commit message for your changes. Lines starting
+# with '#' will be ignored, and an empty message aborts the commit.
+# On branch master
+# Changes to be committed:
+#
+# modified: hello.c
+#
+
+[master 1815151] Merge branch 'fance-new-stuff'
+
+$git log
+
+commit 1815151a08537bd2403605f8adb22852cfdb2d23
+Merge: 6ea27e6 72e3346
+Author: Manuel Traut <manut@mecka.net>
+Date: Tue Mar 22 23:57:19 2011 +0100
+
+ Merge branch 'fance-new-stuff'
+
+ Conflicts:
+ hello.c
+
+ Signed-off-by: Manuel Traut <manut@mecka.net>
+
+commit 72e3346872ec9298f2b582e2859b1dbf1304f77e
+Author: Manuel Traut <manut@mecka.net>
+Date: Tue Mar 22 23:49:58 2011 +0100
+
+ HELLO world
+
+ ..not huhu world
+
+ Signed-off-by: Manuel Traut <manut@mecka.net>
+
+...
+\end{lstlisting}
+
+Further exercises:
+
+\begin{itemize}
+\item pull from another repository
+\item track a repository
+\item what is a bare repository?
+\item find bugs with git bisect
+\item extract a patch queque from your git branch
+\item send mails with git
+\item build a svn - git bridge
+\end{itemize}
+
+\input{tailhandout}
diff --git a/linux-basics/filesystems/handout_filesystems_en.tex b/linux-basics/filesystems/handout_filesystems_en.tex
new file mode 100644
index 0000000..8446cb2
--- /dev/null
+++ b/linux-basics/filesystems/handout_filesystems_en.tex
@@ -0,0 +1,16 @@
+\input{confighandout}
+
+\subsection{Filesystems}
+
+\subsubsection{block, flash, network}
+
+Different kinds of memory, need different filesystems. The Linux kernel basicly
+distinguishes between these types:
+
+\begin{description}
+\item[Block Devices] Hard-disk Drives, Compact-Flash Cards, USB Sticks, \dots
+\item[Flash Devices] NAND, NOR, oneNAND, \dots
+\item[Network Shares] SMB, CIFS, NFS, \dots
+\end{description}
+
+\input{tailhandout}
diff --git a/linux-basics/fromscratch_vs_debian/Makefile b/linux-basics/fromscratch_vs_debian/Makefile
new file mode 100644
index 0000000..d641258
--- /dev/null
+++ b/linux-basics/fromscratch_vs_debian/Makefile
@@ -0,0 +1,9 @@
+all:
+ for pdf in `ls -1 *.tex` ; do \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ done
+
+clean:
+ rm -f *.aux *.log *.pdf *.log *.snm *.toc *.vrb *.nav *.out
+
diff --git a/linux-basics/fromscratch_vs_debian/deb.sh b/linux-basics/fromscratch_vs_debian/deb.sh
new file mode 100755
index 0000000..3a3457f
--- /dev/null
+++ b/linux-basics/fromscratch_vs_debian/deb.sh
@@ -0,0 +1,36 @@
+#fist stage, on host (pc)
+sudo rm -rf debian-rfs
+
+sudo /usr/sbin/debootstrap --verbose \
+ --arch armel \
+ --include=mtd-utils \
+ --foreign \
+ squeeze \
+ debian-rfs \
+ http://debian.tu-bs.de/debian
+
+cd debian-rfs/ dev
+mknod -m 622 console c 5 1
+mknod -m 622 tty0 c 4 0
+mknod -m 666 null c 1 3
+mknod -m 666 zero c 1 5
+mknod -m 666 ptmx c 5 2
+mknod -m 666 tty c 5 0
+mknod -m 444 random c 1 8
+mknod -m 444 urandom c 1 9
+cd -
+
+sudo mkfs.ext2 /dev/sdb2
+sudo mount /dev/sdb2 /mnt/usb
+sudo cp -a debian-rfs/* /mnt/usb/
+
+exit 0
+
+#second stage, on target (beagleboard)
+mkdir /proc /sys
+mount -t proc none /proc
+mount -t sysfs none /sys
+/debootstrap/debootstrap --second-stage
+passwd
+echo "T0:23:respawn:/sbin/getty -L ttyO2 115200 vt100" >> /etc/inittab
+mount -o remount,ro /dev/mmcblk0p2 /
diff --git a/linux-basics/fromscratch_vs_debian/pres_fromscatch_vs_debian_en.tex b/linux-basics/fromscratch_vs_debian/pres_fromscatch_vs_debian_en.tex
new file mode 100644
index 0000000..6500966
--- /dev/null
+++ b/linux-basics/fromscratch_vs_debian/pres_fromscatch_vs_debian_en.tex
@@ -0,0 +1,55 @@
+\input{configpres}
+
+\title{Rootfilesystem from scratch vs. Debian based system}
+\maketitle
+
+\subsection{Rootfilesystem from scratch}
+
+\subsubsection{Overview}
+\begin{frame}
+\frametitle{RFS from scratch}
+Advantage:
+\begin{itemize}
+\item smallest footprint
+\end{itemize}
+Disadvantages:
+\begin{itemize}
+\item manual dependency tracking
+\item hard to maintain (track bugs for each source)
+\end{itemize}
+Okay for systems that have less than 16 MB flash.
+\end{frame}
+
+\begin{frame}
+\frametitle{RFS from scratch}
+HOWTO: see app-devel/cross-devel section
+\end{frame}
+
+
+\subsection{Debian based system}
+
+\subsubsection{Overview}
+\begin{frame}
+\frametitle{Debian based system}
+Advantages
+\begin{itemize}
+\item Bugtracking is made by Debian
+\item Dependencytracking is made by Debian
+\item easy to add new packages
+\end{itemize}
+Disadvantages
+\begin{itemize}
+\item standard system is about 100 MB
+\end{itemize}
+\end{frame}
+
+\subsubsection{HOWTO}
+\begin{frame}[containsverbatim]
+\frametitle{cross debootstrap}
+\lstinputlisting[language=sh]{./linux-basics/fromscratch_vs_debian/deb.sh}
+\end{frame}
+
+
+
+
+\input{tailpres}
diff --git a/linux-basics/what-is-linux/handout_what-is-linux_de.tex b/linux-basics/what-is-linux/handout_what-is-linux_de.tex
index a6c3a8e..2ae9b03 100644
--- a/linux-basics/what-is-linux/handout_what-is-linux_de.tex
+++ b/linux-basics/what-is-linux/handout_what-is-linux_de.tex
@@ -1,13 +1,8 @@
-\documentclass{lxarticle}
-\usepackage{german}
-\usepackage[utf8]{inputenc}
-\usepackage{lxheaders}
+\input{confighandout}
-\begin{document}
+\subsection{Was ist Linux?}
-\section*{Was ist Linux?}
-
-\subsection*{Geschichtlicher Hintergrund}
+\subsubsection{Geschichtlicher Hintergrund}
Frühe elektronische Rechner, wie der in Abbildung \ref{img:eniac} gezeigte
ENIAC, waren nicht frei programmierbar. Sie wurden für einen bestimmten
@@ -112,7 +107,7 @@ Der Begriff ``Linux'' bezeichnet also streng genommen nur den Kernel.
Allerdings hat es sich mittlerweile im Sprachgebrauch eingebürgert, das
komplette System aus Programmen und Kernel als ``Linux'' zu bezeichnen.
-\subsection*{Ein Betriebssystem für Großrechner}
+\subsubsection{Ein Betriebssystem für Großrechner}
Unix war von Anfang an ein Betriebssystem, das für den Betrieb auf
Großrechnern ausgelegt ist. Das verwundert nicht weiter, den zur Zeit
@@ -133,7 +128,7 @@ selben Source-Code kann ein Kernel für einen Server mit 1024 CPU-Kernen
oder ein Kernel für ein kleines Embedded-System konfiguriert und erzeugt
werden.
-\subsection*{Multiuser-Betrieb}
+\subsubsection{Multiuser-Betrieb}
Eine weitere wichtige Eigenschaft von Linux, die sich aus der
Großrechner-Tradition ergibt, ist die Multitasking- und Multiuser-Fähigkeit.
@@ -159,7 +154,7 @@ von Linux hier ebenfalls von Vorteil. Proprietäre Betriebssysteme haben
schon aus Lizenzgründen ein Problem damit, wenn mehrere Anwender einen
Rechner nutzen können.
-\subsection*{Login}
+\subsubsection{Login}
Beim Hochfahren eines Linux-Systems werden üblicherweise alle für den
Systemstart vorgesehenen Programme automatisch gestartet, ohne dass dazu
@@ -207,7 +202,7 @@ und nicht etwa auf dem Rechner, an dem Sie gerade sitzen.
\newpage
-\subsection*{Kontrollfragen}
+\subsubsection{Kontrollfragen}
\begin{enumerate}
\item Wie alt ist das Unix-Konzept mittlerweile?
@@ -217,4 +212,4 @@ und nicht etwa auf dem Rechner, an dem Sie gerade sitzen.
\item Was passiert beim Login-Vorgang?
\end{enumerate}
-\end{document}
+\input{tailhandout}
diff --git a/linux-basics/what-is-linux/pres_what-is-linux_de.tex b/linux-basics/what-is-linux/pres_what-is-linux_de.tex
index 4283349..873d807 100644
--- a/linux-basics/what-is-linux/pres_what-is-linux_de.tex
+++ b/linux-basics/what-is-linux/pres_what-is-linux_de.tex
@@ -93,7 +93,7 @@ komplette Liste: http://directory.fsf.org/GNU/
\begin{itemize}
\item wenig Bandbreite notwendig
\item scriptbar
-\item resourcenschonend
+\item ressourcenschonend
\end{itemize}
\end{description}
\end{frame}
diff --git a/tailhandout.tex b/tailhandout.tex
index 6b47932..e69de29 100644
--- a/tailhandout.tex
+++ b/tailhandout.tex
@@ -1 +0,0 @@
-\end{document}