Forum: PC-Programmierung Betriebssystemprogrammierung für Raspberry Pi - Literaturempfehlung


von Jaques Richard (Gast)


Lesenswert?

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...

von Sebastian V. (sebi_s)


Lesenswert?

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.

von Kaj (Gast)


Lesenswert?

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 :)

von Seppi (Gast)


Lesenswert?

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 !!!

von Georg aus Wien (Gast)


Lesenswert?

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.

von ghl (Gast)


Lesenswert?

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.

von ghl (Gast)


Lesenswert?

Vergessen: Um Treiber zu schreiben brauchst du das Reference 
Manual/Datasheet von deinem ARM-SoC bzw. Gerät.

von Daniel A. (daniel-a)


Lesenswert?

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!

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

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
von Eric B. (beric)


Lesenswert?

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.

von Michl (Gast)


Lesenswert?

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.

von Eric B. (beric)


Lesenswert?

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.

von Rolf Magnus (Gast)


Lesenswert?

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.

von OldMan (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.