Autor Thema: Userspace geht nicht  (Gelesen 8581 mal)

Martin Erhardt

  • Beiträge: 165
    • Profil anzeigen
Gespeichert
« am: 18. January 2013, 23:52 »
Ich will bei mir den Userspace implementieren aber es geht nicht;entweder passiert gar nichts (keine KBC Interrupts oder Multitasking "A"s"B"s)
meistens folgen aber in großer Zahl:
pflash_write: Unimplemented flash cmd sequence (offset 000000000001fff0, wcycle 0x0 cmd 0x0 value 0xda)oder qemu crasht:
qemu: fatal: Trying to execute code outside RAM or ROM at 0x0000000026f28966

EAX=00106621 EBX=00036d04 ECX=00000001 EDX=00106018
ESI=0005d980 EDI=0005d976 EBP=00067e5c ESP=00100009
EIP=26f28966 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 00cf9a00 DPL=0 CS32 [-R-]
SS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
DS =0001 00000000 00000000 00000000
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 =0028 00106040 00000080 0000e900 DPL=3 TSS32-avl
GDT=     0010a8c0 0000002f
IDT=     0010a0c0 000007ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=00106621 CCD=0010667a CCO=ADDB   
EFER=0000000000000000
FCW=037f FSW=0000 [ST=0] FTW=00 MXCSR=00001f80
FPR0=0000000000000000 0000 FPR1=0000000000000000 0000
FPR2=0000000000000000 0000 FPR3=0000000000000000 0000
FPR4=0000000000000000 0000 FPR5=0000000000000000 0000
FPR6=0000000000000000 0000 FPR7=0000000000000000 0000
XMM00=00000000000000000000000000000000 XMM01=00000000000000000000000000000000
XMM02=00000000000000000000000000000000 XMM03=00000000000000000000000000000000
XMM04=00000000000000000000000000000000 XMM05=00000000000000000000000000000000
XMM06=00000000000000000000000000000000 XMM07=00000000000000000000000000000000
/home/martin/git/el_toro_repo/build.sh: line 44: 12491 Aborted                 (core dumped) /usr/bin/qemu-system-x86_64 -cdrom ~/git/el_toro_repo/bootable.iso -d int -no-kvm -d int
oder:
qemu: fatal: Trying to execute code outside RAM or ROM at 0x0000000026f28966

EAX=00106621 EBX=00036d04 ECX=00000001 EDX=00106018
ESI=0005d980 EDI=0005d976 EBP=00067e5c ESP=00100009
EIP=26f28966 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 00cf9a00 DPL=0 CS32 [-R-]
SS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
DS =0001 00000000 00000000 00000000
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 =0028 00106040 00000080 0000e900 DPL=3 TSS32-avl
GDT=     0010a8c0 0000002f
IDT=     0010a0c0 000007ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=00106621 CCD=0010667a CCO=ADDB   
EFER=0000000000000000
FCW=037f FSW=0000 [ST=0] FTW=00 MXCSR=00001f80
FPR0=0000000000000000 0000 FPR1=0000000000000000 0000
FPR2=0000000000000000 0000 FPR3=0000000000000000 0000
FPR4=0000000000000000 0000 FPR5=0000000000000000 0000
FPR6=0000000000000000 0000 FPR7=0000000000000000 0000
XMM00=00000000000000000000000000000000 XMM01=00000000000000000000000000000000
XMM02=00000000000000000000000000000000 XMM03=00000000000000000000000000000000
XMM04=00000000000000000000000000000000 XMM05=00000000000000000000000000000000
XMM06=00000000000000000000000000000000 XMM07=00000000000000000000000000000000
/home/martin/git/el_toro_repo/build.sh: line 44:  5833 Aborted                 (core dumped) /usr/bin/qemu-system-x86_64 -cdrom ~/git/el_toro_repo/bootable.iso -d int -no-kvm -d int
Code:
http://uploadingit.com/file/b7dsflnyiislyhyq/el_toro_repo.zip

Wahrscheinlich ist die GDT falsch geladen zuminestens ist es komisch, dass sie fast gleich der IDT ist.
Sieht aus als ginge iwas mit dem TSS nicht und TSS überschreibt irgendwelche daten , Ich kann nur spekulieren.Ich habe den Quelltext wochenlang übrprüft und ägere mich jetzt wegen jedem feauture um Hilfe fragen zu müssen aber gut.
« Letzte Änderung: 19. January 2013, 15:09 von Martin Erhardt »

