% % Thomas Kuschel 2023 \newcommand{\version}{V6.2} \documentclass[12pt,a4paper]{article} \usepackage[a4paper,margin=25mm]{geometry} \usepackage[ngerman]{babel} %Verwendung von \glqq \qrgg{} \begin{document} \section*{Linux Configuration \version} \subsection{Einführung} Dieses Dokument dient zur Beschreibung von diversen Einstellungen bei der Konfiguration mittels \texttt{ make menuconfig } unter Linux.\\ Es wird nicht näher darauf eingegangen, wie der Kernel kompiliert wird oder welche Voreinstellungen, Programme etc. zum Kompilieren benötigt werden.\\ Zu Beginn der jeweiligen Konfigurationszeile wird der Standardwert (Default) angezeigt. Mein Vorschlag folgt danach.\\ Z.\,B. bei CONFIG\_WERROR~[=n]~\textbf{[Y]}\\ Hier ist der Standarwert ein Nein [n], meine Einstellung ein Ja [Y]. \section{General setup \( \rightarrow \) } \subsection{Compile also drivers which will not load} CONFIG\_COMPILE\_TEST [=n] \textbf{[~]}\\ Einige Treiber können auf einer anderen Plattform kompiliert werden als auf der, für die sie gedacht sind. Obwohl sie dort nicht geladen werden können (oder selbst wenn sie geladen werden können, können sie aufgrund fehlender Hardware-Unterstützung nicht verwendet werden), möchten Entwickler, im Gegensatz zu Distributoren, solche Treiber vielleicht trotzdem kompilieren und testen. \subsection{Compile the kernel with warnings as errors} CONFIG\_WERROR [=n] \textbf{[Y]}\\ Ein Build sollte keine Compiler-Warnungen ausgeben, dies aktiviert die Flags '-Werror' (für C) und '-Dwarnings' (für Rust) um diese Regel standardmäßig zu setzen. Bestimmte Warnungen von anderen Tools z.B. der Linker könnte mit dieser Option Fehler generieren. Deaktivieren ist sinnvoll, wenn Sie einen neuen (oder sehr alten) Compiler bzw. Linker mit seltenen, ungewöhnlichen Warnungen haben. Haben Sie auf Ihrer Architektur Probleme, dann müssen Sie diese Konfiguration deaktivieren, um den Kernel erfolgreich zu bauen. Im Zweifelsfall sagen sie Y für Ja. \subsection{Local version -- append to kernel release} CONFIG\_LOCALVERSION [=] \textbf{[~]}\\ Type: string\\ Hängen Sie eine zusätzliche Zeichenkette an das Ende Ihrer Kernelversion an.\\ Dies wird angezeigt, wenn Sie z.\,B. \texttt{uname} eingeben. Die hier angegebene Zeichenfolge wird an den Inhalt von einem Dateinamen mit \texttt{localverion*} als Objekt und im Quellbaum, in dieser Reihenfolge angezeigt. Die Zeichenkette darf maximal 64 Zeichen lang sein. \subsection{Automatically append version information to the version string} CONFIG\_LOCALVERSION\_AUTO [=y] \textbf{[Y]}\\ Dies versucht automatisch festzustellen, ob der aktuelle Baum ein Release-Tree ist, indem es nach \textbf{Git}-Tags sucht, die zur aktuellen Top-of-Tree-Revision gehören.\\ Eine Zeichenkette des Formats \texttt{-gxxxxxxxx} wird der lokalen Version hinzugefügt, wenn ein git-basierter Baum gefunden wird. Die so erzeugte Zeichenkette wird nach allen passenden \glqq localversion*\grqq -Dateien und nach dem in CONFIG\_LOCALVERSION eingestellten Wert angehängt. (Die hier tatsächlich verwendete Zeichenkette sind die ersten 12 Zeichen, die durch die Ausführung des Befehls erzeugt werden:\\ \indent\texttt{\$ git rev-parse --verify HEAD}\\ der innerhalb des Skripts \glqq scripts/setlocalversion\grqq{} ausgeführt wird.) \subsection{Build ID Salt} CONFIG\_BUILD\_SALT [=] \textbf{[~]}\\ Type: string\\ Dies wird verwendet, um die Binaries und ihre Debug-Infos zu verknüpfen. Wenn diese Option gesetzt ist, dann wird dieser Wert in die Berechnung der Build-ID einbezogen. Wird von Distributionen verwendet, die sicherstellen wollen, dass es eineindeutige IDs zwischen verschiedenen Builds gibt. Üblicherweise brauchen wir das nicht. \subsection{Kernel compression mode} Der Linux-Kernel ist eine Art selbstextrahierende ausführbare Datei.\\ Es stehen mehrere Kompressionsalgorithmen zur Verfügung, die sich in Effizienz, Kompressions- und Dekompressionsgeschwindigkeit unterscheiden. Die Komprimierungsgeschwindigkeit ist nur bei der Erstellung eines Kernels relevant. Die Dekomprimierungsgeschwindigkeit ist bei jedem Systemstart von Bedeutung. (Eine ältere Version dieser Funktionalität (nur bzip2) für 2.4 wurde von Christian Ludwig bereitgestellt) Hohe Komprimierungsoptionen sind vor allem für Benutzer nützlich, die wenig Festplattenplatz zur Verfügung haben (embedded systems), für die aber die Ram-Größe weniger wichtig ist.\\ Überblick: Gzip werden von den älteren Kernelversionen unterstützt,\\ Arch Linux (since Linux/x86 5.9.0) Standard: ZSTD (former: XZ since 4.14.4, predecessor GZIP,XZ)\\ Debian 11.6: XZ @TODO Weitere Linux Distros \subsubsection{Gzip} CONFIG\_KERNEL\_GZIP [=n] \textbf{[~]}\\ Die alte und bewährte gzip-Kompression. Sie bietet ein gutes Gleichgewicht zwischen Kompressionsrate und Dekompressionsgeschwindigkeit. \subsubsection{Bzip2} \subsubsection{LZMA} \subsubsection{XZ} CONFIG\_KERNEL\_XZ [=n] \textbf{[~]}\\ XZ verwendet den LZMA2-Algorithmus und befehlssatzspezifische BCJ-Filter, die das Komprimierungsverhältnis des ausführbaren Codes verbessern können. Die Größe des Kernels ist mit XZ im Vergleich zu gzip etwa 30 \% kleiner. Auf Architekturen, für die es einen BCJ-Filter gibt (i386, x86\_64, ARM, IA-64, PowerPC und SPARC), erzeugt XZ einen um einige Prozent kleineren Kernel als einfaches LZMA. Die Geschwindigkeit ist in etwa die gleiche wie bei LZMA: Die Dekomprimierungsgeschwindigkeit von XZ ist besser als die von bzip2, aber schlechter als die von gzip und LZO. Die Komprimierung ist langsam. \subsubsection{LZO} \subsubsection{LZ4} \subsubsection{ZSTD} CONFIG\_KERNEL\_ZSTD [=y] \textbf{[Y]}\\ ZSTD ist ein Komprimierungsalgorithmus, der auf eine Zwischenkomprimierung mit schneller Dekomprimierungsgeschwindigkeit abzielt. Er komprimiert besser als GZIP und dekomprimiert etwa so schnell wie LZO, ist aber langsamer als LZ4. Sie benötigen mindestens 192~KB~RAM oder mehr zum Booten. Das Kommandozeilenprogramm \texttt{zstd} ist für die Komprimierung erforderlich. \end{document}