| Zeile 9: | Zeile 9: | ||
}} | }} | ||
| − | = Kernelprogrammierung mit C = | + | == Kernelprogrammierung mit C == |
Da man mit C sehr hardwarenah programmieren kann, eignet sich die Sprache zur Programmierung eines Kernels. Es ist sogar die überwiegende Anzahl der Betriebssystemkernel in C geschrieben. Für andere Bereiche ist C jedoch nicht sonderlich geeignet: beispielsweise für einen Bootsektor. Empfehlenswert ist - wie bei jeder anderen Sprache, die im Bereich der Kernelprogrammierung verwendet werden soll - ein Compiler, der Inlineassembler unterstützt. Hierfür eignet sich der [[gcc]]. | Da man mit C sehr hardwarenah programmieren kann, eignet sich die Sprache zur Programmierung eines Kernels. Es ist sogar die überwiegende Anzahl der Betriebssystemkernel in C geschrieben. Für andere Bereiche ist C jedoch nicht sonderlich geeignet: beispielsweise für einen Bootsektor. Empfehlenswert ist - wie bei jeder anderen Sprache, die im Bereich der Kernelprogrammierung verwendet werden soll - ein Compiler, der Inlineassembler unterstützt. Hierfür eignet sich der [[gcc]]. | ||
Für Einsteiger gibt es ein [http://www.cheebi.de/c-kernel-tutorial.pdf Tutorial], welches beschreibt, wie man in den [[Protected Mode]] schaltet und in C geschriebenen Code ausführt. | Für Einsteiger gibt es ein [http://www.cheebi.de/c-kernel-tutorial.pdf Tutorial], welches beschreibt, wie man in den [[Protected Mode]] schaltet und in C geschriebenen Code ausführt. | ||
| − | = Bekannte C-Compiler = | + | == Bekannte C-Compiler == |
* gcc aus der [http://gcc.gnu.org/ GNU Compiler Collection] | * gcc aus der [http://gcc.gnu.org/ GNU Compiler Collection] | ||
| Zeile 19: | Zeile 19: | ||
* Borland [http://dn.codegear.com/article/20841 Turbo C] für DOS (16 Bit/Real Mode) | * Borland [http://dn.codegear.com/article/20841 Turbo C] für DOS (16 Bit/Real Mode) | ||
| − | = Assemblercode in C = | + | == Assemblercode in C == |
Während es möglich ist, den allergrößten Teil des Kernels in C zu schreiben, sind für einige wenige Aufgaben nach wie vor einige Zeilen Assemblercode notwendig. Es gibt dabei im Wesentlichen zwei Ansätze: | Während es möglich ist, den allergrößten Teil des Kernels in C zu schreiben, sind für einige wenige Aufgaben nach wie vor einige Zeilen Assemblercode notwendig. Es gibt dabei im Wesentlichen zwei Ansätze: | ||
| Zeile 25: | Zeile 25: | ||
* '''Externe Assemblerdatei''': Der Assemblercode wird in eine eigene Datei ausgelagert und vom C-Code als eigenständige Funktion aufgerufen. Die Übergabe von Parametern und des Rückgabewerts wird im Artikel [[Aufrufkonventionen]] beschrieben | * '''Externe Assemblerdatei''': Der Assemblercode wird in eine eigene Datei ausgelagert und vom C-Code als eigenständige Funktion aufgerufen. Die Übergabe von Parametern und des Rückgabewerts wird im Artikel [[Aufrufkonventionen]] beschrieben | ||
| − | = | + | == Weblinks = |
| + | * [http://openbook.galileocomputing.de/c_von_a_bis_z/c_000Vorwort_000.htm#Xxx999266 Algemeines C-Tutorial] | ||
* [http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1124.pdf Draft des C Standards] | * [http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1124.pdf Draft des C Standards] | ||
* [http://www.c-howto.de/ C-Tutorial] | * [http://www.c-howto.de/ C-Tutorial] | ||