Heute ist ein denkwürdiger Tag da ich bisher mein längstes aber dennoch längst nicht fertiges Tutorial veröffentlichen werde. Über 50 Seiten habe ich in den letzten Monaten zusammengeschrieben und zwar über das Thema “Wie baue ich mir mein eigenes Betriebssystem?”.
Nein es geht nicht darum sich ein OS mit Linuxkernel “zusammen zu klicken”. Wir fangen hier echt bei 0 an (Mit Ausnahme von GRUB). Ich hatte damals schon 1-2 Artikel veröffentlicht in denen ich ausschließlich mit Assembler gearbeitet habe. Dieses Tutorial konzentriert sich hauptsächlich auf die Sprache C und setzt nur genau dann auf Maschinencode wenn es nicht anders geht.
Leider hänge ich im Moment etwas an der virtuellen Speicherverwaltung (Paging, Heaps, Memory Allocation) und schreibe deswegen die nächste Zeit nicht weiter. Da ich euch die bisherige Arbeit nicht vorenthalten will biete ich sie heute als Beta-Version (0.3) zum Download an.
Das Tutorial ist in mehrere Schritt aufgeteilt. Jeder Schritt ist als Source Code Ordner in dem Zip-Paket enthalten, sodass ihr die Kapitel beliebig überspringen könnt.
Solltet ihr Gefallen an meinem Geschreibsel finden würde ich mich sehr über Feedback freuen 🙂 Und nun, viel Spaß beim Lesen.
Tutorial: WritingAnOs.zip
Ist in dem zip die link.ld? und wenn ja:
Kannst du das Archiv nochmal hochladen?
Wenn nein: der linker meckert immer über ein fehlendes link.ld. Mach ich was falsch?
Hi, sorry da ist mir das Archiv im Filesystem verruscht. Japp, die link.ld ist im Archiv, probiers einfach nochmal runterzuladen, sollte jetzt gehen!
Ok, Danke.
Nächstes Problem:
Immer wenn ich jetzt versuche zu linken, meine der linker:
start.o:start.o:(.text+0x29): undefined reference to '_main'
Ich bin nach Schritt 3 und Kompilieren geht ohne Probleme?
Ich versteh den Fehler an sich auch nich, denn du schreibst ja, dass der Compiler ein ‘_’ vor jede Funktion und so schreibt.
Von daher müsste der Linker die Main doch eigentlich finden?
Hi lars, das ist ein schönes Problem zum Googlen! Wenn ich dir alles vorsage bleibt ja der Lerneffekt aus! 😉
Bei mir kommt bei jeder Batch-Datei “Der Befehl (befehlsname) ist entweder falsch geschrieben oder konnte nicht gefunden werden”.
Hi Max, dann hast du deine Path-Variable scheinbar fälschlicherweise verändert, lies mal hier nach:
http://knowledgebase.cc/software/microsoft/windows/der-befehl-ist-entweder-falsch-geschrieben-oder-konnte-nicht-gefunden-werden/
Viel Erfolg weiterhin!
Immer wenn ich die build.bat starte steht da: Der Befehl “nasm” ist entweder…” Ich habe wirklich schon alles versucht, aber ich kenne mich halt kaum mit NASM aus. Kannst du bitte ein Tutorial machen wie man NASM öffnet? Das bekomm ich auch nicht hin ^^
Hi Tobias, wenn du “Der Befehl * ist entweder…” in Google eingibst, erfährst du erstmal wie er ganz lautet. Dann wirst du sehen, dass NASM nicht gefunden wird. Das kann daran liegen, dass du es nicht installiert hast, oder den Pfad zu NASM nicht in deinen Systemvariablen bekanntgegeben hast. Und Dir ein Tutorial erstellen brauche ich nicht, die gibt’s nämlich zu Tausenden im Internet, u.a. auch auf der offiziellen Seite von NASM unter dem Punkt Install: http://www.nasm.us/doc/nasmdoc1.html
Hi,
danke für das tolle Tutorial.
Ich habe das problem, das wenn ich BFI öffne, es sich sofort wieder schleißt….
ich habe kompitilitätsmodus auch schon ausprobiert nichts hilft was kann ich da machen?
mfg
Niklas
Hey Niklas, versuch’s mal mit WinImage (http://www.winimage.com/) oder mit einer weiteren Alternative, da sollte es im INet einiges geben. Du könntest ebenso die komplette Testumgebung in eine VM auslagern und CD-Images verwenden, das ist noch einfacher. Viel Erfolg!
Ich habe dass Problem dass mein Virtual PC sagt dass es unbedingt so eine spezielle größe für ein Disketten Image haben muss, anders lässt sich dass nicht draufspielen, ich habe schon gegoogelt aber ich finde einfach nichts. Kannst du mir da weiterhelfen?
(Benutze den VPC von Microsoft)
Oh Sorry ich meinte damit dein altes Tutorial mit Assembler <.<
Kannst du mir trotzdem helfen?
Hi Manuel,
mit VPC hab ich leider keine Erfahrungen, aber versuch’s doch mal mit dem VMWare Player, der ist ebenso kostenlos und stellt sich nicht so an 🙂 Viel Erfolg! Btw: Ich würde dir von dem alten Assembler-Tutorial abraten, schau dir doch mal das neue an!
Na, ich kann schon seit paar Jahren Assembler und möchte auch dabei bleiben 😉 Da kenne ich mich aus und kann Fehler selber beheben.
Und danke mit demVMWare geht es jetzt!
Hi Manuel, wie du möchtest 🙂 Schön, dass es jetzt geht.
Hallo,
vielen Dank für das gute Tutorial. Das hat mir schon sehr viel weitergeholfen! Ich habe in den letzten Tagen schon mehrere andere Tuts durchgelesen, aber Deins war bis jetzt echt das Beste! Wäre echt schön, wenn du das noch fertig schreiben könntest.
P.S. Auf S.37 ist Dir ein kleiner Fehler unterlaufen. Ich zitiere: “Do you remember that we wrote a simple driver for the VGA controller? We will now do the same for the keyboard which is mostly converting scan codes to ASCII (Abkürzung) characters that we can understand” Wobei die Betonung auf “(Abkürzung)” liegt XD. Gutes Englisch 😀
Hi Lukas, danke für das Lob. Das Tutorial werde ich leider nicht mehr weiterschreiben, dafür bin ich zu lange raus 😉 Ich würde dir aber das Buch “Operation Systems Design and Implementation” ans Herz legen, dort bekommst du die Inhalte relativ gut erklärt.
Ok,
kann ich gut verstehen,
das Buch wird ich mir auf jeden Fall mal anschauen 🙂
Ist das Projekt open source? Also kann ich es verbreiten und benutzen wie ich will, oder ist es mit copyright rechten verbunden?
Hi Lucas, ein Verweis darauf, wo du die Inhalte her hast, fände ich schon schön. Was du dann mit dem Quelltext machst, bleibt absolut dir überlassen.
Hey,
wenn ich die build.bat starte kommt dass der Befehl “ld” nich gefunden wurde, ich glaub das liegt daran dass ich den path für ld noch nicht gesetzt hab. ich weis aber auch net wohin ich den path dafür setzn muss also zu welchem program der befehl gehört. hoffe du kannst mir helfn
Hallo Lukas, ld ist der Linker, der mit dem Compiler von DJGPP ausgeliefert wird. Du musst also entsprechend dafür sorgen, dass der Ort, an dem der Linker liegt systemweit bekannt ist. Wie du das machst ist recht gut und häufig im Internet beschrieben. Einfach mal googlen.
Ich kann das Tutorial nicht herunderladen
Hi Noah, scheinbar ist der Download beim letzten WordPress-Update verschütt gegangen. Ich schaue mal, dass ich das PDF wiederfinde.
Wird es noch eine überarbeitete version geben? Da man ja zum Beispiel BFI nicht mehr downloaden kann. Außerdem funktioniert das GRUB4DOS auf 64 bit Betriebssystemen nicht…
Jedoch schätzte ich das selbst wenn ich das Tutorial deswegen nicht ausprobieren kann, es super wäre.
LG
Markus
Hi Markus,
nein, tut mir leid, ich hab mich schon ewig nicht mehr mit dem Thema beschäftigt.