[ zurück ] [ Inhalt ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ weiter ]


Debian-Referenz
Kapitel 7 - Der Linux-Kernel unter Debian


Debian hat eine eigene Methode einen Kernel und dazugehörige Module zu kompilieren. Weitere Infos sind in Debian und der Kernel, Abschnitt 2.7 zu finden.


7.1 Neukompilieren des Kernels

Die Tools gcc, binutils und modutils aus Debian unstable sind sehr hilfreich, wenn man einen aktuellen Linux-Kernel kompilieren möchte. Siehe /usr/share/doc/kernel-package/README.gz um offizielle Informationen zu erhalten, besonders der untere Teil ist interessant.

Einen eigenen Kernel zu kompilieren ist eine nicht ganz einfache Sache, womit selbst begnadete Entwickler Schwierigkeiten haben könnten, gerade auch weil diese Thematik eine sich ständig weiter entwickelnde ist.

Manoj Srivastava schrieb:

--initrd benötigt einen Debian-eigenen cramfs-Patch.

Herbert Xu schrieb:

Nein, das tut es nicht. Das einzige was nötig ist, um ein anderes Dateisystem als CRAMFS zu nutzen, ist, MKIMAGE in /etc/mkinitrd/mkinitrd.conf zu setzen.

Seien Sie vorsichtig und ziehen Sie /usr/share/doc/kernel-package/README.gz von Manjo und Kent stets zu Hilfe. Des Weiteren stellen Sie sicher, dass Sie immer die aktuellste Version des unstable kernel-package-Paketes haben, wenn Sie einen instabilen Kernel kompilieren möchten.

Für einen Kernel, der nur für eine Maschine kompiliert ist, wird initrd nicht benötigt. Weil ich aber möchte, dass mein Kernel nahezu der gleiche ist, wie der, der von den kernel-image-Paketen bereitgestellt wird, nutze ich es trotzdem. Wenn Sie initrd nutzen möchten, lesen Sie bitte mkinitrd(8) und mkinitrd.conf(5). Siehe auch http://bugs.debian.org/149236.


7.1.1 Die Debian-Standardmethode

Beachten Sie Fehlermeldungen für kernel-package, gcc, binutils und modutils. Benutzen Sie neue Versionen von diesen Programmen wenn nötig.

Einen angepassten Kernel unter Debian zu kompilieren, bedarf ein wenig Sorgfalt. Verwenden Sie die Option --append_to_version zusammen mit make-kpkg, um mehrere Kernel zu verwalten.

     # apt-get install debhelper modutils kernel-package libncurses5-dev
     # apt-get install kernel-source-2.4.18 # installiere die aktuellste Version
     # apt-get install fakeroot
     # vi /etc/kernel-pkg.conf            # fügen Sie Namen und E-Mail-Adresse hinzu
     $ cd /usr/src                        # Arbeitsverzeichnis 
     $ tar --bzip2 -xvf kernel-source-2.4.18.tar.bz2
     $ cd kernel-source-2.4.18            # wenn das die Kernelquellen sind
     $ cp /boot/config-2.4.18-386 .config # verwende angegebene Konfiguration
     $ make menuconfig                    # den Anforderungen entsprechend zusammenstellen
     $ make-kpkg clean                    # nötig laut 'man make-kpkg'
     $ fakeroot make-kpkg --append_to_version -486 --initrd \
             --revision=rev.01 kernel_image \
             modules_image # modules_image ist für pcmcia-cs* und weitere ...
     $ cd ..
     # dpkg -i kernel-image*.deb pcmcia-cs*.deb # installiert den Kernel

make-kpkg kernel_image führt make oldconfig und make dep aus. Verwenden Sie --initrd nicht, wenn initrd nicht ausgewählt wurde.

Wenn Kernel-Module aus pcmcia-cs verwendet werden sollen oder aber keine Module der pcmcia-Kernelquellen benötigt werden, sollte im make menuconfig-Dialog unter "General setup" der Eintrag "PCMCIA/CardBus support" ausgewählt und die Konfiguration auf "< > PCMCIA/CardBus support" gesetzt werden, beispielsweise durch Deaktivieren der Box.

Auf einer SMP-Maschine, setzen Sie CONCURRENCY_LEVEL der kernel-pkg.conf(5) entsprechend.


7.1.2 Klassische Methode

Laden Sie den "reinen" Quellcode von

herunter oder verwenden Sie einen äquivalenten Quellcode in Debian und führen Sie folgende Schritte aus:

     # cd /usr/src
     # tar xfvz linux-Version.tar.gz
     # rm -rf linux
     # ln -s linux-Version linux
     # tar xfvz pcmcia-cs-Version.tar.gz
     # ln -s pcmcia-cs-Version pcmcia
     # cd linux
     # make menuconfig
     ... den Anforderungen entsprechend konfigurieren ...
     # make dep
     # make bzImage
     ... Konfiguration von lilo / grub ...
     ... kopieren von /usr/src/linux/arch/i386/boot/bzImage nach /boot ...
     ... /sbin/lilo oder grub ausführen
     # make modules; make modules_install
     # cd ../pcmcia
     # make config
     # make all
     # make install
     ... Hinzufügen von benötigten Modulen zu /etc/modules
     # shutdown -r now
     ... nun den neuen Kernel booten ...

7.1.3 Kernelheader

Die meisten Programme brauchen die Kernelheader-Dateien nicht, und einige Programme lassen sich sogar nicht erfolgreich kompilieren, wenn die Header-Dateien genutzt werden. Stattdessen sollten die Programme beim Kompilieren gegen die Header-Dateien gelinkt werden, gegen die auch glibc gelinkt wurde. Auf einem Debian-System sind diese Kernelheader-Dateien in /usr/include/linux und /usr/include/asm zu finden.

Entgegen einigen veralteten Dokumentationen, sollten keine symbolischen Links in /usr/src/linux von /usr/include/linux und /usr/include/asm erstellt werden.

Es sollte, wenn ein Programm bestimmte Kernelheader-Dateien für Kernel-spezifische Programme benötigt, stattdessen das Makefile so angepasst werden, dass der Pfad der einzubindenden Header-Dateien folgende Pfade enthält: Verzeichnis-bestimmter-Kernelheader/include/linux und Verzeichnis-bestimmter-Kernelheader/include/asm.


7.2 Der modularisierte Kernel 2.4

Die neuen Debian-2.4er-Kernel, welche von kernel-image-2.4.NN zur Verfügung gestellt werden, sind sehr stark modularisiert. Es muss sichergestellt sein, dass Module die verwendet werden sollen auch aktiviert sind, damit der Kernel wie gewünscht arbeitet.

Obwohl ich viele Beispiele für /etc/modules im folgenden Abschnitt als schnellen Fix habe, höre ich immer wieder, dass der richtige Weg, diese Modul abhängigen Probleme zu lösen, ist, Aliase für die Geräte in Dateien unterhalb von /etc/modutils/ anzulegen, da es genug davon in aktuellen Kernel gibt. Einige Module könnten automatisch von Hardwareerkennungsprogrammen wie discover aktiviert werden. Vergleichen Sie auch Hardware-Erkennung für X, Abschnitt 9.4.2.

