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

Seiten: 1 ... 4 5 [6] 7 8 ... 28
101
Offtopic / Re: Welchen Desktop benutzt ihr?
« am: 12. July 2012, 14:14 »
Hm… also ich habe schon abgestimmt, und zwar für KDE. Aber ich benutze KDE 4.8. Ist meine stimme jetzt zu KDE 3 gewandert?
102
OS-Design / Re: rudimentärer Tastaturtreiber geht nicht
« am: 12. July 2012, 13:58 »
Das das int 0x21 nur zum testen da war war mir klar, aber IRQs löst du damit nicht aus. Sondern nur ganz normale Soft-Interrupts die du nicht mal mit 'cli' verhindern könntest.

if(cpu->intr != 0x20)
  kprintf("Interrupt: %d\n", cpu->intr);
Weil der Timer dir sonst, doch ziemlich penetrant, den Bildschirm zu spamt. EOIs müssen natürlich trotzdem gesendet werden.

[Edit]
Getestet habe ich das übrigens mit
make; qemu-system-x86-64 -kernel kernel

mit und ohne -no-kvm beides hat funktioniert
Zitat von: qemu-system-x86-64 --version
QEMU emulator version 1.0 (qemu-kvm-1.0), Copyright (c) 2003-2008 Fabrice Bellard
103
OS-Design / Re: rudimentärer Tastaturtreiber geht nicht
« am: 12. July 2012, 13:31 »
Ich habe nur asm volatile ("int $0x21"); (in der init.c) auskommentiert und
if(intr != 0x20) vor dem print(INT#) (im irq-handler) eingefügt. Und es funktioniert alles wunder bar.

104
Lowlevel-Coding / Re: «push ax» Problem
« am: 10. July 2012, 23:22 »
push ax pushd dir 16 Bit (ax) auf den Stack. Du gehst in deinem Code aber von 32 Bit (ebp + 4 + n*4).
Versuch also entweder push eax oder (ebp + 4 + n*2).

Bei push 42 wird Standard mäßig die volle Wortbreite (hier 32 Bit) benutzt. Alternativ dürfte push word 42 nur 16 Bit pushen
105
Das Wiki / Re: kann mich nicht im Wiki anmelden
« am: 10. July 2012, 20:13 »
Forum und Wiki haben keine gemeinsame Benutzer Verwaltung.
Du musst also ein separates Wiki-Konto erstellen.
106
Lowlevel-Coding / Re: Long Mode, gdt und paging
« am: 01. July 2012, 20:56 »
Welche Flags meinst du? In CR3 die PWT und PCD liegen im unter 32-Bit Wort und du kannst sie ganz normal - wie auch die Adresse - setzten, falls du willst.

Ich sehe gerade, mein Code sieht dem von AMD Manual Volume 2 Seite 419 zum verwechseln ähnlich :evil: (dabei ist C&P eigentlich gar nicht mein Ding) :
[BITS 32]

; enable PAE
    mov  eax, cr4
    bts  eax, 5
    mov  cr4, eax

; load pml4
    mov  eax, [pml4_base]
    mov  cr3, eax

; set LM bit
    mov  ecx, 0xc0000080
    rdmsr
    bts  eax, 8
    wrmsr

; finally enable Long Mode by enabling paging
    mov  eax, cr0
    bts  eax, 31
    mov  cr0, eax

    jmp  CODE64_SEL:_start64
107
Lowlevel-Coding / Re: Long Mode, gdt und paging
« am: 01. July 2012, 19:05 »
Nein, 64-Bit gibt es wirklich erst im Long Mode.
108
Lowlevel-Coding / Re: Textausgabe
« am: 10. April 2012, 13:57 »
Wenn du das
[…]ich dachte, dass grub die GDT so initialisiert, dass man mit der Adresse 0 bei 0x10000 landet.
Dann linkst du das vermutlich auch falsch. Hast du das Tutorial schon gelesen?
109
Lowlevel-Coding / Re: Textausgabe
« am: 10. April 2012, 13:20 »
Ich schreibe übrigens an die Adresse 0xa8000, weil der Kernel nach dem Laden ja bei 0x10000 liegt. Wenn ich das dann aber in Virtualbox ausprobiere, dann startet Grub das System, und nichts passiert. Hat jemand eine Idee?
Wo dein Kernel liegt ist irrelevant. Wenn ich das richtig verstanden habe, hast du die GDT noch nicht angepasst und Paging auch noch nicht eingeschaltet. Damit ist die Basis der Segmente bei 0 und alle Adressen werden 1:1 als physische Adressen übernommen. Du landest also mit 0xa8000 nicht bei 0xb8000 wo du hin willst sondern bei 0xa8000.
110
Lowlevel-Coding / Re: Tastaturtreiber
« am: 05. April 2012, 17:37 »
Jetzt wird qemu nach init_idt schwarz :|

Dann hast du wohl noch andere Änderungen gemacht. Versuch es doch mal mit dem Quellcode den du hier hochgeladen hast.
111
Lowlevel-Coding / Re: Tastaturtreiber
« am: 05. April 2012, 16:39 »
Die sollten jetzt auch übereinstimmen. Testest eventuell noch die alte Version? ('make clean')
112
Lowlevel-Coding / Re: Tastaturtreiber
« am: 05. April 2012, 16:13 »
Also die Zeile ist bei mir im Moment der einzige Unterschied zu dem von dir hochgeladenen Code. Und es gibt kein GPF.

Stimmt jetzt wenigsten dein eigener CPU dump mit dem von QEMU überein?
Deine GDT ist zwar falsch(64bit segmente im Protected mode), aber wenn QEMU das stören würde müsste es schon beim neuladen der Segmentregister meckern.
113
Lowlevel-Coding / Re: Tastaturtreiber
« am: 05. April 2012, 15:33 »
Du hast 16-Bit Interrupt Desptoren angelegt.
Was hab ich da falsch gemacht? Wie mach ich's richtig?

Du hast vergessen das Flag für 32-Bit Descriptoren zu setzen.

Füge die mit '+' gekennzeichnete Zeile in deinen Code ein.
114
Lowlevel-Coding / Re: Tastaturtreiber
« am: 05. April 2012, 14:57 »
Du hast 16-Bit Interrupt Desptoren angelegt.

diff --git a/src/kernel/interrupt/idt.c b/src/kernel/interrupt/idt.c
--- a/src/kernel/interrupt/idt.c
+++ b/src/kernel/interrupt/idt.c
@@ -21,6 +21,7 @@ static void set_interrupt(int i, uint32_
   //obere 32-Bit
   idt[i] |=(
        ( type << 8 )   |
+       ( 1 << 11) |
        ( (dpl&3) << 13 )   |
        ( (present&1) << 15)|
        ( offset & 0xffff0000 )

Ich würde dir übrigens raten sämtliche Compiler-Warnungen  auszumerzen. Dein set_gdt_entry z.B. enthält nen fehler auf den du sogar hingewiesen wirst.
115
Lowlevel-Coding / Re: Tastaturtreiber
« am: 04. April 2012, 18:28 »
Wie baust du den Kernel? Das mal zu testen zu können würde vermutlich schneller zu Erfolg führen als nur den Quellcode an zu sehen.

Was mir so aufgefallen ist:
cpu.S:
  push-/pop_cpu: rufst du zwar nirgends auf, aber das Funktioniert so natürlich nicht. als Makro würde schon eher gehen.

irq/handler.S:
  irq_handler0x21: ist weder leer, noch werden die Register ordnungsgemäß wieder hergestellt.

syscall:
  int_handler0x30: ignoriert den rückgabe wert von syscall

testhandler:
  das geht so nicht, einfach asm("iret") in ne C-Funktion reinhauen. Guck dir mal `objdum -d testhandler.o` an. Da siehst du dass der stack erst noch dem iret, mit leave wieder aufgeräumt wird.

[Edit]
sprintfr:
  du legst nirgends einen puffer für dein rückgabe string an! du verwendest rs uninitialisiert. das ist pures Glück wenn das mal gut geht.
116
Softwareentwicklung / Re: Qemu und Oracle...
« am: 04. April 2012, 17:25 »
Sorry, ich dachte nur die VMs starten nicht. Siehe aber meine edits.
117
Softwareentwicklung / Re: Qemu und Oracle...
« am: 04. April 2012, 17:19 »
In VirtualBox rechte Maustaste auf deine virtuelle Maschine und dann "Show Log…". (Die liegen aber auch in <VirtualBox VMs>/(myVM)/Logs)

Und was steht da bitteschön drin?
Da steht hoffentlich Hinweise auf den Grund für das Fehlverhalten.


[edit]
in ~/.VirtualBox/ liegen auch noch logs
118
Softwareentwicklung / Re: Qemu und Oracle...
« am: 02. April 2012, 18:43 »
mir wurde vorher gesagt, dass rmmod sich in /sbin befindet
Ja. Da sich /sbin aber für gewöhnlich in der PATH-Variable von root befindet, und ohne root rechte rmmod nicht tut, ist die Pfadangabe überflüssig.

Zitat
# /sbin/rmmod kvm
ERROR: Module kvm does not exist in /proc/modules
# /sbin/rmmod kvm_intel
ERROR: Module kvm_intel does not exist in /proc/modules
Sorry. Dann habe ich wohl daneben geraten. Bei mir lag das an kvm. Dann guck mal in den logs von VirtualBox was da so steht.
119
Softwareentwicklung / Re: Qemu und Oracle...
« am: 02. April 2012, 17:39 »
VirtualBox läuft nicht mit KVM-Kernel-Modul. (Das wird eine Abhängigkeit von Qemu gewesen sein.)

Das kvm-modul musst du also vorher "unloaden"

So, oder so ähnlich:
# rmmod kvm_intel
# rmmod kvm
120
Dein outb ist korrekt.

Ich benutzte diese (u)intNN_t Definitionen weil C mir z.B. nicht garantiert das long 32-bit ist. Es ist halt gcc-only (und auch nur neuere).  Aber ich glaub es geht auch irgendwie die stdint.h von gcc zu nehmen, das wäre dann noch besser.
Seiten: 1 ... 4 5 [6] 7 8 ... 28

Einloggen