% linux_configuration_10_enable_loadable_module_support.tex
% since Linux 6.16

\section{Enable loadable module support \texorpdfstring{$\rightarrow$}{->}}
CONFIG\_MODULES [=y] \textbf{[Y]}\\
Kernel-Module sind kleine Stücke kompilierten Codes, die in den laufenden Kernel eingefügt werden können, anstatt dauerhaft in den Kernel eingebaut zu werden.
Sie verwenden das Werkzeug \texttt{modprobe}, um sie hinzuzufügen (und manchmal zu entfernen).\\
Wenn Sie hier Y angeben, können viele Teile des Kernels als Module gebaut werden (indem Sie M anstelle von Y antworten, wo dies angegeben ist):\\
Dies ist besonders nützlich für selten verwendete Optionen, die zum Booten nicht benötigt werden.
Weitere Informationen finden Sie in den Man Pages für \texttt{modprobe}, \texttt{lsmod}, \texttt{modinfo}, \texttt{insmod} und \texttt{rmmod}.\\
Wenn Sie hier Y angeben, müssen Sie \texttt{make modules\_install} ausführen, um die Module unter\\\texttt{/lib/modules/} abzulegen, wo sie von modprobe gefunden werden können (möglicherweise müssen Sie dazu root sein).
Wenn Sie unsicher sind, sagen Sie Y.
\english{Kernel modules are small pieces of compiled code which can be inserted in the running kernel, rather than being permanently built into the kernel.
You use the ``modprobe'' tool to add (and sometimes remove) them.
If you say Y here, many parts of the kernel can be built as modules (by answering M instead of Y where indicated): this is most useful for infrequently used options which are not required for booting.
For more information, see the man pages for modprobe, lsmod, modinfo, insmod and rmmod.\\
If you say Y here, you will need to run ``make modules\_install'' to put the modules under /lib/modules/ where modprobe can find them (you may need to be root to do this).
If unsure, say Y.}

