Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
Leitfaden für die Nutzung des Buchs und der beiliegenden DVDs
Das Terminal – sinnvoll oder überflüssig?
1 Die Wurzeln von Ubuntu
2 Was ist Ubuntu?
3 Die Versionen im Detail
4 Daten sichern, migrieren und synchronisieren
5 Die Installation
6 Erste Schritte
7 Kubuntu
8 Programme und Pakete installieren
9 Internet und E-Mail
10 Office
11 Grafik und Bildbearbeitung
12 Multimedia
13 Programmierung und Design
14 Software- und Paketverwaltung
15 Architektur
16 Backup und Sicherheit
17 Desktop-Virtualisierung
18 Serverinstallation
19 Administration und Monitoring
20 Netzwerke
21 LAN-Server – im Firmennetzwerk oder als Multimediazentrale
22 Der Server im Internet
23 Servervirtualisierung mit KVM
24 Servervirtualisierung mit Xen
25 Hilfe
26 Befehlsreferenz
A Mark Shuttleworth
Stichwort

Download:
- ZIP, ca. 50,6 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Ubuntu GNU/Linux von Marcus Fischer
Das umfassende Handbuch, aktuell zu Ubuntu 11.04 »Natty Narwhal«
Buch: Ubuntu GNU/Linux

Ubuntu GNU/Linux
geb., mit 2 DVDs
1118 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1765-1
Pfeil 15 Architektur
  Pfeil 15.1 Betriebssysteme
  Pfeil 15.2 Details des Boot-Vorgangs
  Pfeil 15.3 GRUB 2
    Pfeil 15.3.1 Aufbau
    Pfeil 15.3.2 Wie konfiguriert man GRUB?
    Pfeil 15.3.3 Wiederherstellung
  Pfeil 15.4 Start- und Stoppskripte
  Pfeil 15.5 Dienste
  Pfeil 15.6 Initialisierung
    Pfeil 15.6.1 Runlevel
    Pfeil 15.6.2 init
    Pfeil 15.6.3 Upstart
  Pfeil 15.7 Plymouth
  Pfeil 15.8 Dateisystem
    Pfeil 15.8.1 Aufbau moderner Softwarestrukturen
    Pfeil 15.8.2 Datenträger
    Pfeil 15.8.3 Die fstab
    Pfeil 15.8.4 Swap
    Pfeil 15.8.5 Der Verzeichnisbaum
    Pfeil 15.8.6 Beschädigte Dateisysteme reparieren
  Pfeil 15.9 Kernel und Module
    Pfeil 15.9.1 Kernel
    Pfeil 15.9.2 Module
    Pfeil 15.9.3 Einen eigenen Kernel bauen
  Pfeil 15.10 64-Bit: ja oder nein?
    Pfeil 15.10.1 Installation von Ubuntu 64
    Pfeil 15.10.2 Paralleles Arbeiten mit 32-Bit-Software
    Pfeil 15.10.3 Benchmarking – Vergleich mit 32-Bit-Systemen


Galileo Computing - Zum Seitenanfang

15.9 Kernel und Module  Zur nächsten ÜberschriftZur vorigen Überschrift

Der wichtigste Baustein eines Betriebssystems ist der Kernel. Dieser Kernel heißt Linux, die meisten anderen Bestandteile des Betriebssystems stammen aus GNU-Projekten. Deswegen ist die Bezeichnung »Linux« für dieses Betriebssystem streng genommen falsch; man müsste korrekterweise von einem »GNU/Linux-System« sprechen.


Galileo Computing - Zum Seitenanfang

15.9.1 Kernel  Zur nächsten ÜberschriftZur vorigen Überschrift

Der Kernel eines Betriebssystems ist sein grundlegender Kern. Er steuert elementare Aufgaben wie die Speicher- und Prozessverwaltung. Eine andere grundlegende Aufgabe, die dem Kernel obliegt, ist die Steuerung der Hardware. Für einige spezielle Hardwarekomponenten kann es nötig sein, sich seinen eigenen Kernel zu »bauen« (kompilieren). Der Linux-Kernel hat mittlerweile einen Umfang von mehreren Millionen Zeilen Code erreicht.

GNU und Linux

Linux, also der Kernel, stellt dementsprechend für sich allein kein funktionierendes Betriebssystem dar. Erst die Kombination mit den Programmen aus der GNU-Welt macht dieses System zu einem runden Ganzen. Den Kernel von Linux können Sie sich kostenlos von der Webseite www.kernel.org herunterladen. Auch Microsoft Windows hat einen Kernel. Im Gegensatz zu Linux ist dieser aber nicht frei, geschweige denn offen. Der Windows-Kernel wird, wie der gesamte Quellcode von Windows, gehütet wie ein Staatsgeheimnis. Im Gegensatz zu Linux, wo jeder Benutzer eingeladen ist, Sicherheitslücken zu suchen, werden diese Lücken bei Windows versteckt. Diese Offenheit von Linux führt prinzipbedingt zu einem sichereren System.

