Betriebssystemprogrammierung für Raspberry Pi - Literaturempfehlung

Gast #3878398
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...
#3878541
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.
Gast #3878597
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 :)
Gast #3878979
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.
#3878982
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!
#3880640
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.
#3881536
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.
Gast #3881842
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.
#3889157
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.
Gast #3889250
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.
Gast #3889282
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!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.