Linux - Compilazione del nodo (Kernel) Linux -Compilação do núcleo (Kernel)) Linux - Compilation du noyau (Kernel) Linux - Recopilación del núcleo (Kernel) Linux - Compiling the kernel

Kompilierung des Kernels

Ziel dieses Artikels ist es die Kompilierung des Kerns (oder Kernel) unter Linux vorzustellen.
Die folgenden Ausführungen basieren auf der Version 2.4.20 des Kernels, die jüngste zu dem Zeitpunkt als der Artikel verfasst wurde (März 2003). Die Quellen der jüngsten Version stehen zum Runterladen zu Verfügung unter http://www.kernel.org.

Die Quellen "wiegen" zwischen 25 und 30 Mo.

Quellen dekomprimieren

Wenn Sie die Quellen erhalten haben Sie je nach dem eine tar.bz2 oder tar.gz Datei. Kopieren Sie diese in das Verzeichnis /usr/src/ ihrer Linux-Maschine, aber dekomprimieren Sie sie nicht sofort.
In dem betroffenen Verzeichnis, geben Sie den folgenden Befehl ein:

castor@linuxbox:/usr/src$ ls -al
total 8
drwxrwsr-x	2 root	 src		  4096 Feb  8  2002 .
drwxr-xr-x   13 root	 root		 4096 May  1  1980 ..
lrwxrwxrwx	1 root	 src			12 Feb 25 15:39 linux -> linux-2.4.18
drwxr-sr-x	2 root	 src		  4096 Feb 25 15:38 linux-2.4.18
-rw-r--r--	1 root	 root	 27421046 Feb 25 15:37 linux-2.4.20.tar.bz2
castor@linuxbox:/usr/src$

Das Ergebnis kann auf Ihrer Maschine anders ausfallen. Als erstes muss der symbolische Link linux mit dem Befehl rm linux gelöscht werden.
Dann muss der zuvor erhaltene tarball entkomprimiert werden. Dafür muss Platz vorgesehen sein, die entkomprimierten Quellen brauchen fast 200 Mo !!
Dann erstellen wir einen symbolisch Link linux der auf das neue Verzeichnis verweist. Je nach Fall, heißt das Verzeichnis, in dem sich die Quellen befinden schon linux, dann muss es mit folgendem Befehl umbenannt werden mv linux linux-2.4.20.

root@linuxbox:/usr/src# rm linux
rm: remove `linux'? y
root@linuxbox:/usr/src# tar -xjf linux-2.4.20.tar.bz2
root@linuxbox:/usr/src# ln -s linux-2.4.20 linux
root@linuxbox:/usr/src# ls -hal
total 27M
drwxrwsr-x	4 root	 src		  4.0k Feb 25 15:49 .
drwxr-xr-x   13 root	 root		 4.0k May  1  1980 ..
lrwxrwxrwx	1 root	 src			12 Feb 25 15:49 linux -> linux-2.4.20
drwxr-sr-x	2 root	 src		  4.0k Feb 15 15:38 linux-2.4.18
drwxr-xr-x   14 root	 src		  4.0k Nov 29 00:53 linux-2.4.20
-rw-r--r--	1 root	 src		   26M Feb 25 15:37 linux-2.4.20.tar.bz2
root@linuxbox:/usr/src#

Besonderheit des Linux-kernels : die Module

Der Linux-Kern ist "modular", d.h. dass manche Optionen, als "Module" definiert, erst zum passenden Zeitpunkt durch den Kern übernommen werden. Dadurch wird Speicherraum gespart, zu Lasten der Ladezeit. Wenn Sie z.B. alle sechs Monate eine Seite drucken ist es unnötig die Druckerpiloten permanent im Speicher zu behalten (Parallelanschluß, Drucker, usw.). Diese werden erst geladen, wenn der Benutzer drucken möchte.

Es ist also wichtig die künftige Benutzung der Maschine unter Linux gut zu kennen, bevor man mit der Konfiguration des Kerns beginnt.

Konfiguration der Optionen

Es gibt drei Befehle um die Quellen zu konfigurieren: make config, make menuconfig und make xconfig.

Die ersten beiden sind in Text-Modus, die dritte braucht das System X-window. Die Wahl liegt bei Ihnen, alle drei sind vollkommen gleichwertig. Nur muss man bei der ersten alle Optionen durchgehen.

Was mich betrifft, bevorzuge ich make menuconfig.

root@linuxbox:/usr/src/linux# make menuconfig
( cd include ; ln -sf asm-i386 asm)
make -C scripts/lxdialog all
make[1]: Entering directory `/usr/src/linux-2.4.20/scripts/lxdialog'
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o checklist.o checklist.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o menubox.o menubox.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o textbox.o textbox.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o yesno.o yesno.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o inputbox.o inputbox.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o util.o util.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o lxdialog.o lxdialog.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o msgbox.o msgbox.c
gcc -o lxdialog checklist.o menubox.o textbox.o yesno.o inputbox.o util.o lxdialog.o msgbox.o -lncurses
...

