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.
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.
/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. Desweiteren 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
.
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 kein pcmcia benötigt wird, sollte im make menuconfig 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.
Laden Sie den "reinen" Quellcode von
http://www.kernel.org/
http://pcmcia-cs.sourceforge.net/
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 ...
Die meisten Programme brauchen die Kernelheader-Dateien nicht, und einige
Programme lassen sich sogar nicht erfolgreich kompilieren, wenn die
Header-Dateien genutzt werden. Statt dessen 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, statt dessen 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
.
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.5 und Documentation/*.txt
im
Linux-Quellcode, um genauere Informationen zu erhalten.
/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 Network configuration and PCMCIA,
Abschnitt 10.4.1.
[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.
/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.
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.
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.
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.
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.7.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.
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
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.
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
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.
Debian-Referenz
CVS, Mon 3. Apr 2005, 22:57:58 UTCosamu@debian.org
tux-master@web.de