Wie kann ich meine Kernel-Preemption-Konfiguration überprüfen?

11

Ich möchte überprüfen, ob mein Linux-Kernel präemptiv oder nicht präemptiv ist. Wie kann ich dies mit einem Befehl überprüfen, z uname -a.

daehee
quelle

Antworten:

10

Ob ein Kernel präemptiv ist oder nicht, hängt davon ab, was Sie präemptivieren möchten. Wie im Linux-Kernel gibt es verschiedene Dinge, bei denen die Preemption separat aktiviert / deaktiviert werden kann.

Wenn Ihr Kernel aktiviert CONFIG_IKCONFIGund CONFIG_IKCONFIG_PROCaktiviert ist, können Sie Ihre Preemption-Konfiguration über herausfinden /proc/config.gz(falls dies nicht der Fall ist, wird die Kernel-Konfiguration von einigen Distributionen /bootstattdessen ausgeliefert):

$ gzip -cd /proc/config.gz | grep PREEMPT
CONFIG_TREE_PREEMPT_RCU=y
CONFIG_PREEMPT_RCU=y
CONFIG_PREEMPT_NOTIFIERS=y
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
CONFIG_PREEMPT=y
CONFIG_PREEMPT_COUNT=y
# CONFIG_DEBUG_PREEMPT is not set
# CONFIG_PREEMPT_TRACER is not set

Wenn Sie haben CONFIG_IKCONFIG, aber nicht CONFIG_IKCONFIG_PROC, können Sie es immer noch mit aus dem Kernel-Image herausholen extract-ikconfig.

Chris Down
quelle
Ich habe ein Kernel-Modul in Himbeere erstellt, das mit einem externen Sensor nach der Temperatur fragt. Um mit dem Sensor zu sprechen, sollte ich die Ein- und Ausgabe der GPIO-Pins für eine bestimmte Zeit (in ms) einstellen. und das Modul funktioniert gut. Dies gilt auch für Kernelmodule, die vom Scheduler nicht durch andere Prozesse vorbelegt werden, da das Timing falsch ist und das Ergebnis vom Sensor falsch ist, wenn es vorbelegt wird.
Mikmik
2

Ein präemptibler Kernel (Desktop mit geringer Latenz) hat PREEMPTseinen Versionsnamen ( uname -a) markiert . Dies erscheint auch in /proc/versionund in der Zeichenfolge "version magic", mit der entschieden wird, ob Module auf einen bestimmten Kernel geladen werden können / nicht, z

mymodule: version magic '3.4.35 mod_unload ARMv7 p2v8 ' 
              should be '3.4.35 preempt mod_unload ARMv7 p2v8 '

Für CONFIG_PREEMPT_VOLUNTARYafaik gibt es keine solche Kennzeichnung .

PypeBros
quelle