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.