Siehe Spezielle Regeln für den Umgang mit Modulen, Abschnitt 2.7.3 und Documentation/*.txt im Linux-Quellcode, um genauere Informationen zu erhalten.


7.2.1 PCMCIA

/etc/modules muss eventuell Folgendes enthalten, damit alte PCMCIA-Hardware korrekt funktioniert:

     # ISA PnP Treiber
     isa-pnp
     # neuer lowlevel PCMCIA-Treiber
     # yenta_socket # in meinem Fall jedoch nicht nötig

Für den Rest von PCMCIA sorgen die Skripte (aus dem pcmcia-cs Paket) depmod und kmod. isa-pnp brauchte ich auch, weil mein Laptop ein altes ISA-PCMCIA Modell ist. Neuere Laptops mit Cardbus/PCMCIA sollten dies nicht mehr brauchen.

Ein Zitat vom genialen Miquel van Smoorenburg miquels@cistron.nl:

"Ich habe einfach alles was mit PCMCIA zu tun hat, inklusive cardmgr, von meinem Laptop gelöscht und einen 2.4er-Kernel mit CardBus-Unterstützung installiert, sowie das neue hotplug-Paket aus Woody.

Solange man nur 32-bit Karten hat, wird das pcmcia-Paket nicht benötigt; 2.4 stellt die nötigen Karten-Dienste von sich aus zur Verfügung. Und der Standard-tulip-Treiber sollte wunderbar mit der Dlink-Karte arbeiten.

– Mike."

Sehen Sie dazu auch das Linux PCMCIA-HOWTO und Netzwerk-Konfiguration und PCMCIA, Abschnitt 10.8.5.


7.2.2 SCSI

[NICHT GETESTET] /etc/modules braucht Folgendes damit SCSI funktioniert:

     # SCSI core
     scsi_mod
     # SCSI generic driver
     sg
     # SCSI disk
     sd_mod
     # Alle anderen HW Module
     ...

depmod sollte auf die oben genannten Module achten.


7.2.3 Netzwerk-Funktionalität

/etc/modules sollte für zusätzliche Netzwerk-Funktionalität Folgendes enthalten:

     # net/ipv-4
     ip_gre
     ipip
     
     # net/ipv-4/netfilter
     # iptable (in Reihenfolge)
     ip_tables
     ip_conntrack
     ip_conntrack_ftp
     iptable_nat
     iptable_filter
     iptable_mangle
     #
     ip_nat_ftp
     ip_queue
     #
     ipt_LOG
     ipt_MARK
     ipt_MASQUERADE
     ipt_MIRROR
     ipt_REDIRECT
     ipt_REJECT
     ipt_TCPMSS
     ipt_TOS
     ipt_limit
     ipt_mac
     ipt_mark
     ipt_multiport
     ipt_owner
     ipt_state
     ipt_tcpmss
     ipt_tos
     ipt_unclean
     #
     #ipchains
     #ipfwadm

Oben genanntes ist nicht optimiert. depmod sollte auf die oben genannten Module achten.


7.2.4 EXT3-Dateisystem ( > 2.4.17)

Die Journaling Funktionalität für das EXT3-Dateisystem mit einem vorkompilierten Kernel-Image ( > 2.4.17) von Debian zu aktivieren, setzt die folgenden Schritte voraus:

     # cd /etc; mv fstab fstab.old
     # sed 's/ext2/ext3,ext2/g' <fstab.old >fstab
     # vi /etc/fstab
     ... setzen Sie den root-Dateisystemtyp auf "auto" anstelle von "ext3,ext2"
     # cd /etc/mkinitrd
     # echo jbd >>modules
     # echo ext3 >>modules
     # echo ext2 >>modules
     # cd /
     # apt-get update; apt-get install kernel-image-2.4.17-686-smp
     ... installieren Sie den aktuellsten Kernel und konfigurieren Sie LILO
     dementsprechend
     # tune2fs -j -i 0 /dev/hda1
     # tune2fs -j -i 0 /dev/hda2
     ... tune2fs für alle EXT2 Dateisysteme wiederholen
     # shutdown -r now

Von nun an ist EXT3-Journaling aktiviert. Für den Fall, dass der Kernel EXT3 für root-Partitionen nicht unterstützt, erweist sich ext3,ext2 als Dateisystem-"Typ" in der fstab als sehr hilfreich, da so sicher ein "Fall-Back" gemacht werden kann.

Wenn Sie schon zuvor einen 2.4er-Kernel installiert haben, und ihn nicht erneut installieren möchten, dann führen Sie die oben genannten Befehle bis zu dem apt-get Kommando aus, und dann folgende:

     # mkinitrd -o /boot/initrd.img-2.4.17-686-smp
     /lib/modules/2.4.17-686-smp
     # lilo
     # tune2fs -j -i 0 /dev/hda1
     # tune2fs -j -i 0 /dev/hda2
     ... tune2fs für alle EXT2-Dateisysteme wiederholen
     # shutdown -r now

Von nun an ist EXT3-Journaling aktiviert.

Wenn /etc/mkinitrd/modules nicht gesetzt war als mkinitrd ausgeführt wurde, und Sie während der Boot-Phase zusätzliche Module hinzufügen möchten:

     ... um eine Shell (5 sec.) an dem initrd Prompt zu erhalten, RETURN drücken
     # insmod jbd
     # insmod ext3 # modprobe ext3 sollte alles nötige berücksichtigen
     # insmod ext2
     # ^D
     ... weiter gehts mit dem Boot-Vorgang

Die Meldung "cramfs: wrong magic" könnte in den Systemmeldungen beim Boot-Vorgang (dmesg) auftreten, diese wird jedoch als harmlos eingestuft. Dieses Problem wurde in Sarge (2002/10) gelöst. Siehe http://bugs.debian.org/135537 und das EXT3 File System mini-HOWTO oder /usr/share/doc/HOWTO/en-txt/mini/extra/ext3-mini-HOWTO.gz um weitere Informationen zu erhalten.

Es wurde berichtet, dass auf einigen Systemen einige Kernel lock-ups auftraten wenn EXT3 aktiviert war, aber was meinen 2.4.17 Kernel angeht, hatte ich keine Probleme.


7.2.5 Realtek RTL-8139 Unterstützung in Kernel 2.4

Aus irgendwelchen Gründen heißt das RTL-8139 Modul ab dem 2.4er-Kernel 8139too und nicht mehr rtl8139. Wenn Sie also von einem 2.2er Kernel auf einen 2.4er upgraden, ändern Sie einfach die /etc/modules dementsprechend ab.


7.2.6 Parallel-Port-Unterstützung

Von kernel-image-2.4.* wird Parallel-Port-Unterstützung als Modul angeboten. Aktivieren Sie es wie folgt:

     # modprobe lp
     # echo lp >> /etc/modules

Siehe auch Documentation/parport.txt im Linux-Quellcode.


7.3 Tunen des Kernels mittels des proc-Dateisystems

Das Verhalten des Linux-Kernels kann dynamisch durch das proc-Dateisystem geändert werden.

Für grundlegende Informationen über das Ändern von Kernelparametern durch das /proc-Dateisystem, lesen Sie im Linux-Quellcodeverzeichnis Documentation/sysctl/*.

Einige Beispiele der Kernelparametermanipulation können in /etc/init.d/networking und Eigenartige Probleme beim Zugriff auf einige Webseiten, Abschnitt 3.8.5 gefunden werden.

Sehen Sie in sysctl.conf(5) wie man den Kernel zur Bootzeit mittels des /proc-Dateisystems konfigurieren kann. Dazu wird das Skript /etc/init.d/procps.sh genutzt, das in der Regel aus /etc/rcS.d/S30procps.sh gestartet wird.


7.3.1 Zu viele geöffnete Dateien

Der Linux-Kernel könnte unter Umständen die Meldung "Too many open files" ("Zu viele geöffnete Dateien") ausgeben. Der Grund hierfür ist, dass der Standardwert (8096) für file-max sehr klein gewählt wurde. Um dieses Problem zu lösen, führen Sie folgende Schritte als root aus:

     # echo "65536"  > /proc/sys/fs/file-max  # für 2.2er- und 2.4er-Kernel
     # echo "131072" > /proc/sys/fs/inode-max # nur für 2.2er-Kernel

Alternativ können Sie Folgendes in /etc/sysctl.conf eintragen, um diese Änderungen permanent zu aktivieren:

     file-max=65536   # für 2.2er- und 2.4er-Kernel
     inode-max=131072 # nur für 2.2er-Kernel

7.3.2 Disk-Flush-Intervalle

Sie können Disk-Flush-Intervalle durch das proc-Dateisystem ändern. Das Folgende kürzt das Intervall von standardmäßig fünf Sekunden auf eine Sekunde.

     # echo "40 0 0 0 100 30000 60 0 0"  > /proc/sys/vm/bdflush

Dies kann die Ein-/Ausgabe-Performance ein klein wenig negativ beeinflussen. Aber dies sichert den Dateiinhalt mit Ausnahme der letzten Sekunde, was kürzer ist als die standardmäßigen fünf Sekunden. Dies ist selbst für die Journaling-Dateisysteme wahr.


7.3.3 Trägheit alter Maschinen mit wenig Speicher

Für einige alte Systeme mit wenig Speicher kann es immer noch sinnvoll sein, over-commit von Speicher durch das proc-Dateisystem zu aktivieren:

     # echo 1 > /proc/sys/vm/overcommit_memory

7.4 Der 2.6er Kernel mit udev

udev ist ein dynamischer Ersatz für /dev/. Gerätenamen können sehr kurz gewählt werden. devfs, das in Kernel 2.4 verwendet wurde, ist nun überholt.

Installation des neuen Debian 2.6er Kernels, der von kernel-image-2.6.NN bereitgestellt wird, zusammen mit dem udev-Paket aktiviert es.


[ zurück ] [ Inhalt ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ weiter ]


Debian-Referenz

CVS, Don 18. Jan 2007, 11:52:59 UTC

Osamu Aoki osamu#at#debian.org
Übersetzer: Jens Seidel tux-master#at#web.de
Autoren, Abschnitt A.1