Linux-Praxisbuch/ Kernel-Interna

Die Kernelschnittstelle

Bearbeiten

Geräte und Subsysteme

Bearbeiten

Der Kernel stellt dem Systemprogrammierer eine Schnittstelle (API) bereit, mit welcher er ohne spezifische Kenntnisse auf die Hardware zugreifen kann. Der Kernel stellt dazu in verschiedenen Teilsystemen (Subsystems) diverse Treiber bereit, welche durch ihre jeweilige Gerätenummer und die mit ihr zugeordneten Treibernummer, angesprochen werden. Interessant für den Programmierer ist jedoch nur die Gerätenummer, speziell der Filedeskriptor. Der Filedeskriptor ist eine eindeutige Nummer, die auf das entsprechende Gerät verweist. Damit der Kernel weiß, welches Teilsystem (Treiber) für dieses Gerät zuständig ist, ist der Gerätenummer eine Treibernummer zugeordnet. Es können mehrere Geräte den gleichen Treiber verwenden. Sie können sich dazu einmal mittels 'ls -l /dev' die Ausgabe anschauen. Hier ein verkürzter Ausschnitt aus meinem System:

lrwxrwxrwx 1 root root        10 2007-07-10 17:11 adsp -> sound/adsp
lrwxrwxrwx 1 root root        12 2007-07-10 17:11 agpgart -> misc/agpgart
lrwxrwxrwx 1 root root        11 2007-07-10 17:11 audio -> sound/audio
drwxr-xr-x 3 root root        60 2007-07-10 17:11 bus/
lrwxrwxrwx 1 root root         3 2007-07-10 17:11 cdrom -> hdc
lrwxrwxrwx 1 root root         3 2007-07-10 17:11 cdrom1 -> hdc
crw------- 1 root tty     5,   1 2007-07-10 17:11 console
lrwxrwxrwx 1 root root        11 2007-07-10 17:10 core -> /proc/kcore
drwxr-xr-x 3 root root        60 2007-07-10 17:11 cpu/
drwxr-xr-x 5 root root       100 2007-07-10 17:11 disk/
crw-rw---- 1 root audio  14,   9 2007-07-10 17:11 dmmidi
drwxr-xr-x 2 root root        60 2007-07-10 17:11 dri/
lrwxrwxrwx 1 root root         9 2007-07-10 17:11 dsp -> sound/dsp
lrwxrwxrwx 1 root root         3 2007-07-10 17:11 dvd -> hdc
lrwxrwxrwx 1 root root         3 2007-07-10 17:11 dvd1 -> hdc
drwxr-xr-x 2 root root        60 2007-07-10 17:11 fb/
lrwxrwxrwx 1 root root         4 2007-07-10 17:11 fb0 -> fb/0
crw-rw---- 1 root root   10,  63 2007-07-10 17:11 fbsplash
lrwxrwxrwx 1 root root        13 2007-07-10 17:10 fd -> /proc/self/fd/
crw-rw-rw- 1 root root    1,   7 2007-07-10 17:11 full
brw-rw---- 1 root disk    3,   0 2007-07-10 17:11 hda
brw-rw---- 1 root disk    3,   1 2007-07-10 17:11 hda1
brw-rw---- 1 root disk    3,   2 2007-07-10 17:11 hda2
brw-rw---- 1 root disk    3,   3 2007-07-10 17:11 hda3
brw-rw---- 1 root disk    3,   4 2007-07-10 17:11 hda4
brw-rw---- 1 root disk    3,   5 2007-07-10 17:11 hda5
brw-rw---- 1 root disk    3,   6 2007-07-10 17:11 hda6
brw-rw---- 1 root disk    3,   7 2007-07-10 17:11 hda7
brw-rw---- 1 root cdrom  22,   0 2007-07-10 17:11 hdc

Die fünfte und sechste Spalte repräsentieren die Treibernummer, respektive die Gerätenummer. Wie Sie sehen, ist manchen Geräten die gleiche Treibernummer zugeordnet, jedem Gerät jedoch eine unterschiedliche Gerätenummer. Ferner finden Sie mehrere Links auf ein und das selbe Gerät, welche logischerweise die Nummer des Gerätes haben, auf welche sie verweisen.

Das proc-Filesystem

Bearbeiten

Damit Kernel und Anwender miteinander kommunizieren können, gibt es das virtuelle Dateisystem /proc. Es existiert nicht physikalisch auf Ihrer Festplatte, sondern liegt in einem Adressraum des RAM-Speichers, den der Kernel verwaltet. proc bietet Ihnen alle Informationen für die der Kernel zuständig ist, beispielsweise Informationen zur Hardware und dessen Peripherie, Prozesse, sowie zum Kernel selbst. Alle Systemüberwachungstools und ähnliche Programme bekommen ihre Informationen über proc. Ein Beispiel, um sich über den aktuellen Speicherzustand zu informieren:

$> cat /proc/meminfo
MemTotal:       255548 kB
MemFree:          7276 kB
Buffers:         13720 kB
Cached:          67556 kB
SwapCached:         12 kB
Active:         182656 kB
Inactive:        21692 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       255548 kB
LowFree:          7276 kB
SwapTotal:      506008 kB
SwapFree:       503088 kB
Dirty:             164 kB
Writeback:           0 kB
AnonPages:      123072 kB
Mapped:          54036 kB
Slab:            24048 kB
PageTables:       1364 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:    633780 kB
Committed_AS:   295824 kB
VmallocTotal:   778196 kB
VmallocUsed:     11528 kB
VmallocChunk:   765904 kB

Jedoch bekommen Sie nicht nur Informationen, sondern Sie können auch aktiv System-, Kernelzustände beeinflussen. Beispielsweise kann ich (root-Rechte vorausgesetzt), den Zustand der Tastaturbeleuchtung meines IBM Thinkpads ändern:

$> echo "on" > /proc/acpi/ibm/light

Die Beleuchtung ist nun eingeschaltet und lässt sich mit "off" auch wieder ausschalten.