Autor Thema: [All In One]-Question lolxdfly  (Gelesen 31727 mal)

lolxdfly

  • Beiträge: 52
    • Profil anzeigen
Gespeichert
« Antwort #40 am: 06. May 2014, 21:05 »
EDIT3:Habs gefunden, nicht gefixt :/
Ist genauso wie hier: nur mit 10187e: http://www.lowlevel.eu/wiki/Teil_9_-_Paging#Paging_aktivieren

EDIT4: Dürfte am link script liegen... die Adresse ist ein externes Symbl aus dem Link Script:
  end = .; _end = .; __end = .;soll ich dass einfach ans Ende dranklatschen? Hab leider überhaupt keine Ahnung was Link Scripte angeht :S
Das verstehe ich nicht. Ist an der Adresse 10187e das Symbol "end"?

Ne... war vllt etwas unglücklich formuliert.
Der Qemu log sagt folgendes:
check_exception old: 0xe new 0xe
     3: v=08 e=0000 i=0 cpl=0 IP=0008:0010188e pc=0010188e SP=0010:001fff90 EAX=80000011
Da ich sachen geändert habe hat sich die Adresse wieder geändert... vorher war es 10187e!

Dann habe ich mein Kernel disasm.:
  10187b: 0f 22 c0              mov    %eax,%cr0
  10187e: c9                    leave 
  10187f: c3                    ret   
Wie man sieht scheint der gleiche Fehler, wie hier beschrieben vorzuliegen: http://www.lowlevel.eu/wiki/Teil_9_-_Paging#Paging_aktivieren

In "meiner" Source findet man bezüglich der Speicheradresse das hier:
// end ist im linker script definiert!
extern uint32_t end;
uint32_t placement_address = (uint32_t)&end;

Die Deklarierung von end im LinkerScript sieht bei dem BeispielKernel wiefolgt aus:
ENTRY(start)
SECTIONS
{

    .text 0x100000 :
    {
        code = .; _code = .; __code = .;
        *(.text)
        . = ALIGN(4096);
    }

    .data :
    {
        data = .; _data = .; __data = .;
        *(.data)
        *(.rodata)
        . = ALIGN(4096);
    }

    .bss :
    {
        bss = .; _bss = .; __bss = .;
        *(.bss)
        . = ALIGN(4096);
    }

    end = .; _end = .; __end = .;
}
Ich denke mal ich hab das was im Linker Script bezüglich end falsch gemacht:
ENTRY(loader)
OUTPUT_FORMAT(elf32-i386)
OUTPUT_ARCH(i386:i386)

SECTIONS
{
  . = 0x0100000;

  .text :
  {
    *(.text*)
    *(.rodata)
  }

  .data  :
  {
    start_ctors = .;
    *(.ctors)
    end_ctors = .;

    *(.data)
  }

  .bss  :
  {
    *(.bss)
  }

  end = .; _end = .; __end = .;
 
  /DISCARD/ : { *(.dtors) *(.comment) }
}
« Letzte Änderung: 06. May 2014, 21:18 von lolxdfly »

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #41 am: 06. May 2014, 21:28 »
Der Qemu log sagt folgendes:
check_exception old: 0xe new 0xe
     3: v=08 e=0000 i=0 cpl=0 IP=0008:0010188e pc=0010188e SP=0010:001fff90 EAX=80000011
Das ist bereits der zweite Fault. Der Registerdump, der mit check_exception old: 0xffffffff new 0xe anfängt, ist der interessante, weil es der erste ist. In diesem Fall scheints aber keinen Unterschied zu machen.

Zitat
Dann habe ich mein Kernel disasm.:
  10187b: 0f 22 c0              mov    %eax,%cr0
  10187e: c9                    leave 
  10187f: c3                    ret   
Wie man sieht scheint der gleiche Fehler, wie hier beschrieben vorzuliegen: http://www.lowlevel.eu/wiki/Teil_9_-_Paging#Paging_aktivieren
Falls du das Tutorial befolgst: Hast du den Rest des Artikels abgearbeitet, also ein sinnvolles Page Directory erstellt? Falls du das Tutorial nicht befolgst: Du musst ein sinnvolles Page Directory erstellen, das den Kernel sowie alle sonstigen Datenstrukturen, auf die der Kernel zugreift (beispielsweise das Page Directory, alles was deine alloc-Funktion zurückgibt, ...) mappen.

In "meiner" Source findet man bezüglich der Speicheradresse das hier:
// end ist im linker script definiert!
extern uint32_t end;
uint32_t placement_address = (uint32_t)&end;
Wie kommst du zu der Folgerung, dass sich die Speicheradresse auf diesen Ausschnitt bezieht? Du hast ja eben noch das kurze Schnipsel Assemblercode gezeigt, das für mich eher danach aussieht.

