Forum: Offtopic Primitives OS


von Paul S. (techpaul)


Lesenswert?

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
von Donni D. (Gast)


Lesenswert?

Fangt erstmal mit nem Bootloder an. Und Google spuckt zu OS Programming 
mehr aus, als du hier als Antwort finden wirst.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Linux Kernelsourcen ziehen, auspacken, lesen:
1.3GByte voller Spass, Sourcen, Dokumentation...

Gruss
WK

von Harry L. (mysth)


Lesenswert?

Oder back to the roots...

MS-DOS:
https://github.com/Microsoft/MS-DOS

von Michael E. (cuby)


Lesenswert?

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

von Axel H. (axhieb)


Lesenswert?


von (prx) A. K. (prx)


Lesenswert?

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
von Paul S. (techpaul)


Lesenswert?

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

von ... (Gast)


Lesenswert?

Minix wurde doch als Lehrbetriebssystem entwickelt:

https://de.wikipedia.org/wiki/Minix_(Betriebssystem)

Das wäre doch ein Einstiegspunkt.

von Michael E. (cuby)


Lesenswert?

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
von (prx) A. K. (prx)


Lesenswert?

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/

von Paul S. (techpaul)


Lesenswert?

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
von Software Interupt (Gast)


Lesenswert?

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.

von Codix (Gast)


Lesenswert?

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.

von Florian S. (sevenacids)


Lesenswert?

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
von bunzen (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

Harry L. schrieb:
> MS-DOS:
> https://github.com/Microsoft/MS-DOS

DOS kann kein Multi-Tasking, das würde heute niemand mehr 
"Betriebssystem" nennen.

von Thomas K. (rlyeh_drifter) Benutzerseite


Lesenswert?

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
von Johannes S. (Gast)


Lesenswert?

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.

von Bastler (Gast)


Lesenswert?

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

von Einer K. (Gast)


Lesenswert?

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/

von soso (Gast)


Lesenswert?

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.

von soso (Gast)


Lesenswert?

Paul S. schrieb:
> Ich wäre unheimlich dankbar über ein Stückchen kommentierten Code

Hehe

von soso (Gast)


Lesenswert?

Ach ja:
Programmierbeispiele für USB/COM über Chips von FTDI gibts im Internet 
zuhauf. FTDI ist das Stichwort.
Viel Erfolg.

von soso (Gast)


Lesenswert?

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

von Wilhelm M. (wimalopaan)


Lesenswert?

Wenn C++, dann

http://www.includeos.org/

von georg (Gast)


Lesenswert?

soso schrieb:
> Programmierbeispiele für USB/COM über Chips von FTDI gibts im Internet
> zuhauf. FTDI ist das Stichwort

Auch für MSDOS?

Georg

von Christopher J. (christopher_j23)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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
von Percy N. (vox_bovi)


Lesenswert?

Der größte Mangel des Ursprungsposts besteht darin, dass er eine Stunde 
zu früh veröffentlicht wurde.

von (prx) A. K. (prx)


Lesenswert?

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.

von G. P. (gpnt)


Lesenswert?

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