In diesem Moment befinden wir uns in der Konfigurationsschnittstelle.
Sie besteht aus diversen Menüs, die alle Untermenüs enthalten können , etc.

Es ist seht empfehlenswert für jede Option die online-Hilfe zu lesen.
Die folgenden Angaben können je nach Kernel-Version und gewählten Optionen variieren.

  • Code maturity level options : Unnötig, ausser für Entwickler.
  • Loadable module support : Unverzichtbar. Ermöglicht die Benutzung der Modularfunktionen des Kernels. Antworten Sie mit JA auf alle Optionen.
  • Processor type and features : Optionengruppe die den Prozessor betreffen. Die erste Zeile enthält den Typen ihres Prozessors. Die Kompatibilität ist steigend, d.h. wenn Sie "Pentium-Classic" eingeben, können alle Prozessore des Typs Pentium und höher funktionieren. Es ist ratenswert den nächstgelegenen Typen ihres Prozessors anzugeben.
  • Machine Check Exception : Ermöglicht dem Prozessor den Kernel im Problemfall zu benachrichtigen. Antworten Sie JA.
  • Toshiba Laptop support et Dell laptop support : Antworten Sie JA wenn Sie ein Toshiba oder Dell Laptop besitzen.
  • /dev/cpu/microcode - Intel IA32 CPU microcode support
    /dev/cpu/*/msr - Model-specific register support
    /dev/cpu/*/cpuid - CPU information support 
    Diese drei Optionen können gefahrenlos eingesetzt werden, sie können die Prozessorverwaltung optimieren.
  • High Memory Support : Verwaltung von mehr als 1 Go RAM. Wenn Ihre Maschine nicht mehr als 960 Mo RAM besitzt, lassen Sie "off".
  • Math emulation : Emulation des Koprozessors. Nur für einen 386 oder 486SX nützlich.
  • MTRR (Memory Type Range Register) support : Nützlich, ausser für 386, 486 und Pentium erster Generation (vor PII).
  • Symetric multi-processing support : Nützlich für Multi-Prozessor-Maschinen. Bei Mono-Prozessor-Maschinen entfernen.
  • Local APIC support on uniprocessors (NEW) : Ermöglicht die Benutzung der "virtuellen" Unterbrechungen, die durch den Prozessor generiert werden. Im Zweifelsfall, antworten Sie JA IO-APIC support on uniprocessors : Idem für die I/O (Eingänge/Ausgänge). Im Zweifelsfall, antworten Sie JA
  • Unsynced TSC support : Verwaltung der asynchronen TSC. Im Zweifelsfall, antworten Sie NEIN.
  • General setup
  • Networking support : Netzwerkträger. Antworten Sie JA denn manche Programme benutzen diese Funktion auch auf einer alleinstehenden Maschine.
  • PCI support : BUS PCI -Träger. Antworten Sie JA denn Sie haben 99% Chancen mindestens eine Karte auf diesem Bus zu haben, ausser bei sehr alten Maschinen.
  • PCI access mode : Zugangsart zum bus PCI. Die Optionen sind "BIOS", "direct" oder "any". Wählen Sie "any", so wird der Kernel beide Zugangsarten probieren (empfohlen).
  • ISA bus support : Träger für den Bus ISA. Auf jüngeren Maschinen unnötig. Im Zweifelsfall, antworten Sie JA.
  • PCI device name database : Namen-Bank für PCI-Peripheriegeräte. Antworten Sie nur für on-board-Systeme, die sehr kleine Kernels benötigen.
  • EISA support : Träger für den Bus EISA. Es gilt das Gleich wie für den Bus ISA
  • MCA support : Träger des BUS MCA (MicroChannel). Nur für IBM PS/2.
  • Support for hot-pluggable devices : Träger für hot-plugs-Peripheriegeräte (PCMCIA, USB, etc...).
  • PCMCIA/CardBus support : Träger von PCMCIA-Karten. Im Bedarfsfall aktivieren.
  • PCI Hotplug Support : Träger von hotplugs-Peripheriegeräten des PCI-Anschlusses. Idem.
  • System V IPC : Inter Process Communication, Programmbibliotheken die von manchen Programmen verwendet werden. Antworten Sie JA.
  • BSD Process Accounting : Ermöglicht es Prozessinformationen auf Benutzerebene zu haben. Kann z.B. zu Überwachungszwecken nützlich sein. Antworten Sie JA.
  • Sysctl support : Ermöglicht gewisse flags zu ändern. Antworten Sie JA.
  • Kernel core (/proc/kcore) format : erzeugter Binärtyp (ELF/A.OUT). Lassen Sie den Wert ELF.
  • Kernel support for xxxx binaries : die diversen Binärtypen die der Kernel später ausführen kann. Setzen Sie sie in integriet oder in Modul, je nach Wahl.
  • Power Management support : APM und ACPI-Verwaltung. Es muss mit JA geantwotet werden, dann darunter die Trägersart wählen (die Wahl hängt von Ihrem Prozessortyp ab).
  • Ignore USER SUSPEND (NEW) : An den Maschinen mit BIOS APM, ist NEIN eine gute Wahl. An manchen Laptops, zwingt Sie ein gebugter BIOS mit JA zu antworten.i
  • Enable PM at boot time (NEW) : Antworten Sie nur dann mit NEIN, wenn Ihre Maschine beim hochfahren abstürzt.
  • Make CPU Idle calls when idle (NEW) : ermöglicht auf manchen Maschinen den Prozessor zu verlangsamen wenn keine Aktivität vorliegt. JA ist eine gute Wahl.
  • Enable console blanking using APM (NEW) : ermöglicht es den Bildschirm abzustellen bei Sitzungen unter Konsolen.
  • RTC stores time in GMT (NEW) : Wenn Sie einen anderen OS auf der gleichen Maschine verwenden, antworten Sie NEIN. Im gegenteiligen Fall, ist JA eine gute Wahl.
  • Allow interrupts during APM BIOS calls (NEW) : Antworten Sie nur dann JA wenn Ihre Linuxbox beim Versetzen in Bereitschaftsmodus abstürzt.
  • Use real mode APM BIOS call to power off (NEW) : Anworten Sie JA wenn Ihr PC abstürzt, anstatt herunterzufahren.
    Memory Technology Devices (MTD) : Aktivieren Sie diese Option nur, wenn Sie Peripheriegeräte, wie FLASH-Speicher verwenden. Damit kann der Kernel sie korrekt identifizieren…
  • Träger von Parallelanschluß : Ermöglicht die Übernahme des Parallelanschluß.
  • PC-style hardware (NEW) : Option für alle PC.
  • Support foreign hardware (NEW) : Ermöglicht die Übernahme von "exotischen" Peripheriegeräten.
  • IEEE 1284 transfer modes (NEW) : Verwaltung der hochentwickelten Übertragungsmodussen (EPP und ECP).
  • Plug and Play configuration : Es handelt sich um den Träger für die "plug and play"-Peripheriegeräte. Er ist unterteilt in Plug and Play support und ISA Plug and Play support, die zweite Wahl steht nur dann offen, wenn die erste aktiviert ist.
  • Block devices : Wir kommen zu einem wichtigen Teil. Die "bloc devices" oder Peripheriegeräte im Blockmodus stellen die Mehrzahl der Speicherperipheriegeräte dar, wie Festplatten und Disketten. Die Daten werden in Blöcken gespeichert, deren Größe je nach Träger variieren kann, die aber für einen bestimmten Träger festliegt.
  • Normal floppy disk support : Träger für Diskettenlaufwerk.
  • XT hard disk support : Träger für alte Festplatten 8 bits.
  • Loopback device support : Träger für das loopback-Peripheriegerät, nützlich z.B. um ein ISO9660-Bild zu "aufzubauen", bevor es gebrannt wird, zur Überprüfung.
  • Network block device support : Ermöglicht die Benutzung von Netz-Peripheriegeräten, als ob sie lokal wären.
  • RAM disk support : Ermöglicht die Erstellung eines RAMdisk, d.h. einer virtuellen Platte in RAM, der Grösse Default RAM disk size. Nützlich hauptsächlich für Maschinen die kein Speicherperipheriegeräte haben (thin client).
  • Per partition statistics in /proc/partitions :Ermöglicht das Abspeichern von Statistiken über Ihre Partitionen. Nur zu Zwecken der Systemoptimierung nützlich. Die anderen Optionen sind Materialtypspezifisch. Mehr Informationen in online-Hilfe
  • Multi-device support (RAID and LVM) : Träger für den RAID und den LVM (Logical Volume Manager). Jede Option kann separat gewählt werden (RAID Lineaire, RAID-0 (striping), RAID-1 (mirroring), RAID-4/RAID-5). Es ist unnötig sie zu aktivieren, es sei denn, Ihr Material benutzt RAID. ################################### FIN DE MISE EN PAGE CORRECTE #################################
  • Networking Options : Wir kommen jetzt zu dem Vorliebsgebiet des GNU/Linux-Systems, nämlich dem Netz. In diesem Teil wird es möglich sein, zahlreiche mehr oder wenig nützliche Tools zu integrieren.
  • Packet Socket: Diese Option ermöglicht es manchen Programmen direkt mit den verschiedenen Netz-Peripheriegeräten zu diskutieren, die im System installiert sind. Z.B., das Dienstprogramm TCPDump braucht diese Option.
  • Packet socket: mmapped IO : Diese Option erlaubt dem Packet Socket eine sehr viel schnellere Eingangs/Ausgangsmethode zu benutzen. Diese Option ist nicht wesentlich.
  • Netlink device emulation : Diese Option ist nur zu Zwecken der Retro-Buchhaltung da, mit Programmen, die gewisse spezielle Peripheriegeräte benutzen müssen. Sie wird früher oder später verschwinden. Es ist besser sie zu aktivieren, sei es nur als Modul.
  • Network packet filtering : Diese Option ist sehr wichtig. Sie ersetzt die alte Option ipchains der Kerne 2.2 und Vorgänger. Es handelt sich um das Herz der Filterfunktionen von Linux-Paketen, welches mit Hilfe des Dienstprogrammms iptables benutzt wird.. Diese Option sollte ohne Zögern angekreuzt werden.
  • Network packet filtering debugging : Diese hier allerdings ist nur für Personen interessant, die sich mit der Entwicklung des Moduls NetFilter beschäftigen wollen.
  • Socket Filtering : Ermöglicht alle Arten von Sockets zu filtern, abgesehen von den TCP-Sockets. Diese Option ist obligatorisch um die Filteroption ppp zu benutzen. In allen anderen Fällen, ist NEIN eine gute Wahl.
  • Unix domain sockets : Diese Option aktiviert den Träger für die Sockets, die ein Netzverbindungsmittel sind. Zahlreiche Programme benutzen sie, auch wenn Ihre Maschine allein ist. Man kann sie eventuel als Modul kompilieren, aber dem ist schwer abzuraten. Antworten Sie mit JA.
  • TCP/IP networking : Übernahme des TCP/IP-Protokolls. Antworten Sie JA, auch wenn Ihre Maschine völlig alleine ist.