Autor Thema: Kann mir mal jemand helfen  (Gelesen 10715 mal)

Mali

  • Beiträge: 7
    • Profil anzeigen
Gespeichert
« am: 29. April 2009, 18:04 »
Hallo,
ich möchte auch mein eigenes System schreiben. Hab auch schon den artikel "OS-Dev für Einsteiger "gelesen, bloß versteh ich kein Wort :?
Wär nett wenn mir mal jemand helfen könnte.

chris12

  • Beiträge: 134
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 29. April 2009, 18:20 »
1. du muss dir n assembler besorgen z.B. NASM (google.de).
2. wenn du linux benutzt geht es mit dd wenn win dann google man nach rawwrite
3. copier dir den code vom bootloader:
boot.asm

    org 0x7C00 ; Unsere Startadresse
 
    ; -----------------------------------------
    ; Unser Bootloader
    ; -----------------------------------------
 
    jmp 0x0000:start
    start:
                    ; Erst brauchen wir einen Stack.
    cli             ; Keine Interrupts!
    mov ax, 0x9000  ; Stackadresse
    mov ss, ax      ; SS = 0x9000 (unser Stack)
    mov sp, 0       ; SP = 0x0000  (der Stackpointer)
    sti             ; Interrupts zulassen
 
    ; Bootlaufwerk aus DL speichern
    mov [bootdrv], dl
 
    ;Lade unseren Kernel
    call load
 
    ;Springe zu diesem Kernel
    mov ax, 0x1000 ; Die Adresse des Programms
    mov es, ax     ; Segmentregister updaten
    mov ds, ax
    jmp 0x1000:0x0000
 
    ; ----------------------------------------------
    ; Funktionen und Variablen
    ; ----------------------------------------------
 
    bootdrv db 0 ;Das Bootlaufwerk
    loadmsg db "Laden...",13,10,0
 
    ; Einen String ausgeben:
    putstr:
    lodsb             ; Byte laden
    or al,al
    jz short putstrd  ; 0-Byte? -> Ende!
 
    mov ah,0x0E       ; Funktion 0x0E
    mov bx,0x0007     ; Attribut-Byte (wird nicht benötigt)
    int 0x10          ; schreiben
    jmp putstr        ; Nächstes Byte
    putstrd:
    retn
 
    ; Lade den Kernel vom Bootlaufwerk
    load:
    ; Diskdrive reset (Interrupt 13h, 0)
    mov ax, 0          ; Die gewünschte Funktion (reset)
    mov dl, [bootdrv]  ; Dieses Laufwerk ist gewünscht
    int 13h            ; Den Interrupt ausführen
    jc load            ; Geht nicht? -> Noch mal!
 
    load1:
    mov ax,0x1000      ; ES:BX = 0x10000
    mov es,ax
    mov bx, 0
 
    ; Sektoren lesen (Interrupt 13h, 2)
    mov ah, 2         ; Funktion 2 (Lesen)
    mov al, 5         ; Lese 5 Sektoren
    mov cx, 2         ; Cylinder=0, Sector=2
    mov dh, 0         ; Head=0
    mov dl, [bootdrv] ; Laufwerk aus Vorgabe
    int 13h           ; ES:BX =  Daten vom Laufwerk
    jc load1          ; Fehler? Noch mal!
    mov si,loadmsg
    call putstr       ; Meldung ausgeben
    retn
 
    times 512-($-$$)-2 db 0   ; Dateilänge: 512 Bytes
    dw 0AA55h                 ; Bootsignatur
 
