LinuxNetMag
Kernel selbstgemacht
Archiv | Home
Inhalt
   
LinuxNetMag #4

  Software
 Aktuell
kurz vorgestellt
 HTML
Web Preprozessor
HTML-Editoren
 Internetradio
eigene Radiostation
Web-Jukebox IceDJ
 Spiele
Rennspiele
Entwicklung: XTux
 Astronomie
Sternenkarten
Flug durch Sonnensystem
Doppelsterne simulieren
  
 

Hardware

Kernel kompilieren
Soundkarte als Oszilloskop
Grafikkarten im Vergleich
  
 

Netzwerk

Web-Seiten überprüfen
Samba Teil II
Chat für Ihre Homepage
FTP-Server & Clients
Modem-sharing
Links
  
 Wissen
Der Bootprozeß
Gimp-Kurs Teil 1
Gimp-Kurs Teil 2
  
 

Sonstiges

Mailing-Liste
Gästebuch
Artikelliste
Unterstützen Sie uns !
zurück zur Hauptseite



Druckversion


  Info Kernel kompilieren ist für alte Linux-Hasen ganz normal. Um auch die letzten Ressourcen aus seinem System zu hohlen, wird ständig der neueste Kernel installiert.
Für Anfänger ist es zumeist ein Schock, daß man das eigenen Betriebssystem aus dem Quellcode heraus erzeugen soll. Denn wer mußte jemals schon mal sein Windows kompilieren?
Autor: Jens Benecke

Die Kurzfassung
Als root nach `/usr/src/linux' wechseln und make menuconfig eingeben. Alles weitere ist selbsterklärend.

Anmerkung: Falls irgendwo X11 läuft, ist auch make xconfig möglich -- dann kann man sich den Kernel zusammenklicken. Gegebenenfalls muß man vorher noch mit xhost +localhost dem root-Benutzer erlauben, auf deine X-Session zuzugreifen, falls Du nicht als root X gestartet hast (und das ist unbedingt zu vermeiden, es öffnet nämlich einige Sicherheitslücken).

Stattdessen kann man auch einfach die `.Xauthority' des Users, der X gestartet hat (d.h. dem die X Sitzung "gehört") in das Verzeichnis des Users kopieren, der darauf zugreifen kann -- hier root.

Das erste Mal könnte es etwas länger dauern, bis man etwas auf dem Bildschirm sieht -- das Konfigurationsprogramm für den Kernel wird nämlich auch als Quellcode geliefert und muß zuerst kompiliert werden.

längere Fassung

Grundregel für den Kernel: Alles, was nicht unbedingt zum Booten benötigt wird, gehört nicht in den Kernel, sondern wird als Modul kompiliert. Eine Ausnahme sollte nur dann gemacht werden, wenn man irgendwas "dediziertes" (wie einen stand-alone Firewall, einen Router, o.ä.) bauen will, auf dem keine Anwendersoftware und kaum Hardware läuft.

Aber es gibt für alles Ausnahmen. Wenn etwas als Modul nicht funktioniert, kann es durchaus sein, daß der Programmierer geschlampt hat und es fest einkompiliert problemlos geht oder umgekehrt.

Bitte lesen Sie auf jeden Fall die Hilfe zu jedem Punkt, den man an- oder abwählt!
Der Kernel kommt normalerweise mit einer vernünftigen Standard-Vorkonfiguration, die man zwar auf seine Bedürfnisse anpassen kann, aber mit dem Gedanken
"Das hört sich cool an, das probier ich"
fängt man sich sehr schnell Probleme ein. Außerdem gilt wie immer, Dokumentation lesen lohnt sich u.U. sehr, wenn man etwas für trockenen Humor übrig hat ...