Zitat
Ich denke mal ich hab das was im Linker Script bezüglich end falsch gemacht:
Sieht eigentlich alles richtig aus. Du könntest ein
        . = ALIGN(4096);davor tun, um die Adressen auf ein vielfaches von 4096 zu runden, falls dein Code das nicht selbst tut.
Dieser Text wird unter jedem Beitrag angezeigt.

lolxdfly

  • Beiträge: 52
    • Profil anzeigen
Gespeichert
« Antwort #42 am: 07. May 2014, 19:58 »
Okay... danke erstmal für die Informationen.
Natürlich habe ich mir den Paging Artikel durchgelesen, aber beim programmieren gehe ich nach einem anderen TuT vor. Daher müsste ich die Page Directory bereits drinne haben!

das es etwas mit end zutun hat war nur so ein Gedanke :/

Habe alles erneut debuggt, aber den Fehler habe ich noch nicht wirklich gefunden. Allerdings weiß ich an welche Stelle es im Code crasht:
    current_directory = newdir;
    asm volatile("mov %0, %%cr3":: "r"(&newdir->tablesPhysical));
    uint32_t cr0;
    asm volatile("mov %%cr0, %0": "=r"(cr0));
    cr0 |= 0x80000000; // Enable paging!
    asm volatile("mov %0, %%cr0":: "r"(cr0)); // <==crash here
Das sieht im Beispiel Code allerdings 100% genauso aus. Kann es daran liegen, dass der Beispielcode in C ist?

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #43 am: 07. May 2014, 20:03 »
Es liegt definitv daran, dass was Falsches im Page Directory steht. Der Crash an der Stelle, an der Paging aktiviert wird, heißt nämlich, dass der Code direkt nach dem Aktivieren nicht mehr ausgeführt werden konnte. Das heißt, dass was da eigentlich sein sollte (Code) ist nicht mehr da.

Die Ursachen dafür können vielfältig sein, und du solltest mal den Prozess des Erstellens und Befüllens des Page Directories debuggen.
Dieser Text wird unter jedem Beitrag angezeigt.

Martin Erhardt

  • Beiträge: 165
    • Profil anzeigen
Gespeichert
« Antwort #44 am: 08. May 2014, 15:06 »
Etwas was Ich dir auch absolut empfehlen würde ist memory examining. Setze einfach kurz vor der Aktivierung von Paging eine Endlos-schleife und lass dir die Adresse der Pagedirectory table ausgeben. Dann Qemu starten, in den Qemu monitor wechseln(Strg-Alt-2) und mit xp <addresse der page_directory table> schauen was dort steht. Dann kannst du so zu den pagetables navigieren und schauen ob die Einträge stimmen die Flags gesetzt sind, überhaupt irgendwas im Eintrag steht oder die Flags vielleicht von den addressen überschrieben wurden. Häufig ist in solchen Fällen einfach ein Datentyp, eine Struktur, oder ein Mokro falsch definiert. Mit memory examining siehst du das sofort.
« Letzte Änderung: 08. May 2014, 15:09 von Martin Erhardt »

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #45 am: 08. May 2014, 17:07 »
Wenn du mit GDB einen Breakpoint direkt auf den "mov cr0, %%"-Befehl setzt und danach die CPU einmalig single-stepst, dann hast du Paging aktiviert, bevor der Crash auftritt. Dann kannst du dir im Qemu-Monitor mit "info mem" und "info tlb" besser anschauen, was die CPU gerade denkt.

Bei deaktiviertem Paging gibt der Qemu-Monitor bei beiden Befehlen nur "PG disabled" aus.

lolxdfly

  • Beiträge: 52
    • Profil anzeigen
Gespeichert
« Antwort #46 am: 10. May 2014, 23:29 »
Danke.
Hab jetzt so hinbekommen. Keine Ahnung woran es lag. Ich habe das komplette Paging System neugeschrieben(ohne Codeteile aus TuTs zu nehmen). War gar nicht so schwer wie ich anfangs dachte  :-D

Edit: Ist wohl doch schwerer  :|
Wenn ich paging aktiviere crasht der Kernel, sobald eine Taste grdrückt wird(Im kernel wird getinput(COLOR_BLACK, COLOR_WHITE); ausgeführt. Es crasht also, weil das paging irgendwie mein KBC behindert).
« Letzte Änderung: 11. May 2014, 16:44 von lolxdfly »

lolxdfly

  • Beiträge: 52
    • Profil anzeigen
