Gateway! - The Plains Of Passage


Der Compiler und Kernel Sourcen

Besprechen wir nun noch den Compiler, und zeigen dann wie man ein eigenes Kernel kompiliert.

Der C - Compiler ist im Paket comp10 enthalten, das deshalb installiert sein sollte. Unter Unix ist es allgemein üblich den Compiler fest in das System einzubinden. Sie werden daher z.B. auf allen Systemen die Compiler-includes in /usr/include finden. Das Compiler Frontend heisst 'cc' (bzw. 'gcc') und ruft je nach Option den eigentlich Compiler, Assembler oder Linker auf. Die Hilfsseite über gcc wird Ihnen so einiges über die Optionen verraten.

Probieren wir Ihn doch gleich mal an einem Standardbeispiel aus, edieren Sie hierzu die Datei 'hello.c' und geben ein:

#include 
main()
{
 printf("Hello World!\n");
}
Diesen berühmten Compilertest übersetzen wir nun:
cc -o hello hello.c
Das lauffähige Programm lautet 'hello' - starten Sie es!

Um nun größere Aufgaben mit dem Compiler zu bewältigen, versuchen wir nun ein eigenes Kernel zu kompilieren. Dazu muß das Archiv /mnt/cdrom/NetBSD/source/kernel/ksrc10.tar.gz ausgepackt werden. Es wird in der Regel in /usr/src/ ausgepackt - falls sie dort keinen Platz mehr haben, gehen Sie in eine freie Partition und packen das Archiv dort aus und erstellen zwecks schnelleren Zugriffs einen Softlink dorthin. Angenommen sie haben das Archiv in /usr/local/src ausgepackt, erstellen Sie den Link so:

ln -s /usr/local/src /usr/src
U.U. haben Sie den vollen /usr/src Baum in /usr/local/src ausgepackt, benennen Sie ihn daher um:
cd /usr/local/src/
mv usr/src/sys sys
Dann sollte man mit 'cd /usr/src/sys/arch/amiga/conf' an der richtigen Stelle landen - im Konfigurationsverzeichnis des Kernels.

Dort finden Sie ein paar wichtige Dateien, von denen uns vorerst nur die Datei 'GENERIC' interessiert. Kopieren Sie diese Datei in z.B. 'Antigone' und edieren Sie die Datei nun. Unser Ziel ist es ein etwas schlankeres Kernel zu erstellen und unnötigen Ballast rauszuwerfen.

Fangen wir bei den SCSI-Treibern an. Angenommen Sie haben einen A3000, dann interessiert Sie der IDE-Treiber wohl nicht, und auch die Treiber für 2091, GVP oder Warp Engine nicht, also hinfort damit, das sieht dann so aus:

# scsi stuff, all possible
ahsc0		at mainbus0		# A3000 scsi

scsibus1	at ahsc0

Sie haben kein AGA und keine Retina? Also auch fort damit:

#
# Amiga specific options
#
options		GRF_ECS		# Enhanced Chip Set
options		GRF_NTSC	# NTSC
options		GRF_PAL		# PAL
options		"GRF_A2024"	# Support for the A2024
#options	"KFONT_8X11"	# 8x11 font

Löschen Sie einfach die überflüssigen Zeilen. Bei den anderen Optionen lassen wir als Anfänger die Finger weg. Schauen Sie sich auch die Beispiele in NetBSD/kernel an. Eine Dokumentation gibt es leider nicht.

Speichern Sie die Datei und initialisieren Ihre Kernelstruktur mit 'config.new Antigone'.

Das erzeugt ein Verzeichnis '../compile/Antigone' und erstellt dort ein paar wichtige Header-Files.

Zum Kompilieren des Kernels begeben wir uns dorthin: 'cd ../compile/Antigone' und starten den Compiler: 'make depend; make'

Das 'make depend' - also Abhängigkeiten der Files berechnen - ist nur nötig wenn sie etwas in Ihrer Konfigurationsdatei geändert und mit 'config.new' neu initialisiert haben.