%10.1
\subsection{Module debugging}
CONFIG\_MODULE\_DEBUG [=n] \textbf{[N]}\\
Ermöglicht das Aktivieren/Deaktivieren von Funktionen, die Ihnen beim Debuggen von Modulen helfen können.
Auf Produktionssystemen benötigen Sie diese Optionen nicht.
\english{Allows you to enable / disable features which can help you debug modules.
You don't need these options on production systems.}

%10.2
\subsection{Forced module loading}
CONFIG\_MODULE\_FORCE\_LOAD [=y] \textbf{[Y]}\\
Erlaubt das Laden von Modulen ohne Versionsinformationen (z.\,B. \texttt{modprobe --force}).
Erzwungenes Laden von Modulen setzt das \glq F\grq{} (forced) taint Flag und ist normalerweise eine wirklich schlechte Idee.
\english{Allow loading of modules without version information (ie. \texttt{modprobe --force}.
Forced module loading sets the `F' (forced) taint flag and is usually a really bad idea.}

%10.3
\subsection{Module unloading}
CONFIG\_MODULE\_UNLOAD [=y] \textbf{[Y]}\\
Ohne diese Option können Sie keine Module entladen (beachten Sie, dass einige Module möglicherweise ohnehin nicht entladbar sind), was Ihren Kernel kleiner, schneller und einfacher macht.
Wenn Sie unsicher sind, sagen Sie Y.
\english{Without this option you will not be able to unload any modules (note that some modules may not be unloadable anyway), which makes your kernel smaller, faster and simpler.
If unsure, say Y.}

\subsubsection{Forced module unloading}
CONFIG\_MODULE\_FORCE\_UNLOAD \colorbox{yellow!80}{[=y] \textbf{[N]}}\\
Mit dieser Option können Sie das Entladen eines Moduls erzwingen, auch wenn der Kernel es für unsicher hält:
Der Kernel wird das Modul entfernen, ohne darauf zu warten, dass jemand die Verwendung des Moduls beendet (mit der Option \texttt{-f} von \texttt{rmmod}).
Dies ist hauptsächlich für Kernel-Entwickler und verzweifelte Benutzer gedacht.
Wenn Sie unsicher sind, sagen Sie N.
\english{This option allows you to force a module to unload, even if the kernel believes it is unsafe: the kernel will remove the module without waiting for anyone to stop using it (using the -f option to rmmod).
This is mainly for kernel developers and desperate users.
If unsure, say N.}
\note{Wir haben nicht vor, an Modulen zu entwickeln, deshalb N.}

\subsubsection{Tainted module unload tracking}
CONFIG\_MODULE\_UNLOAD\_TAINT\_TRACKING [=y] \textbf{[Y]}\\
Mit dieser Option können Sie eine Aufzeichnung über jedes entladene Modul führen, das den Kernel beschädigt hat.
Zusätzlich zur Anzeige einer Liste der verknüpften (oder geladenen) Module, z.\,B. bei der Erkennung einer schlechten Seite (siehe \texttt{bad\_page()}), werden auch die oben genannten Details angezeigt.
Wenn Sie unsicher sind, sagen Sie N.
\english{This option allows you to maintain a record of each unloaded module that tainted the kernel.
In addition to displaying a list of linked (or loaded) modules e.g. on detection of a bad page (see bad\_page()), the aforementioned details are also shown.
If unsure, say N.}

%10.4
\subsection{Module versioning support}
CONFIG\_MODVERSIONS [=n] \textbf{[N]}\\
Normalerweise müssen Sie Module verwenden, die mit Ihrem Kernel kompiliert wurden.
Wenn Sie hier Y angeben, ist es manchmal möglich, Module zu verwenden, die für andere Kernel kompiliert wurden, indem Sie genügend Informationen zu den Modulen hinzufügen, um (hoffentlich) alle Änderungen zu erkennen, die sie mit dem von Ihnen verwendeten Kernel inkompatibel machen würden.\\
Wenn Sie unsicher sind, sagen Sie N.
\english{Usually, you have to use modules compiled with your kernel.
Saying Y here makes it sometimes possible to use modules compiled for different kernels, by adding enough information to the modules to (hopefully) spot any changes which would make them incompatible with the kernel you are running.
If unsure, say N.}

%10.5
\subsection{Source checksum for all modules}
CONFIG\_MODULE\_SRCVERSION\_ALL [=y] \textbf{[Y]}\\
Module, die eine MODULE\_VERSION enthalten, bekommen ein zusätzliches \glqq srcversion\grqq{}-Feld in ihre modinfo-Sektion eingefügt, das eine Summe der Quelldateien enthält, aus denen sie entstanden sind.
Dies hilft den Betreuern, genau zu sehen, welche Quelle verwendet wurde, um ein Modul zu bauen (da andere manchmal die Modulquelle ändern, ohne die Version zu aktualisieren).
Mit dieser Option wird ein solches \glqq srcversion\grqq{}-Feld für alle Module erstellt.
Wenn Sie unsicher sind, sagen Sie N.
\english{Modules which contain a MODULE\_VERSION get an extra ``srcversion'' field inserted into their modinfo section, which contains a sum of the source files which made it.
This helps maintainers see exactly which source was used to build a module (since others sometimes change the module source without updating the version).
With this option, such a ``srcversion'' field will be created for all modules.
If unsure, say N.}

%10.6
\subsection{Module signature verification}
CONFIG\_MODULE\_SIG [=y] \textbf{[Y]}\\
Überprüfung von Modulen auf gültige Signaturen beim Laden: Die Signatur wird einfach an das Modul angehängt.
Für weitere Informationen siehe $<$file:Documentation/admin-guide/module-signing.rst$>$.
Beachten Sie, dass diese Option die OpenSSL-Entwicklungspakete als Kernel-Build-Abhängigkeit hinzufügt, so dass das Signierwerkzeug seine Krypto-Bibliothek verwenden kann.
Sie sollten diese Option aktivieren, wenn Sie entweder \texttt{CONFIG\_SECURITY\_LOCKDOWN\_LSM} oder eine durch eine andere LSM auferlegte Lockdown"=Funktionalität verwenden wollen -- andernfalls werden unsignierte Module unabhängig von der Lockdown-Policy ladbar sein.
!!!WARNUNG!!! Wenn Sie diese Option aktivieren, MÜSSEN Sie sicherstellen, dass das Modul nach dem Signieren NICHT gestrippt wird.
Dies schließt den Debuginfo-Strip ein, der von einigen Paketierern (wie z.\,B. \texttt{rpmbuild}) durchgeführt wird, sowie die Einbindung in ein initramfs, das die Modulgröße reduzieren möchte.
\english{Check modules for valid signatures upon load: the signature is simply appended to the module.
For more information see $<$file:Documentation/admin-guide/module-signing.rst$>$.\\
Note that this option adds the OpenSSL development packages as a kernel build dependency so that the signing tool can use its crypto library.\\
You should enable this option if you wish to use either CONFIG\_SECURITY\_LOCKDOWN\_LSM or lockdown functionality imposed via another LSM -- otherwise unsigned modules will be loadable regardless of the lockdown policy.\\
!!!WARNING!!!  If you enable this option, you MUST make sure that the module DOES NOT get stripped after being signed.
This includes the debuginfo strip done by some packagers (such as rpmbuild) and inclusion into an initramfs that wants the module size reduced.}

\subsubsection{Require modules to be validly signed}
CONFIG\_MODULE\_SIG\_FORCE [=n] \textbf{[N]}\\
Ablehnung von unsignierten Modulen oder signierten Modulen, für die wir keinen Schlüssel haben.
Ohne diesen Schlüssel werden solche Module den Kernel einfach verunreinigen.
\english{Reject unsigned modules or signed modules for which we don't have a key.
Without this, such modules will simply taint the kernel.}

\subsubsection{Automatically sign all modules}
CONFIG\_MODULE\_SIG\_ALL [=y] \textbf{[Y]}\\
Signiere alle Module während make modules\_install.
Ohne diese Option müssen die Module manuell signiert werden, und zwar mit dem Werkzeug scripts/sign-file.
\english{Sign all modules during make modules\_install.
Without this option, modules must be signed manually, using the scripts/sign-file tool.}

%10.7
%\subsection{Which hash algorithm should modules be signed with? () \texorpdfstring{$\rightarrow$}{->}}
\subsection{Hash algorithm to sign modules \texorpdfstring{$\rightarrow$}{->}}
Damit wird festgelegt, welche Art von Hashing-Algorithmus bei der Signaturerstellung verwendet wird.
Dieser Algorithmus \textbf{muss} direkt in den Kernel eingebaut werden, damit eine Signaturprüfung stattfinden kann.
Es ist nicht möglich, ein signiertes Modul zu laden, das den Algorithmus enthält, um die Signatur dieses Moduls zu überprüfen.
\english{This determines which sort of hashing algorithm will be used during signature generation.
This algorithm \_must\_ be built into the kernel directly so that signature verification can take place.
It is not possible to load a signed module containing the algorithm to check the signature on that module.}

\subsubsection{SHA-1}
CONFIG\_MODULE\_SIG\_SHA1 [=n] \textbf{[N]}\\
\textit{Für diese Option gibt es keine Hilfe.}
\english{There is no help available for this option.}

{\color{gray}
\subsubsection*{Sign modules with SHA-224 \tiny{bis 6.6}}
CONFIG\_MODULE\_SIG\_SHA224 [=n] \textbf{[N]}\\
\textit{Für diese Option gibt es keine Hilfe.}
\english{There is no help available for this option.}
}

\subsubsection{SHA-256}
CONFIG\_MODULE\_SIG\_SHA256 [=n] \textbf{[N]}\\
\textit{Für diese Option gibt es keine Hilfe.}
\english{There is no help available for this option.}

\subsubsection{SHA-384}
CONFIG\_MODULE\_SIG\_SHA384 [=n] \textbf{[N]}\\
\textit{Für diese Option gibt es keine Hilfe.}
\english{There is no help available for this option.}

\subsubsection{SHA-512}
CONFIG\_MODULE\_SIG\_SHA512 [=y] \textbf{[Y]}\\
\textit{Für diese Option gibt es keine Hilfe.}
\english{There is no help available for this option.}

\subsubsection{SHA3-256 \tiny{seit 6.7}}
CONFIG\_MODULE\_SIG\_SHA3\_256 [=n] \textbf{[N]}\\
\textit{Für diese Option gibt es keine Hilfe.}
\english{There is no help available for this option.}

\subsubsection{SHA3-384 \tiny{seit 6.7}}
CONFIG\_MODULE\_SIG\_SHA3\_384 [=n] \textbf{[N]}\\
\textit{Für diese Option gibt es keine Hilfe.}
\english{There is no help available for this option.}

\subsubsection{SHA3-512 \tiny{seit 6.7}}
CONFIG\_MODULE\_SIG\_SHA3\_512 [=n] \textbf{[N]}\\
\textit{Für diese Option gibt es keine Hilfe.}
\english{There is no help available for this option.}

%10.8
\subsection{Module compression}
Modulkomprimierung aktivieren, um die Größe der Modul-Binärdateien auf der Festplatte zu reduzieren.
Dies ist vollständig kompatibel mit signierten Modulen.
Das Werkzeug, das für die Arbeit mit Modulen verwendet wird, muss den ausgewählten Kompressionstyp unterstützen.
\texttt{kmod} KANN gzip, xz und zstd unterstützen.
Andere Werkzeuge haben möglicherweise eine eingeschränkte Auswahl der unterstützten Typen. \\
Beachten Sie, dass es für Module innerhalb einer initrd oder initramfs effizienter ist, stattdessen die gesamte ramdisk zu komprimieren. \\
Wenn Sie unsicher sind, wählen Sie N.
\english{Enable module compression to reduce on-disk size of module binaries.
This is fully compatible with signed modules.\\
The tool used to work with modules needs to support the selected compression type.
kmod MAY support gzip, xz and zstd.
Other tools might have a limited selection of the supported types.\\
Note that for modules inside an initrd or initramfs, it's more efficient to compress the whole ramdisk instead.\\
If unsure, say N.}

\subsubsection{Module compression type () \texorpdfstring{$\rightarrow$}{->}}
Auswahl des unterstützten Algorithmus für die Modulkomprimierung.
\english{Choose the supported algorithm for module compression.}

%\subsubsection{None}
%CONFIG\_MODULE\_COMPRESSION\_NONE [=n] \textbf{[N]}\\
%Komprimieren Sie die Module nicht. Die installierten Module sind mit der Endung .ko versehen.
\paragraph{GZIP}\mbox{}\\
CONFIG\_MODULE\_COMPRESSION\_GZIP [=n] \textbf{[N]}\\*
Komprimieren Sie Module mit GZIP. Die installierten Module sind mit der Endung \texttt{.ko.gz} versehen.
\english{Support modules compressed with GZIP. The installed modules are suffixed with .ko.gz.}
\paragraph{XZ}\mbox{}\\
CONFIG\_MODULE\_COMPRESSION\_XZ [=n] \textbf{[N]}\\*
Komprimieren Sie Module mit XZ. Die installierten Module sind mit der Endung \texttt{.ko.xz} versehen.
\english{Support modules compressed with XZ. The installed modules are suffixed with .ko.xz.}
\paragraph{ZSTD}\mbox{}\\
CONFIG\_MODULE\_COMPRESS\_ZSTD [=y] \textbf{[Y]}\\*
Komprimieren Sie Module mit ZSTD. Die installierten Module sind mit der Endung \texttt{.ko.zst} versehen.
\english{Support modules compressed with ZSTD. The installed modules are suffixed with .ko.zst.}

\subsubsection{Automatically compress all modules}
CONFIG\_MODULE\_COMPRESS\_ALL [=y] \textbf{[Y]}\\*
Alle Module während \texttt{make modules\_install} komprimieren.\\
Ihr Build-System muss das entsprechende Komprimierungswerkzeug für den gewählten Komprimierungstyp bereitstellen.
Externe Module werden während der Installation ebenfalls auf die gleiche Weise komprimiert.
\english{Compress all modules during `make modules\_install'.\\
Your build system needs to provide the appropriate compression tool for the selected compression type.
External modules will also be compressed in the same way during the installation.}

\subsubsection{Support in-kernel module decompression}
CONFIG\_MODULE\_DECOMPRESS [=y] \textbf{[Y]}\\*
Unterstützung für die Dekomprimierung von Kernelmodulen durch den Kernel selbst, anstatt sich auf den Userspace zu verlassen, um diese Aufgabe zu erledigen.
Nützlich, wenn die Sicherheitsrichtlinie für das Load Pinning aktiviert ist.
Wenn Sie unsicher sind, sagen Sie N.
\english{Support for decompressing kernel modules by the kernel itself instead of relying on userspace to perform this task.
Useful when load pinning security policy is enabled.\\
If unsure, say N.}

%10.9
\subsection{Allow loading of modules with missing namespace imports}
CONFIG\_MODULE\_ALLOW\_MISSING\_NAMESPACE\_IMPORTS [=y] \textbf{[Y]}\\*
Symbole, die mit \texttt{EXPORT\_SYMBOL\_NS*()} exportiert werden, gelten als in einem Namespace exportiert.
Ein Modul, das ein Symbol verwendet, das mit einem solchen Namespace exportiert wurde, muss den Namespace über \texttt{MODULE\_IMPORT\_NS()} importieren.
Es gibt keinen technischen Grund, korrekte Namespace-Importe zu erzwingen, aber es schafft Konsistenz zwischen Symbolen, die Namespaces definieren und Benutzern, die Namespaces importieren, die sie verwenden.
Diese Option lockert diese Anforderung und hebt die Durchsetzung beim Laden eines Moduls auf.
Wenn Sie unsicher sind, sagen Sie N.
\english{Symbols exported with EXPORT\_SYMBOL\_NS*() are considered exported in a namespace.\\
A module that makes use of a symbol exported with such a namespace is required to import the namespace via MODULE\_IMPORT\_NS("").\\
There is no technical reason to enforce correct namespace imports, but it creates consistency between symbols defining namespaces and users importing namespaces they make use of.
This option relaxes this requirement and lifts the enforcement when loading a module.\\
If unsure, say N.}

%10.10
\subsection{Path to modprobe binary}
CONFIG\_MODPROBE\_PATH [=/sbin/modprobe] \textbf{[/sbin/modprobe]}\\
Wenn der Kernel-Code ein Modul anfordert, geschieht dies durch den Aufruf des Userspace"=Dienstprogramms \texttt{modprobe}.
Mit dieser Option können Sie den Pfad festlegen, in dem diese Binärdatei zu finden ist.
Dies kann zur Laufzeit über die sysctl-Datei /proc/sys/kernel/modprobe geändert werden.
Wenn Sie diese Option auf eine leere Zeichenkette setzen, wird die Fähigkeit des Kernels, Module anzufordern, ausgeschaltet (der Userspace kann jedoch weiterhin explizit Module laden).
\english{When kernel code requests a module, it does so by calling the ``modprobe'' userspace utility.
This option allows you to set the path where that binary is found.
This can be changed at runtime via the sysctl file /proc/sys/kernel/modprobe.
Setting this to the empty string removes the kernel's ability to request modules (but userspace can still load modules explicitly).}

%10.11
\subsection{Trim unused exported kernel symbols}
CONFIG\_TRIM\_UNUSED\_KSYMS [=n] \textbf{[N]}\\*
Der Kernel und einige Module stellen viele Symbole für andere Module über \texttt{EXPORT\_SYMBOL()} und Varianten zur Verfügung.
Je nach den in Ihrer Kernelkonfiguration ausgewählten Modulen werden viele dieser exportierten Symbole möglicherweise nie verwendet.
Mit dieser Option können unbenutzte exportierte Symbole aus dem Build entfernt werden.
Im Gegenzug bietet dies dem Compiler mehr Möglichkeiten (insbesondere bei der Verwendung von LTO), den Code zu optimieren und die Binärgröße zu reduzieren.
Dies könnte auch einige Sicherheitsvorteile mit sich bringen.
Wenn Sie unsicher sind oder wenn Sie Out-of-Tree-Module bauen müssen, sagen Sie N.
\english{The kernel and some modules make many symbols available for other modules to use via EXPORT\_SYMBOL() and variants.
Depending on the set of modules being selected in your kernel configuration, many of those exported symbols might never be used.\\
This option allows for unused exported symbols to be dropped from the build.
In turn, this provides the compiler more opportunities (especially when using LTO) for optimizing the code and reducing binary size.
This might have some security advantages as well.\\
If unsure, or if you need to build out-of-tree modules, say N.}
