Kernel & Hardware
- Der Kernel
- User space
- CD-ROM-Laufwerk
- Andere Hardware
The Linux Kernel HOWTO (2003): http://en.tldp.org/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.
Kernel kompilieren 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
Kernel kompilieren unter SuSE-Linux: Was für Pakete brauche ich?
|
Top
|
Inhalt
|
Frage:
Ich verwende SuSE-Linux und möchte einen neuen Kernel übersetzen. Welche Pakete müssen dazu installiert sein?
Antwort:
Eigentlich sind lediglich zwei Packages unabdingbar: Der 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.
|
Unresolved Symbols nach Kernelkompilation
|
Top
|
Inhalt
|
Problem:
Ich hab gerade den Kernel neu komiliert und kriege bei einem Neustart lauter unresolved symbols-Fehlermeldungen: z.B. mit den Appletalk- und den PCMCIA-Modulen, die ich aber nicht habe, und daher auch nicht kompiliert sind.
br>
Antwort:
Die Module in /lib/modules/<Kernel-Version>/ 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 o.a. Verzeichnisses zu löschen.
|
Wie patche ich den Kernelquellcode?
|
Top
|
Inhalt
|
Frage: Wie patche ich den Kernel, d.h. eigentlich den
Kernelquellcode?
Antwort:
Im folgenden Beispiel patchen wir den Kernel 2.4.20 auf 2.4.21-pre6.
Der Kernel ist entpackt und der Patch bereits heruntergeladen.
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
Überprüfe auf jedenfall ob die Datei "out" etwaige Fehlermeldungen
enthält.
Für einen unkomprimierten Patch lautet der Befehl:
$ patch -p1 < /tmp/patch-2.4.21-pre6 2>out
Der Parameter -p ist sehr wichtig! Er gibt an, wieviele 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.
Nähere Informationen siehe 'man patch'.
Nach dem Patchen des Kernels muss dieser konfiguriert, kompiliert
und installiert werden.
|
modprobe: can't locate module ppp-compress-2x
|
Top
|
Inhalt
|
Frage:
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?
Antwort:
In Deiner /etc/modules.conf (bzw. /etc/conf.modules) fehlen folgende Zeilen:
alias ppp-compress-21 bsd_comp
alias ppp-compress-24 ppp_deflate
alias ppp-compress-26 ppp_deflate
|
modprobe: can't locate module char-major-4
|
Top
|
Inhalt
|
Frage:
Vor kurzem 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
Was ist die Ursache für die Meldung "modprobe: modprobe: Can't
locate module char-major-4"?
Antwort:
Das Programm setserial will die seriellen Schnittstellen
konfigurieren und greift dazu auf /dev/ttyS* zu.
/dev/ttyS* sind "character device special files" mit 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 einkompiliert 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 character device driver mit der
major device number 4 implementiert, heisst nicht
char-major-4 sondern serial.o.
> Was kann ich dagegen tun?
Entweder
1. support für die seriellen Schnittstellen in den Kernel einkompilieren oder
2. support für die seriellen Schnittstellen als Modul kompilieren, mit make modules_install nach /lib/modules kopieren und 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.
|
libc5-Programme auf glibc-Rechner laufen lassen
|
Top
|
Inhalt
|
Frage:
Auf meinem SuSE-Linux-Rechner ist die glibc (libc6) installiert. Wie kann ich dennoch libc5-Programme ausführen?
Antwort:
Die shared C-Libraries libc.so und libm.so in der libc5-Version müssen installiert sein. Bei SuSE sind die im Paket shlibs5.
|
Was haben die Zeilen mit -- MARK -- in meiner /var/log/messages zu sagen?
|
Top
|
Inhalt
|
Frage:
Was haben die Zeilen mit -- MARK -- in meiner /var/log/messages zu sagen? Wie bekomme ich das abgeschaltet?
Antwort:
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.
|
CD-ROM lässt sich nicht mounten
|
Top
|
Inhalt
|
Problem:
Der Befehl mount /dev/cdrom erzeugt die Fehlermeldung mount: fs Type iso9660 is not supported by Kernel. Die CD ist aber in Ordnung.
Antwort:
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/<Kernel-Version>/fs/ einen solchen an. Der Befehl modprobe isofs.o lädt das Modul. Wenn der Treiber nicht vorhanden ist, muss man einen neuen Kernel kompilieren, der das ISO-9660-Filesystem unterstützt.
|
umount: /cdrom: device is busy
|
Top
|
Inhalt
|
Problem:
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.
Antwort:
Die Ursache für die Fehlermeldung ist in der Regel ein vom User vergessener Prozeß, 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 Prozeß dann als Arbeitsverzeichnis. Wenn man den Prozeß beendet, sollte ein umount Erfolg haben. Um herauszufinden, welche Prozesse auf ein Dateisystem zugreifen, kann der Befehl fuser -m /cdrom dienen. Dies liefert die Prozeß-IDs aller betroffenen Programme. Nähere Details zur Benutzung von fuser erhält man auf der zugehörigen man-page.
|
umount: /dev/hdc is not in the fstab
|
Top
|
Inhalt
|
Problem:
Mein CD-ROM-Laufwerk lässt sich mit mount /dev/hdc /mount 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.
Antwort:
Du willst doch nicht das Gerät freigeben, sondern das Verzeichnis! Also umount /mount.
|
Frage: Ist es zwingend notwendig, zum Abspielen einer Audio-CD in einem DVD-Laufwerk dieses per Kabel mit der Soundkarte zu verbinden?
Antwort: 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
Problem:
Nach einem Hardware-Umbau leuchtet die LED des Floppy-Laufwerks ständig.
Antwort:
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.
Wo finde ich Treiber für meinen Drucker? Wird mein Drucker überhaupt unterstützt?
|
Top
|
Inhalt
|
Frage:
Wo finde ich Treiber für meinen Drucker? Wird mein Drucker unter Linux überhaupt unterstützt?
Antwort:
Das Drucker-HOWTO gibt es deutschsprachig auf
http://gd.tuwien.ac.at/opsys/linux/DE-HOWTO/,
und auf Englisch als The Linux Printing HOWTO z.B. auf
http://gd.tuwien.ac.at/opsys/linux/ldp/.
Interessant ist ausserdem http://www.linuxprinting.org/.
|
Hauptspeicher wird nicht vollständig erkannt
|
Top
|
Inhalt
|
Problem:
He! Ich habe 128MB RAM in meinem Rechner, die vom BIOS beim Booten auch brav hochgezählt werden - aber Linux erkennt nur 64MB!
Antwort:
Du hast einen alten Kernel (< 2.0.36) und/oder ein fehlerhaftes
BIOS. Ältere Kernel verwenden einen alten (aber "sicheren")
BIOS Call, der aber aufgrund von x86-Register Limitationen
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:
- LILO:
- Die folgende Zeile in /etc/lilo.conf
einfügen (man lilo.conf für mehr Details), danach
/sbin/lilo ausführen und rebooten (ja,
das muss selbst bei Linux hin und wieder sein :-).
Für z.B. 128 MB RAM:
append="mem=128M"
- Loadlin:
- Den folgenden Parameter in der Kommandozeile, der LINUX.BAT (Batchdatei) oder der LOADLIN.CFG (Loadlin Konfigurationsdatei) angeben (ohne "append=" und ohne Anführungszeichen rundherum), danach rebooten. Für zB. 192 MB RAM:
mem=192M
- GRUB:
- An die "kernel" Zeile einfach mem=128M (bei 128 MB Speicher) in der GRUB-config-Datei anhängen, also z.B. so:
kernel /boot/vmlinuz root=/dev/hda2 mem=128M
Danach ein reboot und der gesamte RAM sollte zu sehen sein. Btw.: GRUB muss natürlich nicht neu installiert werden, er liest die config beim booten...
|
Top zeigt nur X KByte "free" an!
|
Top
|
Inhalt
|
Problem:
Ich habe zwar 128 MB RAM in meinem Rechner, aber schon bei
wenigen laufenden Anwendungen zeigt top an,
dass der freie Hauptspeicher praktisch Null ist ("... 3100K free,
..."). Das kann doch nicht sein!
Antwort:
Ganz recht, ist auch nicht so :-).
Verwende besser den Befehl free, um herauszubekommen, wieviel freien Hauptspeicher Du hast.
jochen@tolot:/home/jochen/LinuxFAQ > free
| |
total |
|
used |
|
free |
|
shared |
|
buffers |
|
cached |
| Mem: |
128284 |
|
125184 |
|
3100 |
|
44084 |
|
2796 |
|
61540 |
| -/+ buffers/cache: |
|
60848 |
|
67436 |
| Swap: |
103404 |
|
7200 |
96204 |
Die hervorgehobene Zahl gibt an, wieviel freien Hauptspeicher Du hast. Bei top musst Du das per Hand ausrechnen.
|
Problem:
In /var/log/messages stand eine Fehlermeldung von HiSax (war irgendwas wie '... cause E0[irgendwas]) - nun weiß ich aber mit dieser Meldung nicht allzuviel anzufangen.
Antwort:
man isdn_cause listet eigentlich alle Codes (und den Klartext dazu).
Problem:
Meine Maus funktioniert in der Konsole, aber nicht unter X.
Antwort:
Hast Du eventuell gpm (General Purpose
Mouse, das ist der Console-Mouse- Dämon) rennen? Falls ja,
dann kann es sein, dass das Mouse-Device nicht mehrmals geöffnet
werden kann. In diesem Fall gpm mit der Option
-R starten (gegebenenfalls /etc/gpm.conf
anpassen), und in der /etc/XF86Config den
Pointer folgendermaßen konfigurieren:
Section "Pointer"
Protocol "MouseSystems"
Device "/dev/gpmdata"
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
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.