Der ganze Vorgang des Compilierens dauert auf einem A3000 mit 8MB RAM ca. 1 1/2 Stunden, auf einem A4000 mit ausreichend Speicher und Swap auch schonmal nur 25 Minuten. Sie sollten das Kernel bei Speichermangel nicht unter X compilieren, sondern in der Konsole.

Ganz am Ende kommt dann ein Kernel heraus das 'netbsd' heißt. Um dieses nun zu starten sind wir brutal:

mv /netbsd /netbsd.old
(Sicherheitskopie des alten Kernels anlegen)
cp ./netbsd /netbsd
(neues Kernel kopieren)
sync; sync; sync; sync
(Damit flushen wir Dateien aus dem RAM auf Festplatte)
cp ./netbsd /dev/reload

Dieses geniale Gerät schluckt mit Vorliebe Kernels und startet NetBSD neu mit diesem Kernel.

Unter Umständen klappt dies nicht - vor allem dann wenn das neue Kernel sich erheblich vom alten - aktiven - Kernel unterscheidet. Dann müssen Sie mit Hilfe des BFFS-Filesystem unter AmigaDOS die Partition mounten, auf der sich Ihre Root-Partition befindet. Das BFFS-Paket finden Sie in NetBSD/tools auf der CD-ROM. Bitte beachten Sie auf jeden Fall daß Sie um Himmels willen nicht auf BSD-Partitionen schreiben! Nur lesen dürfen Sie mit dem BFFS - sicherheitshalber sperren Sie das gemountete Filesystem mit dem AmigaDOS-Befehl 'lock'. (BFFS hat einen Bug)

Kurz noch einmal auf das Verzeichnis /usr/src/sys/arch/amiga zurück; dort finden Sie auch ein paar weitere Verzeichnise:

amiga
Sourcen für den Amiga-spezifischen Teil des Kernels das für alle Architekturen ausgelegt ist.
compile
Hier werden Unterverzeichniss angelegt, für jedes konfigurierte Kernel eines.
conf
Konfigurationsdateien für spezifische Kernel
dev
Amiga-spezifische Gerätetreiber
floppy
Verzeichnis aus dem heraus mit 'make' eine Installations- diskette erstellt werden kann.
include
Amiga-spezifische Includedateien
stand
sog. Stand-alone Programme die nur für Amiga gedacht sind.
Wichtig für uns sind die Verzeichnisse 'conf', 'compile' und 'stand'. In conf finden Sie, wie schon besprochen, die Konfigurationsdateien fü eigene Kernel. Sollten Sie interessiert sein eigene Gerätetreiber in das Kernel einzubinden, so müssen Sie auch die Datei 'files.amiga.newconf' ändern, damit das Makefile Ihren neuen Treiber bemerkt. Leider reicht der Platz hier nicht aus um ausführlich auf 'Kernelhacking' einzugehen, daher verweisen wir auf die Usenetgruppen 'comp.unix.amiga' und 'de.comp.sys.amiga.unix', sowie auf die auf der CD-ROM beigelegten FAQs und Maillisten.

Im Verzeichnis stand finden Sie noch das für Sie wichtige Programm 'loadkmap' und 'din-kbdmap'. Letzteres ist ein Programm, welches ein Layout für eine deutsche Tastatur erzeugt. Kompilieren Sie es mit 'cc -o din-kbdmap din-kbdmap.c', starten es dann mit 'din-kbdmap >dinmap'. Kompilieren Sie auch 'loadkmap' und starten es dann mit 'loadkmap dinmap'. Diese Zeile können Sie bei Bedarf auch in die Start-Datei '/etc/rc.local' einbinden. Die deutsche Tastatur ist nur für die Konsole gedacht. Nach Start und vor allem Beendigung von X Window ist die Tastatur resettet worden und muß daher neu auf das deutsche Layout eingestellt werden.


Markus Illenseer, 1995-03-10