diff options
| author | Jan Altenberg <jan@homerjsimpson.(none)> | 2009-06-20 03:38:57 +0200 |
|---|---|---|
| committer | Jan Altenberg <jan@homerjsimpson.(none)> | 2009-06-20 03:38:57 +0200 |
| commit | 36f95c7001ac4d753c6242ab102ad343ebc93827 (patch) | |
| tree | 9da1df0d6c1746afb0d2a7d61d60ce926b2c0351 | |
| parent | b208259c74504385c2f9b90d892785c55cc9aff5 (diff) | |
| parent | d3835cbfea3bbc19b386f31c4972d4bc37b9347b (diff) | |
Merge branch 'master' of ssh://tglx.de/home/linutronix/git/schulung
| -rw-r--r-- | Makefile | 6 | ||||
| -rw-r--r-- | application-devel/Makefile | 6 | ||||
| -rw-r--r-- | kernel-devel/Makefile | 6 | ||||
| -rw-r--r-- | kernel-devel/kernel-basics/Makefile | 9 | ||||
| -rw-r--r-- | kernel-devel/kernel-basics/handout_kernel-basics_de.tex | 137 | ||||
| -rw-r--r-- | kernel-devel/kernel-basics/pres_kernel-basics_de.tex | 99 | ||||
| -rw-r--r-- | linux-basics/Makefile | 6 | ||||
| -rw-r--r-- | realtime/Makefile | 7 |
8 files changed, 260 insertions, 16 deletions
@@ -1,3 +1,5 @@ +SUBDIRS = kernel-devel linux-basics realtime application-devel + latex-install: mkdir -p /usr/share/texmf-texlive/tex/latex/linutronix cp latex/lxarticle/lxarticle.cls /usr/share/texmf-texlive/tex/latex/linutronix/ @@ -10,3 +12,7 @@ latex-install: cp latex/latex-beamer/*vf /usr/share/texmf/fonts/vf/linutronix texhash +all clean:: + for dir in $(SUBDIRS) ; do \ + (cd $$dir && make $@); \ + done diff --git a/application-devel/Makefile b/application-devel/Makefile new file mode 100644 index 0000000..d62fe78 --- /dev/null +++ b/application-devel/Makefile @@ -0,0 +1,6 @@ +SUBDIRS = app-debugging compile-tools devel-best-practices devel-environment embedded-devel + +all clean:: + for dir in $(SUBDIRS) ; do \ + (cd $$dir && make $@); \ + done diff --git a/kernel-devel/Makefile b/kernel-devel/Makefile new file mode 100644 index 0000000..f325edd --- /dev/null +++ b/kernel-devel/Makefile @@ -0,0 +1,6 @@ +SUBDIRS = char-device driver-basics kernel-basics kernel-best-practices kernel-build uio-driver + +all clean: + for dir in $(SUBDIRS) ; do \ + (cd $$dir && make $@); \ + done diff --git a/kernel-devel/kernel-basics/Makefile b/kernel-devel/kernel-basics/Makefile new file mode 100644 index 0000000..aad5bb5 --- /dev/null +++ b/kernel-devel/kernel-basics/Makefile @@ -0,0 +1,9 @@ +all: + pdflatex pres_kernel-basics_de.tex + pdflatex hints_kernel-basics_de.tex + pdflatex handout_kernel-basics_de.tex + pdflatex handout_kernel-basics_de.tex + +clean: + rm -f *.aux *.log *.pdf *.log *.snm *.toc *.vrb *.nav *.out + diff --git a/kernel-devel/kernel-basics/handout_kernel-basics_de.tex b/kernel-devel/kernel-basics/handout_kernel-basics_de.tex index 4c391b2..057f4bc 100644 --- a/kernel-devel/kernel-basics/handout_kernel-basics_de.tex +++ b/kernel-devel/kernel-basics/handout_kernel-basics_de.tex @@ -1,17 +1,142 @@ -\documentclass{article} +\documentclass{lxarticle} \usepackage{german} \usepackage[utf8]{inputenc} +\usepackage{lxheaders} +\usepackage{lxextras} \begin{document} -\section*{Titel} +\section*{Kernel-Grundlagen} -\subsection*{Abschnitt1} +Der Linux-Kernel ist moderner Betriebssystemkern, der sich unter anderem +durch folgende Eigenschaften auszeichnet: -Text +\begin{itemize} +\item Freie Software (GPL Version 2) +\item Auf vielen Plattformen lauffähig +\item Hohe Skalierbarkeit vom Handy bis zum Supercomputer +\item Große Anzahl integrierter Treiber +\item Einfache Entwicklung eigener Treiber +\item Codequalität auf hohem Niveau +\item Qualitätssicherung durch Code-Review unabhängiger Personen +\item ca. 10 Millionen Codezeilen (ca. 80\% davon Treiber) +\item hohes Entwicklungstempo +\item hervorragende Netzwerk-Fähigkeiten +\item Echtzeit-Fähigkeit leicht und sauber erreichbar +\end{itemize} -\subsection*{Abschnitt2} +Diese Eigenschaften haben dazu geführt, dass im Embedded-Bereich heute die +große Mehrzahl der neu begonnenen Projekte mit Linux realisiert werden. Aber +auch in vielen anderen Bereichen wie dem Cluster-Computing (Google, Rendern +von Spielfilm-Effekten in Hollywood) werden die Aufgaben heute fast +ausschließlich mit Linux gelöst. -Text +\subsection*{Aufbau des Kernels} + +Der Sourcecode des Kernels ist recht übersichtlich in Subsysteme gegliedert. +Die Grenzen der einzelnen Subsysteme sind keinesfalls scharf definiert, aber +trotz einzelner Überlappungen und gegenseitigen Abhängigkeiten ist doch ein +hohes Mass an Unabhängigkeit erreicht worden. Dies trägt entscheidend zur +Qualität bei, da Änderungen in einem Bereich andere Subsysteme meist nur +wenig beeinflussen. + +\begin{figure}[h] +\centering +\includegraphics[width=0.8\textwidth]{images/Subsystems.png} +\caption{Kernel-Aufbau aus Subsystemen} +\label{img:subsystems} +\end{figure} + +Abbildung \ref{img:subsystems} zeigt schematisch diesen Aufbau. Man +unterscheidet zunächst zwischen Subsystemen des \emph{Kernel-Core} und +Treiber-Subsystemen. Zum Kernel-Core rechnet man Subsysteme wie den für die +Prozessumschaltung verantwortlichen Scheduler, Memory-Management, Timer und +ähnliche Einheiten, die zur grundsätzlichen Funktionalität des Kernel gehören +und auf allen Plattformen vorhanden sein müssen. + +Der weitaus größte Teil des Kernels besteht aus Treibern. Hier kann man +wiederum unterscheiden zwischen Treibern für Hostcontroller von +Schnittstellen wie PCI, USB oder I2C und den Treibern für Geräte, die diese +Schnittstellen benutzen. Abbildung \ref{img:subsystems} deutet an, dass es +zwischen diesen Treibern durchaus Querverbindungen geben kann. Eine PCI-Karte +kann ja durchaus einen USB- oder I2C-Hostcontroller enthalten, und ein +bestimmter Sound-Chip könnte wahlweise per USB oder per PCI angeschlossen +sein. + +Unabhängig von der Art der Schnittstellen gibt es ein Repertoire an +Funktionen, die alle Treiber benötigen. Dazu gehört etwa die Funktionalität, +Treiber und Geräte einander zuzuordnen. Auch die Darstellung des +Treiber-Baums im \cmd{sysfs} kommt automatisch allen Treibern zugute. +Diese übergeordneten Treiberfunktionen werden als \emph{Driver Core} +bezeichnet. + +\subsection*{Kernel Maintainer} + +Jedes Subsystem wird normalerweise von einem, manchmal auch mehreren +Programmierern betreut. Diese Betreuer bezeichnet man als \emph{Maintainer}. +Ihre Aufgabe besteht darin, den Code selbst weiter zu entwickeln, und vor +allem die Erweiterungsvorschläge anderer Entwickler zu prüfen. Sie haben als +Spezialisten für ein bestimmtes Sachgebiet eine wichtige Aufgabe bei der +Weiterentwicklung und Qualitätssicherung des Kernels. + +Da der Kernel von einer freien Entwicklergemeinde entwickelt wird, haben +Maintainer natürlich keine Weisungsbefugnisse gegenüber anderen +Programmierern. Dennoch ist es kaum möglich, eine Änderung, die der +zuständige Maintainer ablehnt, in den offiziellen Kernel zu bringen. Die +Programmierer, die sich vor allem mit der Integration der vielen +Änderungsvorschläge befassen (an der Spitze Linus Torvalds), respektieren +üblicherweise die Entscheidung der zuständigen Maintainer. + +Die Kernel-Maintainer sind in der Datei \cmd{MAINTAINERS} im Hauptverzeichnis +der Kernelquellen aufgelistet. Dort findet man auch die für das jeweilige +Thema zuständige Mailingliste. Fragen oder Änderungsvorschläge sollte man +\emph{immer} an die Mailingliste senden und nicht persönlich an den +Maintainer! + +\subsection*{Entwicklungsprozess} + +Änderungen am Linux-Kernel erfolgen ausschließlich durch \emph{Patche}. Ein +Patch ist eine durch das Programm \cmd{diff} Textdatei, die die Änderungen +durch Angabe der entfernten beziehungsweise hinzugefügten Zeilen beschreibt. +Das verwendete Textformat ist sehr gut lesbar und ermöglicht ein schnelles +Erkennen der vorgenommenen Änderungen. + +Wer eine Änderung in den offiziellen Kernel bringen möchte, generiert +zunächst einen solchen Patch. Dann sendet er den Patch in einer Mail an die +zuständige Mailingliste und nimmt dabei den oder die zuständigen Maintainer +in Cc:, zusätzlich eventuell weitere Autoren von betroffenem Quellcode. Meist +erhält er dann innerhalb kurzer Zeit Antworten mit Reviews seines Patch. Je +nachdem, wie diese ausfallen, wird er seine Änderungen noch einmal +überarbeiten und erneut einsenden. + +Für Änderungen am Kernel-Code gelten sehr strenge Richtlinien für den +\emph{Coding Style}, das Erzeugen und Versenden des Patch sowie das +Verhalten auf Mailinglisten. Grundsätzlich sollte der Anbieter eines Patch +in der Lage sein, mit rein technischen Argumenten zu erläutern, warum es eine +Verbesserung darstellt, den Patch aufzunehmen. + +Informationen dazu findet man in den Kernelquellen unter + +\cmd{Documentation/CodingStyle} + +\cmd{Documentation/SubmittingPatches} + +\subsection*{Kernel-Konfiguration} + +Der Kernel ist durch eine Vielzahl an Optionen (mehrere 1000) in weiten +Bereichen konfigurierbar. Die Konfiguration wird im Hauptverzeichnis der +Kernelquellen in der versteckten Datei \cmd{.config} gespeichert. Diese Datei +wird normalerweise nicht von Hand editiert, sondern menügesteuert mit Hilfe +eines integrierten Konfigurationstools, das man mit \cmd{make menuconfig} +aufruft. + +Diese Tool bezieht seine Informationen aus Dateien mit dem Namen +\cmd{Kconfig}, die sich in jedem Unterverzeichnis des Quellcodebaums befinden. +Diese Dateien enthalten die Bezeichnung der Option und die zugehörigen +Abhängigkeiten und Hilfetexte. + +Das Kernel-Buildsystem stellt ein eigenes Subsystem dar und hat einen eigenen +Maintainer. Es handhabt den kompletten Build-Prozess des Kernels und +unterstützt dabei auch explizit Cross-Compiling. \end{document} diff --git a/kernel-devel/kernel-basics/pres_kernel-basics_de.tex b/kernel-devel/kernel-basics/pres_kernel-basics_de.tex index 07db328..8b6161e 100644 --- a/kernel-devel/kernel-basics/pres_kernel-basics_de.tex +++ b/kernel-devel/kernel-basics/pres_kernel-basics_de.tex @@ -1,24 +1,103 @@ -\documentclass{article} +\documentclass{beamer} +\usetheme{linutronix} \usepackage{german} \usepackage[utf8]{inputenc} +\usepackage{pgf} +\usepackage{graphicx} +\usepackage{lxextras} + +\title{Kernel-Grundlagen} +\institute{Linutronix GmbH} \begin{document} -\section*{Block \lq Was ist Linux?\rq} +\maketitle + -\subsection*{Lernziele} +% ----- Slide ------------------ +\begin{frame} +\frametitle{Kernel-Eigenschaften} \begin{itemize} -\item Lernziel 1 -\item Lernziel 2 -\item Lernziel 3 +\item Freie Software (GPL Version 2) +\pause +\item Auf vielen Plattformen lauffähig +\pause +\item Hohe Skalierbarkeit vom Handy bis zum Supercomputer +\pause +\item Große Anzahl integrierter Treiber +\pause +\item Einfache Entwicklung eigener Treiber +\pause +\item Codequalität auf hohem Niveau +\pause +\item Qualitätssicherung durch Code-Review unabhängiger Personen +\pause +\item ca. 10 Millionen Codezeilen (ca. 80\% davon Treiber) +\pause +\item hohes Entwicklungstempo +\pause +\item hervorragende Netzwerk-Fähigkeiten +\pause +\item Echtzeit-Fähigkeit leicht und sauber erreichbar \end{itemize} +\end{frame} -\subsection*{Unterrichts-Ablauf} +% ----- Slide ------------------ +\begin{frame} +\frametitle{Aufbau des Kernels} +\centering +\includegraphics[width=0.8\textwidth]{images/Subsystems.png} +\end{frame} -Hinweise zur Präsentation, Zeitplanung, etc. +% ----- Slide ------------------ +\begin{frame} +\frametitle{Kernel Maintainer} +\begin{itemize} +\item Betreuer eines Subsystems oder Treibers +\pause +\item Verantwortlich für Weiterentwicklung +\pause +\item Review von Änderungsvorschlägen +\pause +\item Annehmen/Ablehnen von Änderungsvorschlägen +\pause +\item Weitergabe/Verwaltung angenommener Änderungen +\end{itemize} +\end{frame} -\subsection*{Übungen bei vorhandener Hardware} +% ----- Slide ------------------ +\begin{frame} +\frametitle{Entwicklungsprozess} +\begin{itemize} +\item Änderungsvorschläge in Form von Patchen +\pause +\item Review und Diskussion auf Mailinglisten +\pause +\item strenge Richtlinien für Coding Style +\pause +\item strenge Richtlinien für Form und Weitergabe von Patchen +\pause +\item Nur technische Argumente zählen! +\end{itemize} +\end{frame} + +% ----- Slide ------------------ +\begin{frame} +\frametitle{Kernel-Konfiguration} +\begin{itemize} +\item Grosse Zahl von Konfigurations-Optionen +\pause +\item Speicherung in \cmd{.config} +\pause +\item Ändern der Konfiguration: \cmd{make menuconfig} +\pause +\item Informationen über Optionen in \cmd{Kconfig}-Dateien +\pause +\item Kernel-Buildsystem: Eigenes Subsystem mit eigenem Maintainer +\pause +\item Unterstützt explizit auch Cross-Compiling +\end{itemize} +\end{frame} -Hinweise zu Übungen, Zeitlimit dazu. \end{document} diff --git a/linux-basics/Makefile b/linux-basics/Makefile new file mode 100644 index 0000000..ab3b327 --- /dev/null +++ b/linux-basics/Makefile @@ -0,0 +1,6 @@ +SUBDIRS = boot-process filesystem-structure important-tools linux-processes sh-programming what-is-linux + +all clean:: + for dir in $(SUBDIRS) ; do \ + (cd $$dir && make $@); \ + done diff --git a/realtime/Makefile b/realtime/Makefile new file mode 100644 index 0000000..fa8db4f --- /dev/null +++ b/realtime/Makefile @@ -0,0 +1,7 @@ +SUBDIRS = rt-app-basics rt-basics rt-specialties + +all clean:: + for dir in $(SUBDIRS) ; do \ + (cd $$dir && make $@); \ + done + |