Martin Erhardt

  • Beiträge: 165
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 19. January 2013, 16:37 »
Hilfe! :wink:
Anfang von qemu.log bei pflash
SMM: enter
EAX=00000001 EBX=17fe1f30 ECX=02000000 EDX=00000cfc
ESI=000f28dd EDI=0003802d EBP=17fe1d50 ESP=00006eb0
EIP=000f2c4a 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=     000fd3a8 00000037
IDT=     000fd3e6 00000000
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=000f28b0 CCD=00000001 CCO=LOGICB 
EFER=0000000000000000
SMM: after RSM
EAX=00000001 EBX=17fe1f30 ECX=02000000 EDX=00000cfc
ESI=000f28dd EDI=0003802d EBP=17fe1d50 ESP=00006eb0
EIP=000f2c4a 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=     000fd3a8 00000037
IDT=     000fd3e6 00000000
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=00000000 CCD=00000000 CCO=EFLAGS 
EFER=0000000000000000
     0: v=20 e=0000 i=0 cpl=0 IP=0008:0000000000100472 pc=0000000000100472 SP=0010:000000000010600c EAX=0000000000106018
EAX=00106018 EBX=00036d04 ECX=00000001 EDX=00106018
ESI=0005d980 EDI=0005d976 EBP=00067e5c ESP=0010600c
EIP=00100472 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 =0028 00106040 00000080 0000e900 DPL=3 TSS32-avl
GDT=     0010a8c0 0000002f
IDT=     0010a0c0 000007ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=00000000 CCD=00105fdc CCO=EFLAGS 
EFER=0000000000000000
check_exception old: 0xffffffff new 0xd
     1: v=0d e=a0f8 i=0 cpl=0 IP=0008:0000000000001f81 pc=0000000000001f81 SP=0010:0000000000106018 EAX=0000000000106000
EAX=00106000 EBX=00036d04 ECX=00000001 EDX=00106030
ESI=0005d980 EDI=0005d976 EBP=00067e5c ESP=00106018
EIP=00001f81 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 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 =0028 00106040 00000080 0000e900 DPL=3 TSS32-avl
GDT=     0010a8c0 0000002f
IDT=     0010a0c0 000007ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=00106018 CCD=0020c030 CCO=SHLB   
EFER=0000000000000000
check_exception old: 0xffffffff new 0xd
     2: v=0d e=0470 i=0 cpl=0 IP=0008:0000000000001f81 pc=0000000000001f81 SP=0010:0000000000106000 EAX=0000000000106008
EAX=00106008 EBX=00036d04 ECX=00000001 EDX=00106060
ESI=0005d980 EDI=0005d976 EBP=00067e5c ESP=00106000
EIP=00001f81 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 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 =0028 00106040 00000080 0000e900 DPL=3 TSS32-avl
GDT=     0010a8c0 0000002f
IDT=     0010a0c0 000007ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=00106030 CCD=0020c060 CCO=SHLB   
EFER=0000000000000000
check_exception old: 0xffffffff new 0xd
     3: v=0d e=a000 i=0 cpl=0 IP=0008:0000000000001f81 pc=0000000000001f81 SP=0010:0000000000106008 EAX=0000000000105ff0
EAX=00105ff0 EBX=00036d04 ECX=00000001 EDX=001060c0
ESI=0005d980 EDI=0005d976 EBP=00067e5c ESP=00106008
EIP=00001f81 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 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 =0028 00106040 00000080 0000e900 DPL=3 TSS32-avl
GDT=     0010a8c0 0000002f
IDT=     0010a0c0 000007ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=00106060 CCD=0020c0c0 CCO=SHLB   
EFER=0000000000000000
check_exception old: 0xffffffff new 0xd
     4: v=0d e=0460 i=0 cpl=0 IP=0008:0000000000001f81 pc=0000000000001f81 SP=0010:0000000000105ff0 EAX=0000000000105ff8
