Kapitel 8. Kernelkonfiguration

8.1. Ich möchte meinen Kernel anpassen. Ist das schwierig?
8.2. Was kann ich machen, wenn meine Kernel-Kompilierungen fehlschlagen, weil _hw_float fehlt?
8.3. Warum ist mein Kernel so groß (über 10 MByte)?
8.4. Wieso erhalte ich Meldungen über Interrupt-Konflikte, wenn ich eine Karte mit mehreren seriellen Schnittstellen einsetzen will?
8.5. Wieso kann ich nicht einmal den Standard-Kernel (GENERIC) bauen?
8.6. Wie kann ich prüfen, welchen Scheduler das System benutzt?
8.7. Was bedeutet kern.sched.quantum?

8.1. Ich möchte meinen Kernel anpassen. Ist das schwierig?

Überhaupt nicht! Lesen Sie den Abschnitt zur Kernelkonfiguration im Handbuch.

Anmerkung: Der neue kernel wird zusammen mit seinen Modulen im Verzeichnis /boot/kernel installiert werden. Der alte Kernel und dessen Module wird in das Verzeichnis /boot/kernel.old verschoben, damit Sie, wenn Sie einen Fehler beim herumexperimentieren mit Ihrer Konfiguration gemacht haben, die vorherige Version Ihres Kernels starten können.

8.2. Was kann ich machen, wenn meine Kernel-Kompilierungen fehlschlagen, weil _hw_float fehlt?

Sie haben wahrscheinlich npx0 aus Ihrer Kernelkonfigurationsdatei entfernt, weil Sie keinen mathematischen Co-Prozessor besitzen. Die Gerätedatei npx0 ist allerdings VERPFLICHTEND. Ihre Hardware unterstützt Gleitkommaoperationen, selbst wenn dafür kein eigenes Bauteil (wie bei den 386er-Prozessoren) mehr verwendet wird. Daher müssen Sie die Gerätedatei npx0 einbinden. Selbst wenn es Ihnen gelingen sollte, einen Kernel ohne npx0-Unterstützung zu bauen, werden Sie diesen nicht booten können.

8.3. Warum ist mein Kernel so groß (über 10 MByte)?

Sie haben Ihren Kernel wahrscheinlich im Debug Modus erstellt. Ein Debug-Kernel enthält viele zusätzliche Informationen für die Fehlersuche, daher ist er so groß. Bitte beachten Sie, dass die Verwendung eines Debug-Kernels die Performance des Systems nicht oder nur minimal reduziert; außerdem ist es für den Fall einer system panic sehr praktisch, einen Debug-Kernel zur Hand zu haben.

Wenn Ihnen allerdings der Plattenplatz ausgeht oder Sie einfach rein prinzipiell keinen Debug-Kernel benutzen wollen, müssen die beiden folgenden Bedingungen erfüllt sein:

  • Die Konfigurationsdatei für Ihren Kernel darf die folgende Zeile nicht enthalten:

    makeoptions DEBUG=-g
    
  • Sie dürfen config(8) nicht mit dem Parameter -g starten.

Sollten Sie sich nicht an diese Einschränkungen halten, wird Ihr Kernel im Debug-Modus erstellt. Solange Sie sich an diese Einschränkungen halten, können Sie Ihren Kernel ganz normal erstellen und die Größe des Kernels sollte deutlich sinken. Ein normaler Kernel ist nur 1.5 MByte bis 2 MByte groß.

8.4. Wieso erhalte ich Meldungen über Interrupt-Konflikte, wenn ich eine Karte mit mehreren seriellen Schnittstellen einsetzen will?

Wenn ich einen Kernel mit Unterstützung für serielle Multi-Port-Schnittstellen kompiliere, bekomme ich den Hinweis, dass nur der erste Port geprüft wird und die restlichen auf Grund von Interrupt-Konflikten übersprungen werden. Wie kann ich das Beheben?

Das Problem besteht darin, dass in FreeBSD Code integriert ist, um den Kernel vor Abstürzen aufgrund von Hardware- oder Software-Konflikten zu bewahren. Behoben wird es, indem die IRQ-Angaben für alle Ports, bis auf einen ausgelassen werden. Hier ist ein Beispiel:


#
# Multiport high-speed serial line - 16550 UARTS
#
device sio2 at isa? port 0x2a0 tty irq 5 flags 0x501 vector siointr
device sio3 at isa? port 0x2a8 tty flags 0x501 vector siointr
device sio4 at isa? port 0x2b0 tty flags 0x501 vector siointr
device sio5 at isa? port 0x2b8 tty flags 0x501 vector siointr
         

8.5. Wieso kann ich nicht einmal den Standard-Kernel (GENERIC) bauen?

Es gibt eine Reihe von möglichen Ursachen für dieses Problem:

  • Sie benutzen die neuen Kommandos make buildkernel und make installkernel nicht, obwohl die Sourcen auf Ihrem System nicht zum laufenden System passen (z.B. benutzen Sie die Sourcen von 9.1-RELEASE auf einem System mit 8.3-RELEASE). Wenn Sie ein Upgrade durchführen wollen, sollten Sie /usr/src/UPDATING lesen, beachten Sie insbesondere den Abschnitt “COMMON ITEMS” gegen Ende des Dokuments.

  • Sie benutzen zwar make buildkernel und make installkernel, aber Sie haben nicht darauf geachtet, dass vorher ein komplettes make buildworld durchgelaufen sein muss. Um seine Arbeit erledigen zu können, benötigt make buildkernel Dateien, die von make buildworld erzeugt werden.

  • Auch wenn Sie FreeBSD-STABLE verwenden, ist es durchaus möglich, dass Sie die Sourcen genau zum falschen Zeitpunkt aktualisiert haben: Während Sie gerade modifiziert wurden oder kurzzeitig fehlerhaft waren. Eine absolute und vollständige Garantie, dass Sie die Sourcen compilieren können, gibt es nur für die Releases, bei FreeBSD-STABLE ist das nicht immer so. Wenn Sie es noch nicht versucht haben, sollten Sie ihre Source nochmals aktualisieren. Es ist denkbar, dass der von Ihnen genutzte Server zurzeit Probleme hat, benutzen Sie daher testweise auch einmal einen anderen Server.

8.6. Wie kann ich prüfen, welchen Scheduler das System benutzt?

Überprüfen Sie dazu, ob auf Ihrem System die sysctl-Variable kern.sched.quantum existiert. Ist dies bei Ihnen der Fall, werden Sie eine Ausgabe ähnlich der folgenden sehen:

% sysctl kern.sched.quantum
kern.sched.quantum: 99960

Wenn die sysctl-Variable kern.sched.quantum existiert, dann verwenden Sie den 4BSD-Scheduler (sched_4bsd(4)). Existiert sie nicht, erzeugt sysctl(8) eine Fehlermeldung (die Sie aber ignorieren können):

% sysctl kern.sched.quantum
sysctl: unknown oid 'kern.sched.quantum'

Seit FreeBSD 5.3-RELEASE wird der Name des verwendeten Schedulers direkt als Wert der sysctl-Variable kern.sched.name ausgegeben:

% sysctl kern.sched.name
kern.sched.name: 4BSD

8.7. Was bedeutet kern.sched.quantum?

kern.sched.quantum ist die maximale Anzahl Ticks, die ein Prozess ununterbrochen laufen kann. Die Variable ist charakteristisch für den 4BSD Scheduler, somit kann der verwendete Scheduler über die Existenz dieser Variablen bestimmt werden.

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <de-bsd-translators@de.FreeBSD.org>.