Abend Leute, ich hätte eine Frage bezüglich Betriebssystemen: Ich bin Momentan in der HTL und lerne C, C++ und bisschen Assembler aber nicht so richtig und wir lernen immer bis es der größte Tiefflieger (entschuldigt den Ausdruck) verstanden hat. Das heißt unser Niveau ist mehr als tief... Ich und zwei Freunde programmieren gerne höhere Dinge wie kleine "Betriebssystemen" für DMX Mischpulte basierend auf AVR oder so ein zeug... Nun wollen wir aber den großen Sprung machen. Wir sind uns im klaren dass das nicht einmal annähernd was kommerzielles werden kann aber wir würden aus Interesse gerne ein primitives x86 OS schreiben. Ganz banal, ohne GUI. Nun stellt sich aber das Problem dass wir dabei wenig Erfahrung haben und alle keine Driver für so etwas programmieren können... Könnte mir bitte wer erklären wie das im OS funktioniert für z.B.: einen USB Port einen virtuell com zu programmieren, und einen Tastaurdriver zu programmieren? Kennt wer gute Tutorials? Ich wäre unheimlich dankbar über ein Stückchen kommentierten Code oder eine kurze Übersicht welche befehle hier wichtig sind und wie die Struktur aussehen sollte. Danke an alle, ich freue mich jetzt schon auf eure antworten, Lg
:
Verschoben durch User
Fangt erstmal mit nem Bootloder an. Und Google spuckt zu OS Programming mehr aus, als du hier als Antwort finden wirst.
Moin, Linux Kernelsourcen ziehen, auspacken, lesen: 1.3GByte voller Spass, Sourcen, Dokumentation... Gruss WK
Wenn du C++ kannst und magst: https://ess.cs.tu-dortmund.de/DE/Teaching/WS2017/BSB/Downloads/index.html Die Serie "Porting Unix to the 386" von Bill und Lynn Jolitz ist auch sehr nützlich: https://www.386bsd.org/releases Ansonsten ist https://wiki.osdev.org/ zu empfehlen, da gibt's zu allen möglichen BS- und x86-Themen Wiki-Einträge. Viel Erfolg, x86 ist eklig... und USB tut man sich erst an, wenn man sonst alles am Laufen hat ;) -- Michael
Dergute W. schrieb: > Linux Kernelsourcen ziehen, auspacken, lesen: > 1.3GByte voller Spass, Sourcen, Dokumentation... Wenn die Truppe vor der Rente fertig lesen will, dann könnte sie die Uhr ein wenig zurück drehen und im Quellcode von Unix 6 schnüffeln. Kompletter Kernel in 100 Seiten: http://v6.cuzuco.com/v6.pdf Zu Erkenntnissen über USB-Treiber wird es aber nicht führen.
:
Bearbeitet durch User
Danke für die vielen Antworten ;) Ich werde mir jeden Vorschlag anschauen. Wie bringe ich mein OS dann eigentlich so auf einen z.B.: USB stick dass es als OS geladen wird? Lg
Minix wurde doch als Lehrbetriebssystem entwickelt: https://de.wikipedia.org/wiki/Minix_(Betriebssystem) Das wäre doch ein Einstiegspunkt.
Paul S. schrieb: > Wie bringe ich mein OS dann eigentlich so auf einen z.B.: USB stick dass > es als OS geladen wird? Einfacher Weg: DOS auf dem Stick installieren und von DOS aus dein OS laden (z.B. mit syslinux als bootloader: https://www.syslinux.org/wiki/index.php?title=The_Syslinux_Project) Aufwendiger Weg: eigenen Bootsektor basteln: https://wiki.osdev.org/Rolling_Your_Own_Bootloader
:
Bearbeitet durch User
A. K. schrieb: > Kompletter Kernel in 100 Seiten: http://v6.cuzuco.com/v6.pdf ... und der Kommentar dazu: http://www.lemis.com/grog/Documentation/Lions/
Ok danke Mini ist eine gute Idee. Ich hätte nach einem kurzen blick in die Codes die man in den links findet noch eine Frage...was bedeutet int 0x80? Und eine andere Frage zu Assembler was ist ecx,edx etc.? und was bedeutet msg db 'Hello, world!', 0xa ? ;) Ihr seid toll Leute danke für die antworten! Lg, Paul
:
Bearbeitet durch User
Paul S. schrieb: > noch eine Frage...was bedeutet int 0x80? eure Gruppe muss wohl noch etwas warten bis der größte Hochflieger die Bedienung einer Suchmaschine verstanden hat.
Wenn man nicht mal nicht in der Lage ist einfachste asm syntax zu lesen, dann sollte man nicht darüber nachdenken ein OS zu schreiben. Wir haben in den 80igern ein einges RT OS für NSC 32000 Series CPUs geschrieben. Der Aufwand lag bei 3 Mannjahren. Vergiss es, lernt erst einmal die Basics.
Paul S. schrieb: > Ok danke Mini ist eine gute Idee. > Ich hätte nach einem kurzen blick in die Codes die man in den links > findet noch eine Frage...was bedeutet int 0x80? > Und eine andere Frage zu Assembler was ist ecx,edx etc.? > und was bedeutet msg db 'Hello, world!', 0xa ? ;) > > Ihr seid toll Leute danke für die antworten! > Lg, Paul Also wenn du diese grundlegenden Assembler-Sachen noch nicht verstanden hast, würde ich von der Betriebssystem-Programmierung für x86-Rechner erst mal Abstand nehmen. Solange du den Assembler-Code nicht verstehst und auch nicht selbst schreiben kannst wird das nichts, denn die Low-Level-Sachen nur um einen primitiven Kernel zu booten, der am Anfang selbst noch nicht viel mehr macht als ein "Hallo, Welt" auszugeben, wirst du kaum anders realisieren können (z.B. Übergang vom Real Mode in den Protected Mode, die Initialisierung der GDT/LDT usw.). Ich würde erst mal die Assemblerprogrammierung vertiefen, nebenbei kannst du ja mal die Intel-Dokumentation zum x86er oder die x86/64-Spezifikation von AMD anschauen - alles frei verfügbare PDFs, mit jeweils mehreren hundert Seiten. Unter https://wiki.osdev.org/ gibt es zudem viel hilfreiches Material. Zu Beginn ist es sicherlich nicht verkehrt, erstmal auf einen fertigen Bootloader (z.B. GRUB) zu setzen, der einem die "Drecksarbeit" beim Initialisieren abnimmt um den selbstgebastelten Kernel zu laden. Das muss nicht mal auf echter Hardware passieren, ein schlanker Emulator wie QEMU reicht schon.
:
Bearbeitet durch User
Paul S. schrieb: > Könnte mir bitte wer erklären wie das im OS funktioniert für z.B.: einen > USB Port einen virtuell com zu programmieren, und einen Tastaurdriver zu > programmieren? Ich würde mich erstmal auf native serielle Schnittstellen beschränken.
Harry L. schrieb: > MS-DOS: > https://github.com/Microsoft/MS-DOS DOS kann kein Multi-Tasking, das würde heute niemand mehr "Betriebssystem" nennen.
Paul S. schrieb: > ... aber wir > würden aus Interesse gerne ein primitives x86 OS schreiben. Ganz banal, > ohne GUI. Nun stellt sich aber das Problem dass wir dabei wenig > Erfahrung haben und alle keine Driver für so etwas programmieren > können... Hallo! Damit ihr nicht (gleich am Anfang) völlig frustriert werdet, empfehle ich nicht mit den x86 Kolossen Linux o.Ä. anzufangen. Ich geh einfach mal davon aus, dass ihr zwar 'Programmieren', aber halt kaum was über Betriebssysteme direkt gelernt habt also braucht ihr etwas ganz grundliegendes und vor Allem simples. Ein recht übersichtliches Projekt ist z.B. FreeRTOS, das läuft auf AVR und auch den Cortex-M von Arm. Kauft euch doch bei Amazon oder Aliexpress ein 5€ Stm32 Evalboard und bringt einmal zwei Leds zum blinken indem ihr zwei Threads startet. DOS und Assembler zum Einstieg empfehlen ... ach du meine Güte! ;-)
:
Bearbeitet durch User
Es gab mal den ETS Kernel von Pharlap, was ist daraus eigentlich geworden? Das war ein X86 Kernel der mit den VisualStudio Tools gearbeitet hat.
>und was bedeutet msg db 'Hello, world!', 0xa ? ;)
Der war gut!
Sagen die Steuerzeichen was? CR und LF?
Aber gleich mit einem eigenen OS auf x86 anfangen wollen...
Bastler schrieb: > Aber gleich mit einem eigenen OS auf x86 anfangen wollen... Finde ich OK! Bin auch so in x86 Assembler eingestiegen. Hatte allerdings schon einige Zeit Z80 Assembler auf dem Kerbholz. Zu Beginn der 80286 Zeit gab es nichts dafür, außer DOS Brauchte unbedingt ein preemptives Multitasking OS für den PC. Habe Monate investiert, nur um in den ProtectedMode zu schalten, für ein rudimentäres Multitasking und für ein paar Ein- Ausgaben. Dann kam von SCO ein Unix für den 286, und mein OS landete auf den Haufen der Geschichte. Also, aus meiner Sicht darf man nicht erwarten, dass da was besseres raus kommt, als es schon gibt. Aber dennoch kann man auf dieser Spielwiese viel lernen. Hier kann man sich was abschauen: https://www.menuetos.de/
Also die Ausdrucksweise im Eingangspost lässt einen leichten Höhenflug erahnen, dem die Macher erlegen sind. Nicht schlimm, jugendliche Naivität. Eine propriätere SW für einen Controller entwickeln mit den Basisfunktionen wie etwa einem eigenen Scheduler o.ä. ist doch schon ein BS. USB - damit beschäftigt sich manch einer Jahrelang, wenn es derart in die Tiefe gehen soll.Hehe. Dann überlegen, was für Sachen unterstütz werden sollen(seriell ist am einfachsten, in der Tat) und ran an die Arbeit. Oder häng doch mal eine IR-Diode dran und schnapp dir eine Fernbedienung und versuch die Codes auszuwerten und mit entsprechenden Aktionen zu verknüpfen. Für USB/COM Wandler gibt es spezielle Chips. Die kann man verwenden, aber für Ein guter Beginn wäre aber auch ein technisches Studium in entsprechender Ausrichtung.
Ach ja: Programmierbeispiele für USB/COM über Chips von FTDI gibts im Internet zuhauf. FTDI ist das Stichwort. Viel Erfolg.
Thomas K. schrieb: > Ein recht übersichtliches Projekt ist z.B. FreeRTOS, das läuft auf AVR > und auch den Cortex-M von Arm. Kauft euch doch bei Amazon oder > Aliexpress ein 5€ Stm32 Evalboard und bringt einmal zwei Leds zum > blinken indem ihr zwei Threads startet. Da kann man sich richtig was abgucken, wenn man das Konzept versteht. FreeRTOS - das übrigens nun zu Amazon gehört. Da geht demnäcst richtig die Post ab;-)
soso schrieb: > Programmierbeispiele für USB/COM über Chips von FTDI gibts im Internet > zuhauf. FTDI ist das Stichwort Auch für MSDOS? Georg
Ich würde mich von x86 grundsätzlich losreißen, weil das historisch bedingt einfach total aufgebläht ist. Auf aktuellen Sytemen ist UEFI schon direkt eine gigantische Hürde. Den Vorschlag von A.K. mit dem Unix-Sourcecode zu arbeiten kann ich zwar nur unterstützen aber es wird schwer das lauffähig zu bekommen. In Kombination mit Mikrocontrollern empfehle ich einen Blick auf http://nuttx.org/ zu werfen. Das ist gerade im Hinblick auf Treibersysteme, File- und Network-IO sehr ähnlich zu Linux aber viel schmaler. Für Scheduling, Message-Passing, etc. empfehle ich einen Blick auf http://www.chibios.org Allgemein kann ich nur empfehlen sich mit Linux und dessen Treibermodell auseinanderzusetzen. Optimal für den Einstieg sehe ich hier ein Beaglebone Black mit Ångstrom.
Christopher J. schrieb: > Den Vorschlag von A.K. mit dem > Unix-Sourcecode zu arbeiten kann ich zwar nur unterstützen aber es wird > schwer das lauffähig zu bekommen. Es geht nicht darum, das übersetzen zu können. Der Quellcode ist pre-K&R, das nimmt jeder heutige Compiler sehr persönlich:
1 | int *p; |
2 | struct { char lobyte; char hibyte; }; /* anonym */ |
3 | return p->lobyte; /* ohne Cast */ |
und
1 | a =+ rp->x_size; /* heute: a += ... */ |
Aber es gibt neben dem Quellcode auch eine ausführliche Erklärung dazu. Man kann sich das also anschauen und verstehen. Fand ich damals sehr hilfreich zum Verständnis eines realen Betriebsystems. Wobei heute Minix wohl der bessere Ansatz dafür ist. Motiv für die Entwicklung von Minix war, dass der Unix-Quellcode irgendwann nicht mehr für Unis zur Verfügung stand.
:
Bearbeitet durch User
Der größte Mangel des Ursprungsposts besteht darin, dass er eine Stunde zu früh veröffentlicht wurde.
Percy N. schrieb: > Der größte Mangel des Ursprungsposts besteht darin, dass er eine Stunde > zu früh veröffentlicht wurde. Nö, einen Monat minus 12h zu früh.
Paul S. schrieb: > wir lernen immer bis es der größte Tiefflieger > (entschuldigt den Ausdruck) verstanden hat. Das heißt unser Niveau ist > mehr als tief... Paul S. schrieb: > was bedeutet int 0x80? > Und eine andere Frage zu Assembler was ist ecx,edx etc.? > und was bedeutet msg db 'Hello, world!', 0xa ? ;) https://de.wikipedia.org/wiki/Dunning-Kruger-Effekt
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.