Was entscheidet, welche Kernelmodule während der Kompilierung statisch im Kernel erstellt werden?

7

Ich habe gerade einen neuen Kernel kompiliert und mich gefragt: Was entscheidet während des Kompilierungsprozesses, welche Kernelmodule statisch im Kernel erstellt werden?

Ich habe dann gelöscht /lib/modules, neu gestartet und festgestellt, dass mein System einwandfrei funktioniert. Es scheint also, dass alle wesentlichen Module statisch im Kernel erstellt wurden.

Ohne /lib/moduleslädt der Kernel 22. Bei vorhandenem Verzeichnis werden 67 Module geladen.

JohnnyFromBF
quelle

Antworten:

15

Sie tun dies als Teil des Konfigurationsprozesses, in der Regel , wenn Sie laufen make config, make menuconfigoder ähnliches. Sie können das Modul als integriert (markiert als *) oder modularisiert (markiert als M) einstellen .

Beispiele hierfür finden Sie in einem Screenshot make menuconfigvon hier :

menuconfig Screenshot

Chris Down
quelle
In welcher Quelldatei finde ich die Standardeinstellungen, falls ich nichts ändere?
JohnnyFromBF
1
.config in dem Ordner, in dem Sie make && make menu_config ausgegeben haben.
icbytes
Was ich meinte war, wie werden die Standardeinstellungen abgerufen? Wenn ich die Kernelquellen herunterlade, gibt es keine .config. Sie wird generiert, wenn ich nach der Ausführung die Standardeinstellungen übernehme make config. Aber ich wollte wissen, woher make configdie Standardeinstellungen stammen?
JohnnyFromBF
Oder lassen Sie es uns so sagen: Woher kommen make defconfigdie Standardwerte? Basierend auf diesem Link ist es creates a config file that uses default settings based on the current system's architecture. Aber wie kommt es dazu current system's architecture?
JohnnyFromBF
1
@JohnnyFromBF Sie sind Kconfigfür die Architektur in den Kernelquellen festgelegt. Siehe beispielsweise die "Standard" -Zeilen
Chris Down
4

Angesichts der Tatsache, dass Sie das Tag /kernelzusätzlich zu hinzugefügt haben, gehe /linux-kernelich davon aus, dass Sie auch an dem generischen Fall interessiert sind.

In Solaris wird seit 1991 alles dynamisch geladen, mit Ausnahme des grundlegenden Kernel-Klebercodes, des Standard-Schedulers und des Pager / Swappers.

Sogar der Root-Dateisystemcode und der Modullader werden dynamisch geladen.

Dadurch muss der Kernel nicht manuell konfiguriert werden. Da Solaris auch keine größenabhängigen Funktionen konfigurieren muss (neue Kernelobjekte werden zur Laufzeit automatisch erstellt, solange genügend Speicher vorhanden ist), ist unter Solaris keine manuelle Konfiguration erforderlich.

Ich frage mich, wann Linux diesen Automatisierungszustand erreichen wird ... Ich glaube jedoch, dass dies niemals passieren wird, da die theoretisch nicht benötigte Kernelkonfiguration (siehe Solaris) als lustige Methode verwendet wird, um Benutzern davon zu erzählen hey, you are able to control the linux kernel.

schily
quelle
Linux wird auch dynamisch geladen. Im Gegensatz zu dem Szenario, das Sie für Solaris beschreiben (ich kenne Solaris nicht gut, sodass Sie möglicherweise Dinge falsch beschreiben), haben Sie als Benutzer jedoch die Möglichkeit, Gerätetreiber direkt im Kernel statisch zu kompilieren. Dies macht Linux im Vergleich zu Solaris für die Verwendung in eingebetteten Geräten usw. wesentlich nützlicher
Slebetman
Beachten Sie den Screenshot in der Antwort von Chris. Beim Kompilieren des Kernels können Sie entweder ein Modul dynamisch laden (die <M> ModularizeOption) oder es statisch kompilieren (die <Y> IncludesOption)
slebetman
Wenn Sie dies "auf Linux-Weise" tun, können Sie auch ladbare Kernelmodule vollständig deaktivieren, was in einigen Szenarien und bei bestimmten Bedrohungsmodellen die Sicherheit erhöhen kann (indem sichergestellt wird, dass es keine sofort verfügbare Möglichkeit gibt, ausführbaren Code in einen laufenden Kernel einzufügen). Die Unterstützung von ladbaren Kernelmodulen ist eine Option unter vielen in der Linux-Kernelkonfiguration. (Und Sie können fast alles im Linux-Kernel auch als ladbare Module kompilieren, wenn das Ihre Sache ist.)
ein CVn
Solaris implementiert aus Sicherheitsgründen signierte Kernelmodule.
schily
Verwendet Solaris also eine anfängliche RAM-Disk oder ähnliches? Wie können Module ohne Modullader geladen werden?
Melab