\input{configpres} \title{Linux Kernel} \maketitle \subsection{Grundlagen} \subsubsection{Facts} \begin{frame} \frametitle{Facts} \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 hohes Entwicklungstempo \item hervorragende Netzwerk-Fähigkeiten \item Echtzeit-Fähigkeit leicht und sauber erreichbar \end{itemize} \end{frame} \subsubsection{Umfang - Linux 4.16-rc5 (16.03.2018)} \begin{frame}[fragile] \frametitle{Lines of code by language} \begin{verbatim} ansic: 16.686.769 (97.83%) asm: 295.663 (1.73%) perl: 26.424 (0.15%) sh: 19.168 (0.11%) python: 15.685 (0.09%) cpp: 4.919 (0.03%) yacc: 4.600 (0.03%) lex: 2.478 (0.01%) awk: 1.387 (0.01%) pascal: 231 (0.00%) sed: 5 (0.00%) \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{Lines of code per folder} \begin{verbatim} 11.134.588 drivers 66% c=11.124.729 asm= 2.744 2.073.368 arch 11% c= 1.778.733 asm=290.614 869.993 fs 5% c= 869.993 775.712 sound 5% c= 775.712 712.404 net 5% c= 712.404 540.702 include 3% c= 538.568 286.340 tools 2% c= 253.768 python= 12.196 sh= 11.354 perl= 4.012 191.741 kernel 2% c= 191.741 101.006 lib 1% c= 100.874 83.858 mm 1% c= 83.858 81.386 crypto 1% c= 81.386 59.271 security 1% c= 59.271 \end{verbatim} \end{frame} \subsubsection{Architektur} \begin{frame} \frametitle{Subsysteme} \centering \includegraphics[width=\textwidth]{images/linux-kernel-map.png} \end{frame} \begin{frame} \frametitle{Treiber} \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} \frametitle{Linus Torvalds} \includegraphics[height=5cm]{images/linus7.jpg} Maintains: THE REST Company: linuxfoundation \end{frame} \begin{frame} \frametitle{Alan Cox} \includegraphics[height=5cm]{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} \frametitle{Andrew Morton} \includegraphics[height=5cm]{images/morton.jpg} Maintains: EXT3, JOURNALLING LAYER FOR BLOCK DEVICES (JBD) Credits: Linux Quality Management Company: Google \end{frame} \begin{frame} \frametitle{Greg Kroah-Hartmann} \includegraphics[height=5cm]{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} \frametitle{Christoph Hellwig} \includegraphics[height=5cm]{images/hch.jpg} Maintains: FREEVXFS FILESYSTEM, PERSONALITY HANDLING, SYSV FILESYSTEM, XFS FILESYSTEM Company: ?? \end{frame} \begin{frame} \frametitle{Thomas Gleixner} \includegraphics[height=5cm]{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 (4.x)} \begin{itemize} \item 4.8.2 oder 4.9-rc1 \pause \item 4. - historisch gegeben \pause \item .15 - aktuelle Version \pause \item .1 - Security Fix \pause \item .rc1 - Release Candidate \end{itemize} \end{frame} \begin{frame} \frametitle{Versionierung (0.x \dots 1.3.x)} \begin{itemize} \item 09.91-02.94: 0.01\dots0.99 kein definiertes Versionierungsschema \item 03.94-03.94: 1.0 erster stabiler Kernel \item 04.94-03.95: 1.1.x Entwicklerversion \item 03.95-08.95: 1.2.x Stabiler Kernel Alpha, MIPS, SPARC \item 06.95-05.96: 1.3.x Entwicklerversion MP Support \end{itemize} \end{frame} \begin{frame} \frametitle{Versionierung (2.0.x \dots 4.x)} \begin{itemize} \item 06.96-02.04: 2.0.x SMP Support \item 09.96-01.99: 2.1.x Entwicklerversion \item 01.99-02.04: 2.2.x Stabiler Kernel, IPv6 \item 05.99-05.00: 2.3.x Entwicklerversion \item 01.01-12.08: 2.4.x Stabiler Kernel, USB, ACPI, iptables \item 11.01-07.03: 2.5.x Entwicklerversion \item 12.03-TODAY: 2.6.x, 3.x, 4.x neues Entwicklungsschema \end{itemize} Versionssprünge \begin{itemize} \item 05.11: 2.6.39\dots3.0 \item 02.15: 3.19\dots4.0 \end{itemize} \end{frame} \begin{frame} \includegraphics[height=6cm]{images/kernelversions.png} Quelle: http://article.sapub.org \end{frame} \subsubsection{Entwicklungstempo} \begin{frame} \frametitle{Linux 4.x} \begin{itemize} \item 8 \dots 10 weeks release cycle \item \dots about 14,000 patches each cycle \item \dots from about 1500 developers \item \dots about 200 companies \end{itemize} \end{frame} \begin{frame} \includegraphics[height=6cm]{images/patches_per_hour.png} Quelle: https://github.com/gregkh/kernel-development \end{frame} \begin{frame} \includegraphics[height=6cm]{images/linux-kernel-development-companies.png} Quelle: https://fossbytes.com \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}