EAX=00105ff8 EBX=00036d04 ECX=00000001 EDX=00106080
ESI=0005d980 EDI=0005d976 EBP=00067e5c ESP=00105ff0
EIP=00001f81 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 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 =0028 00106040 00000080 0000e900 DPL=3 TSS32-avl
GDT=     0010a8c0 0000002f
IDT=     0010a0c0 000007ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=001060c0 CCD=0020c180 CCO=SHLB   
EFER=0000000000000000
check_exception old: 0xffffffff new 0xd
     5: v=0d e=a0f8 i=0 cpl=0 IP=0008:0000000000001f81 pc=0000000000001f81 SP=0010:0000000000105ff8 EAX=0000000000105fe0
EAX=00105fe0 EBX=00036d04 ECX=00000001 EDX=00106000
ESI=0005d980 EDI=0005d976 EBP=00067e5c ESP=00105ff8
EIP=00001f81 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 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 =0028 00106040 00000080 0000e900 DPL=3 TSS32-avl
GDT=     0010a8c0 0000002f
IDT=     0010a0c0 000007ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=00106080 CCD=0020c100 CCO=SHLB   
EFER=0000000000000000
check_exception old: 0xffffffff new 0xd
     6: v=0d e=0440 i=0 cpl=0 IP=0008:0000000000001f81 pc=0000000000001f81 SP=0010:0000000000105fe0 EAX=0000000000105fe8
EAX=00105fe8 EBX=00036d04 ECX=00000001 EDX=00106000
ESI=0005d980 EDI=0005d976 EBP=00067e5c ESP=00105fe0
EIP=00001f81 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 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 =0028 00106040 00000080 0000e900 DPL=3 TSS32-avl
GDT=     0010a8c0 0000002f
IDT=     0010a0c0 000007ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=00106000 CCD=0020c000 CCO=SHLB   
EFER=0000000000000000
check_exception old: 0xffffffff new 0xd
     7: v=0d e=a0e0 i=0 cpl=0 IP=0008:0000000000001f81 pc=0000000000001f81 SP=0010:0000000000105fe8 EAX=0000000000105fd0
EAX=00105fd0 EBX=00036d04 ECX=00000001 EDX=00106000
ESI=0005d980 EDI=0005d976 EBP=00067e5c ESP=00105fe8
EIP=00001f81 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 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 =0028 00106040 00000080 0000e900 DPL=3 TSS32-avl
GDT=     0010a8c0 0000002f
IDT=     0010a0c0 000007ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=00106000 CCD=0020c000 CCO=SHLB   
EFER=0000000000000000
check_exception old: 0xffffffff new 0xd
     8: v=0d e=0410 i=0 cpl=0 IP=0008:0000000000001f81 pc=0000000000001f81 SP=0010:0000000000105fd0 EAX=0000000000105fd8
EAX=00105fd8 EBX=00036d04 ECX=00000001 EDX=00106000
ESI=0005d980 EDI=0005d976 EBP=00067e5c ESP=00105fd0
EIP=00001f81 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 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 =0028 00106040 00000080 0000e900 DPL=3 TSS32-avl
GDT=     0010a8c0 0000002f
IDT=     0010a0c0 000007ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=00106000 CCD=0020c000 CCO=SHLB   
EFER=0000000000000000
check_exception old: 0xffffffff new 0xd
     9: v=0d e=a0b8 i=0 cpl=0 IP=0008:0000000000001f81 pc=0000000000001f81 SP=0010:0000000000105fd8 EAX=0000000000105fc0
EAX=00105fc0 EBX=00036d04 ECX=00000001 EDX=00106000
ESI=0005d980 EDI=0005d976 EBP=00067e5c ESP=00105fd8
EIP=00001f81 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 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 =0028 00106040 00000080 0000e900 DPL=3 TSS32-avl
GDT=     0010a8c0 0000002f
IDT=     0010a0c0 000007ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=00106000 CCD=0020c000 CCO=SHLB   
EFER=0000000000000000
check_exception old: 0xffffffff new 0xd
    10: v=0d e=04d0 i=0 cpl=0 IP=0008:0000000000001f81 pc=0000000000001f81 SP=0010:0000000000105fc0 EAX=0000000000105fc8