Die Hauptaufgaben des Kernels sind:

  • Schnittstelle
    Der Kernel bildet die Schnittstelle zur Hardware, z. B. zu Geräten, zum Speichern und zu(m) Prozessor(en).
  • Prozessverwaltung
    Sie gewährleistet das problemlose (unter anderem auch parallele) Laufen verschiedener Applikationen. Im Rahmen der Prozessverwaltung eines Betriebssystems dient der »Dispatcher« dazu, bei einem Prozesswechsel dem derzeit aktiven Prozess die CPU zu entziehen und anschließend dem Prozessor den nächsten Prozess zuzuteilen. Die Entscheidung, welcher Prozess der nächste ist, wird vom »Scheduler« im Rahmen der Warteschlangenorganisation getroffen.
    • Werden auf einem Computer mehrere Prozesse gleichzeitig ausgeführt, so muss das Betriebssystem durch den »Scheduler« die vorhandenen Ressourcen auf die verschiedenen Prozesse aufteilen. Dieses Verhalten ist typisch für ein Multitasking-System.
  • Hauptspeicherverwaltung
    Die Speicherverwaltung ist derjenige Teil des Kernels, der einen effizienten und komfortablen Zugriff auf den physischen Arbeitsspeicher eines Computers ermöglicht. Je nach Einsatzbereich des Computers werden unterschiedliche Speicherverwaltungsmechanismen verwendet.
    • Bei UNIX-artigen Systemen wird der Speicher in zwei getrennten Bereichen verwaltet. Anwendungen benutzen den User-Space, während der Kernel selbst und einige Treiber den Kernel-Space nutzen. Diese Trennung hat sicherheitsrelevante Gründe, damit potentielle Fehler in Anwendungen oder auch Viren keinen Zugriff auf den Kernel-Space haben und damit die Stabilität des Grundsystems nicht gefährden können. Der Kernel steuert nicht nur den Zugriff auf den physischen Teil des Speichers, denn dies hätte den Nachteil, dass die aktiven Prozesse selbst niemals mehr Speicherplatz belegen dürften, als physisch zur Verfügung steht. Um dieses durch immer komplexere Programme entstandene Problem zu lösen, wurde das Prinzip der virtuellen Speicherverwaltung entwickelt. Dabei verwenden Prozesse nur noch virtuelle und keine physischen Adressen mehr. Die Umsetzung der virtuellen Adresse in eine physische Adresse übernimmt die Memory Management Unit. Die virtuelle Speicherverwaltung ist heute in beinahe jedem modernen Betriebssystem (u. a. in UNIX) verwirklicht.
  • Dateiverwaltung
    Im Dateisystem sind die externen Daten eines Computers in Form von Dateien gespeichert. Das Dateisystem selbst ist ein Ordnungs- und Zugriffssystem für diese Daten. Zugriffsroutinen für Dateisysteme sind ebenfalls Bestandteil des Kernels. Dies soll mit dem Begriff »Dateiverwaltung« beschrieben werden.

Die Leistungsfähigkeit von UNIX hängt im Wesentlichen von der Implementierung dieser grundlegenden Funktionen ab. An diesem Beispiel erkennen Sie, wie wichtig es manchmal sein kann, sich einen eigenen Kernel zu kompilieren.


Monolithischer Kernel: Wenn alle diese eben beschriebenen Funktionen im Kernel selbst vorhanden sind, spricht man von einem monolithischen Kernel. Bei einem Mikro-Kernel finden wesentliche Teile in getrennten Prozessen statt. Daneben bzw. zwischen den beiden liegend gibt es noch den sogenannten Makro-Kernel. Er stellt einen Kompromiss zwischen den beiden anderen Kernel-Arten dar und vereint deren Vorteile. Ein Makro-Kernel ist nicht so fehleranfällig wie ein monolithischer Kernel und schneller als ein Mikro-Kernel.


Stets außerhalb des Kernels laufen die Anwenderprozesse, die sich der vom Kernel angebotenen Funktionen bedienen, um mit der Maschine zu kommunizieren.

Kernel für Entwickler

Wenn Sie sich detaillierter mit Kerneln beschäftigen, dann stolpern Sie zuerst über die Bezeichnung durch Versionsnummern. Wie allgemein in der Programmiererwelt üblich, bezeichnen ungerade Versionsnummern (2.1.x, 2.3.x ...) die teilweise noch instabilen Entwicklerversionen. Mit geraden Versionsnummern hingegen werden die stabilen Anwender-Kernel bezeichnet (2.2.x, 2.4.x ...).

