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 - fr0z3n

Seiten: [1]
1
Lowlevel-Coding / Re: GRUB2 bzw 1.96
« am: 17. May 2008, 18:47 »
Das ist natürlich perfekt. Vielen Dank.
Werde mir dann damit mal ein .iso erstellen und werde es dann auch mal hinzufügen.
2
Lowlevel-Coding / GRUB2 bzw 1.96
« am: 17. May 2008, 18:07 »
Hi Leute!
Wie ich leider feststellen musste, unterstützt das gute alte GRUB keine 64-bit elf Dateien. Habe dann gelesen, dass GRUB2 das schon unterstützt und inzwischen auch nutzbar ist. Jetzt habe ich leider seit mindestens 3h versucht eine GRUB2 Boot CD, in Form einer .iso zu erstellen.
Sie booten zwar alle schön brav, allerdings  scheint GRUB mein Konfigurationsfile "grub.cfg" nicht zu interessieren.
Ich komme immer in eine "grub recue" Umgebung, wo ich dann per Kommandozeile mit den Befehlen spielen kann, die aber allesamt zu nichts führen.
Wenn ich mir über "ls" die Liste der Dateien und Geräte ausgeben lasse, erhalte ich "(cd0)" als Ausgabe. Darauf zuzugreifen scheint unmöglich ...
Ich habe es auch mal geschafft in eine normale GRUB2 Umgebung (nicht rescue) zu kommen, indem ich über den alten GRUB1 GRUB2 laden ließ. Dies führte allerdings letzten Endes auch zum Scheitern an den Befehlen.

Hat irgendjemand von euch schon Erfahrung mit GRUB2 und könnte mir ein wenig helfen?
Zur Zeit erstelle ich mein .iso Abbild folgendermaßen:
Zitat
cat cdboot.img core.img > grub2cd.bin
mkisofs -R -b boot/grub/grub2cd.bin -no-emul-boot -boot-load-size 4 -boot-info-table -o grub.iso iso
Dabei befindet sich im Root der CD, der zu ladende Kernel und unter boot/grub die gesamten Module, die grub.cfg und so weiter.
Meine grub.cfg sieht folgendermaßen aus:
Zitat
set default=0
set timeout=2

menuentry "Kernel" {
   set root=(cd0)
   multiboot /kernel.bin
   boot
}
Ich weiß nicht was ich falsch mache und es gibt ja auch keine Dokumentation in der man nachschlagen könnte ... Ich hoffe ihr könnt mir helfen.
schonmal danke

fr0z3n
3
Lowlevel-Coding / Re: ld unbekanntes Fileformat
« am: 16. May 2008, 14:22 »
Achso okay jetzt verstehe ich auch den Sinn dieser Linkscripts ^^
Hat jemand dazu vielleicht mal ein Tutorial, dass diese Linkscript Sache mit diesen ganzen Ausgabeformaten mal erklärt, damit ich da mal den Durchblick bekomme?
4
Lowlevel-Coding / Re: ld unbekanntes Fileformat
« am: 15. May 2008, 23:33 »
Okay die Meldung wegen des _start Symbols ist weg.
Verstehe zwar gerade nicht genau, wieso er _start mit Unterstrich haben will, aber vielleicht kann mir das ja noch jemand erklären? :-)
Die Meldungen wegen des Code und BSS Parts sind allerdings immer noch da:
Zitat
start.asm:(.text+0x1c): undefined reference to `code'
start.asm:(.text+0x20): undefined reference to `bss'
Poste hier dafür am besten mal den gesamten Code der Datei, den ich aus einem Tutorial von osdever.net habe:
Zitat
global _start
_start:
    mov esp, _sys_stack     ; This points the stack to our new stack area
    jmp stublet