EAX=00105fc8 EBX=00036d04 ECX=00000001 EDX=00106000
ESI=0005d980 EDI=0005d976 EBP=00067e5c ESP=00105fc0
EIP=00001f81 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 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 =0028 00106040 00000080 0000e900 DPL=3 TSS32-avl
GDT=     0010a8c0 0000002f
IDT=     0010a0c0 000007ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=00106000 CCD=0020c000 CCO=SHLB   
EFER=0000000000000000
check_exception old: 0xffffffff new 0xd
    11: v=0d e=a080 i=0 cpl=0 IP=0008:0000000000001f81 pc=0000000000001f81 SP=0010:0000000000105fc8 EAX=0000000000105fb0
EAX=00105fb0 EBX=00036d04 ECX=00000001 EDX=00106000
ESI=0005d980 EDI=0005d976 EBP=00067e5c ESP=00105fc8
EIP=00001f81 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 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 =0028 00106040 00000080 0000e900 DPL=3 TSS32-avl
GDT=     0010a8c0 0000002f
IDT=     0010a0c0 000007ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=00106000 CCD=0020c000 CCO=SHLB   
EFER=0000000000000000
check_exception old: 0xffffffff new 0xd
    12: v=0d e=0480 i=0 cpl=0 IP=0008:0000000000001f81 pc=0000000000001f81 SP=0010:0000000000105fb0 EAX=0000000000105fb8
« Letzte Änderung: 19. January 2013, 16:45 von Martin Erhardt »

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 19. January 2013, 17:32 »
Das einzige, was mir auf die Schnelle auffällt, ist, dass ein pushl $0 in INTR_STUB_EXCEPTION fehlt.
Dieser Text wird unter jedem Beitrag angezeigt.

Martin Erhardt

  • Beiträge: 165
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 19. January 2013, 17:51 »
Vielen Dank für die Info aber Ich habe trotzdem noch diesen RaceCondition ohne einen Exception oder Error zu bekommen

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 19. January 2013, 18:00 »
Welche Race Condition?
Dieser Text wird unter jedem Beitrag angezeigt.

Martin Erhardt

  • Beiträge: 165
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 19. January 2013, 18:05 »
Ja stimmt RaceCondition nennt man sowas nicht, weil das System ja so oder so nicht geht aber die Art wie qemu crasht nichts tut oder vor "Unimplemented flash cmd sequence"warnt, hat sicher was mit dem zeitlichen Verhalten bestimmter Einzeloperationen zu tun.
Zitat
Eine Race Condition (auf Deutsch „kritischer Wettlauf“, wörtlich „Wettlaufsituation“) ist eine Konstellation, in der das Resultat einer Operation vom zeitlichen Verhalten bestimmter Einzeloperationen abhängt. Sie stellen eine sehr schwer auffindbare Fehlerquelle dar, da das erfolgreiche Abschließen der bewussten Operation sozusagen vom Zufall abhängt – mal funktioniert das System, mal nicht.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 19. January 2013, 19:02 »
Nein, was passiert, ist das Qemu irgendwelchen RAM/ROM als Code ausführt, der nicht ausgeführt werden sollte. Von den Meldungen bezüglich irgendwas mit "Flash" solltest du dich nicht irritieren lassen. Genauso wie wenn der Compiler Fehlermeldungen oder Warnungen ausgibt, sollte man auch beim qemu.log vorgehen: Von oben. Fast immer ist es so, dass die erste Meldung/der erste Interrupt das Problem ist und der Rest sind Folgefehler.

Manchmal ist es besonders einfach festzustellen, bei was es sich um Folgefehler handelt. Zum Beispiel ist hier der Wert von EIP (0000000000001f81) total daneben:
     1: v=0d e=a0f8 i=0 cpl=0 IP=0008:0000000000001f81 pc=0000000000001f81 SP=0010:0000000000106018 EAX=0000000000106000
