Wie erstelle ich ein eigenes OS?
-
Hallo zusammen!
Ich heiße Stefan und bin ein Hobbyprogrammierer. Ich möchte euch fragen, ob sich einer von euch mit der Programmiersprache NASM auskennt. Ich möchte diese Programmiersprache gerne lernen, da ich ein eigenes (textbasierendes) OS schreiben möchte. Das OS soll aber nicht auf dem Computer installiert und ausgeführt werden, sondern von der CD-ROM gebootet werden und übersetzte ANSI-C++-Programme ausführen.
Die Frage ist, wie ich eine Sektordatei, die von BIOS gebootet wird, auf die C++-Bibliothek verweisen kann, damit der Computer die Grundfunktionen von Textein- und -ausgaben (wie zum Beispiel cout und printf) finden (Nachschlagen) kann, um kompilierte C++-Dateien richtig auszuführen. Ich würde mich freuen, wenn mir einer ein NASM-Lehrbuch (auf Deutsch) oder Internetseite empfehlen kann, um die Bedeutung Schlüsselwörter und Anweisungen besser zu verstehen. Sehr toll wäre es, wenn mir einer, anhand von Beispielen, erklären könnte, wie man eine Datei von der CD-ROM bootet.So stelle ich mir mein kleines OS vor:
CD-ROM booten -> C++-Programm (in Textmodus) ausführen -> Computer ausschalten
-
die "C++-bibliothek" verwendet intern natürlich die routinen, die das jeweilige betriebssystem zur verfügung stellt; z.b. für eine ausgabe auf der konsole.
da du selbst ein betriebssystem erstellst, musst du also diese routinen (z.b. putchar/getchar) einmal selbst implementieren - und danach musst du die C++-standardbibliothek selbst erstellen, damit sie intern die funktionen deines betriebssystems verwendet.
grundsätzlich. natürlich muss dein OS das programm erst einmal laden können und dein compiler muss das programm in der form erstellen, dass dein OS es auch laden kann.
anders gesagt: suche lieber nach etwas fertigem (OS), wenn du unbedingt C++ programme zum laufen bringen willst, spiel dich vielleicht einmal so mit assembler, ohne gleich ein OS machen zu wollen (schau mal im assembler-forum in zu den FAQs) oder bleib lieber noch eine zeitlang bei simplem C++

-
Ich möchte euch fragen, ob sich einer von euch mit der Programmiersprache NASM auskennt.
Einige schon. NASM ist ein Tool keine Programmiersprache.
http://de.wikipedia.org/wiki/NASM
http://www.henkessoft.de/Assembler/Assembler.htm
http://www.henkessoft.de/Roboter/stk500.htm
http://www.c-plusplus.net/forum/viewforum-var-f-is-17.html
http://www.c-plusplus.net/forum/viewtopic-var-t-is-217887.html
http://www.c-plusplus.net/forum/viewtopic-var-t-is-124713-and-postdays-is-0-and-postorder-is-asc-and-start-is-0.html
http://www.c-plusplus.net/forum/viewforum.php?f=30&sid=30bf6507b7f25560290181958650c89f
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39771.html
-
Wenn du ein OS entwickeln möchtest, schau mal das Free-DOS-Projekt an.
Das ist zwar soweit ich mich erinnere überwiegend in C gecodet aber der
eine oder andere Link oder auch Info's können dir vielleicht weiterhelfen.MfG f.-th.
-
ist es nicht sinnlos ein OS in Assembler schreiben zu wollen? Für was soll das gut sein? Gibt doch schon Linuxversionen die von CD starten
-
Wenn nicht nebeneinander mehrere OSe in der Vergangenheit entwickelt worden
wären, wären die Aktuellen nicht das was sie heute sind.Aber zum Einstieg in Assembler gleich ein OS schreiben ist schon heftig.
Das heisst:
Hardwarewissen aneignen: CPU, Board und Speichermedium
Wird das Speichermedium dann direkt oder indirekt angesprochen?
Und gleichzeitig noch programmieren.
Du weisst schon das du in der Ebene die Hardware sehr gut ansteuern kannst, aber
genauso einfach, oder gar noch schneller, unbrauchbar machen kannst, weil du z.B.
die Firmen-Software des CD/DVD-Laufwerks überschrieben hast, mit falschen Daten.
Wenn du dir der Risiken und Nebenwirkungen bewusst bist, leg los.

