Primitives OS

OP #5584821
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
#5584843
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
#5584847
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.
#5584852
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
OP #5584862
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
Gast #5584896
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.
#5584898
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.
Persönliche Seite #5584970
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! ;-)
Gast #5585026
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/
Gast #5585050
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.
Gast #5585081
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;-)
#5585263
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.
#5585273
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren