\input{configpres} \title{Kernel-Grundlagen} \maketitle \subsection{Grundlagen} \subsubsection{Kernel Eigenschaften} \begin{frame} \frametitle{Kernel Eigenschaften} \begin{itemize} \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} \subsubsection{Aufbau} \begin{frame} \frametitle{Aufbau des Kernels} \centering \includegraphics[width=0.8\textwidth]{images/Subsystems.png} \end{frame} \subsubsection{Maintainer} \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} \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} \begin{itemize} \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} \begin{frame}[fragile] \frametitle{Kernel-Konfiguration} \begin{itemize} \item Grosse Zahl von Konfigurations-Optionen \pause \item Speicherung in ".config" \pause \item Ändern der Konfiguration: "make menuconfig" \pause \item Informationen über Optionen in "Kconfig"-Dateien \pause \item Kernel-Buildsystem: Eigenes Subsystem mit eigenem Maintainer \pause \item Unterstützt explizit auch Cross-Compiling \end{itemize} \end{frame} \input{tailpres}