; This part MUST be 4byte aligned, so we solve that issue using 'ALIGN 4'
ALIGN 4
mboot:
    ; Multiboot macros to make a few lines later more readable
    MULTIBOOT_PAGE_ALIGN   equ 1<<0
    MULTIBOOT_MEMORY_INFO   equ 1<<1
    MULTIBOOT_AOUT_KLUDGE   equ 1<<16
    MULTIBOOT_HEADER_MAGIC   equ 0x1BADB002
    MULTIBOOT_HEADER_FLAGS   equ MULTIBOOT_PAGE_ALIGN | MULTIBOOT_MEMORY_INFO | MULTIBOOT_AOUT_KLUDGE
    MULTIBOOT_CHECKSUM   equ -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
    EXTERN code, bss, end

    ; This is the GRUB Multiboot header. A boot signature
    dd MULTIBOOT_HEADER_MAGIC
    dd MULTIBOOT_HEADER_FLAGS
    dd MULTIBOOT_CHECKSUM
   
    ; AOUT kludge - must be physical addresses. Make a note of these:
    ; The linker script fills in the data for these ones!
    dd mboot
    dd code
    dd bss
    dd end
    dd _start

stublet:
   extern main
   call main
   
; Here is the definition of our BSS section. Right now, we'll use
; it just to store the stack. Remember that a stack actually grows
; downwards, so we declare the size of the data before declaring
; the identifier '_sys_stack'
SECTION .bss
    resb 8192               ; This reserves 8KBytes of memory here