Normalerweise haben Sie als Einsteiger auf diesem Gebiet nichts mit den ungeraden Kerneln zu tun. In der aktuellen Ubuntu-Version befindet sich z. B. der Kernel 2.6.x, also zum Glück eine gerade und damit sehr stabile Kernel-Version. Lassen Sie sich zu Beginn bitte nicht von dem Zahlenspiel verwirren; unter Linux hat fast jedes Programm eine Versionsnummer. Es ist hierbei meistens nicht nötig, den aktuellsten Updates hinterherzulaufen, wenn diese nicht gerade Sicherheits-Updates implementieren. Sie können die aktuelle Versionsnummer Ihres Kernels erfahren, wenn Sie in der Konsole uname -r eintippen.

Kernel-Historie

Wie gesagt bezeichnet man als »Linux« eigentlich nur den Kern des Betriebssystems. Wenn jemand davon spricht, dass er Linux 2.6 benutzt, dann meint er, dass er ein Betriebssystem mit dem (Linux-)Kernel 2.6 verwendet. Man findet auch oft Aussagen wie »Ich benutze Linux 10.1«. Hier verwechselt der Betreffende die Versionsnummer von Linux mit der von SUSE und outet sich somit als SUSE-Nutzer. Solche Aussagen begegnen einem oft im deutschsprachigen Raum, da hier SUSE die meistverbreitete Distribution ist.

Ich möchte im Folgenden kurz die Geschichte von Linux anhand der Kernel-Veröffentlichungen beschreiben:

  • 1991
    Als erster genauer Termin für die erstmalige Erwähnung des neuen Betriebssystems steht der 3. Juli 1991 fest. Linus Torvalds implementiert einige Gerätetreiber sowie den Festplattentreiber und einige User-Level-Funktionen. Linus veröffentlicht am 17. September 1991 die Version 0.01 des Kernels mit einem bescheidenen Umfang von 10.239 Zeilen Code für einige Interessenten aus dem Usenet. Dieses Datum wird oftmals als die Geburtsstunde von Linux angesehen. 2011 wird Linux somit 20 Jahre alt. Herzlichen Glückwunsch!
    • Die erste »offizielle« Version des Linux-Kernels (0.02) erscheint am 05. Oktober 1991. Mit dieser Version laufen bereits die Bash, gcc, gnu-make, gnu-sed und compress. Am 19. Dezember 1991 läuft die erste Version (0.11), die ohne die Hilfe eines anderen Betriebssystems lauffähig ist, allerdings ohne grafische Oberfläche. Es gibt keinen SCSI-Support, so dass eine AT-Bus-Festplatte Voraussetzung ist.
  • 1992
    Bereits am 5. Januar kommt die erste Version (0.12) heraus, die mehr Funktionen hat, als unbedingt benötigt werden. Mit dieser Version wird der Kernel unter die GPL gestellt. Die ältere Lizenz, unter der der Kernel steht, ist in vielen Punkten deutlich strenger.
    • Linus Torvalds verteilt diese Version per Anonymous FTP im Internet, was zu einem sprunghaften Anstieg der Testerzahl führt. Da dieser Anstieg so groß wird, dass die nötige Kommunikation nicht mehr per E-Mail zu bewältigen ist, wird im Usenet die Gruppe alt.os.linux geschaffen. Das Interesse an Linux wächst stetig und wird von Linus Torvalds koordiniert.
    • Um die Entwicklung voranzutreiben, erhöht Linus Torvalds im März 1992 die Entwicklungsnummer auf Version 0.95. Die im April folgende Version 0.96 ist die erste Version, mit der es möglich ist, das X-Window-System zu betreiben. Man schätzt die Zahl der Anwender auf circa 1.000.
  • 1993
    Die Zahl aller Programmierer steigt auf circa 100. Fünf von ihnen arbeiten mit Torvalds zusammen. Die Anwenderzahl beläuft sich auf etwa 20.000. Durch Anpassung des Linux-Kernels an die GNU-Umgebung der Free Software Foundation (FSF) wachsen die Möglichkeiten von Linux erneut stark an, da man nun auf eine große Sammlung an vorhandener Software und Tools zurückgreifen kann.
  • 1994
    Mit der ersten stabilen Linux-Version (1.00) im März 1994 wird der Kernel netzwerkfähig, und die Zahl der Anwender steigt auf 100.000 an. Gleichzeitig wächst der Kernel auf eine Größe von 176.250 Zeilen Code. Linus Torvalds stellt nun den Quelltext des Linux-Kernels offiziell unter die GPL. Ein weiterer wichtiger Schritt ist die Adaption eines Graphical User Interfaces (GUI), des X-Window-Systems. Dieses wird von nun an von dem Xfree86-Projekt beigesteuert.
  • 1995
    Im März 1995 wird das sogenannte Modulkonzept eingeführt. Hiermit werden Treiber und Ähnliches als Module realisiert, die einzeln in den Kernel integriert werden können. Linux läuft nun auch auf DEC- und Sun-Sparc-Prozessoren. Schätzungen belaufen sich auf rund eine halbe Million Anwender.
  • 1996
    Mit der neuen Version 2.0 des Linux-Kernels können mehrere Prozessoren gleichzeitig angesteuert werden. Linux verliert langsam seinen Bastlerstatus und wird zu einer ernstzunehmenden Alternative für Firmen. Das K Desktop Environment (KDE) wird veröffentlicht. Die Anwenderzahl erhöht sich auf rund 1,5 Millionen.
  • 1997
    Neue Linux-Versionen erscheinen fast wöchentlich. In verschiedenen Ländern existieren bereits Linux-Magazine. Die Anwenderzahl ist auf 3,5 Millionen gestiegen. Verschiedene namhafte Firmen beginnen, ihre Software auf Linux zu portieren: Netscape seinen Webbrowser, Applixware seine Office-Anwendung und die Software AG ihre Datenbank Adabas D. Damit gibt es auch professionelle Software für Linux. GNOME wird als Antwort auf KDE initiiert.
  • 1998
    Man schätzt die Anzahl der Programmierer von Linux auf 10.000 und die Anzahl der Anwender auf 7,5 Millionen.
  • 1999
    Man tippt auf ungefähr 10 Millionen Anwender. Linus Torvalds kündigt den »Angriff« auf Windows an. Der Kernel 2.2 wird freigegeben. Er besitzt einen Umfang von 1.800.847 Zeilen Code.
  • 2001
    Im Januar 2001 wird der Kernel 2.4 veröffentlicht. Seine Größe wächst auf 3.377.902 Zeilen Code.
  • 2003
    Im Dezember 2003 erscheint der Kernel 2.6 mit einem Umfang von 5.929.913 Zeilen Code. Das Soundsystem ALSA löst das veraltete OSS ab (siehe Abschnitt »Audio«).