MfG f.-th.
-
Mir ist es schon bewusst, das Programme, die mit der Programmiersprache Assembler geschrieben werden - im Gegensatz zu den höheren Programmiersprachen - für jede unterschiedliche Architektur des Mikroprozessors angepasst werden muss.
Ich gebe zu, es ist schon etwas zu hochgesetzt, das einer, der sich mit der Programmiersprache Assembler nicht sonderlich auskennt, nicht einfach so ein Betriebssystem programmieren kann. Aber da ich mich seit meinem 17. Lebensjahr mit unterschiedlichen Programmiersprachen beschäftigt habe, fällt mir auf, dass das Prinzip - sei es BASIC, C++ oder Java - immer gleich ist – nur mit dem einen unterschied das BASIC-Programm interpretiert und nicht kompiliert werden. Ich glaube mir wird es nicht schwere Fallen von C++ auf Assembler zu wechseln.
Sicherlich wird es schwieriger sein die Programmiersprache Assembler zu lernen, da es im Gegensatz zu den Hörern Programmiersprachen nicht so viele Schlüsselwörter oder besser gesagt Mnemoniken enthält, bei denen man Ihre Bedeutung nicht so schnell erahnen kann.
Ich will kein Betriebssystem schreiben, das Treiber oder Bibliothekssammlung auf dem Computer installieren, damit der Computer weiß, wie er damit umgehen soll.
Ich möchte eine CD-ROM booten, die einfache Texte auf dem Bildschirm ausgibt und Eingaben entgegen nimmt.
Aber um die Programmiersprache Assembler und vor allem den Aufbau und die Funktionsweise des Mikroprozessors besser zu verstehen, suche ich ein gutes Assembler-Buch, das sich mit x86_64 Architekturen (64-Bit-Prozessoren) befasst. Daher meine Frage: Kann mir einer von euch ein gutes Assembler-Buch empfehlen, das für Um- oder Einsteiger gut geeignet ist?
-
Du solltest zunächst im Assembler-Forum dein Projekt durch Diskussionen mit erfahrenen Leuten etwas schärfer fassen. So einfach von C++ auf Assembler, das ist nicht so einfach, wie Du denkst.
Du kannst ja zunächst mal in Kombination mit C++ üben (Intel-Syntax), so in dem Stil:
//global int a = 1; int b = 2; //... _asm { mov eax, b mov ebx, a mov a, eax mov b, ebx }http://www.henkessoft.de/C++/Cpp_school/asm.htm
... oder legst hier los:
http://www.henkessoft.de/Assembler/Assembler.htm (PC)
http://www.henkessoft.de/Roboter/stk500.htm (Mikroprozessoren)
-
Kann mir einer von euch ein gutes Assembler-Buch empfehlen, das für Um- oder Einsteiger gut geeignet ist?
Das Assembler Buch (Addison-Wesley) / Podschun, Trutz Eyke
http://www.amazon.de/Das-Assembler-Buch-Grundlagen-Einführung-Hochsprachenoptimierung/dp/3827319293
(manche finden es allerdings zu langatmig, 64 bit ist - soweit ich weiß - auch noch nicht dabei)
-
Ich habe etwas vegleichbares mal mit einem 6502-Rechner (Singeleboard, Eigenbau)
gemacht. Soviel Assembler daß der C-Crosscompiler dann irgendwann einmal etwas
zu tun bekommen kann (ich habe die Software dann doch komplett in Assembler
geschrieben, der 6502 ist recht übersichtlich).Wenn Du das mit den x86-Prozzis vorhast, muß Du recht sattelfest in Assembler und
C sein (>10 Jahre Erfahrung, SEHR viel Sitzflisch und Sturheit).Vergiß es. OS gibt es nun wirklich genug.
Wenn Du es machst, besorge Dir erstmal Literatur über die Struktur eines OS
(zB Brinch-Hansen).
-
Ich würde dann eher in Richtung µP, z.B. Robotik oder Elektronik, gehen- Auf dem PC ist das alles ziemlich langweilig.