Standardeinstellungen
Man sollte unbedingt folgende Einstellungen aktivieren (das gilt auch für Rechner ohne Netzwerk)
  • Processor type and features: Den CPU-Typ einstellen, und i.d.R auch MTRR
  • Loadable Module Support: Enable loadable module support
  • Loadable Module Support: Kernel module loader (ab 2.2 nicht mehr "kerneld", sondern "kmod")
  • General Setup: Networking support, System V IPC, Process Accounting, Kernel support for ELF binaries
  • Plug and Play: Plug and Play support, Autoprobe for parallel devices
  • Block devices: Normal PC Floppy disk (als Modul), loopback device (als Modul)
  • Networking: TCP/IP networking, UNIX domain sockets
  • SCSI Support: Verbose SCSI error reporting (falls SCSI Geräte vorhanden), damit sind Fehlermeldungen besser interpretierbar. (`verbose' = `gesprächig')
  • Filesystems: Second extended Filesytem support, Filesystems/Native Language Support: Codepage 437 und 850, ISO8859-1
  • Character devices: Virtual terminal, Support for console on virtual terminal, Standard generic (dumb) serial support, UNIX98 PTY support
  • Console drivers: VGA text console, Video mode selection support

Als Modul sollten kompiliert werden (falls benötigt):

  • Grundsatz: alles, von dem nicht gebootet wird.
  • Network device support: Netzwerkkartentreiber also (außer man holt sich das root-filesystem via NFS oder etwas ähnliches)
  • alles an Massenspeicher, von dem nicht gebootet wird, also CDROMs, TAPEs, usw (auch Floppies!)
  • alles an Peripherie: serielle/parallele Ports, ISDN-Support,
  • Binary support außer ELF (also a.out, JAVA, "misc")
  • Dateisytemsupport außer EXT2 (FAT, MSDOS, VFAT, ISO9660, etc)
  • PPP, SLIP, PLIP Support
  • Soundkartensupport
  • usw.

Der Grund dafür ist einfach. Diese Technik spart Speicherplatz (die Module werden erst geladen, wenn sie auch wirklich gebraucht werden, und das automatisch. Nach einer einstellbaren Zeit werden die Module dann wieder rausgeworfen) und ist flexibler (man kann ihnen auch zu laufzeiten z.B. I/O Adressen und IRQs zuweisen, als wenn sie fest im Kernel sitzen. Dann müßte man bei IRQ-Änderungen den ganzen Kernel neu booten).

Man sollte grundsätzlich `Network support' auf "YES" stellen und mindestens ein `dummy' network device mit einbinden, denn viele Programme benutzen auch das Netzwerk, wenn keine Netzwerkkarte eigebaut ist (Linux ist halt ein Netzwerk-Betriebssystem), oder wenigstens die Protokolle, zur Prozeßkommunikation!
X-Window ist ein wichtiger Kandidat aus dieser Kategorie, der Druckerspooler (lpd) ebenfalls. Hat man ein echtes Netzwerk, braucht man kein `dummy' Device mehr; stören tut es aber nicht.

Ist man fertig mit Einstellen, geht man raus (`Exit'), speichert ab (`Yes') und tippt einmal make dep clean modules zImage modules_install (die Reihenfolge nach dep clean ist eigentlich egal), und arbeitet je nach Rechner zehn Minuten (P166, 32MB) bis zehn Stunden (386DX-33, 8MB) auf einer anderen Konsole kann man parallel getrost weiterarbeiten.

Installation des Kernels

Ist der Kompilierungsvorgang abgeschlossen, findet man unter /usr/src/linux/arch/i386/boot/ eine Datei namens zImage, die den neuen Kernel darstellt. Man kopiere diese ins `root' Directory (oder nach /boot, hauptsache irgendwo auf die root-Partition) und füge in die `/etc/lilo.conf' (vorausgesetzt, man benutzt LILO zum booten) folgendes ein:

        image = /boot/zImage            # zum Beispiel
        label = NeuerKernel             # max. 15 Buchstaben

Das setzt voraus, daß eine lauffähige `lilo.conf' schon existiert und alle anderen Settings die gleichen bleiben (`root, boot, prompt', etc).

Danach ein kurzes

        /sbin/lilo

aufrufen, und lilo sollte den neuen Kernel als weitere Bootoption aufnehmen.
Dann kann man beim nächsten Neustart beim `LILO:' Prompt NeuerKernel eingeben und dann wird der neue Kernel auch schon gebootet.
Soll das der Standard bleiben, d.h. läuft der "Neue" ein paar Tage problemlos, kann man in der `/etc/lilo.conf' die beiden Zeilen einfach vor die stellen, die den Standardkernel enthalten. einmal LILO aufrufen, und fertig.

Booten via `LOADLIN' ist auch nicht schwer. Irgendwo dürfte der Kernel liegen, den man früher gebootet hat. (Meistens auf einer DOS-Partition.) Dann einfach den neuen Kernel z.B. als `neuer.img' ins gleiche Verzeichnis kopieren und beim nächsten Booten die neue Kerneldatei dem `LOADLIN' als Parameter übergeben (oder nach Belieben in die Batchdatei schreiben).


Dieser Text ist ein Auszug aus der Linux USER FAQ, und wurde uns freundlicherweise zur Verfügung gestellt von Jens Benecke, der Mitautor dieser FAQ ist.

Links
   Homepage des Autors (Jens Benecke): http://www.pinguin.conetix.de
   Linux USER FAQ (Deutsche Version): http://www.pinguin.conetix.de/linux-faq/index.html


Platz für Kommentare & Fragen:
(selbst eintragen)

 

Weitere Ausgaben Linux NetMag
[ #1 | #2 | #3 | #4 | Main ]