Gespeichert
« Antwort #47 am: 02. August 2014, 17:20 »
Hi,
ich habe wiedermal angefangen an meinem Kernel weiter zuarbeiten..
Als erstes wollte ich den Ps2-Tastaturtreiber überarbeiten. Alles läuft soweit gut. Jedoch scheitere ich daran, das eingegebene auszulesen -.- 
Hier seht ihr meine Funktion, die den keycode verarbeiten soll:
typedef char* string; //aus string.h
string tmp = "";
void send_keycode(unsigned char keycode, bool isBreakcode)
{
if(keycode!=0 && !break_code)
{
if(keycode == RETURN)
{
readkbc = false;
return;
}
monitor_put(keycode, backg, forg);
tmp += keycode; //failed
//strcat(tmp, keycode); //<= hat den gleichen Effekt
}
}

string GetKBCInput(color bg, color fg)
{
backg = bg;
forg = fg;
readkbc = true;
for(;;)
{
if(!readkbc)
break;
}
monitor_write("\nDebug: ", COLOR_BLACK, COLOR_YELLOW);
monitor_write(tmp, COLOR_BLACK, COLOR_YELLOW);
return tmp;
}

Als Ausgabe bekomme ich lediglich: "Debug: ". Also muss tmp unverändert, also leer sein :/
Zuvor noch natürlich das Eingegebene. Das heißt, dass er alles richtig übersetzt und es verarbeitet, nur irgendwie scheint er tmp += keycode; zu ignorieren..

mfg
lolxdfly
« Letzte Änderung: 02. August 2014, 17:22 von lolxdfly »

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #48 am: 02. August 2014, 18:16 »
Zuvor noch natürlich das Eingegebene. Das heißt, dass er alles richtig übersetzt und es verarbeitet, nur irgendwie scheint er tmp += keycode; zu ignorieren..
Richtig, das funktioniert nicht, weil C nicht C++ ist. Der Operator += funktioniert da nicht, wie du denkst (er macht insbesondere nicht dasselbe wie strcat), auch wenn du char* "string" nennst.

Der Wert "" (leerer String) kann nicht verändert werden, weil er eine Konstante ist. Der Compiler allokiert keinen dynamischen Speicher dafür, das heißt, wenn du versuchst, da was ranzuhängen, hast du einen Bufferoverflow. Das heißt strcat geht auch nicht.

Wenn du eine Zeichenkette dynamisch verlängern willst, musst du mit malloc (oder strdup) arbeiten, wobei du das free() vom Originalstring nicht vergessen solltest, sonst hast du Memory Leaks. Wäre mir allerdings zu aufwändig für sowas einfaches. Deswegen würde ich einen statischen Puffer konstanter Länge vorschlagen:

unsigned char key_buffer[16 + 1]; // statt tmp. Das +1 brauchst du nur für deine GetKBCInput
int next_key = 0;

// in send_keycode Zeichen in den Puffer tun
if (next_key >= 16) { return; } /* Fehler: Puffer ist voll */
key_buffer[next_key++] = keycode;
key_buffer[next_key] = 0; // Null-terminieren nicht vergessen (nur nötig für deine GetKBCInput)

// deine Ausgabe in GetKBCInput (was soll die Funktion eigentlich machen?)
monitor_write(key_buffer, ...)
return key_buffer;

Meine Frage wäre, was die GetKBCInput-Methode eigentlich machen soll. Soll die sowas wie getchar() sein? Dann sollte sie nur ein Zeichen (das älteste) aus key_buffer zurückgeben und dieses Zeichen aus key_buffer entfernen. Das kannst du durch Kopieren machen oder key_buffer als Ringpuffer implementieren.
« Letzte Änderung: 02. August 2014, 18:27 von Jidder »
Dieser Text wird unter jedem Beitrag angezeigt.

lolxdfly

  • Beiträge: 52
    • Profil anzeigen
Gespeichert
« Antwort #49 am: 02. August 2014, 18:54 »
Danke.. damit läuft es.
Und zu GetKBCInput: GetKBCInput soll den Input liefern, bis der Benutzer Return drückt. Hat also viel Ähnlichkeit mit getchar(); :)
Bei getchar(); werden jedoch nur die einzelnen chars returnt und ich fand, dass es für so einen Anwendungszweck besser einen ganzen string returnen sollte:
  if(GetKBCInput(COLOR_BLACK, COLOR_WHITE)=="lolxdfly")
monitor_write("Hello, KBC!\n", COLOR_BLACK, COLOR_WHITE);

lolxdfly

  • Beiträge: 52
    • Profil anzeigen
Gespeichert
« Antwort #50 am: 09. August 2014, 17:30 »
Eine kleine Frage: Sollte mir Folgendes Sorgen bereiten?

