Neuling sucht hilfe



  • Hiho ich hatte schon oft das verlangen danach ein eigenes OS zu Programmieren.
    Dachte mir naja so schwer kanns ja nicht sein
    ich habe einige C grundkenntnisse und mich über C++ schon etwas shlaugemacht (auch wenn das schon länger her ist)
    HTML codes ist für mich das geringste problem. naja dachte mit den kenntnissenkomme ich weiter. Doch leider sind meine kenntnisse nicht einmal ausrechend um das ganze fachchinesisch zu verstehen was in den touturials angewand wird.

    Ich komme mit dem Assembler nicht klar. Bzw ich habe kein schimmer was ich dem bitte sagen soll.
    Klar PC-an
    pcu dreh
    16 bit
    cpu lad bios
    bios ende
    cpu stopp
    32 bit
    Betriebssystem abspielen.

    Ab dann läuft halt nur noch das programmierte betriebssystem.

    Nun nur noch die frage was sind das für befehle für den assembler?
    Sehe ich das richtig... ich kann eigl nur windows etwas abändern oder linux usw.
    weil ich kann dem pc ja nichts eingeben was der nicht versteht.

    was ich daran echt doof finde ist, dass ich eigl alles nachfragen muss
    somit könntet ihr das gleich schreiben schickt mir den code und ich füge es ein.

    Klar so lerne ich es da ich den code sehe und die codes den befehlen zuorden kann, aber das ist ja nicht sinn und zweck des ganzen.

    Also ich habe da etwas zusammengeschrieben , wo ich nich tweiß, ob dies Assembler oder betriebssystem sein soll (denke aber assembler)
    das ist schon ca 2 monate alt, ich weiß nicht ob es fehlerfrei ist
    es sind nur befehle die ich kannte bzw gegoogelt habe^^

    aber ich würde es gerne wirklich lerne und nicht nur abkupfern,
    wenn ihr also etwas geduld und interesse daran habt mir zu helfen würde ich mich freuen!



  • hier meine kleiner versuch

    [BITS 16]
    [global fromlinker]
    [extern _main]

    fromlinker:

    xor ax, ax ; set up segments
    mov es, ax
    mov ds, ax
    mov ss, ax
    mov sp, ax

    start:
    mov si, boot
    call schreiben

    mov si, boot2
    call schreiben

    jmp cKernelMode

    call lesen
    jmp reset

    boot db "Boot... KERNEL STAGE",13,10,0
    boot2 db "Starting hackOS...",13,10,0
    boot3 db "Entered CKERNEL Mode...",13,10,0

    schreiben:
    lodsb
    or al, al
    jz short schreiben_d
    mov ah, 0x0E
    mov bx, 0x0007
    int 0x10
    jmp schreiben

    schreiben_d:
    retn

    lesen:
    mov ah, 0
    int 016h
    ret

    reset:
    db 0Eah
    dw 0000h
    dw 0FFFFh

    [BITS 32]

    cKernelMode:

    mov ax, 0x10
    mov ds, ax ; data descriptor --> data, stack and extra segment
    mov ss, ax
    mov es, ax
    xor eax, eax ; null desriptor --> FS and GS
    mov fs, ax
    mov gs, ax
    mov esp, 0x200000 ; set stack below 2 MB limit

    call _main ; ->-> C-Kernel
    jmp reset

    wer fehler findet bitte nicht behalten, sondern abgeben^^

    aso ja wichtig ist das nun win oder linux ähnlich??^^



  • Fang am besten mal hier an zu lesen: http://www.lowlevel.eu/wiki/OS-Dev_für_Einsteiger. Mein Eindruck ist, dass du dich erstmal ein bisschen mit den theoretischen Grundlagen befassen solltest, bevor du dich ans Coden machst.

    Hast du deinen Code denn überhaupt mal ausprobiert? Das sieht wie ein halblebiger Bootloader aus, der versucht, vom Real Mode in den Protected Mode zu springen, ohne den Modus wirklich zu wechseln.



  • vielen dank für die schnelle antwort. ja ich sagte ja ich hab da i-wie kein plan was d a überhaupt so alles rein muss^^



  • hm gelesen und einiges verstanden ich muss mi da einige erläuterungen nochmls genau durchlesen um alles 100%ig zu verstehen^^


  • Mod

    ich hatte schon oft das verlangen danach ein eigenes OS zu Programmieren.

    So fing es bei mir auch an, benötigt oft mehrere Anläufe, da es einige ziemlich hohe Hürden gibt.

    Dachte mir naja so schwer kanns ja nicht sein

    Falsch gedacht! Es ist schwierig.

    Auf deinen Code werde ich nicht eingehen. So einfach geht das einfach nicht. In meinem Tutorial kannst Du das Stück für Stück aufbauen: http://www.henkessoft.de/OS_Dev/OS_Dev1.htm#mozTocId146145

    Beim Übergang vom RM zum PM sind einige Hürden zu überwinden. A20-Leitung, GDT, Einschalten PM mit far jmp: http://www.henkessoft.de/OS_Dev/OS_Dev1.htm#mozTocId917160

    Vor allem die GDT solltest Du verstehen: http://www.henkessoft.de/OS_Dev/OS_Dev1.htm#mozTocId398766

    Mut nicht verlieren und beharrlich bleiben. Mit try & error kommst du aber definitiv nicht weit. Dafür gibt es zuviele Spezifikationen, die es einzuhalten gilt. In meinem Tutorial (Teil 1) findest Du alle notwendigen Infos. Wikipedia liefert dir ebenfalls eine Menge Backgroundwissen. Dies hier könnte für dich auch interessant sein: http://www.fh-zwickau.de/doc/prmo/pmtutor/text/ (erklärt den PM)



  • Das tutorial von henkes kann ich dir sehr empfehlen. Is echt Top. Glaub auch du brauchst erst mal einiges an theoretischen wissen;-). Bei mir wars damals so ähnlich, allerdings habe ich mich einfach so ma mit asm beschäftigt neben c und C++. Bin dann mal iwann auf die os Entwicklung gekommen, ging nicht lange und ich gab auf. Aber seit einiger Zeit bin ich wieder dabei, weil ich einfach doch mein eigens os entwickeln. Ist zwar schwer, aber es macht riesig Spaß weil es so viel zu machen und zu erweitern gibt. Man lernt sehr viel, vor allem gibt es eg kein ende weilman immer weiter entwickeln kann. Bleib einfach am ball, es lohnt sich. Man freut sich richtig nach jedem fortschritt;-) umso weitet MSN kommt, umso mehr Spezifikationen muss man such lesen. Es ist eg ein unendliche Gebiet.

    LG freeG



  • Solange das Tutorial Irrwege empfiehlt und das erst später korrigiert (z.B. DJGPP; Makefiles, die wie Batchdateiene aussehen; Bootloader, die nicht mit Dateisystemen können) kann ich es nicht wirklich empfehlen. Im Prinzip baut man mit diesem Tutorial PrettyOS nach, inklusive aller Fehlentwicklungen und späteren Korrekturen, statt es gleich richtig zu machen - was noch dadurch begünstigt wird, dass das Tutorial dazu tendiert, fertigen Code zu liefern.

    Letztendlich eine gute Lektüre, aber als Tutorial würde ich es nicht benutzen.



  • hm also erstmal thx für die vielen links, da ahbe ich was zu lesen^^
    dieses Zwickau.de habe ich schon in Wiki gelesen als ich mich über die standartfunktionend er betriebssysteme und deren aufbau informierte, allerdings habe ich da nichts gefunden.

    Ach und ist klar das es sehr schwer ist, sonst würde unser freund billi nicht edliche millionen für dutzende programmierer zahlen^^
    Aber ich finde den gedanken sehr verlockend nach 1-2 jahren sagen zu können
    Haaa billi nicht 1€ ausgegeben und mein betriebssystem hat fast die gleichen funktionen wie deins xD bzw. auf mich zugeschnittene.

    Mal 2 fragen:
    1. diese link´s die tipps von euch für welches betriebssystem ist das?
    ist es dan ein linux oder win ähnliches system?
    gibt es da noch andere arten oder gibt es nur 3 "Arten" (linux, win, alle die, die selbstprogrammiert sind)

    2.Ich habe doch keine größenwahnvorstellungen, wenn ich mir vornehme
    auf meinem betriebssystem win als eigl. benutzeroberfläche zu nutzen,
    halt win programme laufen, ähnliche bedienung usw
    allerding möchte ich einige linux Programme nutzen können.
    z.B. mathe10 usw da solls ganz gute programme geben, die es für win nicht/noch nicht gibt. Laut meinem kollegen ^^

    also ich lese ersteinmal weiter ^^

    PS:
    hab da noch was vergessen...
    ist es eigl wichtig welches bios ich habe?
    sind das für verschiedene biosprogrammierungen verschiedene verknüpfungen bzw codes zu beachten?
    oder sollte man in meinem fall (es ist ein kack bios) son ding gleich mit einbeziehen?
    Geht sowas?
    ein bios vors betriebssystem zu setzen, dass das normale bios einfach deaktiviert lässt wegen priorität?

    ich glaube zwar nicht drann, aber man weiß ja nie ^^



  • Also das sieht ganz einfach aus^^

    http://www.youtube.com/watch?v=ZoIV_8YPEmI&feature=related

    klar der linux, aber das ging recht fix^^


  • Mod

    vor allem gibt es eg kein ende weilman immer weiter entwickeln kann

    Ja, das ist richtig. Die Community um PrettyOS findet ständig neue Felder, bei denen man quasi wieder bei Null beginnt. Allerdings hat man mit der Zeit ausreichend Expertise gesammelt, so dass man sich nicht mehr so "quält".

    @taljeth: Wie du mein Tutorial nennen möchstest, ist mir völlig schnuppe, solange es Leser gibt, denen es in der Praxis wirklich weiter hilft. Der Linker im DJGPP war breiter einsetzbar als der heutige. makefile ist ein großes Thema für den Build-Prozess, am Anfang jedoch weitgehend egal, Hauptsache es "baut". Was nutzt der genialste Weg, wenn sich in der Praxis nichts bewegt (außer #PF oder #GP). Die Tools sind zu Beginn ziemlich zweitrangig. Wichtig ist, dass der Leser schrittweise aufbauen kann.

    Das "Tutorial" in lowlevel kam erst später, wie auch die Serie bei brokenthorn.com, die sehr detailliert ist, aber leider auch hemmungslos fehlerbehafteten Code verwendet. Ich hatte diese beiden Unterlagen im März 2009 nicht, sondern durfte mit dem Tutorial von James Molloy, das auf Bran's Tutorial aufbaut, arbeiten. Ich würde es heute nur noch als Drittlektüre empfehlen.

    Ein Nachteil hat mein Tutorial allerdings: es ist in deutscher Sprache geschrieben. Dafür könnte ich mich wirklich ohrfeigen. 🙄



  • In den Punkten "DJGPP" und "Makefiles" hat taljeth recht, wobei ich den Punkt "Makefile" eher nebensächlich finde.

    Die Tools sind zu Beginn ziemlich zweitrangig.

    Naja, wenn sie ein Irrweg sind, wie DJGPP, die zahlreiche Probleme bereiten... leading-underscore, dass m.E. ein Relikt dieser DJGPP-Anfänge war, ist nur das jüngste Beispiel einer Altlast, die beseitigt werden musste. Ein anderes Problem ist, dass dein Tutorial auf Win x64 nicht benutzbar ist, weil DJGPP ein 16-bit-Programm ist, dass auf 64-bit-Windows nicht läuft.

    es ist in deutscher Sprache geschrieben. Dafür könnte ich mich wirklich ohrfeigen

    Dann würde die PrettyOS-Community vermutlich heute nicht existieren, weil sie längst in völliger Bedeutungslosigkeit versunken wäre. Wen interessiert das 1000ste englische Hobby-OS-Tutorial?



  • PC-Keks schrieb:

    Aber ich finde den gedanken sehr verlockend nach 1-2 jahren sagen zu können
    Haaa billi nicht 1€ ausgegeben und mein betriebssystem hat fast die gleichen funktionen wie deins xD bzw. auf mich zugeschnittene.

    Öhm, nein. Vergiss das einfach. Nach ein, zwei Jahren hast du bestensfalls eine funktionierende Textmodus-Shell, ein paar Hardwaretreiber und wenn du gut bist ein paar erste portierte Programme.

    PrettyOS ist jetzt seit knapp zwei Jahren in der Entwicklung (und zwar mit mehr als nur einem Programmierer) und soweit ich das beurteilen kann nicht annähernd produktiv benutzbar. tyndur wird seit über fünf Jahren entwickelt und ist zwar so ein bisschen benutzbar, aber sicher nicht mit einem OS wie Windows vergleichbar.

    1. diese link´s die tipps von euch für welches betriebssystem ist das?
    ist es dan ein linux oder win ähnliches system?
    gibt es da noch andere arten oder gibt es nur 3 "Arten" (linux, win, alle die, die selbstprogrammiert sind)

    Vielleicht solltest du dir erst noch ein paar Betriebssysteme anschauen, bevor du selber eins schreiben willst. "Windows" und "Linux" sind konkrete Betriebssysteme, keine Arten. Die Grundlagen sind überall gleich, und ab einem bestimmten Punkt können sich Konzepte in jedem OS unterscheiden.

    Wenn es "Arten" gibt, dann kann man vielleicht eher Mikrokernel vs. Monolith als so eine Unterscheidung nehmen.

    2.Ich habe doch keine größenwahnvorstellungen, wenn ich mir vornehme
    auf meinem betriebssystem win als eigl. benutzeroberfläche zu nutzen,
    halt win programme laufen, ähnliche bedienung usw
    allerding möchte ich einige linux Programme nutzen können.
    z.B. mathe10 usw da solls ganz gute programme geben, die es für win nicht/noch nicht gibt. Laut meinem kollegen ^^

    Doch, hast du. Wine versucht seit bald 20 Jahren, Windowsprogramme unter Linux ausführbar zu machen und es klappt inzwischen zwar in beeindruckend vielen Fällen, aber ist weit davon entfernt, perfekt zu sein. Da steht ein ganzes Team dahinter.

    Wie willst du, ohne jede Vorerfahrung, in ein bis zwei Jahren etwas besseres hinbekommen?

    ist es eigl wichtig welches bios ich habe?

    Geh einfach mal davon aus, dass es nicht allzu fehlerhaft ist. Du brauchst es sowieso nicht für viele Sachen.



  • Erhard, ich hoffe, du bist dir klar, dass ich nicht dich kritisiere, sondern nur das Tutorial. Mir ist schon klar, worauf du aufgebaut hast und warum das Tutorial so aussieht, wie es aussieht. Seine Stärke ist für mich, dass es auf manche Sachen recht detailliert eingeht und die Theorie dahinter ausführlich erklärt. Mit der Umsetzung bin ich dagegen nicht immer einverstanden. Das ist der Grund, warum ich es als Zweitlektüre gut finde, aber den Aufbau meines Kernels nicht daran orientieren würde. (Nichts anderes machst du ja mit James' Tutorial)

    Erhard Henkes schrieb:

    Ein Nachteil hat mein Tutorial allerdings: es ist in deutscher Sprache geschrieben. Dafür könnte ich mich wirklich ohrfeigen. 🙄

    Setz dich halt ein paar Stunden hin und übersetz es. Ist ja nicht so, dass das nicht mehr möglich wäre. Aber wie Mr X schon sagte, was dein Tutorial noch von der Masse abhebt ist eben, dass es deutsch ist und trotzdem weiter geht als nur einen Hello-World-Bootsektor zu beschreiben. Auf englisch wär es eins von vielen.


  • Mod

    In den Punkten "DJGPP" und "Makefiles" hat taljeth recht

    Wir verwenden den DJGPP nicht mehr inzwischen, also ist da etwas dran. Den 16/32 bit-Mix nimmt der moderne ld aber nicht. Sicher kein Hilight im "Tutorial". Vielleicht packe ich das nochmal an.

    Makefile nervt den Einsteiger früh genug, ist aber wichtig, da muss man leider durch. Dieser Punkt ist am Anfang allerdings zweitrangig.

    Das ideale Umfeld für den "Neuling" gibt es wohl einfach nicht. 😉



  • hm danke für die aufklärungen...

    da stellen scih i-wie immer mehr fragen...

    gesagt wurde Win und linux haben die selben Grundbausteine und unterscheiden sich lediglich in den befehlen, die für die ausführungen zuständig sind.
    - halt die unterschiede zwischen linux und win

    jetzt mal ganz leicht erklärt:
    ich kopiere mein win und füge in die stellen bei denen sich win von linux unterscheidet eine unterkategorie ein, die mir dann erlaubt linux anwendungen
    unter win abzuspielen.

    So stelle ich mir das vor, da bei einer 100% linux Programmierung diese programme laufen, das heißt die zeilen, die die programme und extras die man haben will zum laufen bringen laufen ja auf dem selben grundbaustein, das bedeutet die "Socklung" muss nicht geändert werden , es muss lediglich ein neuer slot eingerichtet werden, an dem an diese befehle anbringt.

    Oder sehe ich das falsch?

    es ist ja quasie wie der aufbau eines pc´s ich kann amd gtx usw anschließen, solange der gleiche grundbaustein verlangt wird.
    Klar die programme von win auf linux zubekommen ist schwerer wie anderesrum.
    Allerdings meine ich nur programme wie das amthe programm usw also keine spiele oder so^^


  • Mod

    siehe wine, Emulatoren (VBox, VMWare, Qemu, Bochs, ...)



  • PC-Keks schrieb:

    gesagt wurde Win und linux haben die selben Grundbausteine und unterscheiden sich lediglich in den befehlen, die für die ausführungen zuständig sind.
    - halt die unterschiede zwischen linux und win

    Kommt drauf an, was du mit diesen "Grundbausteinen" meinst. Beide erfüllen die gleiche Aufgabe, also haben beide zum Beispiel eine Speicherverwaltung und beide implementieren Multitasking und so weiter. Das tun sie aber sicher nicht auf die gleiche Art, sondern sie benutzen dazu unterschiedliche Konzepte. Und ein drittes Betriebssystem kann wieder andere Konzepte benutzen, die weder mit denen von Linux noch mit denen von Windows übereinstimmen.



  • PC-Keks schrieb:

    jetzt mal ganz leicht erklärt:
    ich kopiere mein win und füge in die stellen bei denen sich win von linux unterscheidet eine unterkategorie ein, die mir dann erlaubt linux anwendungen
    unter win abzuspielen.

    Wie gesagt, ja Win uns Linux haben Parallelen. Aber bis auf die Tatsache das beide im PM laufen und Paging angeschaltet haben hören die Gemeinsamkeiten schon auf. Die Implementierung ist total verschieden auch z.B. die Syscalls, vielleicht auch die Art diese dem Anwender zugänglich zu machen (Call-Gate, Interrupt, Sysenter,...)

    Und du kannst nicht erwarten einfach so mal eben die Linx/Win-GUI zu kopieren. Außerdem: Wie willst du Win kopieren? Disassemblieren geht nicht wirklich bei den tausenden von Dateien und MS würde es definitiv nicht gefallen wenn du ihr Win auseinandernimmst.

    Wie Erhard schon gesagt hat: Nimm nen Emulator und installier linux, mach vielleicht 'n paar gemeinsame ordener und dann hat sich das.

    Schon die Linux-Syscalls nachzubilden und nen ELF-Loader für die Programme zu schreiben dauert extrem Lange, obwohl die Linux-Sources angesehen werden können. Und für Win kriegst du nach Monatelanger Arbeit maximal nen halbwegs lauffähigen PE-Loader hin; die Syscalls sind sowieso unmöglich nachzubilden ohne den Code (und MS wird dir diesen garantiert nicht rausgeben).

    Wenn du wirklich ein OS schreiben willst (und keinen Win-Linux-Mix), dann nehm dir erreichbare Ziele vor, keine allround GUI und Unterstützung für zwei völlig verschiedene Programmtypen!

    Und noch kurz @Erhard: Dein Tutorial ist mal das einzige deutsche was sinnvoll ist und nicht nur 'n Text ausgibt, auf Tastendruck wartet und dann rebootet! Sich dafür zu ohrfeigen ist eigentlich nicht richtig. Freu dich lieber, das du als einziger in der Lage warst sowas auf deutsch und für jedemann verständlich zu machen!


  • Mod

    @Erhard: Dein Tutorial ist mal das einzige deutsche was sinnvoll ist und nicht nur 'n Text ausgibt, auf Tastendruck wartet und dann rebootet! Sich dafür zu ohrfeigen ist eigentlich nicht richtig. Freu dich lieber, das du als einziger in der Lage warst sowas auf deutsch und für jedemann verständlich zu machen!

    *** Freu *** 🙂


Anmelden zum Antworten