Möchte ein eigenes Betriebssystem bauen



  • Mal eine Frage an euch Spezialisten: Wie geht man sinnvoll vor, wenn man ein eigenes Betriebssystem auf einem PC/Notebook selbst erstellen und ausprobieren will?



  • Ich würde mit einem Bootloader beginnen.



  • Ich betrachte mich nicht als Spezialist auf diesem Gebiet, aber wie auch immer...

    Wie gut kennst du den Assembler für deine Zielarchitektur? Mit einer Antwort welche unterhalb von "sehr gut" liegt, solltest du dich zuerst damit auseinandersetzen. Danach solltest du dasselbe mit der C-Programmiersprache tun, bis du sie gut im Griff hast. Das gilt auch, wenn du dein Betriebssystem nicht in C schreiben möchtest. Der grösste Teil der Tutorials und Erklärungen von allgemeinen Konzepten sind in C-Pseudocode formuliert.

    Erst wenn du das Zeugs sehr gut kennst, kannst du anfangen, dich in die Materie einzuarbeiten. Das wird am Anfang sehr trocken sein. Für viele ist es zu trocken, auch für mich, den es eigentlich hochgradig interessiert. Wenn du nicht dranbleiben magst, wirst du es bald merken, und zwar nachdem du deinen Bootloader geschrieben hast und die Frage kommt, was es als nächstes zu tun gibt.

    Hast du einen alten PC, den du nicht mehr brauchst? Arbeite auf deinem richtigen PC höchstens im Emulator, für alle richtigen Versuche gehst du auf den anderen PC.

    Das gibt ein Gefühl von Sicherheit 🙂

    MfG



  • Hallo,

    Ich beschäftige mich seit einiger Zeit mit Assembler für den x86.

    Möchtest du wirklich ein OS wie DOS schreiben, oder nur ein kleines Programm was etwas Text nach dem Booten ausgibt?

    Ersteres ist allein eigentlich nicht möglich, da du heutzutage selbst mit Assembler nur beschränkt auf die Hardware zugreifen kannst. Eine Bildschirmauflösung wie in Windows wirst du leider nicht realisieren können.

    Ebenso müsstest du deinen eigenen CD-Rom Treiber schreiben, sodass für den Anfang nur das Starten von Diskette bleibt.
    Eine Dokumentation für die Programmierung einer Netzwerkkarte ist nicht zu bekommen, da die Hersteller nicht die Funktionsweise ihrer Karten offen legen.

    Dein OS hätte also nur Zugriff auf max. 640x480x16 Grafik, Tastatur, Maus, Diskette und die ersten MByte deiner Festplatte, sowie 1 MByte RAM.

    Die Bücher "PC Hardware" von H.P. Messmer und die Buchreihe "PC Intern" von M.Tischer sollten dabei auf deinem Schreibtisch nicht fehlen. Sie beinhalten eigentlich alles was du wissen musst.

    Leider nur noch gebraucht bei Amazon oder Ebay zu bekommen, wenn überhaupt.

    Viel Erfolg,

    Nicky



  • supernicky schrieb:

    Ersteres ist allein eigentlich nicht möglich, da du heutzutage selbst mit Assembler nur beschränkt auf die Hardware zugreifen kannst. Eine Bildschirmauflösung wie in Windows wirst du leider nicht realisieren können.

    Ebenso müsstest du deinen eigenen CD-Rom Treiber schreiben, sodass für den Anfang nur das Starten von Diskette bleibt.
    Eine Dokumentation für die Programmierung einer Netzwerkkarte ist nicht zu bekommen, da die Hersteller nicht die Funktionsweise ihrer Karten offen legen.

    Dein OS hätte also nur Zugriff auf max. 640x480x16 Grafik, Tastatur, Maus, Diskette und die ersten MByte deiner Festplatte, sowie 1 MByte RAM.

    Absoluter Blödsinn!



  • supernicky schrieb:

    Hallo,

    Ich beschäftige mich seit einiger Zeit mit Assembler für den x86.

    Möchtest du wirklich ein OS wie DOS schreiben, oder nur ein kleines Programm was etwas Text nach dem Booten ausgibt?

    Ersteres ist allein eigentlich nicht möglich, da du heutzutage selbst mit Assembler nur beschränkt auf die Hardware zugreifen kannst. Eine Bildschirmauflösung wie in Windows wirst du leider nicht realisieren können.

    Ebenso müsstest du deinen eigenen CD-Rom Treiber schreiben, sodass für den Anfang nur das Starten von Diskette bleibt.
    Eine Dokumentation für die Programmierung einer Netzwerkkarte ist nicht zu bekommen, da die Hersteller nicht die Funktionsweise ihrer Karten offen legen.

    Dein OS hätte also nur Zugriff auf max. 640x480x16 Grafik, Tastatur, Maus, Diskette und die ersten MByte deiner Festplatte, sowie 1 MByte RAM.

    Die Bücher "PC Hardware" von H.P. Messmer und die Buchreihe "PC Intern" von M.Tischer sollten dabei auf deinem Schreibtisch nicht fehlen. Sie beinhalten eigentlich alles was du wissen musst.

    Leider nur noch gebraucht bei Amazon oder Ebay zu bekommen, wenn überhaupt.

    Viel Erfolg,

    Nicky

    ROFL 😃



  • Man fängt erstmal klein an, z.B. mit Codeschnippseln wie in diesem Artikel:
    http://www.lowlevel.eu/wiki/Ausgabe_1

    Dann schreibt man ein paar Programme, wie Commandointerpreter, Debugger, Texteditor, Dateiverwaltung, mehrere Interrupts, diverse Treiber für Tastatur (inklusive verschiedene Layouts) Bildschirm, Festplatten, Usb-Sticks, Disketten, SD-Karten, Joysticks, Soundkarten, Netzwerkkarten Prozessorverwaltung, Temperaturverwaltung, Internetbrowsing, Videogucken, Tetris spielen, Bildschirmschoner, Bildschirmhintergrund, diverse Verwaltungstools, verschiedene Sprachcompiler/interpreter, Entwicklungsumgebung, Tabellenkalkulation, Fotobearbeitung, Datenkompression, Festplattenpartitionierung, Defragmentierung, usw. usw.
    Man muss nicht alles auf einmal schreiben, aber wenigstens einen Teil davon, um überhaupt programmiertechnisch dabei zu sein.

    Dann kann man, eventuell schon früher, bei Gruppen einsteigen, die an Hobby-Betriebsystemen basteln, wie etwa ReactOS oder Erhards und Freunde PrettyOS hier ( http://www.c-plusplus.net/forum/f62?sid=6deb3de6d2c64a73794f0634d6ad6dd0 ) und ( http://www.c-plusplus.net/forum/254893?sid=6deb3de6d2c64a73794f0634d6ad6dd0 ) oder bei vielen anderen. Man kommt auf jeden Fall schneller voran, wenn man mit anderen an einem bestimmten Projekt mitarbeitet. Zwei wissen einfach mehr als einer und vier Augen sehen mehr als zwei.

    Wenn man dann die richtige Vision hat, die nötige Erfahrung, die richtigen Kontakte und einigermaßen Know How und Designvorstellungen, kann man z.B. erste Schritte mit einem Visionsgemäßen Kommandointerpreter wagen. Je besser das Konzept und das Programmierinterface, und je leistungsfähiger und innovativer im Sinne von Zukunftsweisend, desto eher wird man Freunde finden, die mitmachen, code tauschen und desto stärker wird das System sein, und sich weiterentwickeln.



  • KA schrieb:

    supernicky schrieb:

    Ersteres ist allein eigentlich nicht möglich, da du heutzutage selbst mit Assembler nur beschränkt auf die Hardware zugreifen kannst. Eine Bildschirmauflösung wie in Windows wirst du leider nicht realisieren können.

    Ebenso müsstest du deinen eigenen CD-Rom Treiber schreiben, sodass für den Anfang nur das Starten von Diskette bleibt.
    Eine Dokumentation für die Programmierung einer Netzwerkkarte ist nicht zu bekommen, da die Hersteller nicht die Funktionsweise ihrer Karten offen legen.

    Dein OS hätte also nur Zugriff auf max. 640x480x16 Grafik, Tastatur, Maus, Diskette und die ersten MByte deiner Festplatte, sowie 1 MByte RAM.

    Absoluter Blödsinn!

    Kann man sehen wie man will. Man sollte aber realistisch bleiben.
    Beim Programmieren im RealMode bleibt einem nunmal nicht mehr übrig. Das BIOS stellt einige zwar einige Routinen bereit für den Zugriff auf die Hardware, jedoch weiß jeder das diese sehr langsam sind.

    Wenn es so einfach wäre, hätte jeder zweite Hobbyprogrammierer ein eigenes OS daheim. Dem ist aber nicht so. Selbst Assembler hilft einem nicht weiter wenn man nicht weiß wie die ganzen Register der einzelnen Controller angesprochen werden müssen. Von den Portadressen ganz zu schweigen.

    Bis auf (S)VGA, Diskette/Festplatte und Tastatur ist sogut wie nichts dokumentiert oder heute noch gültig. Darum liefern die Hersteller nunmal Treiber mit ihrem Gerät mit.

    Ich habe nicht gesagt das es unmöglich ist, aber viele OS-Entwickler werden schnell von der Realität eingeholt und brechen ihr Vorhaben sehr früh ab.

    MfG

    Nicky



  • supernicky schrieb:

    Ich habe nicht gesagt das es unmöglich ist, aber viele OS-Entwickler werden schnell von der Realität eingeholt und brechen ihr Vorhaben sehr früh ab.

    Nicht die Tatsache, dass du das Vorhaben als unrealistisch einstufst wird belächelt, sondern die technischen Einschätzungen, die du gepostet hast. Die sind einfach nur Schwachsinn und darüber hinaus sehr amüsant. LOL, Alter!



  • dann sei doch so gut und kläre mich kurz auf...

    MfG



  • supernicky schrieb:

    dann sei doch so gut und kläre mich kurz auf...

    MfG

    You left the kitchen, you shouldn’t have done that ! 😃



  • @supernicky:

    Man kann auch mit Assembler Code vom Real Mode in den Protected Mode wechseln (den Code für den Wechsel muss man glaube sogar in Assembler schreiben...).
    Danach schreiben die meisten in C weiter, weil es komfortabler ist,
    aber selbst da kann man noch mit Assembler weiter arbeiten.

    Prinzipiell gibt es nichts, was einen daran hindern würde, sich sein eigenes Windows zu implementieren... auch alleine.
    Tatsächlich scheitern die meisten Projekte einfach am Aufwand...



  • Allein das mit den Graphikmodi von 640x480 stimmt nicht:

    http://de.wikibooks.org/wiki/Interrupts_80x86/_INT_10#Funktion_4Fh:_VESA-Schnittstelle_.28VBE.29

    Ich gebe ja zu das das auf rechner vor dem Baujahr '98
    das höchste war,... aber das ist heutzutage nicht mehr so,..

    Man sollte sich dennoch mit uefi auseinandersetzen,
    da immer mehr boards nur noch diesen unterstützen werden,...
    (d.h. nicht das alle das werden)

    seid gegrüßt


  • Mod

    viele OS-Entwickler werden schnell von der Realität eingeholt und brechen ihr Vorhaben sehr früh ab.

    Die sollten zu uns zu PrettyOS kommen. Da wird geholfen, und wir bleiben dran. 😉

    Könnte man den Thread zu uns schieben?



  • Dieser Thread wurde von Moderator/in Nobuo T aus dem Forum Assembler in das Forum Projekt: OS-Development verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • DrakoXP schrieb:

    @supernicky:
    Tatsächlich scheitern die meisten Projekte einfach am Aufwand...

    Hallo,

    das hab ich doch gesagt 🙂
    Ich habe immer das Gefühl das viele nicht wissen was für ein OS alles getan werden muss. Es arbeiten nicht umsonst immer mehrere Leute an einem Projekt. Einer allein kann das nicht alles wissen.

    Eine Frage habe ich noch zum PM des x386.
    In einem Buch von mir steht geschrieben, das man (mit entsprechender Vorarbeit)
    die Segmentregister ES, FS mit den richtigen Werten lädt,in den PM und zurück in den RM springt und trotzdem auf den gesamten RAM über ES und FS zugreifen kann. Ist das wahr?
    Von solchen Tricks steht bei Herr Messmer und Herr Tischer nämlich nichts geschrieben.

    Wie erfahre ich wieviel RAM ich habe? Im RM erhalte ich vom BIOS nur 640KByte.

    MfG

    Nicky





  • supernicky schrieb:

    Ersteres ist allein eigentlich nicht möglich, da du heutzutage selbst mit Assembler nur beschränkt auf die Hardware zugreifen kannst. Eine Bildschirmauflösung wie in Windows wirst du leider nicht realisieren können.

    Ohne Frage es ist aufwendig und erfordert viel Erfahrung, Kraft und Geduld. Aber es wird sicher nicht an der Auflösung eines Grafikmodus scheitern. Technisch sind auch hohe Auflösungen machbar. Am Anfang ist es aber sicher leichter erst einmal im Textmodus zu bleiben.

    Ebenso müsstest du deinen eigenen CD-Rom Treiber schreiben, sodass für den Anfang nur das Starten von Diskette bleibt.

    Das BIOS bietet keine direkte Unterstützung (Zugriff) für CD ROM. Allerdings kann es durchaus von CD ROM booten. Dafür gibt es den El Torito Standard.

    http://de.wikipedia.org/wiki/El_Torito

    Natürlich wird hier in Wirklichkeit auch nur ein Disketten Boot simuliert.

    Eine Dokumentation für die Programmierung einer Netzwerkkarte ist nicht zu bekommen, da die Hersteller nicht die Funktionsweise ihrer Karten offen legen.

    Dadurch das es Systeme wie Linux gibt, ist diese Aussage nicht richtig. Linux ist quelloffen, damit sind auch die Treiber für Netzwerkkarten quelloffen. Die Hersteller sind in diesem Punkt auch nicht mehr so stur wie vor 10 Jahren. Natürlich werden sie nicht jede kleine Anfrage von jedem bearbeiten. Aber die Informationen liegen in Form offener Treiber vor.

    Dein OS hätte also nur Zugriff auf max. 640x480x16 Grafik, Tastatur, Maus, Diskette und die ersten MByte deiner Festplatte, sowie 1 MByte RAM.

    Das ist nicht richtig. Spätestens wegen der Quelloffenheit verfügbarer Systeme ist das einfach nicht richtig. Mühsam das alles zusammen zu tragen ist es aber
    trotzdem.

    Die Bücher "PC Hardware" von H.P. Messmer und die Buchreihe "PC Intern" von M.Tischer sollten dabei auf deinem Schreibtisch nicht fehlen. Sie beinhalten eigentlich alles was du wissen musst.

    Für die Grundlagen ist das ok. Aber alles in allem sind die veraltet. Nimmst Du diese Bücher als einzige Grundlage, dann hast Du mit Deinen Aussagen oben sogar Recht. Aber wir sind ja zum Glück im Zeitalter des Internet :).

    In einem Buch von mir steht geschrieben, das man (mit entsprechender Vorarbeit)
    die Segmentregister ES, FS mit den richtigen Werten lädt,in den PM und zurück in den RM springt und trotzdem auf den gesamten RAM über ES und FS zugreifen kann. Ist das wahr?
    Von solchen Tricks steht bei Herr Messmer und Herr Tischer nämlich nichts geschrieben.

    Warum sollte man aus dem PM freiwillig zurückschalten wollen?

    Was Du meinst ist vielleicht das hier.
    http://de.wikipedia.org/wiki/EMM386

    Wikipedia schrieb:

    EMM386 erreicht so aus Softwaresicht den gleichen Effekt wie die ursprünglichen, für spezielle EMS-Steckkarten ausgelegten Expansionsspeicher-Treiber. Während diese allerdings eigene, für die CPU an sich gar nicht adressierbare Speicherbereiche mittels einer speziellen Bank-Switching-Hardware einblendeten, verwendet EMM386 ausschließlich "Bordmittel" der Intel i386 und höheren Prozessoren. Als Nebeneffekt wird der Prozessor dabei allerdings aus dem unter DOS üblichen Real-Modus in den sogenannten V86-Modus geschaltet, womit einige sehr hardwarenah arbeitende Programme und einige Programme, die spezielle Speicherverwaltungstricks verwenden, nicht kompatibel sind.

    Wenn es so einfach wäre, hätte jeder zweite Hobbyprogrammierer ein eigenes OS daheim.

    Unabhängig von Deinen falschen technische Einschätzungen ist es eben nicht einfach. Aber es sei Dir verziehen, Erfahrung erwirbt man nicht über Nacht. Und dieses Forum ist ja auch dazu da etwas dazu zu lernen. Das gilt für alle Seiten. Hoffe ich zumindest 🙂



  • Warum sollte man aus dem PM freiwillig zurückschalten wollen?

    Mir fallen da zwei Gründe ein:

    1. Im RM kann man die Funktionen des BIOS ohne VM86 nutzen
    2. Unreal Mode

    Ist das wahr?

    Ja. Nennt sich Unreal Mode: http://de.wikipedia.org/wiki/Real_Mode#Unechter_Realmodus_.28.E2.80.9EUnreal_Mode.E2.80.9C.2C_.E2.80.9EBig_Real_Mode.E2.80.9C.29

    Wie erfahre ich wieviel RAM ich habe?

    Das BIOS hilft dir ein bisschen: http://wiki.osdev.org/Detecting_Memory_(x86)



  • Mr X schrieb:

    Warum sollte man aus dem PM freiwillig zurückschalten wollen?

    Mir fallen da zwei Gründe ein:

    1. Im RM kann man die Funktionen des BIOS ohne VM86 nutzen
    2. Unreal Mode

    Ja klar. Es ist sicher für den Anfang leichter ein System mit diesen Rahmenbedingungen zu schreiben. Geht es einfach nur darum mehr Speicher verwenden zu können, dann ist das mit dem Unreal Mode Trick ok.
    Im Protected Mode gibt es keine Unterstützung vom BIOS, man ist also gezwungen wirklich alles selber zu machen. Das ist dann natürlich nochmal um Größenordnungen aufwendiger.


Anmelden zum Antworten