Hallo Leute, also ich würde gerne zu Lehrzwecken mein eigenes Betriebssystem schreiben. Dabei hatte ich zunächst an ein Betriebssystem für die ARM-Architektur gedacht. Sollte dies schwieriger oder unnötig komplizierter sein, als x86-Architektur lasse ich mich gerne eines besseren belehren. Damit ich loslegen kann, wollte ich fragen, ob hier jemand ein gutes Buch oder ebook/Website empfehlen kann, mithilfe dessen man loslegen kann und die Grundlagen sowie ersten Gehversuche Schritt-für-Schritt erläutert bekommt. WICHTIG: Ich möchte im Folgenden nicht solche Kommentare hören, wie "Bist du verrückt, das ist viel zu viel!" oder "Starte doch mit dem fertigen Linuxkernel". Ich bin mir durchaus bewusst, wieviel Arbeit in einem halbwegs funktionsfähigen Betriebssystem steckt. Ich möchte auch garkein komplexes oder gar nützliches Betriebssystem schreiben. Ich möchte lediglich meine bisher erlernten Theoriekenntnisse gerne ein bisschen anwenden können - wie oben bereits zu beschrieben einfach zu "Lehrzwecken". Über Antworten freue ich mich...
Prinzipiell wird die Programmierung für ARM oder x86 wohl nicht so unterschiedlich sein, falls du nicht gerade in Assembler programmierst. Wichtiger ist eher wie die zugrundeliegende Hardware funktioniert und wie kompliziert es ist ein paar einfache Grafikausgaben zu erzeugen. Bei x86 ist es zumindest nicht so kompliziert, da du erstmal BIOS interrupt calls benutzten kannst. Beim Raspberry Pi ist auch die Frage ob diese ganzen lowlevel Sachen überhaupt vernünftig dokumentiert sind. Außerdem ist es empfehlenswert für ein System zu programmieren, welches du auf deinem PC emulieren kannst. Ständig die SD-Karte beim Raspberry Pi neu zu programmieren ist auf Dauer auch nervig. Eine Möglichkeit zum Debuggen wäre auch nicht verkehrt.
Jaques Richard schrieb: > Dabei hatte ich zunächst an ein Betriebssystem für die > ARM-Architektur gedacht. Sollte dies schwieriger oder unnötig > komplizierter sein, als x86-Architektur lasse ich mich gerne eines > besseren belehren. Die Architektur ist praktisch egal, du musst das konzept hinter einem OS verstehen. Das "quasi-standard" Buch zum Thema Betriebssysteme: Moderne Betriebssysteme von A. S. Tanenbaum: ( http://www.amazon.de/Moderne-Betriebssysteme-Pearson-Studium-IT/dp/3827373425/ref=sr_1_1?ie=UTF8&qid=1415682725&sr=8-1&keywords=moderne+betriebssysteme ) Ich kann die englische Version des Buches empfehlen, da die deutsche übersetzung nicht so gut gelungen ist, und man manche Sätze 10x lesen muss, um zu verstehen, was gemeint ist. Noch ein Buch von Tanenbaum - Operating Systems Design and Implementation: ( http://www.pearsonhighered.com/educator/academic/product/0,,0131429388,00%2ben-USS_01DBC.html ) http://www.minix3.org/documentation/index.html Grundkurs Betriebssysteme: ( http://www.amazon.de/Grundkurs-Betriebssysteme-Betriebsmittelverwaltung-Synchronisation-Prozesskommunikation/dp/3658062177/ref=sr_1_5?ie=UTF8&qid=1415682725&sr=8-5&keywords=moderne+betriebssysteme ) Viel Erfolg bei deinem Vorhaben :)
Jaques Richard schrieb: > ich würde gerne zu Lehrzwecken mein eigenes Betriebssystem > schreiben. Vergiss es. Warum möchtest du das Rad neu erfinden. Nimm ein Linux Kernel her !!!
Um mal den ganzen Neinsagern entgegenzuwirken: http://www.valvers.com/open-software/raspberry-pi/step01-bare-metal-programming-in-cpt1/ Da wird zumindest erklärt, wie man LEDs ohne gebootetes Linux zum Blinken bringt.
Bevor du einen OS schreibst (und "Modern Operating Systems" wurde ja als Standardwerk schon erwähnt), solltest du erstmal einen Bootloader schreiben, um ein C-Environment zu haben. Von da aus kannst du dann in C++ wechseln. Dazu solltest du das "ARM Architecture Reference Manual" (für deine Architektur) quasi auswendig lernen. Dann kannst du die Memory Isolation, IPC und Scheduling implementieren. Dann darfst du dir überlegen ob du ein monolithisches OS oder einen Mikrokern haben willst und welches System Interface du haben willst (Bspw POSIX oder L4). Diese darfst du dir dann auch noch zu Gemüte führen. Bei einem monolithischen OS fehlt jetzt noch eine Geräteabstraktion und alle Treiber. Für das Mikrokernsystem wird dies überlicherweise als Userspace-Services implementiert. Prinzipiell ist das Vorgehen von der Prozessorarchitektur unabhängig.
Vergessen: Um Treiber zu schreiben brauchst du das Reference Manual/Datasheet von deinem ARM-SoC bzw. Gerät.
Jaques Richard schrieb: > WICHTIG: Ich möchte im Folgenden nicht solche Kommentare hören, wie > "Bist du verrückt, das ist viel zu viel!" oder "Starte doch mit dem > fertigen Linuxkernel". Ich finde es eine sehr gute Idee. Trozdem ist zu beachten, das dass schreiben eines OS ein Tiefes verständniss der zugrundeligenden Hardware erfordert. Das grösste Problem werden die Treiber sein. Du wirst sie möglicherweise selber schreiben, oder bestehende anderer OSe portieren müssen. Das wird viel zeit kosten und nicht besonders lustig sein. Ich empfehle zuerst ein Konzept zu machen, was das OS können soll. Mit einem klaren Konzept und Ziel wird es einfacher, und man pfuscht weniger. Viel Erfolg!
Daniel A. schrieb: > Trozdem ist zu beachten, das dass > schreiben eines OS ein Tiefes verständniss der zugrundeligenden Hardware > erfordert. Das grösste Problem werden die Treiber sein. das sehe ich genau anders rum. >90% eines Betriebssystems sind Hardware-unabhängig. Interprozesskommunikation, Speicherverwaltung, Dateisysteme etc. sind so ein fetter Batzen von Wissen, da ist die Hardware erst mal komplett nebensächlich. Entweder nimmst du etwas bestehendes, oder du erfindest das Rad komplett neu, oder orientierst dich an verschiedenen bestehenden Implementationen und backst dir daraus was neues, eigenständiges was besser als das vorhandene läuft. Das alles läßt sich auf bestehenden Umgebungen (existierenden OS) wunderbar entwickeln und austesten. Hat auch den Vorteil, daß du da ebenfalls keine Hardware-Level benötigst, sondern auf bestehende Bibliotheksfuntionen deinens bestehenden OS zurück greifen kannst. In deinem neuen OS hast du ja eh einen Hardware-Abstraktionslevel eingezogen, und schon ist auch die zugrunde liegende Hardware soweit nahezu vollständig gekapselt. Wenn alles zuvor gesagte einwandfrei läuft, dann fummelst du dir noch einen Treiber für eine "real existierende" Hardware zurecht, übersetzt alles nochmal zusammen, und - schwupps - ist dein neues OS auf deiner neuen Hardware betriebsbereit.
:
Bearbeitet durch User
Jaques Richard schrieb: > Hallo Leute, > > also ich würde gerne zu Lehrzwecken mein eigenes Betriebssystem > schreiben. Gratuliere! > Ich möchte auch > garkein komplexes oder gar nützliches Betriebssystem schreiben. Ich > möchte lediglich meine bisher erlernten Theoriekenntnisse gerne ein > bisschen anwenden können - wie oben bereits zu beschrieben einfach zu > "Lehrzwecken". Dann schau mal nach FreeRTOS. Nicht als Alternative für dein Vorhaben, sondern als Beispiel und um Einsicht zu bekommen wie die Theorie in der Praxis umgesetzt werden kann. Der ganze Kernel besteht da aus lediglich 4 oder 5 Dateien, das ist überschaubar und wesentlich einfacher als z.B. der Linux-Kernel. FreeRTOS ist gut dokumentiert und es existieren Ports für die meist gängigen Prozessoren.
Wobei der Begriff "OS" bei diesen ganzen RTOS-Geschichten meist ein wenig hoch gegriffen ist. Eigentlich ist das ja nur immer ein Scheduler (also ein wichtiger, aber kleiner Teil eines OS) und ein wenig Semaphore-Zeugs. Probleme wie Speicherverwaltung, Hardwareabstraktion oder gar das Laden von Programmen zur Laufzeit werden von FreeRTOS (und der ganzen RTOS-Verwandschaft) in der Regel nicht gelöst. Aber, ja, auch der Scheduler ist durchaus interessant und FreeRTOS sollte man sich doch mal zu Gemüte führen um zu verstehen, wie ein Kontextwechsel funktioniert.
Aber so ein kleiner RTOS wie FreeROTS ist mal ein guter Anfang. Alles andere, wie Speicherverwaltung, Hardwareabstraktion oder gar das Laden von Programmen zur Laufzeit kann zu 99% OS-unabhängig geschrieben werden.
Wegstaben Verbuchsler schrieb: > Daniel A. schrieb: >> Trozdem ist zu beachten, das dass >> schreiben eines OS ein Tiefes verständniss der zugrundeligenden Hardware >> erfordert. Das grösste Problem werden die Treiber sein. > > das sehe ich genau anders rum. >90% eines Betriebssystems sind > Hardware-unabhängig. Interprozesskommunikation, Speicherverwaltung, > Dateisysteme etc. sind so ein fetter Batzen von Wissen, da ist die > Hardware erst mal komplett nebensächlich. Um mit den von dir genannten Dingen überhaupt anfangen zu können, muß man aber vorher schon viele Hardware-spezifische Dinge erledigt haben.
Aus meiner Sicht wäre auch ein Blick auf MP/M (oder auch CCP/M 86) sinnvoll, da diese Systeme sehr gut dokumentiert sind und überschaubar sind. Gute Anlaufstelle dazu: www.cpm.z80.de Viel Spass und Erfolg!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.