Zurück | Inhalt | Inhalt von Kapitel 4 | Top | Weiter |
Zurück | Inhalt | Wie baue ich einen Kernel? | Top | Weiter |
Wie baue ich einen Kernel?
The Linux Kernel HOWTO (2003): http://www2.uibk.ac.at/linuxdoc/LDP/HOWTO/Kernel-HOWTO.html
Das Linux Kernel HOWTO (1998): http://www.linuxhaven.de/dlhp/HOWTO/DE-Kernel-HOWTO.html
Das Linux Kernel HOWTO (1996): http://www.vipcom.de/linux/DE-Kernel-HOWTO.html
Der Kernel - Konfiguration: http://www.linuxfibel.de/kconf.htm
Ultrakurzfassung:
cd /usr/src/linux
make menuconfig
make dep modules modules_install install
Der schwierige Teil dabei ist die Kernel-Konfiguration. Wen man hier etwas vergisst oder falsch einstellt, bootet der resultierende Kernel nicht. Für die ersten Schritte ist es deswegen ratsam, auf die Default-Konfiguration der verwendeten Distribution zurückzugreifen. Einige Distributionen legen die Konfigurationsdatei zusammen mit Kernel-Image (und eventuell initrd) im Verzeichnis /boot ab.
ls /boot/config-*
Wenn das nicht hilft (etwa weil die Datei inzwischen gelöscht wurde) gibt es noch Sonderlösungen.
Red Hat: Bestandteil des Paketes kernel-source. Siehe /usr/src/linux-*/configs/
SuSE: /proc/config.gz
Zurück | Inhalt | Kernel bauen unter Debian | Top | Weiter |
Kernel bauen unter Debian
Notwendige Pakete (abgesehen vom Kernel-Source):
apt-get install kernel-package gcc binutils libc6-dev
Die bevorzugte Methode ist die Erzeugung eines eigenen Kernel-Pakets. Das erleichtert die Archivierung und die Installation auf anderen Rechnern.
cd /usr/src/linux make menuconfig make-kpkg kernel_image cd .. dpkg -i kernel-image*.deb
Siehe auch http://newbiedoc.sourceforge.net/system/kernel-pkg.html
Zurück | Inhalt | Kernel bauen unter SuSE | Top | Weiter |
Kernel bauen unter SuSE
Nur zwei Pakete sind unabdingbar: gcc und der Kernelquellcode.
Dabei ist darauf zu achten, dass SuSE gewöhnlich drei verschiedene Kernels anbietet: Standardmäßig aktiviert ist ein spezieller SuSE-Kernel, der aus einem aktuellen Kernel zusammengebastelt ist, ferner gibt es einen aktuellen Release-Kernel, und einen aktuellen Experimental-Kernel.
Wenn Du nicht weißt, welcher der richtige für Dich ist, empfehlen wir dringend den aktuellen Release-Kernel.
Zurück | Inhalt | Wieso meldet neuer Kernel unresolved symbols? | Top | Weiter |
Wieso meldet neuer Kernel unresolved symbols?
Ich hab gerade den Kernel neu kompiliert und kriege bei einem Neustart diese Fehlermeldungen: z.B. mit den Appletalk- und den PCMCIA-Modulen, die ich aber nicht habe, und daher auch nicht kompiliert sind.
Die Module in /lib/modules/`uname -r`/ passen (teilweise) nicht zu Deinem Kernel - nämlich genau die, die Du nicht neu kompiliert hast (weil Du sie nicht brauchst). Dagegen hilft es, (nach dem Anlegen einer Sicherheitskopie) vor dem Installieren der Module den Inhalt des entsprechenden Verzeichnisses zu löschen.
Zurück | Inhalt | Wie patche ich den Kernelquellcode? | Top | Weiter |
Wie patche ich den Kernelquellcode?
Im folgenden Beispiel patchen wir den Kernel 2.4.20 auf 2.4.21-pre6. Der Kernel ist entpackt und der Patch bereits herunter geladen. Nun wechseln wir in das Verzeichnis /usr/src/linux-2.4.20 und tippen folgenden Befehl ein (für einen komprimierten Patch):
cd /usr/src/linux-2.4.20
zcat /tmp/patch-2.4.21-pre6.gz | patch -p1 2> out
Der Parameter -p ist sehr wichtig! Er gibt an, wie viele Teile des Pfades, von dem aus der Patch erstellt wurde, entfernt werden sollen. Befinden wir uns z.B. im Verzeichnis /usr/src, so könnten wir als Parameter einfach auch -p0 angeben. Da man aber häufig mehrere Kernelversionen parallel hält, ist es empfehlenswert, in das gewünschte Verzeichnis zu wechseln und den Patch mit -p1 anzuwenden, um sicherzustellen, dass der richtige Quellbaum gepatcht wird.
Nach dem Patchen des Kernels muss dieser konfiguriert, kompiliert und installiert werden.
Zurück | Inhalt | modprobe: can't locate module ppp-compress-2x | Top | Weiter |
modprobe: can't locate module ppp-compress-2x
Vor kurzen sind mir folgende Einträge in meiner /var/log/messages aufgefallen:
modprobe: can´t locate module ppp-compress-21 modprobe: can´t locate module ppp-compress-24 modprobe: can´t locate module ppp-compress-26
Was meint modprobe damit?
In deiner /etc/modules.conf fehlen folgende Zeilen:
alias ppp-compress-21 bsd_comp alias ppp-compress-24 ppp_deflate alias ppp-compress-26 ppp_deflate
Zurück | Inhalt | modprobe: can't locate module char-major-4 | Top | Weiter |
modprobe: can't locate module char-major-4
Vor kurzen sind mir ein paar Meldungen während des Bootens aufgefallen:
Configuring serial ports ttyS0 at 0x03f8 (irq = 4) is a 16450 ttyS0 at 0x02f8 (irq = 3) is a 16450 modprobe: modprobe: Can't locate module char-major-4
Das Programm setserial will die seriellen Schnittstellen konfigurieren und greift dazu auf /dev/ttyS* zu, und diese Gerätedateien haben die »major number« 4.
$ ls -l /dev/ttyS* crw-rw---- 1 uucp uucp 4, 64 Jan 23 18:57 /dev/ttyS0 crw--w--w- 1 root root 4, 65 Jan 20 19:51 /dev/ttyS1 crw-rw---- 1 root uucp 4, 66 Jul 29 14:48 /dev/ttyS2 crw-rw---- 1 root uucp 4, 67 Jan 23 19:14 /dev/ttyS3 ^ ^ | | | +--- minor device number +------- major device number
Der Kernel versucht also auf einen »character device driver« mit der »major device number« 4 zuzugreifen. Der ist aber nicht im Kernel registriert. Du hast diesen Treiber also nicht in den Kernel ein-kompiliert und auch nicht als Modul geladen. Daher versucht der Kernel modprobe aufzurufen und übergibt als Argument eine Beschreibung des fehlenden Treibers: char-major-4.
modprobe versucht dann dieses Modul zu laden, kann es aber nicht in /lib/modules/`uname -r`/ finden. Denn das Modul, das den »character device driver« mit der »major device number« 4 implementiert, heisst nicht char-major-4 sondern serial.o.
1. Variante: Unterstützung für die serielle Schnittstelle statisch in den Kernel übersetzen.
2. Variante: Unterstützung für die serielle Schnittstelle als Modul übersetzen, mit make modules_install nach /lib/modules/`uname -r`/ kopieren, und dann noch modprobe beibringen, dass es serial.o zu laden hat, wenn char-major-4 gefordert ist. Das geht mit der Zeile
alias char-major-4 serial
in /etc/modules.conf.
Zurück | Inhalt | Wie kann ich libc5-Programme laufen lassen? | Top | Weiter |
Wie kann ich libc5-Programme laufen lassen?
Auf meinem Rechner ist die libc6 installiert. Wie kann ich dennoch libc5-Programme ausführen?
Die »shared libraries«libc.so und libm.so müssen in der Version 5 installiert sein. Bei SuSE sind die im Paket shlibs5.
Zurück | Inhalt | Gibt es Anleitungen zum Selberkompilieren? | Top | Weiter |
Gibt es Anleitungen zum Selberkompilieren?
http://www.linux-user.de/ausgabe/2004/06/028-configure/
Zurück | Inhalt | Was haben die Zeilen mit ‐‐ MARK ‐‐ in /var/log/messages zu sagen? | Top | Weiter |
Was haben die Zeilen mit ‐‐ MARK ‐‐ in /var/log/messages zu sagen?
Der syslogd loggt per Default alle 20 Minuten einen solchen Timestamp mit. Das kann ganz nützlich sein, um zu sehen, ob er noch korrekt arbeitet. Wenn man das nicht möchte, kann man den syslogd mit dem Kommandozeilenparameter -m 0 aufrufen (bzw. den Aufruf in den init-Scripten ändern), dann werden diese Timestamps unterbunden.
Zurück | Inhalt | CD-ROM lässt sich nicht mounten | Top | Weiter |
CD-ROM lässt sich nicht mounten
Der von Dir eingesetzte Kernel unterstützt das CD-ROM-Filesystem nach ISO 9660 nicht; daher musst Du den notwendigen Treiber nachladen. Fast alle Distributionen bieten mit dem Modul isofs.o aus dem Verzeichnis /lib/modules/`uname -r`/fs/ einen solchen an. Der Befehl modprobe isofs.o lädt das Modul. Wenn der Treiber nicht vorhanden ist, muss man einen neuen Kernel übersetzen, der das ISO-9660-Filesystem unterstützt.
Zurück | Inhalt | umount: /cdrom: device is busy | Top | Weiter |
umount: /cdrom: device is busy
Das Kommando umount /cdrom scheitert gelegentlich mit der Fehlermeldung umount: /cdrom: device is busy auch wenn scheinbar kein Programm mehr auf das Laufwerk zugreift. Ohne umount bleibt das Laufwerk gesperrt, so dass ich die CD nicht entnehmen kann.
Die Ursache für die Fehlermeldung ist in der Regel ein vom Benutzer vergessener Prozess, der noch eine Datei oder ein Verzeichnis der CD-ROM geöffnet hält. Dazu zählt auch ein Programm, dass gestartet wurde, während das aktuelle Verzeichnis auf der CD-ROM lag. Dieses dient dem Prozess dann als Arbeitsverzeichnis. Wenn man den Prozess beendet, sollte ein umount Erfolg haben.
Um herauszufinden, welche Prozesse auf ein Dateisystem zugreifen, kann der Befehl fuser -m /cdrom dienen. Dies liefert die Prozess-IDs aller betroffenen Programme. Nähere Details zur Benutzung von fuser erhält man auf der zugehörigen man-page.
Zurück | Inhalt | umount: /dev/hdc is not in the fstab | Top | Weiter |
umount: /dev/hdc is not in the fstab
Mein CD-ROM-Laufwerk lässt sich mit mount /dev/hdc /cdrom problemlos mounten. Das Kommando umount /dev/hdc scheitert aber mit der Fehlermeldung umount: /dev/hdc is not in the fstab (and you are not root). Ohne umount bleibt das Laufwerk gesperrt, so dass ich die CD nicht entnehmen kann.
Du willst doch nicht das Gerät freigeben, sondern das Verzeichnis! Also umount /cdrom.
Zurück | Inhalt | Audio-CD ohne Kabel abspielen? | Top | Weiter |
Audio-CD ohne Kabel abspielen?
Ist es zwingend notwendig, zum Abspielen einer Audio-CD in einem DVD-Laufwerk dieses per Kabel mit der Soundkarte zu verbinden?
Die Alternative besteht darin, die Audiospur digital auszulesen und über die CPU an die Soundkarte zu schicken. Der einzige Grund, warum man das so machen will, ist ein schlecht zusammengebauter Rechner.
Direkte Ausgabe mit OSS-Treiber:
cdparanoia -ZpR 1- - | sox -t cdr - -t ossdsp /dev/dsp
Indirekte Ausgabe über esound:
cdparanoia -Z 1- - | esdcat
Zurück | Inhalt | Floppy-LED als Dauerlicht | Top | Weiter |
Floppy-LED als Dauerlicht
Nach einem Hardware-Umbau leuchtet die LED des Floppy-Laufwerks ständig.
Der geschilderte Fall ist kein Linux-spezifisches Problem. Offenbar wurde der Stecker des Floppy-Kabels um 180 Grad verdreht angeschlossen. Vorsicht: Solange die LED Dauerlicht zeigt, wird jede eingelegte Diskette gelöscht.
Zurück | Inhalt | Wo finde ich Treiber für meinen Drucker? Wird mein Drucker unter Linux überhaupt unterstützt? | Top | Weiter |
Wo finde ich Treiber für meinen Drucker? Wird mein Drucker unter Linux überhaupt unterstützt?
http://www.linuxhaven.de/dlhp/
http://www.linuxhaven.de/dlhp/
Zurück | Inhalt | Hauptspeicher wird nicht vollständig erkannt | Top | Weiter |
Hauptspeicher wird nicht vollständig erkannt
Ich habe 128MB RAM in meinem Rechner, die vom BIOS beim Booten auch brav hochgezählt werden - aber Linux erkennt nur 64MB!
Du hast einen alten Kernel (< 2.0.36) und/oder ein fehlerhaftes BIOS. Ältere Kernel verwenden einen alten (aber »sicheren« BIOS-Aufruf, der aber aufgrund von x86-Register-Beschränkungen höchstens 64 MB RAM zurückmelden kann (64 MB war früher einmal viel RAM!).
Neuere Kernel verwenden einen Extended-BIOS-Call, der auch mehr als 64 MB zurückmelden kann. Allerdings ist die Implementation in manchen Motherboard/BIOS Kombinationen fehlerhaft, so dass auch hier nur 64 MB (oder ein anderer falscher Wert) zurückgemeldet wird.
Lösung: Entweder ein BIOS-Update (Achtung: Anweisungen des BIOS- bzw. Motherboard-Herstellers genauestens befolgen, ansonsten ist das Motherboard danach im schlimmsten Fall unbrauchbar) oder dem Kernel einen Bootparameter übergeben (und anschließend rebooten):
Die folgende Zeile in /etc/lilo.conf einfügen, danach /sbin/lilo ausführen. Für 128 MB RAM sieht das so aus:
append="mem=128M"
Den folgenden Parameter in der Kommandozeile, der LINUX.BAT oder der LOADLIN.CFG angeben, danach neu starten. Für 192 MB RAM sieht das so aus:
mem=192M
An die "kernel" Zeile einfach »mem=128M« in der GRUB-config-Datei anhängen (/etc/grub.conf oder /boot/grub/menu.lst), das sieht etwa so aus:
kernel /boot/vmlinuz root=/dev/hda2 mem=128M
Zurück | Inhalt | top zeigt nur X KByte free an | Top | Weiter |
top zeigt nur X KByte »free« an
Ich habe zwar 256 MB RAM in meinem Rechner, aber schon bei wenigen laufenden Anwendungen zeigt top an, dass der freie Hauptspeicher praktisch Null ist ist (... 3580K free, ...). Das kann doch nicht sein!
Ganz recht, ist auch nicht so. Verwende besser free, um herauszubekommen, wieviel freien Hauptspeicher du hast.
total used free shared buffers cached Mem: 239464 236212 3252 0 10200 175100 -/+ buffers/cache: 50912 188552 Swap: 265032 2276 262756
Linux versucht, den Hauptspeicher möglichst sinnvoll zu nutzen. Und wenn es sonst keine Verwendung gibt, werden einmal gelesene Dateien in einem Cache gehalten. Könnte ja sein, dass die selbe Dateien noch einmal gebraucht werden. free zeigt im Gegensatz zu top beide Werte an. In diesem Beispiel ist 3252 kB die Menge an Speicher, die mit nichts belegt, also völlig frei ist. 10200 kB und 175100 kB sind mit nichts wichtigem belegt, also kurzfristig verfügbar. 3252 + 10200 + 175100 = 188552. Das ist die tatsächlich freie Menge an Speicher.
Zurück | Inhalt | Was bedeuten diese ISDN-Fehlercodes in /var/log/messages? | Top | Weiter |
Was bedeuten diese ISDN-Fehlercodes in /var/log/messages?
man isdn_cause listet eigentlich alle Codes (und den Klartext dazu).
Zurück | Inhalt | Wie ermittle ich die Ethernet-Adresse (MAC) meiner Netzwerk-Karte? | Top | Weiter |
Wie ermittle ich die Ethernet-Adresse (MAC) meiner Netzwerk-Karte?
http://de.wikipedia.org/wiki/MAC-Adresse
Beim traditionelle Kommando ifconfig heißt das Stichwort »HWaddr« oder »Hardware Adresse«, je nachdem welche Sprache eingestellt ist.
/sbin/ifconfig eth0
Das mächtigere ip verzichtet auf mehrsprachigen Schnickschnack, das Stichwort lautet »link/ether«.
/sbin/ip link show eth0
Zurück | Inhalt | Kann ich meinen Linux-Server ohne Tastatur booten? | Top | Weiter |
Kann ich meinen Linux-Server ohne Tastatur booten?
Das erfordert manchmal eine Einstellung im BIOS, etwa
Halt On Errors: All But Keyboard
Bei einigen Rechnern (etwa von Compaq/HP) fehlt diese Option, sie bleiben dann bei jedem Neustart mit einer Kafkaesken Meldung hängen:
Keyboard error, or no keyboard present: Press F1 to continue.
Linux selbst hat kein Problem damit. Es gibt allerdings automagische Hardware-Erkennungsdienste wie kudzu (Red Hat), die unter Umständen ähnlich dumme Fragen stellen.
Zurück | Inhalt | Ende dieser Seite | Check | Top | Weiter |