Dies ist eine alte Version des Dokuments!
Hier wird nach und nach ein Tutorial zur Kernelprogrammierung entstehen.
Die Informationen und das Wissen dazu habe ich (Dirty Oerti - Mail) mir beim Programmieren meines eigenen Kernels angeeignet.
Dieser Kernel befindet sich natürlich noch in Entwicklung, wer Interesse daran hat sollte sich den Code aus dem SVN-Repository laden und mich im passenden Brett im Forum kontaktieren. Bei Fragen stehe ich auch gerne zur Verfügung.
SVN: svn.proggen.org/kernel
Dies ist ein sehr wichtiges Kapitel. Bevor man überhaupt die erste Codezeile schreibt, bevor man überhaupt erste Informationen einholt sollte man sich darüber klar sein:
Warum möchte ich einen Kernel schreiben?
Auf diese Frage kann man natürlich verschiedene Antworten bekommen.
Wenn die Antwort für dich lautet, weil es cool ist und ich ein super Betriebssystem haben will, dann darf ich dich auffordern diese Seite zu verlassen. Denn dann bist du hier falsch.
In diesem Tutorial wird nicht erklärt, wie man ein super tolles Betriebssystem schreibt, das dann Windows und Linux und Unix und Mac OS und FreeBSD und wie sie alle heißen ablöst.
Ein solches Betriebssystem als einzelne, unerfahrene (ja, unerfahren, sonst würdest du das Tutorial nicht lesen) Person zu schreiben ist schlicht nicht möglich.
Dazu würde es eines gewissen Wissens bedürfen, und natürlich einer sehr großen Anzahl an Programmierern, die alle genau wissen, was sie tun.
Außerdem wird Linux, Windows und Co auch weiterentwickelt…
Wenn du ein sehr hübsches Betriebssystem nach deinen Wünschen haben möchtest, muss ich dich auch enttäuschen. Ein Kernel alleine wird nach nichts aussehen.
Das Aussehen wird von der GUI (Graphical User Interface) bestimmt und ist für einen Anfänger in Sachen Kernelprogrammierung ein Thema, über das man sich nicht einmal Gedanken machen muss.
Bis es soweit kommt, eine eigene GUI zu programmieren, dauert es eine sehr lange Zeit.
Ich selbst bin auch noch Lichtjahre von einer GUI entfernt, und wer weiß, ob ich überhaupt jemals eine (kleine) schreiben werde.
Wenn deine Motivation darin besteht, dass du Erfahrungen sammeln und dir ein größeres Wissen über Computer aneignen willst, dann darf ich dich herzlich einladen weiter zu lesen.
Denn genau auf dies zielt dieses Tutorial ab.
Es möchte Wissen vermitteln.
Wissen über ein großteils doch recht unbekanntes Thema.
Wenn deine Motivation darin liegt, zu wissen, wie man möglichst gut beim Programmieren des Linuxkernels mithilft, dann muss ich dich zumindest zum Teil enttäuschen.
Um am Linuxkernel mithelfen zu können, sollte es nützlich sein, zumindest grundlegende Dinge über Kernelprogrammierung zu wissen. Diese Dinge können dir hier teilweise vermittelt werden.
Was du hier aber nicht erfährst sind spezielle Eigenheiten des Linuxkernels.
Wenn du dieses Tutorial liest, erwarte ich von dir, dich mit Programmierung in C auszukennen.
Mit bestimmten Bibliotheken musst du dich nicht auskennen.
Einfacher Grund: Wir werden alles selbst schreiben müssen.
Grundlegende Assemblerkenntnisse sind auch nicht schlecht.
PC-Kenntnisse sollten selbstverständlich sein. ;)
Die einzelnen Kapitel bauen auf einander auf. Es ist also empfehlenswert, das Tutorial von vorne an zu lesen. Ich versuche dennoch, die einzelnen Kapitel möglichst allgemein zu halten, sodass man auch ohne genaue Kenntnis der vorherigen Kapitel etwas versteht. Allerdings wird und kann mir das nicht immer gelingen.
Wenn du eine Übersicht möchtest, dann wird dir
(in Kürze) eine Übersichtsseite zur Verfügung stehen, in der du alle Kapitel der Reihe nach aufgelistet vorfinden wirst.
Inhaltlich möchte ich sowohl stark auf den theoretischen Teil als auch stark auf den praktischen Teil eingehen. Viel Theorie aus dem Grund, da dieses Tutorial das Wissen über Kernelprogrammierung vemitteln möchte und nicht einfach nur ein Workshop dazu sein möchte. Viel Praxis, da man manche Sachen einfach am besten mit Codebeispielen erklärt. Außerdem denke ich, dass viel Praxis hilfreich ist, sich in die Thematik einzugewöhnen.
Damit könnte es eigentlich auch schon losgehen!
Das du eine funktionierende Arbeitsumgebung hast, setze ich vorraus.
Ich compiliere meinen Code auf einem Ubuntu-Linux mit dem gcc.
Für Assembler verwende ich NASM.
Als Linker nehme ich ld.
Den Code selber schreibe ich mit Kate, einem Editor.
Die Codebeispiele sind auf eine solche Arbeitsumgebung angepasst und ich empfehle auch eine solche oder eine ähnliche Arbeitsumgebung.
Fangen wir mit den benötigten Werkzeugen an!
<Index> | <Weiter>