diff options
| author | Manuel Traut <manut@linutronix.de> | 2011-07-18 14:04:20 +0200 |
|---|---|---|
| committer | Manuel Traut <manut@linutronix.de> | 2011-07-18 14:04:20 +0200 |
| commit | 5cd3321d946c14cd99d6a23cffa09a8316aadceb (patch) | |
| tree | ee42f905f7e62edd61103d4965a0aa037d861ffc | |
| parent | f9f7f47856be59b1e446a846d4b0306c39a6186c (diff) | |
| parent | a794d7231410f16747e44b690fcc03a96274894c (diff) | |
Merge ../../../vorlesung into vorlesung
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 Binary files differnew file mode 100644 index 0000000..f740b69 --- /dev/null +++ b/images/alan.png diff --git a/images/caches.dia b/images/caches.dia Binary files differnew file mode 100644 index 0000000..a990772 --- /dev/null +++ b/images/caches.dia diff --git a/images/caches.png b/images/caches.png Binary files differnew file mode 100644 index 0000000..37d266a --- /dev/null +++ b/images/caches.png diff --git a/images/fcse.dia b/images/fcse.dia Binary files differnew file mode 100644 index 0000000..418be7d --- /dev/null +++ b/images/fcse.dia diff --git a/images/fcse.png b/images/fcse.png Binary files differnew file mode 100644 index 0000000..85d6997 --- /dev/null +++ b/images/fcse.png diff --git a/images/greg.jpg b/images/greg.jpg Binary files differnew file mode 100644 index 0000000..a0c86c4 --- /dev/null +++ b/images/greg.jpg diff --git a/images/hch.jpg b/images/hch.jpg Binary files differnew file mode 100644 index 0000000..608fd00 --- /dev/null +++ b/images/hch.jpg diff --git a/images/linus7.jpg b/images/linus7.jpg Binary files differnew file mode 100644 index 0000000..a582077 --- /dev/null +++ b/images/linus7.jpg diff --git a/images/linux-found-changes-hour.png b/images/linux-found-changes-hour.png Binary files differnew file mode 100644 index 0000000..675156b --- /dev/null +++ b/images/linux-found-changes-hour.png diff --git a/images/linux-found-changes-version.png b/images/linux-found-changes-version.png Binary files differnew file mode 100644 index 0000000..a647975 --- /dev/null +++ b/images/linux-found-changes-version.png diff --git a/images/linux-found-devel-cycle.png b/images/linux-found-devel-cycle.png Binary files differnew file mode 100644 index 0000000..b5691c3 --- /dev/null +++ b/images/linux-found-devel-cycle.png diff --git a/images/morton.jpg b/images/morton.jpg Binary files differnew file mode 100644 index 0000000..0ded5db --- /dev/null +++ b/images/morton.jpg diff --git a/images/tglx.jpg b/images/tglx.jpg Binary files differnew file mode 100644 index 0000000..a319fa4 --- /dev/null +++ b/images/tglx.jpg diff --git a/images/ubi-big-picture.dia b/images/ubi-big-picture.dia Binary files differnew file mode 100644 index 0000000..57a6fa5 --- /dev/null +++ b/images/ubi-big-picture.dia diff --git a/images/ubi-big-picture.png b/images/ubi-big-picture.png Binary files differnew file mode 100644 index 0000000..c980e36 --- /dev/null +++ b/images/ubi-big-picture.png 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} |
