Linux-Kernel

Aus Mikiwiki
Version vom 31. Juli 2009, 20:40 Uhr von Michi (Diskussion | Beiträge) (Linux-Kernel kompilieren)
Wechseln zu: Navigation, Suche

Der Linux-Kernel wird seit 1991 von Linux Torvalds entwickelt und unter der freien GNU General Public License veröffentlicht. Die inzwischen von Torvalds herausgegebene Fassung enthält allerdings proprietäre BLOBs und ist daher nicht mehr frei; Richard Stallman bezweifelt sogar, dass sie legal kopiert werden darf, da diese BLOBs im Widerspruch zur GPL stehen und die Rechte aus der GPL daher erlöschen. Die Free Software Foundation rät deshalb dazu, nur BLOB-freie Versionen von des Linux-Kernels einzusetzen, bei der diese Bestandteile entfernt wurden. Der Linux-Kernel findet in einer Vielzahl von Linux-Distributionen seine Anwendung.

Ursprünglich bezeichnete der Begriff Linux lediglich den von Linus Torvalds veröffentlichten Kernel, mittlerweile sind damit umgangssprachlich oft sowohl der Linux-Kernel, Linux-Distributionen wie auch Linux-Kernel-basierte Betriebssysteme gemeint - im Mikiwiki ist mit "Linux" aus Unterscheidungsgründen ein Linux-Kernel-basiertes Betriebssystem gemeint.

Konzept

Der Linux-Kernel besteht grundsätzlich aus zwei Teilen:

  • der Kernel selbst (eine etwa 1 MB grosse Datei).
  • die Kernelmodule, welche die Funktionalität des Kernels bei Bedarf erweitern.

Kernel und Kernelmodule müssen zusammenpassen, deshalb werden sie mit einer Versionsnummer gekennzeichnet, die aus vier durch Punkte getrennten Elementen besteht: Version, Patchlevel, Sublevel und Extraversion. Die Bezeichnung "2.6.24-24" besagt also Linux-Kernel-Version 2, Patchlevel 6, Sublevel 24 und Extraversion 24. Beim Patchlevel werden stabile Versionen (engl. stable) durch gerade, Entwickler-Kernel durch ungerade Zahlen bezeichnet. Die Extraversion kennzeichnet Änderungen zum offiziellen Linux-Kernel, beispielsweise hängen an den Linux-Kernel-Varianten des Programmierers Alan Cox seine Initialen "ac".

Die Quelldateien des Linux-Kernels befinden sich nach dem Entpacken im Verzeichnis "/usr/src". Ausgehend von diesem Verzeichnis gibt es mehrere Möglichkeiten:

  • "linux"
  • "linux-2.6" (alternativ "linux-2.4")
  • "linux-2.x.x" (mit symbolischem Link "linux" auf dieses Verzeichnis)
  • "linux-headers-2.6.x-x" (bei Ubuntu)

Der fertige Linux-Kernel liegt als Datei im Verzeichnis "/boot" oder direkt unter "/". Typische Dateinamen sind "vmlinux", "vmlinuz", "vmlinuz-x.x.x-x" oder "bzImage-x.x.x". Das "z" im Namen steht dafür, dass die Datei komprimiert ist. Ohne eine solche Datenkompression liessen sich grosse Linux-Kernel auf älteren Rechnern gar nicht booten, da es dort häufig Grössenbeschränkungen gibt.

Die zum jeweiligen Linux-Kernel gehörenden Kernelmodule finden sich im Verzeichnis "/lib/modules", wo jede Linux-Kernel-Version ein eigenes Unterverzeichnis besitzt. Auf diese Weise können mehrere Versionen des Linux-Kernels gleichzeitig vorhanden sein.

Linux-Kernel kompilieren

Gründe für einen neuen Kernel gibt es viele:

  • Die Behebung von Sicherheitslöchern aus älteren Versionen.
  • Unterstützung neuer Hardware und Protokolle. Beispielsweise brachte die Linux-Kernel-Version 2.6.x folgende Erweiterungen: USB 2.0, Linux auf Notebooks, SATA, VPN, erweiterte Energieverwaltung und eine neue Audioschnittstelle.
  • Interesse des Anwenders und Lerneffekt.

Zur Installation eines eigenen Linux-Kernels werden die Quelldateien (Sourcen) aus den Linux kernel archives benötigt. Beim Herunterladen sollte aber nicht der ins Auge springende Hyperlink, sondern der Buchstabe "F" (full sources) gewählt werden.

Zum Kompilieren eines Linux-Kernels gibt es mehrere Möglichkeiten, in jedem Fall aber sind root-Rechte erforderlich. Einige ältere Linux-Versionen legen beim Entpacken das Unterverzeichnis "linux" an - gibt es bereits ein solches Verzeichnis oder einen symbolischen Link, so werden diese überschrieben. Deshalb sollte ein allfällig vorhandenes Verzeichnis "linux" zuvor umbenannt werden - es kann später gelöscht werden, wenn klar ist, dass es wirklich nicht mehr benötigt wird.

Entpacken der Linux-Kernel-Quelldateien ins Verzeichnis "/usr/src".

