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.


Themen - Thunder

Seiten: [1]
1
Offtopic / QEMU bauen - Fehler mit config-all-devices.mak
« am: 30. August 2013, 21:36 »
Hallo Leute,

bräuchte Mal eure Hilfe. Ich hatte vor QEMU wieder für Windows zu bauen, 1.6.0.
Und ich habe auch schon früher QEMU kompiliert, sowohl auf Windows als auch auf Linux, aber jetzt stehe ich vor einem Problem, das ich nicht lösen kann. Ich kenne mich einfach zu wenig aus.
Folgendes: Mein Aufruf an configure sieht so aus: ./configure --prefix=C:/QEMU
Dann führe ich make aus. Das Problem ist, dass es mit dieser Meldung abbricht:
make: *** No rule to make target 'config-all-devices.mak', needed by 'subdir-alpha-softmmu'. Stop.
Und am Anfang steht irgendwo:
GEN config-all-devices.mak
-uDas System kann die angegebene Datei nicht finden.
make: *** Deleting file 'config-all-devices.mak'
was mich total verwirrt, weil er genau diese Datei offenbar später noch braucht. Ich hab auch schon das Makefile durchforstet, aber ehrlich gesagt blicke ich nicht ganz durch - es ist doch etwas umfangreich.
Und gegoogelt habe ich auch, aber absolut *nichts* gefunden :(

Ich hoffe, es könnte mir hier jemand helfen!

2
Lowlevel-Coding / Potenzieren mit der FPU
« am: 27. June 2013, 12:13 »
Hallo Leute,

ich bräuchte sehr die Hilfe von jemandem, der sich mit der FPU auskennt. Denn ich bin erst kurz dabei, was den Koprozessor betrifft...
Gestern habe ich versucht, eine Art pow für double Werte zu implementieren. Zuerst dachte ich, die FPU würde sowieso einen ähnlichen Befehl bereitstellen, aber als ich den nicht gefunden hab, war ich mir sicher, dass ich über die Befehle fyl2x und f2xm1 zum Ziel kommen würde. Nämlich über die einfache Umformung, dass a^b = 2 ^ (b * log2(a)) ist.
Ich habe folgende Funktion:
public _bbFloatPow
_bbFloatPow:
fld qword [esp+12] ; power
fld qword [esp+4] ; base

fyl2x ; power * log2(base)

f2xm1 ; 2^(power*log2(base))-1

fld1
faddp ; 2^(power*log2(base))
ret

und für kleine Werte kommen richtige ergebnisse heraus: pow(1, 2) = 1; pow(sqrt(2), 2) = 2; pow(4, 0.5) = 2
aber pow(2,2) = 3 und pow(8, 2) = 7 ... die Ungenauigkeiten beginnen über 2 oder so...

Weiß jemand woran das liegt und kann mir helfen, diese Fehler zu beheben? :)
3
Lowlevel-Coding / GPF bei neuladen von SS
« am: 22. September 2010, 09:44 »
Hallo,

mich quält schon längere Zeit ein Problem, das mit dem Wechsel nach Ring 3 zu tun hat.
Ich initialisiere den TSS-Deskriptor in der GDT und den Speicherbereich in dem die Daten des TSS liegen. Das funktioniert.
void init_tss(void){
    DWORD pt=(DWORD) &tss; // tss ist die Struktur die ich global definiert habe
    void *ept=tss_entry; // hat die Adresse des TSS-Eintrags in der GDT
    *((BYTE*) ept+5) = (pt << 16) & 0xFF;
    *((BYTE*) ept+6) = (pt << 24) & 0xFF;
    *((WORD*) ept+2) = pt & 0xFFFF;
    tss.esp0=(DWORD) task_stack+STACKSIZE;
    tss.ss0=0x10;
    tss.ds=0x23;
    tss.ss=tss.ds; tss.es=tss.ds; tss.fs=tss.ds; tss.gs=tss.ds;
    tss.iopb=0;
    tss.eax=0; tss.ebx=0; tss.ecx=0; tss.edx=0; tss.esi=0; tss.edi=0;
    tss.ebp=0x300000;
    tss.esp=tss.ebp;
   
    set_tss();
}

inline void set_tss(void){
    asm volatile(    "mov $0x28, %ax\n"
                    "ltr %ax\n");
}

//aus der GDT:
    dw 0x68
    dw 0x0
    db 0x0,0xE9
    db 0x0,0x0
Der TSS-Deskriptor in der GDT ist an Position 6, wenn man bei 1 zu zählen beginnt und den Nulldeskriptor mitzählt.

Dann beginne ich mit dem Ringwechsel. Der Code dafür sieht so aus:
    asm volatile(    "mov $0x23, %ax\n"
                    "mov %ax,%ds\n"
                    "mov %ax,%es\n"
                    "mov %ax,%fs\n"
                    "mov %ax,%gs\n"
                    "mov %ax,%ss\n"
                    "ljmp $0x1B, $.152\n"
                    ".152:\n"
                    );

