diff --git a/documentation/linux_configuration.pdf b/documentation/linux_configuration.pdf index 43ed1c0..e6fca7b 100644 Binary files a/documentation/linux_configuration.pdf and b/documentation/linux_configuration.pdf differ diff --git a/documentation/linux_configuration.tex b/documentation/linux_configuration.tex index 2e2f781..6d3aec9 100644 --- a/documentation/linux_configuration.tex +++ b/documentation/linux_configuration.tex @@ -1,6 +1,13 @@ % % Thomas Kuschel 2023 \newcommand{\version}{V6.7} +% preconditions: +% install on ARCH linux: +% pacman -S texlive-plaingeneric +% pacman -S texlive-binextra +% pacman -S texlive-langgerman +% pacman -S hyphen hyphen-de + \documentclass[10pt,a4paper]{article} %\documentclass[12pt,a4paper]{report} \usepackage[a4paper,margin=25mm]{geometry} @@ -10007,6 +10014,269 @@ dynamischen Major/Minor"=Nummern um. Hinweis: Wenn CONFIG\_TMPFS nicht aktiviert ist, wird stattdessen das einfachere ramfs"=Dateisystem verwendet. +\paragraph{Automount devtmpfs at /dev, after the kernel mounted the rootfs}$~$\\ +CONFIG\_DEVTMPFS\_MOUNT %\colorbox{yellow!80}% +{[=y] \textbf{[Y]}}\\* +Dies weist den Kernel an, das Dateisystem devtmpfs automatisch unter /dev einzuhängen, +direkt nachdem der Kernel das Root"=Dateisystem eingehängt hat. Das Verhalten kann mit +dem Kommandozeilenparameter: \texttt{devtmpfs.mount=$0|1$} überschrieben werden. +Diese Option hat keinen Einfluss auf initramfs"=basiertes Booten, hier muss das +devtmpfs"=Dateisystem immer manuell eingehängt werden, nachdem das rootfs eingehängt +wurde.\\ +Wenn diese Option aktiviert ist, kann ein System im Rettungsmodus mit +\texttt{init=/bin/sh} gebootet werden, auch wenn das /dev"=Verzeichnis auf dem rootfs +komplett leer ist. + +\paragraph{Use nosuid,noexec mount options on devtmpfs}$~$\\ +CONFIG\_DEVTMPFS\_SAFE [=y] \textbf{[Y]}\\* +Dies weist den Kernel an, die Einhängeflags MS\_NOEXEC und MS\_NOSUID beim Einhängen +von devtmpfs zu berücksichtigen.\\ +Beachten Sie: Wenn dies aktiviert ist, können Dinge wie /dev/mem nicht mit dem +PROT\_EXEC"=Flag gemappt werden. Dies kann z.~B. Nicht"=KMS"=Grafiktreiber beschädigen. + +\subsubsection{Select only drivers that don't need compile-time external firmware} +CONFIG\_STANDALONE [=y] \textbf{[Y]}\\* +Wählen Sie diese Option, wenn Sie keine magische Firmware für Treiber haben, +die diese benötigen.\\ +Wenn Sie unsicher sind, sagen Sie Y. + +\subsubsection{Disable drivers features which enable custom firmware building} +CONFIG\_PREVENT\_FIRMWARE\_BUILD [=y] \textbf{[Y]}\\* +Sagen Sie ja, um Treiberfunktionen zu deaktivieren, die es ermöglichen, eine +benutzerdefinierte Treiber"=Firmware zur Kernel"=Erstellungszeit zu erstellen. +Diese Treiber verwenden nicht die Kernel"=Firmware"=API zum Laden der Firmware +(CONFIG\_FW\_LOADER), sondern ihren eigenen benutzerdefinierten Lademechanismus. +Die benötigte Firmware wird in der Regel mit dem Treiber ausgeliefert, das +Erstellen der Treiber"=Firmware sollte nur notwendig sein, wenn Sie eine +aktualisierte Firmware"=Quelle haben.\\ +Firmware sollte nicht als Teil des Kernels gebaut werden. +Heutzutage sollte man dies immer verhindern und hier Y sagen. +Es gibt nur zwei alte Treiber, die die Erstellung ihrer Firmware zur +Kernel"=Erstellungszeit ermöglichen: +\begin{itemize} + \item CONFIG\_WANXL durch CONFIG\_WANXL\_BUILD\_FIRMWARE + \item CONFIG\_SCSI\_AIC79XX durch CONFIG\_AIC79XX\_BUILD\_FIRMWARE +\end{itemize} + +\subsubsection{Firmware loader \texorpdfstring{$\rightarrow$}{->}} +\textit{(Firmware-Ladeprogramm)} + +\paragraph{Firmware loading facility}$~$\\ +CONFIG\_FW\_LOADER [=y] \textbf{[Y]}\\* +Damit wird die Möglichkeit zum Laden der Firmware im Kernel aktiviert. +Der Kernel sucht zunächst nach eingebauter Firmware, wenn er welche hat. +Anschließend sucht er in einer Reihe von Dateisystempfaden nach der gewünschten +Firmware: +\begin{itemize} + \item firmware\_class Pfad-Modulparameter oder Kernel-Boot-Parameter + \item /lib/firmware/updates/UTS\_RELEASE + \item /lib/firmware/updates + \item /lib/firmware/UTS\_RELEASE + \item /lib/firmware +\end{itemize} +Die Aktivierung dieser Funktion vergrößert Ihr Kernel"=Image nur um etwa 828~Bytes. +Aktivieren Sie diese Option nur, wenn Sie sicher sind, dass Sie keine Firmware +benötigen. +Normalerweise wollen Sie diese Funktion eingebaut haben (=y), aber Sie können sie +auch als Modul aktivieren, in diesem Fall wird das Modul \texttt{firmware\_class} +gebaut. +Sie sollten auch sicherstellen, dass Sie diese integrierte Funktion aktivieren, +wenn Sie die integrierte Firmware (CONFIG\_EXTRA\_FIRMWARE) aktivieren wollen. + +\subparagraph{Log filenames and checksums for loaded firmware}$~$\\ +CONFIG\_FW\_LOADER\_DEBUG [=y] \textbf{[Y]}\\* +Wählen Sie diese Option, um mit dynamischem Debugging die Dateinamen der Firmware +und SHA256"=Prüfsummen für jede geladene Firmware"=Datei im Kernel-Protokoll zu +protokollieren. + +\subparagraph{Build named firmware blobs into the kernel binary}$~$\\ +CONFIG\_EXTRA\_FIRMWARE [=] \textbf{[~]}\\* +Gerätetreiber, die Firmware benötigen, können normalerweise damit umgehen, dass +der Kernel Firmware aus den verschiedenen unterstützten +\texttt{/lib/firmware/}"=Pfaden +lädt. Diese Option ermöglicht es Ihnen, Firmware"=Dateien in den Kernel +einzubauen. Eingebaute Firmware"=Suchen haben Vorrang vor Firmware"=Suchvorgängen +unter Verwendung Ihres Dateisystems über die unterstützten +\texttt{/lib/firmware}"=Pfade, +die unter CONFIG\_FW\_LOADER dokumentiert sind. +Dies kann zu Testzwecken nützlich sein oder wenn die Firmware zu einem frühen +Zeitpunkt beim Booten benötigt wird und man sich nicht darauf verlassen kann, +dass die Firmware in einer initrd oder initramfs abgelegt ist. +Diese Option ist eine Zeichenkette und nimmt die (durch Leerzeichen getrennten) +Namen der Firmware"=Dateien auf -- die gleichen Namen, die in MODULE\_FIRMWARE() +und request\_firmware() im Quelltext erscheinen. Diese Dateien sollten in dem +Verzeichnis vorhanden sein, das mit der Option EXTRA\_FIRMWARE\_DIR angegeben +wurde, was standardmäßig /lib/firmware ist. +Sie könnten zum Beispiel \texttt{CONFIG\_EXTRA\_FIRMWARE=\dq usb8388.bin\dq} setzen, +die Datei usb8388.bin nach /lib/firmware kopieren und den Kernel bauen. +Dann wird jede request\_firmware(\glqq usb8388.bin\grqq{}) intern im Kernel +befriedigt, ohne dass das Dateisystem zur Laufzeit eingesehen werden muss. +WARNUNG: Wenn Sie zusätzliche Firmware"=Dateien in Ihr binäres Kernel"=Image +einbinden, die nicht unter den Bedingungen der GPL verfügbar sind, dann kann es +eine Verletzung der GPL sein, das resultierende Image zu verteilen, da es +sowohl GPL- als auch Nicht"=GPL"=Arbeiten kombiniert. Sie sollten einen eigenen +Anwalt konsultieren, bevor Sie ein solches Image weitergeben.\\ +HINWEIS: Komprimierte Dateien werden in EXTRA\_FIRMWARE nicht unterstützt. + +\subparagraph{Enable the firmware sysfs fallback mechanism}$~$\\ +CONFIG\_FW\_LOADER\_USER\_HELPER [=n] \textbf{[~]}\\* +Mit dieser Option wird eine sysfs"=Lademöglichkeit aktiviert, um das Laden von +Firmware in den Kernel über den Userspace als Fallback"=Mechanismus zu +ermöglichen, und zwar nur dann, wenn die direkte Dateisystem"=Suche des Kernels +nach der Firmware unter Verwendung der verschiedenen +\texttt{/lib/firmware/}"=Pfade oder des im Modulparameter \texttt{firmware\_class} +path angegebenen Pfades oder des Kernel"=Boot"=Parameters \texttt{firmware\_class} +path fehlgeschlagen ist, wenn die firmware\_class eingebaut ist. +Einzelheiten zur Arbeit mit dem sysfs"=Fallback"=Mechanismus finden Sie in +Documentation/driver-api/firmware/fallback-mechanisms.rst.\\ +Die direkte Dateisystem"=Suche nach Firmware wird nun immer zuerst verwendet. +Wenn die direkte Dateisystem"=Suche des Kernels nach Firmware die angeforderte +Firmware nicht findet, wird eine sysfs"=Fallback"=Lademöglichkeit zur Verfügung +gestellt, und der Userspace wird durch uevents darüber informiert. Das uevent +kann unterdrückt werden, wenn der Treiber es explizit anfordert. Wenn der +benutzerdefinierte Fallback"=Mechanismus verwendet wird, muss der Userspace +immer bestätigen, dass die Firmware nicht gefunden wurde, da die +Zeitüberschreitung für den Fallback"=Mechanismus deaktiviert ist und +fehlgeschlagene Anfragen für immer verweilen. +Dies war früher die Standard"=Firmware"=Lademöglichkeit, und udev lauschte +auf uvents, um Firmware für den Kernel zu laden. Die Funktionalität der +Firmware"=Lademöglichkeit in udev wurde entfernt, so dass sie nicht mehr als +Ausweichmechanismus verwendet werden kann. Linux verlässt sich nicht mehr auf +einen Fallback"=Mechanismus im Userspace und verwendet diesen auch nicht mehr. +Wenn Sie sich auf einen solchen Mechanismus verlassen müssen, wenden Sie sich +an die freizügig lizenzierte Firmwared: +\url{https://github.com/teg/firmwared}\\ +Da dies früher die Standardfunktion zum Laden von Firmware war, kann es sein, +dass ein alter Userspace existiert, der sich darauf verlässt, und daher kann +dieser Mechanismus niemals aus dem Kernel entfernt werden. +Sie sollten diese Funktionalität nur aktivieren, wenn Sie sicher sind, dass +Sie einen Ausweichmechanismus benötigen und einen Userspace"=Mechanismus +bereithalten, um Firmware zu laden, falls diese nicht gefunden wird. Ein +Hauptgrund dafür kann sein, dass Sie Treiber haben, die eine eingebaute +Firmware benötigen und aus irgendeinem Grund die benötigte Firmware nicht in +initramfs unterbringen können. +Ein weiterer Grund, warum Kernel diese Funktion aktiviert haben können, ist +die Unterstützung eines Treibers, der explizit auf diesen Fallback"=Mechanismus +angewiesen ist. Derzeit benötigen nur zwei Treiber diese Funktion: +\begin{itemize} + \item CONFIG\_LEDS\_LP55XX\_COMMON + \item CONFIG\_DELL\_RBU +\end{itemize} +Abgesehen von der Unterstützung der oben genannten Treiber kann ein weiterer +Grund dafür sein, dass Ihre Firmware außerhalb der Pfade liegt, nach denen der +Kernel sucht, und nicht mit dem Modulparameter firmware\_class path oder dem +Boot"=Parameter firmware\_class path des Kernels angegeben werden kann, wenn +firmware\_class eingebaut ist. +Ein moderner Anwendungsfall könnte darin bestehen, während der Bereitstellung +vorübergehend eine benutzerdefinierte Partition einzuhängen, auf die nur der +Userspace Zugriff hat, und diese dann zu verwenden, um nach der benötigten +Firmware zu suchen und sie zu holen. Eine solche Art von Treiberfunktionalität +wird von den Herstellern möglicherweise nicht einmal gewünscht, so dass sie +nur als Schnittstelle für die Bereitstellung unterstützt werden muss. +Da die Firmware"=Lademöglichkeit von udev entfernt wurde, können Sie +firmwared oder einen Fork davon verwenden, um die Art und Weise, wie Sie +Firmware auf der Grundlage von ausgegebenen uevents laden wollen, anzupassen. +Wenn Sie diese Option aktivieren, erhöht sich die Größe Ihres Kernel"=Images +um etwa 13436~Bytes.\\ +Wenn Sie sich unsicher sind, sagen Sie hier N, es sei denn, Sie sind eine +Linux"=Distribution und müssen die beiden oben genannten Treiber unterstützen +oder Sie sind sich sicher, dass Sie eine wirklich benutzerdefinierte +Firmware"=Lademöglichkeit im Userspace unterstützen müssen. + +\subparagraph{Enable compressed firmware support}$~$\\ +CONFIG\_FW\_LOADER\_COMPRESS [=y] \textbf{[Y]}\\* +Diese Option aktiviert die Unterstützung für das Laden komprimierter +Firmware"=Dateien. Der Aufrufer der Firmware"=API erhält den dekomprimierten +Dateiinhalt. Die komprimierte Datei wird nur dann als Fallback geladen, wenn +das Laden der Rohdatei zunächst fehlgeschlagen ist.\\ +Die Unterstützung für komprimierte Firmware gilt nicht für Firmware-Images, +die in das Kernel-Image eingebaut sind (CONFIG\_EXTRA\_FIRMWARE). + +\subsubparagraph{Enable XZ-compressed firmware support}$~$\\ +CONFIG\_FW\_LOADER\_COMPRESS\_XZ [=y] \textbf{[Y]}\\* +Mit dieser Option wird die Unterstützung für XZ"=komprimierte Dateien +hinzugefügt. Die Dateien müssen entweder mit dem Integritätsprüfungstyp +\texttt{none} oder \texttt{crc32} komprimiert sein (übergeben Sie die Option +\texttt{\dq -C crc32\dq} an den Befehl \texttt{xz}). + +\subsubparagraph{Enable ZSTD-compressed firmware support}$~$\\ +CONFIG\_FW\_LOADER\_COMPRESS\_ZSTD [=y] \textbf{[Y]}\\* +Mit dieser Option wird die Unterstützung für ZSTD"=komprimierte Dateien +hinzugefügt. + +\subparagraph{Enable firmware caching during suspend}$~$\\ +CONFIG\_FW\_CACHE [=y] \textbf{[Y]}\\* +Da die Firmware"=Zwischenspeicherung uevent"=Meldungen erzeugt, die über +einen Netlink"=Socket gesendet werden, kann sie auf vielen Plattformen ein +Suspendieren verhindern. Es ist auch nicht immer nützlich, daher haben wir +auf solchen Plattformen die Option.\\ +Wenn Sie unsicher sind, sagen Sie Y. + +\subparagraph{Enable users to initiate firmware updates using sysfs}$~$\\ +CONFIG\_FW\_UPLOAD [=y] \textbf{[Y]}\\* +Durch die Aktivierung dieser Option können Gerätetreiber eine persistente +\texttt{sysfs}"=Schnittstelle bereitstellen, über die Firmware"=Updates aus +dem Userspace initiiert werden können. Beispielsweise laden FPGA"=basierte +PCIe"=Karten beim Booten der Karte Firmware und FPGA"=Images aus dem lokalen +FLASH. Die Images im FLASH können durch neue, vom Benutzer bereitgestellte +Images aktualisiert werden. Aktivieren Sie dieses Gerät, um Karten zu +unterstützen, die auf vom Benutzer initiierte Updates für Firmware"=Dateien +angewiesen sind. +Wenn Sie unsicher sind, sagen Sie N. + +\subsubsection{Driver Core verbose debug message} +CONFIG\_DEBUG\_DRIVER [=n] \textbf{[~]}\\* +Geben Sie hier Y an, wenn Sie möchten, dass der Treiberkern eine Reihe von +Debugmeldungen in das Systemprotokoll schreibt. Wählen Sie dies, wenn Sie ein +Problem mit dem Treiberkern haben und mehr über die Vorgänge erfahren möchten. +Wenn Sie sich nicht sicher sind, wählen Sie hier N. + +\subsubsection{Managed device resources verbose debug messages} +CONFIG\_DEBUG\_DEVRES [=n] \textbf{[~]}\\* +Diese Option aktiviert den Kernelparameter devres.log. Wenn sie auf einen Wert +ungleich Null gesetzt ist, werden Devres"=Debug"=Meldungen gedruckt. Wählen +Sie diese Option, wenn Sie ein Problem mit devres haben oder die +Ressourcenverwaltung für ein verwaltetes Gerät debuggen wollen. +\texttt{devres.log} +kann vom sysfs"=Knoten aus ein- und ausgeschaltet werden.\\ +Wenn Sie sich diesbezüglich unsicher sind, sagen Sie hier N. + +\subsubsection{Test driver remove calls during probe (UNSTABLE)} +CONFIG\_DEBUG\_TEST\_DRIVER\_REMOVE [=n] \textbf{[~]}\\* +Geben Sie hier Y an, wenn Sie möchten, +dass der Treiberkern die Funktionen zum Entfernen von Treibern durch den +Aufruf von probe, remove, probe testet. Dadurch wird der Entfernungspfad +getestet, ohne dass der Treiber entbunden oder das Treibermodul entladen +werden muss. +Es wird erwartet, dass diese Option Fehler findet und Ihr System unbrauchbar +machen kann. Sie sollten hier N angeben, es sei denn, Sie wollen diese +Funktion ausdrücklich testen. + +\subsubsection{Build kernel module to test asynchronous driver probing} +CONFIG\_TEST\_ASYNC\_DRIVER\_PROBE [=n] \textbf{[~]}\\* +Die Aktivierung dieser Option erzeugt ein Kernelmodul, mit dem die asynchrone +Treiberprüfung durch den Gerätekern getestet werden kann. +Der Modulname lautet \texttt{test\_async\_driver\_probe.ko}\\ +Wenn Sie unsicher sind, sagen Sie N. + +\subsubsection{Enable verbose DMA\_FENCE\_TRACE messages} +CONFIG\_DMA\_FENCE\_TRACE [=n] \textbf{[~]}\\* +Aktivieren Sie die Druckfunktion DMA\_FENCE\_TRACE. Dies fügt dem +Konsolenprotokoll zusätzlichen Spam hinzu, erleichtert aber die Diagnose +von Problemen im Zusammenhang mit Blockierungen bei DMA"=Puffern, die von +mehreren Geräten gemeinsam genutzt werden. + +\subsubsection{sync\_state() behavior defaults to timeout instead of strict} +CONFIG\_FW\_DEVLINK\_SYNC\_STATE\_TIMEOUT [=n] \textbf{[~]}\\* +Dies entspricht dem Hinzufügen des Kernel"=Kommandozeilenparameters\\ +\texttt{\dq fw\_devlink.sync\_state=timeout\dq}.\\ +Geben Sie das Warten auf Verbraucher auf und rufen Sie sync\_state() auf +allen Geräten auf, die ihre sync\_state()"=Aufrufe noch nicht erhalten haben, +nachdem deferred\_probe\_timeout abgelaufen ist oder durch late\_initcall(), +wenn !CONFIG\_MODULES. Sie sollten hier fast immer N auswählen, es sei denn, +Sie haben bereits erfolgreich mit der Kommandozeilenoption auf jedem +System/Board getestet, auf dem Ihr Kernel voraussichtlich funktionieren wird. + \end{document} \texorpdfstring{$\rightarrow$}{->}