$ sudo tar xjf linux-2.6.30.4.tar.bz2 -C /usr/src

Bei Bedarf muss ein symbolischer Link angelegt werden.

$ cd /usr/src
$ sudo ln -s linux-2.6.30.4 linux

Wechsel ins neue Verzeichnis mit den Linux-Kernel-Quelldateien.

$ cd /usr/src/linux

Im Verzeichnis "/usr/src/linux" liegen mindestens zwei interessante Dateien:

  • "README" beschreibt, wie ein Linux-Kernel konfiguriert und kompiliert wird.
  • "Changes" im UNterverzeichnis "Documentation" führt die zum Kompilieren benötigten Programme auf und dokumentiert Änderungen gegenüber früheren Versionen.

Die wichtigsten Werkzeuge zum Kompilieren eines Linux-Kernels 2.6 sind die folgenden:

Programm Version Versionsüberprüfung
GNU C-Compiler 1.95.3 gcc --version
GNU make 3.78 make --version
GNU Binutils 2.12 ld -v
Util-Linux 2.100 fdformat --version
Module-Init-Tools 0.9.10 depmod -v

Der neue Linux-Kernel muss natürlich auch zum eigenen Rechner passen, dessen Hardwarebestandteile also bekannt sein müssen. Es muss nicht unbedingt jedes Stück Hardware im Linux-Kernel eingestellt werden, aber je mehr Informationen über den Rechner vorliegen, desto gezielter kann der Linux-Kernel konfiguriert werden.

  • lspci zeigt die vorhandenen PCI-Geräte.
  • lsmod zeigt eine Liste der geladenen Kernelmodule
  • "cat /proc/cpuinfo" zeigt Angaben zum vorhandenen Prozessor.

Bevor der Linux-Kernel nun kompiliert werden kann, werden seine einzelnen Komponenten konfiguriert. Vor der eigentlichen Konfiguration empfiehlt es sich, mit dem folgenden Befehl bestehende Konfigurations- und temporäre Dateien zu löschen:

$ sudo make mrproper

Zum Konfigurieren gibt es mehrere Varianten. Die grafischen Varianten zeigen zu jedem Punkt die englischen Hilfetexte, wobei zwischen mehreren Ansichten gewählt werden kann.

Befehl Beschreibung
make menuconfig Basiert auf dem Textmodus und kann von der Konsole aus verwendet werden. Voraussetzung sind die Pakete "ncurses-5.3-4" und "ncurses-devel-5.3-4".
make gconfig Grafische Oberfläche auf der Grundlage der GTK-Bibliotheken.
make xconfig Grafische Oberfläche auf der Grundlage der Qt-Bibliotheken.

Pro Menüpunkt gibt es jeweils höchstens drei Auswahlmöglichkeiten:

  • Beim Ausschalten des Eintrags wird der fertige Linux-Kernel die abgewählte Eigenschaft nicht unterstützen.
  • Beim festen Einschalten wird der Linux-Kernel die Eigenschaft unterstützen.
  • Bei der Auswahl als Kernelmodul wird das Modul nur bei Bedarf nachgeladen, spart also Arbeitsspeicher.

Das Dateisystemtyp der Root-Partition sollte fest in den Linux-Kernel eingebaut werden, denn er muss kurz nach dem Start das Root-Dateisystem einhängen. Alternativ dazu kann eine RAM-Disk verwendet werden: Dabei handelt es sich um eine virtuelle Festplatte im Arbeitsspeicher, die der Linux-Kernel beim Bootvorgang anstelle einer physikalischen Festplatte als Root-Dateisystem verwendet. Diese Lösung ist allerdings kernelabhängig und muss für die neue Version erst erstellt werden.

Folgende Liste gibt einige Tips zur Konfiguration des Linux-Kernels.

Eintrag Beschreibung
General Setup Grundlegende Systemeinstellung. Es empfiehlt sich die Einstellung von ".config support", denn so kann später die Linux-Kernel-Konfiguration über die Datei "proc/config.gz" ausgelesen werden.
Processor type and features Festlegung des Prozessortyps. Eine falsche Auswahl kann dazu führen, dass der Linux-Kernel nicht bootet. Im Zweifelsfall sollte "586/..." gewählt werden, das funktioniert ab der Pentium-Generation sowohl für Intel wie auch AMD. Der Prozessor des eigenen Rechners kann mit "cat /proc/cpuinfo" ermittelt werden.
Power management options (ACPI/APM) Stromsparfunktionen. Der Linux-Kernel 2.6.x unterstützt APM und ACPI. Letzteres funktioniert allerdings nicht auf allen Rechnern fehlerfrei. Besonders Notebook-Benutzer sollten zuerst APM einstellen. Sind beide als Kernelmodul ausgewählt, so verwendet der Linux-Kernel den Modus, der zuerst geladen wurde.
Device Drivers / Plug and Play support Bei einem modernen Rechner sollten ISA- und BIOS-Plug-and-Play-Support erst einmal deaktiviert werden. Beide Einstellungen verhinderten auf einem Testrechner (Sony-Notebook) das Booten des Linux-Kernels.

Weblinks

Herausgeber Sprache Webseitentitel Anmerkungen