Doch bei der Zeile "mov %ax,%ss" bekomme ich einen General Protection Fault. Redscreen sagt:
Zitat
EXCEPTION 13     ERRORCODE 32
EAX 2097187     EBX 1073180
ECX 23     EDX 1208320
EIP 1050545     CS 8
ESP 1073140    SS 1052995
DS 35     ES 35
FS 35     GS 35

Die Einträge in meine GDT sind in folgender Reihenfolge:
 - Nulldeskriptor
 - Kernel-Code
 - Kernel-Daten
 - User-Code
 - User-Daten
 - TSS

Hoffe ihr könnt mir helfen.

mfg Thunder

PS: ich habe auch schon Mal selber in der Intel-Doku nachgeschaut, aber dort steht, dass Fehler mit dem SS nur passieren, wenn ich ein Codesegment hineinlade, was ich nicht tue.
4
Lowlevel-Coding / Problem mit idiv und div
« am: 27. March 2010, 10:27 »
Hallo,

Ich habe nun die Funktion putchar aus meinem Asm-Kernel umgebaut, sodass nach jeder Ausgabe eines Zeichens geprüft wird, ob gescrollt werden soll. Die Funktion arbeitet daher mit idiv bzw. div um die aktuelle Zeile auszurechnen.

Das Problem: idiv bzw. div ruft bei mir eine Exception auf (IDT und ISR funktionieren theoretisch schon), allerdings gibt der Exceptionhandler selbst auch einen String aus, was wieder eine Exception auslöst ...
Ich nehme an, dass sich der Kernel am Ende selbst überschreibt und neustartet.

Gibt es da irgendeine Erklärung?

Code:
mov eax,[CONSOLE_POS] ; aktuelle Position
mov ebx,80
idiv ebx ; oder div
cmp eax,24
jbe noscroll
memmove (TextBufferStart+160),TextBufferStart,(TextBufferLength-160) ; memmove ist ein Macro. TextBufferStart und TextBufferLength sind Konstanten
mov dword [CONSOLE_POS],TextBufferEnd-160 ; ebenfalls eine Konstante
noscroll:

mfg Thunder
5
Lowlevel-Coding / FASM - Untere/Obere 16 Bit
« am: 14. March 2010, 21:31 »
Hallo,

Ich schreibe seit kurzem meinen Kernel wieder neu - das ist schon Routine. Doch diesmal in Assembler. Jetzt bin ich bei der IDT und habe ein kleines Problem. Ich muss die Adresse des Interrupt-Handlers in der IDT in 2 Teile unterteilen - die unteren und die oberen 16 Bit.
Mein Code sieht etwa so aus:
idt:
dw word [handle_interrupt_0] ; So habe ich das versucht
dw 1
db 0
db 11010001b
dd word [handle_interrupt_0] shl 16 ; und so auch

Leider funktioniert das nicht. Wie sollte das aussehen?

mfg Thunder
6
Lowlevel-Coding / GRUB - Error 13
« am: 06. February 2010, 13:08 »
Hallo,

Mein Kernel macht wieder Mal Schwierigkeiten. Eigentlich ist bis jetzt noch nicht allzu viel drinnen. Es sollten die GDT und der Memory Manager initialisiert werden und eine Meldung erscheinen lassen. Allerdings passiert folgendes:

- GRUB lädt das Menü
- Nach dem Menü kommt die Meldung: "Error 13: Invalid or unsupported executable format
Press any key to continue..."

Eigentlich sollte so etwas doch gar nicht passieren können, oder?

War es, weil ich den Kernel auf Ubuntu 9.10 compiliert und gelinkt, aber auf Ubuntu 8.10 das Floppy-Image erstellt habe?

mfg Thunder
7
Softwareentwicklung / 2 Fragen zu GRUB
« am: 03. February 2010, 13:56 »
Hallo!

Ich habe wieder begonnen mit meinem OS. Es ist mittlerweile der 7. Anlauf, aber jedes Mal sind die Kernels ein bisschen besser geworden :D.

Ich habe nun 2 Fragen zu GRUB.

1. Ich habe Ubuntu 9.10 installiert. Gibt es eine einfache/schnelle Möglichkeit auf GRUB umzusteigen(statt GRUB2)?

2. Wohin lädt GRUB eigentlich meinen Kernel wenn ich nach dem Tutorial C-Kernel mit GRUB vorgehe)? Gibt es da eine bestimmte Adresse?


mfg Thunder
8
Lowlevel-Coding / physische Speicherverwaltung (Anfang)
« am: 13. August 2009, 19:16 »
Hallo Community,
Ich habe mich vor ein paar Tagen angemeldet, da ich schon immer ein OS schreiben wollte. Ich habe auch schon einige Tutorials gelesen und habe jetzt aber eine Frage zur physischen Speicherverwaltung mit einer Bitmap. Wie bekomme ich heraus welche Adressen frei sind? Es sind ja schließlich der Kernel und seine Daten im Speicher.

mfg Thunder
Seiten: [1]

Einloggen