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

Seiten: [1]
1
Lowlevel-Coding / GP-Fault beim schreiben von CR0
« am: 17. March 2014, 20:17 »
Guten Abend,

ich bin gerade dabei einen Startup-Code zu schreiben um in den Long-Mode zu kommen. Dabei bin ich auf einen Fehler gestoßen zu dem mir überhaubt nicht einfällt wie dieser zu stande kommen könnte. Es geht sich um folgendes: So bald ich diesen Code
asm volatile("movl %cr0, %eax");
asm volatile("or $0x80000000, %eax");
asm volatile("movl %eax, %cr0");
ausführe bricht mir qemu mit einem GP-Fault ab. Hier mal die interessanten Zeilen des Logs:
0: v=0d e=0010 i=0 cpl=0 IP=0008:0000000000100ba2 pc=0000000000100ba2 SP=0010:00000000433385e6 env->regs[R_EAX]=000000002bb00fe3
EAX=2bb00fe3 EBX=00009500 ECX=c000007b EDX=a30c3147
ESI=93416461 EDI=00129000 EBP=00104fc0 ESP=433385e6
EIP=00100ba2 EFL=00000003 [------C] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00cf9a00 DPL=0 CS32 [-R-]
SS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
DS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
FS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
GS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     00104fa8 00000017
IDT=     00000000 000003ff
CR0=80000011 CR2=00000000 CR3=08000000 CR4=00000020
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=00000001 CCD=2bb00fe3 CCO=INCL   
EFER=0000000000000000
So bald ich aber "asm volatile("movl %eax, %cr0")" auskommentiere läuft alles wie geschmiert (außer dass das Paging natürlich nicht aktiviert wird). Ein objdump hat mir bis jetzt auch nicht weitergeholfen, denn die Speicheraddresse in EIP liegt nicht mehr in meinem Code, sondern irgendwo dahinter (aber immer noch im .text Segment).
Hat irgendjemand eine Ahnung woran dass liegen könnte?

Gruß,

Streetrunner

PS: Der Fehler ist natürlich reproduzierbar
2
Softwareentwicklung / x64-Cross-Compiler für Windows
« am: 01. September 2013, 21:09 »
Hallo zusammen,

ich habe im Wiki dieses Tutorial gefunden: http://www.lowlevel.eu/wiki/Cross-Compiler

Beim Versuch die Binutils zu kompilieren sagt man mir dass in etlichen Dateien Variablen gesetzt aber nicht genutzt werden. An sich ist das kein Problem, aber anscheinend wird das makefile so erstellt dass alle Warnungen als Fehler erscheinen. Leider ist das makefile über 14k Zeilen lang, so dass ich auf Anhieb nicht weiß wo man das umstellen kann.

Gruß,

Streetrunner

PS: Die im Tutorial angegebenen Binutils gibt es nicht mehr.
3
Lowlevel-Coding / DMA im LongMode
« am: 17. July 2013, 11:32 »
Guten Tag zusammen,

da ich gerade dabei bin meinen PMM zu programmieren hat sich mir die Frage gestellt in wie weit die DMA Funktionen der einzelnen Controller-Chips mit 64 Bit umgehen können. Dabei wäre eigendlich nur interressant zu wissen ob es sich lohnt den PMM so zu programmieren dass DMA-Geräte immer Speicher aus den ersten 4GB bekommen.

Gruß,
Streetrunner
4
Lowlevel-Coding / ACPI-Version
« am: 31. May 2013, 15:14 »
Hallo zusammen,

ich habe mir gestern ein paar Zeilen Code zusammengeschrieben/kopiert um mal zu sehen, ob ich den RSDP finde. Und siehe da, ich hatte Erfolg. Aber eins hat mich stutzig gemacht: Laut meinem Code ist die Version von ACPI bei Qemu = 0 (also Version 1). Wenn ich den Code auf meinem Rechner ausführe bekomme ich auch gesagt das Version 1 vorhanden ist. Nun ist mein Rechner zwar schon etwa 5 Jahre alt (X58 Board), aber Version 3-4 hätte ich da dann doch schon erwartet. Kann irgendwer diese Werte bestätigen (vllt. mit einem ähnlich altem Rechner) oder ist mein Code evtl. falsch???

Gruß,
Streetrunner
Seiten: [1]

Einloggen