Das heißt der Fehler muss vorher passiert sein, denn der Interrupt davor hat plausible Werte. (Wenn er das nicht hätte, könnte man das selbe Prinzip nochmal anwenden, und noch einen Interrupt weiter oben analysieren.) Das Problem ist also zwischen dem Timer-IRQ und dem Zeitpunkt, zu dem EIP den Wert 1f81 hatte, aufgetreten. Da der Wert in EIP total daneben ist, und der häufigste Grund dafür ein defekter Stack ist (da normalerweise nur ret und iret EIP direkt laden), hab ich deine Interruptstubs in Verdacht. (Weitere Möglichkeit wäre der Taskwechsler.) Bei dem anfangs von mir genannten Problem mit dem Exceptionhandler ist zum Beispiel der Stack nicht balanciert. Vermutlich besteht da allerdings kein Zusammenhang zum ursprünglichen Problem, allerdings könnte das Beheben bei der Diagnose helfen und eventuell die Folgefehler verändern. Zum Beispiel könnte dann dein eigener Exceptionhandler anspringen.

Zur weiteren Diagnose des Problems kannst du einen Debugger verwenden. Die qemu-spezifische Einrichtung des Debuggers ist hier beschrieben: http://www.lowlevel.eu/wiki/Debugging#bochs_.2F_QEMU Du könntest zum Beispiel versuchen einen Breakpoint auf die IRET-Instruktion zu setzen (break *address). Beim Erreichen des Breakpoints kannst du den Stack analysieren. ESP sollte auf den Ziel-EIP-Wert Zeigen. Die beiden nächsthöheren Adressen sollten CS und EFLAGS beinhalten. Wenn sie das nicht tun, solltest du die Emulation neustarten und den Breakpoint weiter vorne ansetzen, um herauszufinden, welche Werte da auf dem Stack liegen (also wo sie herkommen), und warum da nicht die richtigen liegen. (Das ist die Debugmethode, die ich anwende, wenn ich keine Ahnung hab, was gerade passiert. Andere Vorgehensweisen sind bestimmt auch möglich.)
« Letzte Änderung: 19. January 2013, 19:05 von Jidder »
Dieser Text wird unter jedem Beitrag angezeigt.

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #7 am: 19. January 2013, 19:22 »
Ich habe glaube ich den Fehler gefunden. Bei einigen Exception wird ja ein Fehlercode auf den Stack gepusht. Deine zwei Makros dazu lauten ja INTR_STUB_EXCEPTION und INTR_STUB_ERROR:
.macro INTR_STUB_ERROR nr
.global intr_stub_\nr
intr_stub_\nr:
    pushl $\nr
    SAVE_CPU
    // call handler
    push %esp
    call handle_exception
    add $4, %esp
    RESTORE_CPU

    // Fehlercode und Interruptnummer vom Stack nehmen
    add $8, %esp

    iret
.endm

.macro INTR_STUB_EXCEPTION nr
.global intr_stub_\nr
intr_stub_\nr:
    pushl $\nr
    SAVE_CPU
    // call handler
    push %esp
    call handle_exception
    add $4, %esp
    RESTORE_CPU

    // Fehlercode und Interruptnummer vom Stack nehmen
    add $8, %esp

    iret
.endm

Aber du vergisst beim INTR_STUB_ERROR, den Fehlercode zu ersetzen, da dieser ja nicht vorhanden ist. So wie du es auch schon beim INTR_STUB_IRQ und INTR_STUB_SYSCALL gemacht hast.

Leider verstehe ich diese Qemulogfiles nicht richtig deshalb verwende ich ja auch Bochs  :-D.
Ich hoffe es ist dieser Fehler.
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

Martin Erhardt

  • Beiträge: 165
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 19. January 2013, 19:33 »
Das kann es nicht sein im Beispielkernel heißt es ja auch:
.macro intr_stub nr
.global intr_stub_\nr
intr_stub_\nr:
    pushl $0
    pushl $\nr
    jmp intr_common_handler
.endm

.macro intr_stub_error_code nr
.global intr_stub_\nr
intr_stub_\nr:
    pushl $\nr
    jmp intr_common_handler
.endm

// Exceptions
intr_stub 0
intr_stub 1
intr_stub 2
intr_stub 3
intr_stub 4
intr_stub 5
intr_stub 6
intr_stub 7
intr_stub_error_code 8
intr_stub 9
intr_stub_error_code 10
intr_stub_error_code 11
intr_stub_error_code 12
intr_stub_error_code 13
intr_stub_error_code 14
intr_stub 15
intr_stub 16
intr_stub_error_code 17
intr_stub 18

// IRQs
intr_stub 32
intr_stub 33
// usw. bis 47

