Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - Rev4n

Seiten: [1]
1
Lowlevel-Coding / Re: Bootloader der C Kernel lädt
« am: 08. November 2006, 21:21 »
FalShen hat mir via Messenger geholfen  :-)
2
Lowlevel-Coding / Re: Bootloader der C Kernel lädt
« am: 08. November 2006, 19:13 »
Ok hat sich alles erledigt  :-D
3
Lowlevel-Coding / Re: Bootloader der C Kernel lädt
« am: 08. November 2006, 15:44 »
Kann mir noch jemand eine beispiel-ASM (Die auf den Kernel aufgelinkt wird) Datei geben, die alle GRUB relevanten sachen enthält?
4
Lowlevel-Coding / Re: Bootloader der C Kernel lädt
« am: 08. November 2006, 12:22 »
Kann mir gegebenenfalls jemand einen Link zu einem guten GRUB Tutorials geben?
5
Lowlevel-Coding / Bootloader der C Kernel lädt
« am: 07. November 2006, 22:17 »
Da ich nun schon seit Tagen versuche, irgendwie irgendeinen Bootloader richtig einen C Kernel laden zu lassen, und da es mir nicht gelinkt schon fast verzweifel, wende ich mich jetzt einfach mal an die Community.

Ich möchte hier nun weniger meine kläglichen Versuche aufzählen, und irgendwie den Fehler in ihnen finden, sondern eher mal fragen:

Wie muss theoretisch ein ganz kleiner bootloader aussehen, wie lasse ich ihn am besten einen C Kernel laden, und wie bringe ich das ganze am besten auf Diskette?

Über einen gegebenenfalls vorgefertigten kleinen bootloader der schon einen (am besten leeren) C Kernel lädt, würde ich mich am meisten freuen, da ich dann selber erforschen könnte, wo mein Fehler lag.

Also ich hoffe mir kann jemand mit einem kleinen Tutorial und/oder einem guten Beispiel weiterhelfen.

M.f.G
Rev4n
6
Ok letztendlich hab ich alles mit VMWare gebacken bekommen. Das einzige Prob was jetzt noch besteht ist, dass wenn im "StupidOS" steht Press any key, dass da nichts passiert. Ich schätze jetzt einfach mal das es an VMWare liegt. Wenn ich falsch liege korrigiert mich, wenn ich recht habe, bedanke ich mich für die vielen replys und sage, dass dashier wirklich eine sehr gute community ist.

Greets,
Rev4n
7
Ok wär ja schön gewesen wenn alles einfach geklappt hätte. Hab mir Nero 5 installiert, und dann erstma komisch geschaut, bei dem Einstellungsmenü für bootCd's. Ok hab mir ne IMG Datei erstellt mit den beiden bin dateien drin. Ok dann hab ich sie da bei Nero eingegeben. Was mich jetzt stutzig macht, ist, dass wenn ich die CD "brenne" (machs auf den Image recorder) er erstens während des Brennens sagt das der Bootsektor nicht erkannt wurde (oder so ähnlich) und wenn ich danach einfach mal das dadurch entstandene Image mit WinRaR öffne, ist es leer. Ausserdem macht es mich stutzig, dass man erst da nen image auswählen soll und danach nen zusammenstellungseditor kommt wie wenn man ne normale CD zusammenstellt.

Was mach ich falsch oder ist falsch? ;)
8
Ok, dann zum schluss noch ne ganz dumme Frage, wenn der Pc denn dann das image / die CD bootet, öffnet er die bin dateien oder die raw datei?
9
Ich benutze die Virtual Server 2005 Beta 2 klappt es darauf, ein eigenes OS zu testen oder eher nicht?
10
Also mit NASM hat es jetzt geklappt. Hatte zwar gehofft, endlich mal freizeit von Konsolenanwendungen zu haben, weil ich in letzter Zeit mehr als genug damit arbeiten musste aber naja. Oder kennt jemand vll noch eine gute IDE mit eingebautem Compiler?

EDIT: ganz nebenbei, was mache ich als nichtbesitzer eines Diskettenlaufwerks mit dem ganzen. Gibts auch ne Möglichkeit die fertigen Dateien als CD image zu erstellen?
11
Also hier ist nochmal mein Sourcecode so wie ich ihn jetzt habe und wie er auch im Magazin abgedruckt ist. Der Kernel lies sich einwandfrei compilieren nur halt der Bootloader nicht. Also entweder ich hab mich vertippt, ich hab noch zu wenig Erfahrung in Assembler programmierung, oder irgendwas anderes läuft nicht recht  :wink:




ORG 0x7C00 ; Unsere Startadresse

; ----------------------------------
; Unser Bootloader
; ----------------------------------

start:

; Stack erzeugen
cli ; Keine Interrupts!
mov ax, 0x9000 ; Stackadresse
mov ss, ax ; SS = 9000 (unser Stack)
mov sp, 0 ; SP = 0000 (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
push ax
mov ax, 0
push ax
retf

; ---------------------------
; Funktionen und Variablen
; ---------------------------

bootdrv db 0 ; Das Bootlaufwerk
loading db "Loading...",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)
push ds ; Sichere DS
mov ax, 0 ; Die gewnschte Funktion (reset)
mov dl, [bootdrv] ; Dieses Laufwerk ist gewnscht
int 13h ; den Interrupt ausfhren
pop ds ; DS wiederherstellen
jc load ; Geht nicht? -> Noch mal!