4. gieb in bei win in cmd bzw bei linux ins terminal ein
nasm -f bin -o boot.bin boot.asm
5. kopier dir den test-kernel-code:
kern.asm

    ; ---------------------------------------------------
    ; Unser Kernel
    ; ---------------------------------------------------
 
    mov ax, 0x1000 ; Segmentregister updaten
    mov ds, ax
    mov es, ax
 
    start:
    mov si, msg
    call putstr   ; Schicke Bootmessage :)
 
    mov si,msg_boot
    call putstr   ; Noch eine Message :D
 
    call getkey   ; Warte auf einen Tastendruck
    jmp reboot    ; Reboot
 
    ; -------------------------------------------------
    ; Funktionen und Variablen
    ; -------------------------------------------------
 
    msg db "Herzlich Willkommen zu StupidOS 0.1",13,10,0
    msg_boot db "Beliebige Taste druecken...",10,0
 
    ; Stringausgabe
    putstr:
    lodsb            ; Byte laden
    or al,al
    jz short putstrd ; 0-Byte? -> Ende!
    mov ah,0x0E      ; Funktion 0x0E
    mov bx,0x0007    ; Atrribut-Byte
    int 0x10         ; schreiben
    jmp putstr       ; nächstes Byte
    putstrd:
    retn
 
    ; Warte auf einen Tastendruck
    getkey:
    mov ah, 0 ; Funktion 0
    int 0x16  ; Ausführen
    ret
 
    ; Rebooten.
    reboot:
    jmp 0xffff:0x0000
 
6. wieder in cmd oder terminal
nasm -f bin -o kern.bin kern.asm
7. unter linux:
cat boot.bin kern.bin>OS.img
unter win
copy boot.bin+kern.bin OS.img
8. diskette ins laufwerk und unter linux:
sudo dd if=OS.img of=/dev/fd0
(muss nämlich mit adminrechten sein der befehl)(musst dein passwort eingeben)
unter win
rawwrite(win) OS.img
(das 'win' in () weil ich nicht weiss wie deine exe heist musst sehen)

tada du hast ein os auf diskette
du solltest dir zudem mal die ausgaben des lowlevel magaziens ansehen, die sind echt zu empfehlen

(alle codes sind von Mastermesh aus ausgabe eins)
OS? Pah! Zuerst die CPU, dann die Plattform und _dann_ das OS!

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 29. April 2009, 19:18 »
ich möchte auch mein eigenes System schreiben. Hab auch schon den artikel "OS-Dev für Einsteiger "gelesen, bloß versteh ich kein Wort :?
Wenn du wirklich kein Wort verstehst, solltest du ernsthaft überlegen, ob ein Betriebssystem wirklich das richtige für dich ist. Wenn du nur an einer bestimmten Stelle hängst, wäre es hilfreich, wenn du sagst, welche das ist.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Mali

  • Beiträge: 7
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 29. April 2009, 19:45 »
Danke für den Tipp.
Ich hab jetzt das gemacht was du mir gasagt hast. Wie geht es denn jetzt weiter?

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 29. April 2009, 19:55 »
Du suchst dir irgendein Feature, das dir noch fehlt (der Artikel OS-Dev "für Einsteiger", den du genannt hast, könnte dir dabei helfen) und bastelst es rein. OS-Dev hat was damit zu tun, seine eigenen Ideen umzusetzen, also gibt es keine allgemeingültigen Anweisungen - nur Tips, und die stehen im Wiki.

Wenn du irgendwas bestimmtes machen willst und die Umsetzung nicht hinbekommst, kannst du sehr viel konkretere Fragen stellen und wirst sehr viel nützlichere Antworten erhalten.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Mali

  • Beiträge: 7
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 01. May 2009, 11:45 »
Bisher hab ich das mit cmd nicht hinbekommen.
Wär nett wenn mir nochmal jemand helfen könnte. :|

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #6 am: 01. May 2009, 12:02 »
Was meinst du mit "cmd"? Und was hast du daran nicht hinbekommen? Welche Fehlermeldung kommt oder was genau hast du nicht verstanden?

Wenn du Hilfe willst, dann musst du wie taljeth schon sagt genauer sagen wo es welchen Fehler gibt und/oder was du nicht verstanden hast.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Mali

  • Beiträge: 7
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 01. May 2009, 12:52 »
Mit cmd meine ich:
4. gieb in bei win in cmd bzw bei linux ins terminal ein
Code:
nasm -f bin -o boot.bin boot.asm

Wenn ich das eingebe, kommt die Fehlermeldung:
Der Befehl nasm ist entweder falsch geschrieben oder konnte nicht gefunden werden

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #8 am: 01. May 2009, 12:57 »
Dann musst du nasm installieren und die PATH Variable richtig setzen, damit Windows die nasm.exe auch findet.