// Syscall
intr_stub 48
Ich glaube bei diesen Exceptions wird automatisch von der CPU eine Errornumer gepusht.
@Jidder ja Ich werde was mit GDB versuchen was meinst du aber mit einem balancierten Stack?

Martin Erhardt

  • Beiträge: 165
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 19. January 2013, 19:44 »
Ich habe aber mehr das TSS im Verdacht weil da was neu dazugekommen ist Va. verstehe ich dass garnicht vollständig:
Was soll beispielsweise die Initialisierung mit 0x10:
static uint32_t tss[32] = { 0, 0, 0x10 };oder das einsetzen:
tss[1] = (uint32_t) (new_cpu + 1);wieso + 1 was soll da liegen und wieso tss[1]und nicht tss[0]

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 20. January 2013, 11:53 »
http://www.lowlevel.eu/wiki/TSS

Das sind die Felder esp0 und ss0.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 20. January 2013, 13:47 »
Wenn du ja sehen könntest was du alles geändert hast seit es das lezte mal lief, und 'git diff' nicht lauter uralte fixes auflisten würde die mit deinem problem nichts zu tun haben, dann wärst du eventuell drauf gekommen, dass der Fehler durch diese sinnlose Änderung ausgelöst wird:
diff --git a/src/idt.c b/src/idt.c
index 023ef97..8651541 100644
--- a/src/idt.c
+++ b/src/idt.c
@@ -51,7 +51,7 @@ static void idt_set_entry(int i, void (*fn)(), unsigned int selector,
     idt[i].selector = selector & 0xffffLL;
     idt[i].ignore = 0x00;
     idt[i].flags = flags & 0xffLL;
-    idt[i].isr_offset2 = (handler>> 16) & 0xffffLL;
+    idt[i].isr_offset2 = (handler<< 16) & 0xffffLL;
 }
 void init_idt(void)
 {
mit 'git checkout src/idt.c' läuft es also zumindest schon mal.

Sonstiges:
Du willst bestimmt nicht deine Assembler Files in der .gitignore haben. Also schmeiß die zeile *.S da raus.

Ich habe glaube ich den Fehler gefunden. Bei einigen Exception wird ja ein Fehlercode auf den Stack gepusht. Deine zwei Makros dazu lauten ja INTR_STUB_EXCEPTION und INTR_STUB_ERROR:
[…]
Aber du vergisst beim INTR_STUB_ERROR, den Fehlercode zu ersetzen, da dieser ja nicht vorhanden ist. So wie du es auch schon beim INTR_STUB_IRQ und INTR_STUB_SYSCALL gemacht hast.

Ja, das ist zumindest ein Fehler. Nur nicht bei INTR_STUB_ERROR, da er das für die Exceptions nutzt, die einen Error-Code liefern. Aber bei INTR_STUB_EXCEPTION fehlt ein push $0, da das für die Exceptions genutzt wird die keinen Error-Code liefern.
« Letzte Änderung: 20. January 2013, 13:59 von MNemo »
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

Martin Erhardt

  • Beiträge: 165
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 20. January 2013, 15:49 »
Sonstiges:
Du willst bestimmt nicht deine Assembler Files in der .gitignore haben. Also schmeiß die zeile *.S da raus.
Wie bin ich eig auf die Idee gekommen? :)
idt[i].isr_offset2 = (handler<< 16) & 0xffffLL;Ich dachte x86 ist Little Endian oder gilt dass nur für die Register?

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 20. January 2013, 15:51 »
Das gilt für alles. Rechne das mal mit handler = 0x12345678 durch:

handler << 16 = 0x1234567890000
(handler << 16) & 0xffffL = 0

Das kann ja irgendwie nicht stimmem ;)
Dieser Text wird unter jedem Beitrag angezeigt.

Martin Erhardt

  • Beiträge: 165
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 20. January 2013, 16:03 »
mhm ja stimmt jetzt gez :D Vielen Dank
Little Endian hat mich da bloß ein verwirrt.
Ich hätte es natürlich auch so lassen können wo es doch funktionierte aber ich habe gedacht dass die Handleradressen unter 0x10000 lägen und dieser "Fehler" daher keine auswirkungen hätte.
« Letzte Änderung: 20. January 2013, 16:42 von Martin Erhardt »

 

Einloggen