Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: Mali 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.
-
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)
-
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.
-
Danke für den Tipp.
Ich hab jetzt das gemacht was du mir gasagt hast. Wie geht es denn jetzt weiter?
-
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.
-
Bisher hab ich das mit cmd nicht hinbekommen.
Wär nett wenn mir nochmal jemand helfen könnte. :|
-
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.
-
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
-
Dann musst du nasm installieren und die PATH Variable richtig setzen, damit Windows die nasm.exe auch findet.
Für letzteres siehe zB hier (http://www.computerhope.com/issues/ch000549.htm):
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
-
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.
-
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).
-
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
-
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.
-
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 (http://sourceforge.net/project/showfiles.php?group_id=12580&package_id=17475) finden.
-
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. :-)
-
AFAIK könnte es unter Windows auch "nasmw" statt "nasm" heißen...
-
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.