load1:
mov ax,0x1000 ; ES:BX = 10000
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 dx, 0 ; Head=0, Laufwerk=0
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 ; Datenl„nge = 512 Bytes
dw 0AA55h
12
Erstmal danke für die vielen und schnellen Antworten. Es klappt jetzt alles soweit, bis auf ein kleines Prob im Boot quellcode. Und zwar sagt mir der Assembler (FASM), dass "call load" ein invalider operand wäre.
13
Also im moment benutze ich das Programm WAVRASM. Ja und ich gebe darin halt den code ein und klicke oben auf assemble, und dann bekomm ich ein nettes Statusfenster mit sehr vielen Fehlern. Ein anderes Program welches ich ausprobiert habe, (ASMARC) ergab das gleiche Ergebnis

Edit:

Hier der error-log:

AVRASM ver. 1.30  BOOT.ASM Tue Aug 22 23:15:32 2006


error : Unknown instruction opcode
error : Unknown instruction opcode
error : Unknown instruction opcode
error : Unknown instruction opcode
error : Unknown instruction opcode
error : Unknown instruction opcode
error : Unknown instruction opcode
error : Unknown instruction opcode
error : Unknown instruction opcode
error : Unknown instruction opcode
error : Unknown instruction opcode
error : Unknown instruction opcode
error : Unknown instruction opcode
error : Unknown instruction opcode
error : Unknown instruction opcode
error : Unknown instruction opcode
000000       org 0x7C00 ; Unsere Startadresse
         
         ; ----------------------------------
         ; Unser Bootloader
         ; ----------------------------------
         
          start:
         
         ; Stack erzeugen
000001 94f8      cli ; Keine Interrupts!
000002       mov ax, 0x90000 ; Stackadresse
error : Illegal argument type or count
000003       mov ss, ax ; SS = 9000 (unser Stack)
error : Illegal argument type or count
000004       mov sp, 0 ; SP = 0000 (der Stackpointer)
error : Illegal argument type or count
000005       sti ; Interrupts zulassen
         
         ; Bootlaufwerk aus DL speichern
000006       mov [bootdrv], dl
error : Illegal argument type or count
         
         ; Lade unseren kernel
000007 940e 0012 call load
         
         ; Springe zu diesem Kernel
000009       mov ax, 0x1000 ; Die Adresse des Programms
error : Illegal argument type or count
00000a       mov es, ax ; Segmentregister updaten
error : Illegal argument type or count
00000b       mov ds, ax
error : Illegal argument type or count
00000c       push ax
error : Illegal argument type or count
00000d       mov ax, 0
error : Illegal argument type or count
00000e       push ax
error : Illegal argument type or count
00000f       retf
         
         ; ---------------------------
         ; Funktionen und Variablen
         ; ---------------------------
         
000010       bootdrv db 0 ; Das Bootlaufwerk
000011       loading db "Loading...",13,10,0
         
         ; Einen String ausgeben:
          putstr:
000012       lodsb ; Byte laden
000013       or al,al
error : Illegal argument type or count
000014       jz short putstrd ; 0-Byte? -> Ende!
         
000015       mov ah,0x0E ; Funktion 0x0E
error : Illegal argument type or count
000016       mov bx,0x0007 ; Attribut-Byte (wird nicht ben”tigt)
error : Illegal argument type or count
000017       int 0x10 ; schreiben
000018 940c 000d jmp putstr ; N„chstes Byte
          putstrd:
00001a       retn
         
         ; Lade den Kernel vom Bootlaufwerk
          load:
         
         ; Diskdrive reset (Interrupt 13h, 0)
00001c       push ds ; Sichere DS
error : Illegal argument type or count
00001d       mov ax, 0 ; Die gewnschte Funktion (reset)
error : Illegal argument type or count
00001e       mov dl, [bootdrv] ; Dieses Laufwerk ist gewnscht
error : Illegal argument type or count
00001f       int 13h ; den Interrupt ausfhren
000020       pop ds ; DS wiederherstellen
error : Illegal argument type or count
000021       jc load ; Geht nicht? -> Noch mal!
         
          load:
000022       mov ax,0x1000 ; ES:BX = 10000
error : Illegal argument type or count
000023       mov es,ax
error : Illegal argument type or count
000024       mov bx, 0
error : Illegal argument type or count
         
         ; Sektoren lesen (Interrupt 13h, 2)
000025       mov ah, 2 ; Funktion 2 (Lesen)
error : Illegal argument type or count
000026       mov al, 5 ; Lese 5 Sektoren
error : Illegal argument type or count
000027       mov cx, 2 ; Cylinder=0, Sector=2
error : Illegal argument type or count
000028       mov dx, 0 ; Head=0, Laufwerk=0
error : Illegal argument type or count
000029       int 13h ; ES:BX = Daten vom Laufwerk
00002a       jc load1 ; Fehler? Noch mal!
00002b       mov si,loadmsg
error : Illegal argument type or count
00002c 940e 000d call putstr ; Meldung ausgeben
00002e       retn
         
000030       times 512-($-$$)-2 db 0 ; Datenl„nge = 512 Bytes
000032       dw 0AA55h

Assembly complete with 42 errors
14
Servus,

ich habe eben mal den Code aus Magazin abgetippt, und versucht zu assemblieren. Leider funktioniert das nicht, weil der editor mir mehrere Fehler mit der Bezeichnung "Unknown instruction code" oder "Illegal argument type or count". Habs nun mit mehreren Anwendungen dafür ausprobiert, doch es ist überall so.

Also was ist an dem Magazin falsch, oder was mach ich falsch?

Greets,
Rev4n
Seiten: [1]

Einloggen