Für letzteres siehe zB hier:
Zitat
The path is now managed by Windows 2000 / Windows XP and not the autoexec.bat or autoexec.nt files. To change the system environment variables, follow the below steps.

   1. From the desktop, right-click My Computer and click properties.
   2. In the System Properties window, click on the Advanced tab.
   3. In the Advanced section, click the Environment Variables button.
   4. Finally, in the Environment Variables window, highlight the path variable in the Systems Variable section and click edit. Add or modify the path lines with the paths you wish the computer to access. Each different directory is separated with a semicolon as shown below.

      C:\Program Files;C:\Winnt;C:\Winnt\System32
« Letzte Änderung: 01. May 2009, 12:59 von bluecode »
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Mali

  • Beiträge: 7
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 02. May 2009, 19:47 »
Ich stecke wieder beim assemblieren.:cry:
ICh weis nicht wo ich folgenden Code eingeben soll:
nasm kernel.asm -f bin -o kernel.bin Außerdem weis ich nicht wo ich mir BOCHS runterladen soll.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 02. May 2009, 19:58 »
In deine Shell. Unter Windows (ich nehme an, daß das dein OS ist, sonst wüßtest du es wahrscheinlich) ist das üblicherweise cmd.exe (auch bekannt als "MS-DOS-Eingabeaufforderung" oder sowas ähnliches, hab kein Win hier).
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

chris12

  • Beiträge: 134
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 02. May 2009, 21:04 »
taljeth hat vollkommen recht das ding heißt cmd.exe, nebenbei du kannst auch command.com nehemen, aber cmd.exe is besser.
du drückst bei gedrückter Windows-Logo-Taste (zwischen "Alt" und "Strg") auf "R", dann giebst du cmd.exe (oder command.com) und dann
nasm kernel.asm -f bin -o kernel.bin
OS? Pah! Zuerst die CPU, dann die Plattform und _dann_ das OS!

Mali

  • Beiträge: 7
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 03. May 2009, 10:20 »
Das hab ich schon probiert, aber da kommt folgende Fehlermeldung:
Der Befehl nasm kernel.asm -f bin -o kernel.binist entweder falsch geschrieben oder konnte nicht gefunden werden :|
Außerdem weis ich nicht wo ich mir BOCHS runterladen soll.


FreakyPenguin

  • Administrator
  • Beiträge: 301
    • Profil anzeigen
    • toni.famkaufmann.info
Gespeichert
« Antwort #13 am: 03. May 2009, 10:39 »
Hm, du solltest dir vielleich erstmal ein einfaches DOS-Tutorial ansehen...

Am besten packst du die nasm.exe, die du von der entsprechenden Webseite geholt hast, ins selbe Verzeichnis wie diene kernel.asm. Wenn du dann deine Eingabeaufforderung geöffnet hast, musst du erstmal ins richtige Verzeichnis wechseln. Das geht in etwa so:
cd c:\verzeichnis\mit\meinem\tollen\os
Danach solltest du den Assembler aufrufen können.

Aber, wie schon erwähnt, solltest du dich wohl erstmal ein bisschen mit den Grundlagen auseinandersetzen, sonst fürchte ich dass das nichts wird. Es bringt ja auch nichts wenn wir dir hier jede Zeile 1:1 diktieren müssen.

Und bochs müsstest du hier finden.

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #14 am: 03. May 2009, 11:01 »
Alternativ kann man auch die PATH Variable anpassen, wie oben beschrieben, würde ich mal schätzen. Dann kann man sogar in Unterordnern "nasm" nutzen. :-)
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #15 am: 03. May 2009, 13:51 »
AFAIK könnte es unter Windows auch "nasmw" statt "nasm" heißen...

DaCodaaa

  • Gast
Gespeichert
« Antwort #16 am: 11. July 2009, 00:47 »
nein wenn man sich nasm runterläd und installiert (irgendwo auf c:\) bekommt man ein kleines nasm.bat auf den Desktop.
wenn man das ausführt kommt man automatisch in den Ordner von nasm  :wink:.
Dann muss man nur nasm angeben und die dateien die man assemblieren will (z.B nasm -o C:\Wasweißichwo\kernel.bin C:\Wasweisichwo\kernel.asm).
Dann sollte im Ordner C:\Wasweißichwo eine datei kernel.bin aus der Datei kernel.asm gemacht werden.

 

Einloggen