Linux heute

Linus Torvalds koordiniert nach wie vor die Arbeit am Linux-Kernel. Inzwischen (Stand 2011) ist Linux 20 Jahre alt. Aus dem anfangs sehr rudimentären System, das nur von eingefleischten UNIX-Anhängern verstanden und geschätzt wurde, hat sich eine ganze Kultur rund um Linux entwickelt. So listet die Internetseite distrowatch.com zurzeit mehr als 350 Linux-Distributionen auf. Manche dieser Distributionen entstanden schon Anfang der 1990er Jahre und blicken somit auf eine lange Geschichte zurück. Ubuntu gehört, wie bereits erwähnt, zu den jüngsten Distributionen. Umso erstaunlicher ist der überwältigende Erfolg von Ubuntu.

Es gibt heute circa 29 Millionen Linux-Benutzer weltweit. Die Zahlen schwanken sehr, eine Vorstellung von der Größenordnung gewinnen Sie aber anhand der Website LinuxCounter (http://counter.li.org/). Dort können Sie sich ebenfalls als Linux-Benutzer registrieren.

Wo bleibt der Kernel 2.8?

2003 erschien der Kernel 2.6. Inzwischen sind acht Jahre vergangen, ohne dass eine große Revision des Kernels erschienen ist. Dies bedeutet aber nicht, dass die Entwicklung von Linux ins Stocken geraten wäre oder langsamer verliefe. So hatte die Kernel-Version 2.6.0 im Jahr 2003 einen Umfang von 5.929.913 Zeilen Code. Im Vergleich dazu umfasst die Version 2.6.25 schon über 30 % mehr – genau 9.232.484 Zeilen Code.

Da Linux inzwischen 20 Jahre alt ist, beginnt 2011 die dritte Dekade. Aus diesem Grund und weil die Versionsnummern immer unübersichtlicher werden, hat sich Linux Torvalds entschieden, dass nach der Version 2.6.39 die Version 3.0 folgt (im Sommer 2011).


Galileo Computing - Zum Seitenanfang

15.9.2 Module  Zur nächsten ÜberschriftZur vorigen Überschrift

Ein Betriebssystem ist also die Basis, damit alle anderen Programme überhaupt auf Ihrem Computer funktionieren können. Zu der Kernaufgabe eines Betriebssystems gehört zweifellos die Kommunikation zwischen Ihnen und der Hardware, die mittels Software erfolgt. Damit ein Betriebssystem sich mit der Hardware »versteht«, braucht es gute Kontakte. Diese Kontakte werden mit Hilfe von sogenannten Treibern aufgebaut.

Treiber sind also die Schnittstellen zwischen Hardware und Betriebssystem. Sie sorgen dafür, dass das Betriebssystem die Hardware korrekt erkennt und im Folgenden der Software, die Sie installieren, sämtliche Funktionalitäten der Hardware zur Verfügung stellt.

Die Arbeit an Treibern für Linux wird oft von Freiwilligen vorangetrieben, da viele Hardwarehersteller nur eine sehr mangelhafte Unterstützung für Linux anbieten. Dies ist der Grund, warum es oftmals mehrere Monate dauert, bis ein Treiber für die neueste Hardware entwickelt wird. Die Entwickler sind hierbei auf Ihr Feedback angewiesen, da der Umfang an verfügbarer Hardware unüberschaubar ist.

Mangelhafte Unterstützung

Unter Linux haben Sie oftmals mit dem Problem zu kämpfen, dass viele der kommerziell ausgerichteten Firmen keine Treiber für Linux anbieten. Die Gründe hierfür sind vielfältig – zum einen ist die Anzahl der Linux-Benutzer und damit die Nachfrage noch zu gering, andererseits lässt sich mit diesen Treibern in der Welt von Freiheit und Open Source nur sehr schwer Geld verdienen. Zum Glück gibt es aber in der weltumspannenden Gemeinde der Linux-Anwender jede Menge gescheite Entwickler, die für fast jede Hardware unentgeltlich Treiber entwickeln.

Aufgrund der Zeitverzögerung bei einer solchen freiwilligen Leistung kommt es aber teilweise zu mehrmonatigen Verspätungen, bis ein Treiber entwickelt ist. Daher lautet mein Rat an Sie: Kaufen Sie niemals die allerneueste Hardware, wenn Sie Linux als Betriebssystem einsetzen möchten. Warten Sie ruhig ein paar Monate ab, und üben Sie sich ein wenig in Geduld. So vermeiden Sie überflüssigen Ärger.

Wenn Sie »auf Nummer sicher gehen« wollen, dann informieren Sie sich vor dem Kauf Ihrer Hardware, ob die Geräte auch anstandslos ihren Dienst unter Linux verrichten. Für Ubuntu befinden sich gute Anlaufstellen im englischen Wiki auf www.ubuntu.com und in der Hardwaredatenbank der Ubuntu-Anwender unter wiki.ubuntuusers.de.

Zweck von Modulen

Im März 1995 erschien der Kernel in der Version 1.2. Der Umfang stieg nicht nur auf rund 300.000 Zeilen Quellcode, erstmals ließ sich Linux nun auch auf den Architekturen Alpha und Sparc installieren und nutzen. Die PCI-Erweiterungen erreichten die Marktreife, und ganz nebenbei wurde für die Nutzer ein System im Kernel eingeführt, das vorher nur in kommerziellen UNIX-Systemen zum Einsatz gekommen war: die Module.

Unter Linux ist die überwiegende Anzahl der Treiber in Modulen realisiert. Früher mussten z. B. sämtliche Treiber fest in den Kernel kompiliert werden, ob man sie nun brauchte oder nicht. Denn dieser Kernel sollte ja auf sehr vielen verschiedenen Hardwareplattformen laufen und sämtliche Eventualitäten abdecken. Allerdings wurde der Kernel wegen des erhöhten Speicherbedarfs sehr groß und langsam. Es war und ist nahezu unmöglich, einen Universal-Kernel zu generieren, der alle Möglichkeiten an verschiedener Hardware abdeckt und für jedes noch so seltene Gerät einen Treiber integriert hat. Dies führte dazu, dass eine Installation von Linux fast immer mit einer anschließenden Kernel-Kompilation endete. Dies erzeugte insbesondere bei Anfängern den Eindruck, Linux sei ein schwer zu konfigurierendes System.

Hinzufügen während der Laufzeit

Mit dem Erscheinen der Kernel-Version 1.2 wurde das Konzept der Module eingeführt. Es wurde nun möglich, Treiber (aber auch andere Komponenten), die während des Bootens nicht zwingend notwendig sind, in separate Einheiten – die Module – auszulagern. Module lassen sich zur Laufzeit, d. h., wenn der Kernel eine bestimmte Eigenschaft benötigt, zu diesem hinzufügen. Umgekehrt können Sie aber auch, wenn ein Treiber temporär oder dauerhaft nicht mehr benötigt wird, diesen wieder aus der aktuellen Kernel-Konfiguration entfernen.

Die ersten Module mussten allerdings noch per Hand ge- oder entladen werden. Dieser Prozess wurde später automatisiert. Der Kernel konnte durch dieses Prinzip der Modularisierung relativ klein und schnell bleiben. Das modulare Design erlaubt nun ein automatisches Erkennen von Hardware und ein dynamisches Hinzufügen von benötigten Treibern. Die Treiber werden hierfür separat als ein Modul kompiliert: Ein langwieriges Kompilieren des gesamten Kernels entfällt somit.

Sicherheitsrisiken

Sie werden sich vielleicht fragen, warum nicht gleich alle Treiber im Kernel integriert sind. Das liegt zum einen daran, dass zusätzliche Treiber auch immer Sicherheitsrisiken für das gesamte System darstellen, wenn sie fest in den Kernel integriert sind. Zum anderen würde eine komplette Integration sämtlicher Treiber den Kernel riesig werden lassen – er würde in der Folge immer mehr Platz beanspruchen, und seine Arbeitsweise würde sich erheblich verlangsamen.

Restricted Modules

Nun brauchen Sie keine Angst zu haben, dass Sie Ihre Hardware nur zum Funktionieren bringen, wenn Sie eigenständig und manuell Module in den Kernel kompilieren. Normalerweise erledigt das Betriebssystem diese Aufgabe von allein. Es erkennt bei der Installation die zur Verfügung stehende Hardware und bindet die nötigen Module ein. Oftmals fällt das Integrieren zusätzlicher Module aber auch sehr einfach aus, wenn Sie z. B. die 3D-beschleunigten Treiber von NVIDIA für Ihre Grafikkarte nutzen wollen oder ein ISDN-Modem von AVM Ihr Eigen nennen.

Inzwischen ist die Installation der 3D-beschleunigten Treiber sehr viel einfacher geworden. Ubuntu bietet hierfür einen einfachen Dialog an. Der Umgang mit den Modulen ist deutlich einfacher, als der erste Eindruck vermuten lässt. Ich werde im folgenden Abschnitt detailliert das Kompilieren eines eigenen Kernels beschreiben. Dort finden Sie auch weitere Informationen über die Verwendung von Modulen.


Galileo Computing - Zum Seitenanfang

15.9.3 Einen eigenen Kernel bauen  topZur vorigen Überschrift

Manchmal benötigt man einen angepassten Kernel mit zusätzlichen Features, oder ein bestimmter Treiber soll fest eingebaut werden. In diesen Fällen müssen Sie sich einen eigenen Kernel aus den Quellen kompilieren. Wir werden im Folgenden den typischen Weg zum Kernel-Bauen unter Ubuntu für den Kernel 2.6.x beschreiten. Hierzu sind mehrere Schritte nötig, die wir nachfolgend einzeln abhaken werden.

Achtung Die Anleitung richtet sich an fortgeschrittene Anwender. Dies bedeutet, dass Sie im Normalfall schon über einige Erfahrung verfügen sollten, bevor Sie sich an das Bauen eines eigenen Kernels heranwagen. Sie machen hierbei eine Operation »am offenen Herzen« Ihres Systems. Zuerst sollten Sie ein paar grundsätzliche Dinge beachten:

  • Behalten Sie stets eine Sicherungskopie Ihres alten und funktionierenden Kernels. Falls etwas schiefgeht, können Sie das System immer noch benutzen und müssen nicht mit einer Rettungs-CD arbeiten. Also seien Sie grundsätzlich vorsichtig, wenn es um das Thema Löschen geht.
  • Sie sollten, bevor Sie überhaupt an das Selbstbauen des Kernels herangehen, herausfinden, welche Hardware im Rechner verbaut ist.
  • Lesen Sie bitte die Hilfebeschreibungen zu den Kernel-Optionen durch. Wenn Sie bei irgendeiner Option unsicher sind, was Sie tun sollten, dann geben Sie dies auch offen zu, und tippen Sie bei der entsprechenden Abfrage Yes.
  • Alle Module und Optionen, die Sie nicht unbedingt benötigen, können Sie abwählen. Wenn Sie z. B. keinen SCSI-Adapter haben, brauchen Sie auch keine Module dafür einzubinden.
  • Alles, was Sie nicht oft benötigen werden, sollte als Modul eingebunden werden, z. B. USB-Geräte. Möchten Sie allerdings das System später von einem USB-Stick booten, so kann hier das feste Einbinden in den Kernel notwendig sein.
  • Das Dateisystem für die Root-Partition ist fest in den Kernel einzubinden. Alle anderen Dateisysteme, die Sie sonst noch benötigen, können als Modul eingebunden werden. Das erspart Ihnen das Erstellen einer »Initial Ramdisk«. Die zugehörige Option können Sie dann getrost abwählen.
  • Wer eine USB-Tastatur und/oder -Maus besitzt, der sollte den Treiber für das USB-Subsystem, den Treiber für seinen USB-Baustein und die Treiber für HID-Geräte fest einbinden. Eventuell können Sie dann die Treiber für den PS/2-Anschluss weglassen. Dies hätte den Vorteil, dass ein so getunter Kernel viel weniger Platz benötigt und das Hotplug viel weniger Zeit beim Starten braucht.

Vorbereitungen

Kontrollieren Sie bitte zuerst, ob folgende Pakete installiert sind:

  • build-essential
  • kernel-package

Je nachdem, in welcher Umgebung Sie die Kernel-Konfiguration vornehmen möchten, sollten die folgenden Pakete installiert werden:

  • libncurses5-dev – für eine ncurses-basierte Oberfläche zur Konfiguration innerhalb einer Konsole
  • libgtk2.0-dev, libglib2.0-dev und libglade2-dev – falls Sie eine GTK-Oberfläche zur Kernel-Konfiguration bevorzugen

Wenn Ihnen eines der obigen Pakete fehlen sollte, dann installieren Sie es bitte per apt-get nach. Als Nächstes benötigen Sie die Quellen des Ubuntu-Kernels. Diese Quellen sind als Paket erhältlich und können mit apt-get oder Synaptic installiert werden. Sie erkennen dieses Paket an der Bezeichnung linux-source-x.x.x. Die beste Basis ist das Quellpaket, dessen Versionsnummer dem derzeit benutzten Kernel entspricht.


Tipp 230: Kernel-Version herausfinden

Sie erhalten die aktuelle Versionsnummer, wenn Sie im Terminal uname -r eingeben. Was zählt, sind die ersten drei Zahlen, also beispielsweise 2.6.24. Die Quellen dieses Kernels würden bei der aktuellen Version in jedem Fall installiert, wenn Sie Folgendes in einer Konsole eingeben:

sudo apt-get install linux-source-2.6.24

In den Ubuntu-Quellen sind auch etliche Ubuntu-spezifische Patches enthalten. Es steht Ihnen natürlich frei, sich einen Original-(Vanilla-)Kernel von www.kernel.org zu beschaffen.


Optional: Kernel-Patches herunterladen

Meist werden Sie den Kernel patchen wollen, um gewisse Funktionalitäten in den Kernel zu integrieren, die im Standard-Kernel (noch) nicht enthalten sind. In diesem Fall wissen Sie wahrscheinlich, welchen Patch Sie benötigen. Besonders komfortabel ist es natürlich, wenn der benötigte Patch in einem Repository zu bekommen ist. Einige Patches finden sich beispielsweise im Universe-Repository. Achten Sie hierbei wie bei allen Patches auf die richtige Versionsnummer. Für jeden Kernel gibt es einen passenden Patch.

Kernel-Quellen auspacken

Die Quellen befinden sich nach Installation als tar.bz2-Archiv im Verzeichnis /usr/src. Mit

sudo tar -xjf linux-source-<Versionsnummer>

und durch cd linux-source-<Versionsnummer> entpacken Sie die Kernel-Quellen und wechseln ins Quellverzeichnis.

Optional: Kernel patchen

Patches, die über das Paketmanagement installiert wurden, befinden sich in einem Unterverzeichnis von /usr/src/kernel-patches/diffs. Sie liegen üblicherweise als gz- oder bz2-komprimierte Diff-Datei vor (*.diff.gz oder *.diff.bz2). Sie lassen sich mit folgendem Befehl einbauen:

gunzip -c /usr/src/kernel-patches/diffs/\
<Patchverzeichnis>/<Patchdatei> | sudo patch -p1

Bei bz2-Kompression ist gunzip durch bunzip2 zu ersetzen.

Kernel konfigurieren

Die Konfiguration des Kernels wird im aktuellen Kernel-Quellverzeichnis in der Datei .config gespeichert. Es ist stets ratsam, von der aktuellen Kernel-Konfiguration auszugehen. Diese finden Sie im Verzeichnis /boot/config. Sie wird folgendermaßen kopiert:

sudo cp /boot/config-<Kernelversion> .config

Alternativ kann die Konfiguration des laufenden Kernels meist auch aus einer komprimierten Datei in /proc gelesen werden. Dies ist im Standard-Kernel von Ubuntu nicht aktiviert, bei einem selbstkompilierten Kernel können Sie dieses Feature aber aktivieren:

sudo zcat /proc/config.gz > .config

Auf der Basis dieser Konfiguration können Sie nun eigene Einstellungen vornehmen. Wenn Sie eine minimale Standardkonfiguration erzeugen möchten, wählen Sie einfach:

sudo make defconfig

Beim Wechsel auf eine neue Kernel-Version kann die Datei .config aus dem alten Kernel-Verzeichnis in das neue kopiert werden.

Nach dem Wechsel in dieses neue Verzeichnis können Sie

sudo make oldconfig

aufrufen, worauf dann nur die Einstellungen für die neuen Kernel-Features abgefragt werden.

Kernel kompilieren

Nach dem Abschluss der obigen Konfiguration muss der Kernel kompiliert werden. Mit den folgenden beiden Befehlen erzeugen Sie auch gleich einfach installierbare .deb-Pakete für das Kernel-Image, die Kernel-Header, das Kernel-Doc und die Kernel-Source:

sudo make-kpkg clean

und:

sudo make-kpkg --initrd --revision <meineVersion> binary

Der Parameter binary sorgt für die Erstellung der genannten *.deb-Pakete. Wenn Sie nur ein Kernel-Image-Paket benötigen, können Sie binary durch kernel_image ersetzen. Bei Angabe des optionalen Parameters revision müssen Sie darauf achten, dass die Bezeichnung sich nicht mit einem im System vorhandenen Kernel überschneidet. Weitere Möglichkeiten sind in der Manpage von make-kpkg aufgeführt.


Tipp 231: Den Kernel schrittweise übersetzen

Sollte es während des Laufs von make-kpkg zu einer Fehlermeldung kommen, so können Sie versuchen, den Kernel in folgenden einzelnen Schritten zu übersetzen, um den Fehler genauer zu lokalisieren:

sudo make clean bzImage
sudo make-kpkg --initrd kernel_image
sudo make
sudo make-kpkg --initrd binary

Einige Anmerkungen

Eine Initial Ramdisk ist nicht notwendig, wenn Sie Ihre Hardware kennen (und das sollten Sie, wenn Sie Ihren eigenen Kernel kompilieren!). In diesem Falle deaktivieren Sie in der Konfigurationsphase die Unterstützung für initrd und binden die Treiber für das Root-Laufwerk (das sind meist die ATAPI/IDE-Treiber für die Festplatte) fest und nicht als Modul ein. Hilfreich ist auch das feste Einbinden von USB, wenn Sie eine USB-Tastatur und/oder -Maus benutzen. Möchten Sie eine externe FireWire-Festplatte schon beim Booten einbinden, so müssen auch die FireWire-Treiber fest in den Kernel kompiliert werden.

Danach starten Sie das Kompilieren mit:

sudo make-kpkg binary

Nach einer Änderung der Konfiguration kann es nötig sein, vor einem erneuten make-kpkg einmal sudo make auszuführen.

Wird der Kernel nochmals gepatcht, so sollten Sie bereits übersetzte Teile aufräumen. Nur dann wird beim nächsten Mal alles neu kompiliert:

sudo make clean

Wurde der Kernel mittels make-kpkg kompiliert, so ist es auch empfehlenswert, alle Teile mit

sudo make-kpkg clean

aufzuräumen. Dadurch werden zum Beispiel auch die Stamp-Dateien gelöscht.

Kernel installieren und booten

Das erzeugte Kernel-Paket können Sie nun ganz einfach mit dem Befehl

sudo dpkg -i ../kernel-image-<neueVersion>.deb

installieren. Nach einem Neustart des Systems lässt sich der neue Kernel im Boot-Menü auswählen. Sollte sich der neue Kernel nach einer Erprobungsphase bewährt haben, können Sie den alten Kernel mit folgendem Befehl aus dem System entfernen:

sudo dpkg -r kernel-image-<alteVersion>

Für den Anfang empfiehlt es sich jedoch, den alten Kernel parallel zum neuen beizubehalten, um sich nicht einer wichtigen Rettungsmöglichkeit zu berauben.


Tipp 232: Grafische Kernel-Konfiguration

Abhängig von den am Anfang installierten Bibliotheken ist eine grafische Kernel-Konfiguration z. B. für die GTK-Umgebung möglich:

sudo make gconfig

Die entsprechenden Aufrufe für die Konsole bzw. die Qt-Oberfläche lauten:

sudo make menuconfig

bzw.:

sudo make xconfig

Die Konfiguration des Kernels innerhalb der grafischen Oberfläche erfolgt nun durch einfaches (xconfig) bzw. doppeltes (gconfig) Anklicken der entsprechenden Optionen. Nach dem Fertigstellen der Konfiguration dürfen Sie nicht vergessen, die Änderungen zu sichern.




Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






 <<   zurück
  
  Zum Katalog
Zum Katalog: Ubuntu GNU/Linux

Ubuntu GNU/Linux
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Linux Server






 Linux Server


Zum Katalog: Linux-Server einrichten und administrieren






 Linux-Server
 einrichten und
 administrieren


Zum Katalog: Linux Hochverfügbarkeit






 Linux Hoch-
 verfügbarkeit


Zum Katalog: Linux






 Linux


Zum Katalog: Debian






 Debian


Zum Katalog: Android 3






 Android 3


Zum Katalog: GIMP






 GIMP


Zum Katalog: Webserver einrichten und administrieren






 Webserver einrichten
 und administrieren


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2011
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de