/ proc / sys vs / sys / modules / mod / parameter

10

Ich habe mich in den letzten Tagen gefragt, wie genau das funktioniert. Wir können Kernel-Laufzeitparameter mit sysctl oder echo boolen 1> /proc/sys/module/exactParameterin /sys/modules/module/parameters/parameterfestlegen, aber wir können auch Werte festlegen.

Beziehen sich die Parameter für Module /proc/sys/nur auf den Kernel? oder könnte es auch Parameter für ladbare Kernelmodule geben?

LKM enthüllt nach dem Laden in den laufenden Kernel ihre Parameter in /sys/modules/module/paraeter/params. Bedeutet das, dass es keine Parameter für Module gibt, die in den Kernel kompiliert wurden?

Was ist der Unterschied zwischen beiden Verzeichnissen?

ast
quelle

Antworten:

5

Es gibt wenig Beziehung zwischen /proc/sysund /sysaußer der Tatsache, dass beide Kernel-Schnittstellen und ein Zusammentreffen von Namen sind.

/proc/sysist eine Schnittstelle zu sysctl , bei der es sich um Kernel-Konfigurationsparameter handelt. Das Lesen oder Ändern /proc/sys/foo/barentspricht dem Abrufen oder Einstellen des foo.barSystems. Sysctl-Werte sind nach semantischen Kategorien organisiert und stehen nicht in direktem Zusammenhang mit der Struktur des Kernels. Viele sysctl-Werte sind Einstellungen, die auf jedem Linux-System vorhanden sind, unabhängig davon, in welchen Treibern oder Funktionen kompiliert wurde. Einige beziehen sich auf optionale Funktionen (z. B. bestimmte Netzwerkprotokolle), jedoch niemals auf bestimmte Hardwaregeräte.

/sys/moduleist, wie der Name schon sagt, eine Schnittstelle zu Kernelmodulen. Jedes Verzeichnis entspricht einem Kernelmodul. Sie können die Parameter des Moduls lesen und manchmal ändern, fooindem Sie in schreiben /sys/module/foo/parameters/*.

Komponenten, die in den Kernel geladen werden, lesen ihre Parameter über die Kernel-Befehlszeile. Diese Parameter können zur Laufzeit nicht eingestellt werden (zumindest nicht über eine automatisch generierte Schnittstelle wie /sys/module: Die Komponente kann hierfür eine benutzerdefinierte Schnittstelle verfügbar machen).

Gilles 'SO - hör auf böse zu sein'
quelle
Für Module, die in den Kernel kompiliert wurden, kann ich Parameter nur über die Kernel-Befehlszeile hinzufügen (z. B. / proc / cmdline). Gibt es keine andere Möglichkeit, sie zur Laufzeit zu ändern? Habe ich richtig verstanden Was genau sind diese Kernel- (Konfigurations-) Parameter? Ich dachte , dass sie veränderbare Parameter von einigen Modulen in den Kernel kompiliert sind
ast
@ast Die sysctl-Parameter sind Documentation/sysctl/*.txtin der Linux- Kerneldokumentation dokumentiert. Es handelt sich um eine Reihe von Parametern, die meistens unabhängig davon gelten, welche Funktionen und Treiber in einem bestimmten Kernel kompiliert sind.
Gilles 'SO - hör auf böse zu sein'
Vielen Dank, ich habe versucht, diese Beziehung vollständig zu verstehen und 3 Tage damit verbracht, viele Dinge zu lesen, um eine Antwort zu finden.
Ast
3

Das Papier " The sysfs Filesystem " von Patrick Mochel gibt Ihnen einen weitaus besseren Überblick über den Zweck und die Geschichte von, /sysals in diese Box passen wird. Das Abstract zitieren:

sysfs ist eine Funktion des Linux 2.6-Kernels, mit der Kernel-Code Informationen über ein speicherinternes Dateisystem in Benutzerprozesse exportieren kann. Die Organisation der Dateisystemverzeichnishierarchie ist streng und basiert auf der internen Organisation der Kerneldatenstrukturen. Die im Dateisystem erstellten Dateien sind (meistens) ASCII-Dateien mit (normalerweise) einem Wert pro Datei. Diese Funktionen stellen sicher, dass die exportierten Informationen korrekt und leicht zugänglich sind, was sysfs zu einer der intuitivsten und nützlichsten Funktionen des 2.6-Kernels macht.

Als Antwort auf Ihre spezielle Frage "Erhalten ladbare Kernelmodule eine Darstellung in /sys?" Die Antwort lautet "Ja, wenn der Autor des Moduls eine Schnittstelle bereitstellt". Dies kann leicht demonstriert werden, indem gezeigt wird, in wie vielen geladenen Modulen entsprechende Einträge enthalten sind/sys/module

$ lsmod | awk '{print $1}' | sort > /tmp/lsmod
$ cd /sys/module ; ls > /tmp/sysmodule
$ comm -12 /tmp/lsmod /tmp/sysmodule
ahci
arc4
ath
ath9k
ath9k_common
ath9k_hw
bluetooth
bnep
cfg80211
…

was auf meinem System zeigt, dass 73 von 73 ladbaren Modulen einen entsprechenden Eintrag in haben /sys/module.

msw
quelle
Ich fand Informationen insbesondere über / sys / modules /, dass es immer jedes LKM gibt und module_param (Name, Typ, Dauerwelle) das Erscheinungsbild von Verzeichnisparametern beeinflusst. Ich habe jedoch noch Fragen zu sysctl und / proc / sys, wo wir Kernel-Laufzeitparameter festlegen können. Warum ist es nicht möglich, / sys / modules einzusetzen? Und wo setzen wir Parameter für Kernel-kompilierte Module (/ sys / modules / oder auch in / proc / sys /)? Vielleicht mische ich Kernel - Optionen mit Modulparameter (ich dachte , dass sie gleich sind) , so sysctl mit I Modulparameter oder einige Kernel - Funktionalität gesetzt sollte
ast