Autor Thema: [Erledigt] Probleme mit Siblo  (Gelesen 9993 mal)

Philipp9494

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« am: 29. August 2008, 22:40 »
Hallo.

Also ich bin ganz neu im OS-Programmieren, habe aber schon einige Kenntnisse in C++, etc. gesammelt...

Ich m�chte auf meinen 4GB USB-Stick mit C programmieren, daf�r habe ich mir Siblo also Bootloader installiert. ( http://simplux.org/siblo/ )

Danach wollte ich einen einfachen Test mit ASM machen daf�r diesen Code:
mov ax, 1000h
mov ds, ax
mov es, ax

start:� � � � � � � �; Hier f�ngt unser eigentliches "Betriebssystem" an
mov si, nachricht� � ; Wir zeigen einfach nur einen String an
call schreiben� � � �; "schreiben" gibt den String am Bildschirm aus

call lesen� � � � � �; "lesen" wartet bis eine Taste gedr�ckt wurde
jmp reset� � � � � � ; Danach wird die Funktion "reset" aufgerufen

nachricht db "Eine Taste dr�cken, um neu zu starten...",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

Welchen ich dann mit diesen Befehlen unter Linux kompilierte:
nasm -f bin -o kernel.bin kernel.asm

So nun boote ich von meinen Stick und soweit geht noch alles. Nun w�hle ich aus, was es booten soll: kernel.bin
Dann steht dort: Loading kernel (kernel.bin). Ja das steht ewig dort.. Wenn ich nun eine Taste dr�cke, restartet er.. So wie im Code, nur ohne Textausgabe..

Wenn ich nun diese Zeile auskommentiere:

jmp reset
restartet er nicht... wieso gibt er mir bitte keinen Text aus??

Ich hoffe jemand kann mir helfen..

Mfg
Philipp
« Letzte Änderung: 12. October 2008, 18:28 von Philipp9494 »

Termite

  • Beiträge: 239
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 30. August 2008, 16:28 »
moin

das könnte daran liegen, das dort von wo deine rotine versucht deinen Text zu lesen der text nicht liegt.

Du setzt das Data und das Extra segment auf 0x1000:0000 wer sagt dir, das dein kernel oder bootsektor dort auch hinkopiert wurde? verusch es mal mit 0x07c0 das ist die position, an die das bios einen bootsektor kopieren würde. ein bootsektor von windows geht normalerweise auch davon aus.

stack initallisieren wäre auch noch ein punkt für den anfang, den man mal beheben sollte und ein expliziter sprung in die start rotine, damit dein code segment auch richtig initallisiert wird. für den anfang aber noch nicht notwendig

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 30. August 2008, 17:07 »
Wenn du keine Objectformat verwendest, wie z.B. ELF, dann benötigt der Assembler die Offset-Adresse, an der der code nacher laufen soll, damit alle adressen Richtig berechnet werden können.
Wenn du der Code also nach 0x1000:0x0000 kopiert und dort gestartet wird musst du am anfang der asm-datei das hier einfügen:
[ORG 0x0000]
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

Philipp9494

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 30. August 2008, 19:26 »
So mein neuer Code:

[ORG 0x0000]

mov ax, 07c0h ; <------ Das hier wurde mit 1000h sowie mit 07c0h getestet.
mov ds, ax
mov es, ax

start:               ; Hier fängt unser eigentliches "Betriebssystem" an
mov si, nachricht    ; Wir zeigen einfach nur einen String an
call schreiben       ; "schreiben" gibt den String am Bildschirm aus

call lesen           ; "lesen" wartet bis eine Taste gedrückt wurde
;jmp reset            ; Danach wird die Funktion "reset" aufgerufen

nachricht db "Eine Taste drücken, um neu zu starten...",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

Also derzeit geht es noch nicht.. Also nicht so wie ich will. Wenn ich ein paar Tasten drücke, dann kommen 3 Smilies..

Wegen Stack etc. initialisieren, wie soll ich das machen, ich bin leider noch Anfänger, und weis das noch nicht..  :cry: :roll:

MfG
Philipp

Philipp9494

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 04. October 2008, 13:00 »
Hallo.

Nachdem ich mein Problem noch immer nicht gelöst habe, würde ich fragen, ob irgendwer einen Code eines nicht-GUI-OS hat, der einen Kernel auf einem Fat32-formatierten Datenträger lädt und ausführt!?

Liebe Grüße
Philipp

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #5 am: 04. October 2008, 14:58 »
Wie wärs mit grub. Im wiki (oder allgemein im Internet) sind einige Tutorials für einen multiboot-kompatiblen C-Kernel (oder auch Cheebis Tutorial) und auch eine Anleitung wie man das auf einem USB-Stick installiert. Grub hat keine Probleme mit FAT32 und OS die grub verwenden findest du auch wie Sand am Meer.
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

Philipp9494

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 04. October 2008, 15:04 »
ich habe es auch schon mal mit grub probiert..

um jetzt das "Programm" vom Tutorial (http://www.cheebi.de/c-kernel-tutorial.pdf) in Grub zu laden, muss ich da den Bootloader dann hinzufügen oder reicht nur der Kernel??
Diese Bin-Datei dann einfach auf den USB-Stick schreiben und in menu.lst eintragen, oder?!

MfG
Philipp

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #7 am: 04. October 2008, 15:07 »
Ehm sorry, das war ne Falschinformation. Cheebis Tutorial verwendet garkein Grub.
edit: In seinem Tutorial wird aber erklärt wie du dir ein Image erstellst, aber es ist kein FAT32 Dateisystem.
« Letzte Änderung: 04. October 2008, 15:14 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

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #8 am: 04. October 2008, 15:16 »
ich habe es auch schon mal mit grub probiert..
Und inwiefern hat das nicht hingehauen?
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

Philipp9494

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 04. October 2008, 15:54 »
nun ja, ich habe den kernel gestartet, und es hat je nachdem was ich geändert habe nichts oder zwei Smilies ausgegeben...

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #10 am: 04. October 2008, 16:01 »
Wenn du deinen Code zeigst, könnte man dir da vielleicht helfen. Zumindest halte ich grub für die beste Möglichkeit.
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

Philipp9494

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 04. October 2008, 16:11 »
ich habs mit dem code aus dem ersten Beitrag in diesem Thema probiert.
Nun ja,..

MfG
Philipp

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #12 am: 04. October 2008, 16:20 »
Schau dir mal entsprechende Tutorials an, du musst einen Multiboot-kompatiblen Kernel machen und du befindest dich dann im Protected-Mode, nicht mehr im Realmode...
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

Philipp9494

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 12. October 2008, 14:58 »
so.

nun habe ich alles was da (http://www.cs.vu.nl/~herbertb/misc/writingkernels.txt) drinnen steht befolgt.. Es steht aber nur dort Lade Grub 1.5 oder so. Den Kernel lädt es aber leider nicht..

Hat es schon mal jemand ausprobiert, und kann mir veraten warum es nicht funktioniert?

//edit: Das komische ist aber, dass es unter qemu funktioniert ?!

Mfg
Philipp
« Letzte Änderung: 12. October 2008, 15:27 von Philipp9494 »

Philipp9494

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 12. October 2008, 16:33 »
nochwas, ich mache das aber mit einem 4 GB USB Stick, da ich auf meinem Laptop kein Diskettenlaufwerk habe..

Philipp9494

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« Antwort #15 am: 12. October 2008, 18:27 »
So.. nun hab ich es geschafft. Habs auf eine Partition geschrieben und tadaaa!

 

Einloggen