_sys_stack:
schonmal vielen vielen Dank für eure Hilfe
5
Lowlevel-Coding / Re: ld unbekanntes Fileformat
« am: 15. May 2008, 18:54 »
Dann erhalte ich folgendes:
Zitat
warning: cannot find entry symbol _start; defaulting to 00000000004000b0
start.o: In function `mboot':
start.asm:(.text+0x1c): undefined reference to `code'
start.asm:(.text+0x20): undefined reference to `bss'
Der Teil über den sich ld beschwert ist wohl dieser:
Zitat
global start
start:
    mov esp, _sys_stack     ; This points the stack to our new stack area
    jmp stublet
6
Lowlevel-Coding / ld unbekanntes Fileformat
« am: 15. May 2008, 17:50 »
Hi!
Ich versuche mich gerade an 64-bit. Habe mir dazu einen x86_64 ELF Cross-Compiler gebaut (Mac OS X, deswegen Cross-Compiler).
Mein Problem ist jetzt allerdings, wenn ich einen kleinen Tutorialkernel damit linken will, beschwert sich ld:
Zitat
start.o: file not recognized: File format not recognized
Diese Datei entsteht folgendermaßen:
Zitat
nasm -f aout -o start.o start.asm
Der ld Befehl lautet:
Zitat
ld -f elf64-x86-64 -o kernel.bin start.o main.o
Ich habe keine Ahnung was ihn jetzt stört, weil das ganze mit einem 32-bit ELF Cross-Compiler ohne Murren funktionierte. Weißt jemand von euch Rat?
schonmal danke

fr0z3n
7
Lowlevel-Coding / Re: AMD64 Emulation
« am: 15. July 2007, 13:12 »
Ja habe Version 0.9.0 von qemu.
Naja werde dann jetzt wohl bochs benutzen, da habe ich dann auch gleich ohne Suchen ein Log und so.
Und wegen dem komischen Verhalten der Boot-CD, werde ich dann vorerst erstmal nur Floppy's benutzen bis ich eine Lösung gefunden habe ...
trotzdem dankeschön und wenn jemand eine Lösungsidee hat, immer her damit ;-)
8
Lowlevel-Coding / Re: AMD64 Emulation
« am: 14. July 2007, 12:35 »
Ja habe es unter Qemu auch mit einer normalen x86 CPU versucht und da funktioniert es wie gesagt tadellos und das sollte es ja dann auch auf einer x86-64 CPU.
Wegen den qemu Fehlermeldungen muss ich nochmal schauen, da ich Q benutze, dass Qemu unter Mac OS X eine grafische Oberfläche verleiht. Da muss ich nochmal schauen, wie ich an die Meldungen von Qemu ran komme ...

Da hätte ich mir bei bochs  ./configure --help wohl mal besser durchlesen sollen :-) Naja auf jeden Fall funktioniert dort das GRUB Floppy Image einwandfrei, aber muss ich in der Bochs Konfiguration x86-64 noch irgendwie einschalten, wenn ich bochs mit --enable-x86-64 kompiliert habe?
Da ich gedacht hatte, dass es vll an der GRUB Floppy liegt, da ich sie nicht selber erstellt habe, sondern irgendwo heruntergeladen, habe ich mal ein bootfähiges GRUB .iso Image erstellt, bei dem Bochs sich strikt weigert, das Bootmenu anzuzeigen, sondern mir nur eine GRUB Shell gibt ... Mit Parallels (sowas wie VMWare) erhalte ich das Menu allerdings ...

Ist irgendwie alles ein bißchen komisch, weil mit keinem Programm alles funktioniert, sondern auf jedem nur ein bißchen. Hat jemand eine Idee?
9
Lowlevel-Coding / AMD64 Emulation
« am: 13. July 2007, 19:12 »
Hi!
Ich habe ein Problem und hoffe ihr könnt mir helfen ...
Ich will einen Kernel schreiben, der im Long-Mode arbeitet. Nun ja, ich wollte gerade den Wechsel in den Long-Mode schreiben, als mir aufgefallen ist, dass der bisherige Code irgendwie nur mit einer emulierten 32-Bit CPU funktioniert. Wenn ich auf x86-64 umschalte hängt sich Qemu auf. Dass heißt das Fenster mit dem emulierten PC öffnet sich für 1 Sekunde und schließt sich sofort wieder.  Entweder der emulierte PC schaltet sich jetzt ab oder Qemu stürzt ab ... Eigentlich müsste der Code ja ohne Mucken laufen, da es auf einer normal emulierten x86 CPU ohne 64-Bit Erweiterung ja tadellos funktioniert und ich bisher ja noch nichts im Punkto 64-Bit gemacht habe. Deswegen war mein erster Gedanke, dass die 64-Bit Emulation unter Qemu noch nicht ganz tadellos funktioniert ... Leider bekomme ich Bochs nicht kompiliert, da er mir configure mit der Meldung x86-64 needs SSE2 abbricht ... Ja mein Prozessor unterstützt SSE2. Deswegen ist mir das auch unerklärlich ...
Hat irgendjemand eine Idee oder einen Hinweis?

Achja: Ich verwende zur Zeit GRUB als Bootloader und den Beispielkernel von Bran's Kernel Development Tutorial
10
Lowlevel-Coding / EFI Beispiele Tutorials
« am: 13. June 2007, 21:07 »
Hi!
Mich würde mal interessieren, wie das mit dem Booten bei EFI aussieht. EFI beinhaltet ja z.B. schon einen Boot-Loader und man soll ja keinen ASM Code mehr zwingend benötigen und so.
Habe mir auf der Intel und der UEFI Webseite mal die Dokumentationen heruntergeladen. Aber ich bräuchte mal irgendwelche Beispiele :-) Nur leider finde ich nicht wirklich was sinnvolles. Hat irgendjemand einen Tipp?
Ansonsten muss ich mich wohl gezwungenermaßen nochmal die entsprechenden Abschnitte in den Dokus lesen.
11
Lowlevel-Coding / Re: FAT12 Image Bootsektor
« am: 08. January 2007, 00:49 »
Dankeschön, dass war es. Jetzt funktioniert es.
12
Lowlevel-Coding / Re: FAT12 Image Bootsektor
« am: 08. January 2007, 00:08 »
@M.Nemo:
Also wenn ich jmp near schreibe funktioniert es immer noch nicht.

@Svenska:
Du meinst, dass ich meinen Bootsektor mit dem was im Image ankommt vergleichen soll? Habe mir die beiden im Hexeditor angeschaut und die sind gleich.

Dabei ist mir aber etwas andere aufgefallen: Das Image ist nach dem Kopieren des Bootsektors per "dd" nur noch 512 Bytes groß. Also nur noch so groß wie der Bootsektor. Das sollte das Problem sein, denke ich. Nur habe ich keine Ahnung wie ich das beheben soll?
13
Lowlevel-Coding / FAT12 Image Bootsektor
« am: 07. January 2007, 18:39 »
Hi!
Ich habe ein Problem. Ich habe ein Image einer leeren unter Windows XP formartierten FAT12 Diskette. Ich arbeite unter Mac OS X. Wenn ich dieses Image dort mounte, funktioniert auch alles einwandfrei. Wenn ich dann allerdings den Bootloader mittels dd if=boot.bin bs=512 count=1 of=floppy.img in das Image schreiben will, erhalte ich beim Mounten die Fehlermeldung, dass er keine aktivierbaren Dateisysteme findet. Mit dem Bootsektor sollte allerdings alles in Ordnung sein, weil ich von dem Image booten kann und alles soweit funktioniert. Er scheint wohl die FAT Tabelle oder so zerstört zu haben. Aber mittels des dd Befehls wird ja nur der erste Sektor beschrieben.
Hier trotzdem mal der Boot-Sektor:
org 0x7C00

jmp start

OSName      db "MSWIN4.1"
BytesPerSec dw 512
SecPerClus  db 1
RsvdSecCnt  dw 1
NumFATs     db 2
RootEntCnt  dw 224
TotSec      dw 2880
MediaType   db 0F0h
FATsize     dw 9
SecPerTrack dw 18
NumHeads    dw 2
HiddenSec   dd 0
TotSec32    dd 0
DrvNum      db 0
Reserved    db 0
BootSig     db 29h
VolumeID    dd 0FFFFFFFFh
VolumeLabel db "MYOWNOS    "
FileSysType db "FAT12   "

; Dateien werden eingefügt
; Variablen werden deklariert

start:
...

Ich hoffe ihr könnt mir helfen, damit mein Image auch weiterhin FAT12 formatiert bleibt.

EDIT:
Was vielleicht noch wichtig ist: Mac OS X basiert auf UNIX, dass heißt viele UNIX Befehle laufen auch in der Mac Konsole. Aber die Meisten werden das denke ich wissen.
14
Lowlevel-Coding / Re: Fehlercodes ausgeben?
« am: 14. December 2006, 15:39 »
Ah ok danke. Jetzt funktionierts.
15
Lowlevel-Coding / Fehlercodes ausgeben?
« am: 12. December 2006, 16:18 »
Hi!
Ich habe versucht mir einen Bootloader zu schreiben, allerdings funktioniert der Zugriff auf die Diskette anscheinend nicht ganz. Jetzt würde ich gerne den Fehlercode, der gespeichert wird auf dem Bildschirm ausgeben lassen. Ich habe auch etwas dazu gefunden, allerdings erhalte ich immer eine Zahl/Buchstabe und ein kryptisches Zeichen danach. Ich weiß allerdings nicht wieso. Ich hoffen ihr könnt mir helfen.
Hier mein Code zur Konvertierung der Zahl:
zahlausgabe:
  mov bx, 10h
  mov cx, 0 ; Ziffernzaehler

zahlausgabe1:
  mov dx, 0 ; loeschen fuer Division
  div bx ; durch Basis teilen
  push dx ; Ziffer auf dem Stack merken
  inc cx ; eine Ziffern mehr
  cmp ax, 0 ; testen, ob letzte Ziffer erreicht ist
  jne zahlausgabe1 ; wenn ungleich

zahlausgabe2:
  pop dx ; Ziffer von Stack holen
  add dl,'0' ; in den ASCII-Bereich der Ziffern transponieren
  cmp dl,'9'
  jbe zahlausgabe3 ; wenn kleiner, gleich
  add dl,'A'-'9'-1 ; Ziffern weiter korrigieren

zahlausgabe3:
  mov [errornum], dl
  mov si, errornum
  call putstr
  loop zahlausgabe2
  ret
Und hier die Ausgabe, die ich aus einem LowLevel Magazin habe:putstr:
  lodsb            ; Byte laden
  or al, al
  jz short putstrd ; 0-Byte? -> Ende!
  mov ah, 0x0E      ; Funktion 0x0E
  int 10h          ; schreiben
  jmp putstr ; naechstes Byte
putstrd:
  ret
Seiten: [1]

Einloggen