SMM: enter
EAX=00000001 EBX=80000b58 ECX=00000000 EDX=00000cfc
ESI=000e857d EDI=0003802d EBP=80000070 ESP=00006ee0
EIP=000ef7b2 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00cf9b00 DPL=0 CS32 [-RA]
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=     000fce38 00000037
IDT=     000fdcf0 00000000
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=000e8550 CCD=00000001 CCO=LOGICB 
EFER=0000000000000000
SMM: after RSM
EAX=00000001 EBX=80000b58 ECX=00000000 EDX=00000cfc
ESI=000e857d EDI=0003802d EBP=80000070 ESP=00006ee0
EIP=000ef7b2 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00c09b00 DPL=0 CS32 [-RA]
SS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
DS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
FS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
GS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     000fce38 00000037
IDT=     000fdcf0 00000000
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000000 CCD=ffffff9c CCO=EFLAGS 
EFER=0000000000000000
     0: v=21 e=0000 i=0 cpl=0 IP=0008:001007a0 pc=001007a0 SP=0010:001fffd4 EAX=00102100
EAX=00102100 EBX=00009500 ECX=000b8000 EDX=000003d5
ESI=00000000 EDI=00105000 EBP=001ffff0 ESP=001fffd4
EIP=001007a0 EFL=00000202 [-------] 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=     00102940 00000027
IDT=     00102980 000007ff
CR0=80000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000004 CCD=001fffd4 CCO=SUBL   
EFER=0000000000000000
     1: v=21 e=0000 i=0 cpl=0 IP=0008:001007a0 pc=001007a0 SP=0010:001fffd4 EAX=00102100
EAX=00102100 EBX=00009500 ECX=000b8000 EDX=000003d5
ESI=00000000 EDI=00105000 EBP=001ffff0 ESP=001fffd4
EIP=001007a0 EFL=00000202 [-------] 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=     00102940 00000027
IDT=     00102980 000007ff
CR0=80000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000004 CCD=001fffc8 CCO=EFLAGS 
EFER=0000000000000000
     2: v=21 e=0000 i=0 cpl=0 IP=0008:001007a0 pc=001007a0 SP=0010:001fffd4 EAX=00102100
EAX=00102100 EBX=00009500 ECX=000b8000 EDX=000003d5
ESI=00000000 EDI=00105000 EBP=001ffff0 ESP=001fffd4
EIP=001007a0 EFL=00000202 [-------] 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=     00102940 00000027
IDT=     00102980 000007ff
CR0=80000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000004 CCD=001fffc8 CCO=EFLAGS 
EFER=0000000000000000
     3: v=21 e=0000 i=0 cpl=0 IP=0008:001007a0 pc=001007a0 SP=0010:001fffd4 EAX=00102100
EAX=00102100 EBX=00009500 ECX=000b8000 EDX=000003d5
ESI=00000000 EDI=00105000 EBP=001ffff0 ESP=001fffd4
EIP=001007a0 EFL=00000202 [-------] 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=     00102940 00000027
IDT=     00102980 000007ff
CR0=80000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000004 CCD=001fffc8 CCO=EFLAGS 
EFER=0000000000000000
     4: v=21 e=0000 i=0 cpl=0 IP=0008:001007a0 pc=001007a0 SP=0010:001fffd4 EAX=00102100
EAX=00102100 EBX=00009500 ECX=000b8000 EDX=000003d5
ESI=00000000 EDI=00105000 EBP=001ffff0 ESP=001fffd4
EIP=001007a0 EFL=00000202 [-------] 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=     00102940 00000027
IDT=     00102980 000007ff
CR0=80000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000004 CCD=001fffc8 CCO=EFLAGS 
EFER=0000000000000000
     5: v=20 e=0000 i=0 cpl=0 IP=0008:00101aff pc=00101aff SP=0010:001fff98 EAX=00000004

...

  2125: v=20 e=0000 i=0 cpl=0 IP=0008:00100e2d pc=00100e2d SP=0010:001fffb8 EAX=00000000
EAX=00000000 EBX=00009500 ECX=000b8000 EDX=00000000
ESI=00000000 EDI=00105000 EBP=001fffc0 ESP=001fffb8
EIP=00100e2d EFL=00000202 [-------] 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=     00102940 00000027
IDT=     00102980 000007ff
CR0=80000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000044 CCD=00000000 CCO=EFLAGS 
EFER=0000000000000000
« Letzte Änderung: 09. August 2014, 17:32 von lolxdfly »

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #51 am: 09. August 2014, 19:28 »
Meinst du die Menge der Interrupts? Der Timer tickt ca. 18x pro Sekunde. Nach rund 2 Minuten sollte man da also über 2000 Interrupts erwarten.
Dieser Text wird unter jedem Beitrag angezeigt.

lolxdfly

  • Beiträge: 52
    • Profil anzeigen
Gespeichert
« Antwort #52 am: 09. August 2014, 20:19 »
Ja.
Habe jetzt den Timer schon etwas entschäft  :-)

 

Einloggen