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 2 3 [4] 5 6 ... 28
61
Lowlevel-Coding / Re: Qemu
« am: 22. January 2013, 16:42 »
@Martin Erhardt: Ich weiß ehrlich gesagt nicht so ganz was ich da machen soll, wenn ich einfach nur die Kernel-Datei auf ein image tu, klappt das doch sicher nicht, oder?
doch also es gibt ja den Multiboot standard nach dem der Multiboot Header in den ersten 8KB sein muss, gefolgt vom kernel.
[…]
Wenn Start.S so ungefähr aussieht dann geht dass
Nein. Gans so einfach ist das nicht. Das muss schon ein bootbares Image mit einem bootloader sein, der den kernel dann auch lädt. Was aber mit El-Torito und Grub (zumindest auf Linux) relativ einfach geht.

qemu-system-x86_64w blabla test lalalalalapassiert ebenfalls überhaupt nichts, also auch keine Fehlermeldung, garnichts. Auch einfach so die qemu-system-x86_64w.exe zu starten bewirkt ->nichts<-... :(
das sollte nicht passieren. Ich habe aber leider keine Ahnung was da schief geht.
62
Lowlevel-Coding / Re: Qemu
« am: 22. January 2013, 16:04 »
Fürs erste könnte auch ein:
qemu-system-FOO.exe -kernel DEINKERNEL
reichen.
63
LOL - Welcher Depp schmeisst sein Geld zum Fenster raus für so Anfänger wie dich ?! Wie wäre es erst mal was gescheites zu lernen, bevor du dich an einem so ambitionierten Projekt beteiligst.
Also ich verstehe MikyGonzalez frage nicht ganz, aber WTF soll dieser Kommentar?
64
Lowlevel-Coding / Re: Userspace geht nicht
« 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.
65
Lowlevel-Coding / Re: kprintf - Problem
« am: 13. January 2013, 17:40 »
Edit: SCREEN_WIDTH ist 80 […]

Hat vielleicht jemand die Lösung für das \n Problem???
Ja!
Und was willst du als Index für Video?
  Die Nummer des Bytes für das Zeichen, da es zwei Byte pro Zeichen sind, also (2 × Y × maxX + 2 × X), bzw. 2×(Y × maxX + X)
66
Lowlevel-Coding / Re: kprintf - Problem
« am: 13. January 2013, 17:31 »
Ich habe auch keine Erklärung dafür aber es funktioniert bei beiden.
Wenn ich Hallo schreibe erscheint: Hallo_
Ja, 0 * 80 = 0 * 160. Der Fehler tritt erst ab der zweiten Zeile(y > 0) auf.

Zitat
GCC will bei mir ein einfaches Backslash nicht akzeptieren. GCC vermutet gleich, dass ein Steuerzeichen vorhanden ist.
Das du das als doppelten \ schreiben musst ist klar. Aber ein '\\' ist ein einfacher Backslash, den du mit putc('\\') ausgeben kannst, ein if (*fmt == '\\') ist also überflüssig.
67
Lowlevel-Coding / Re: kprintf - Problem
« am: 13. January 2013, 16:52 »
@MNemo:
1. Im Wikiartikel steht das auch so. Ich dachte auch man müssten
tmp = row * SCREEN_WIDTH + col *2;nehmen.
Du scheinst mich da falsch verstanden zu haben.
Was willst du den in TMP drin haben?
  Die Nummer des Zeichens an dem der Cursor sein soll; also (Y × maxX + x).
Und was willst du als Index für Video?
  Die Nummer des Bytes an für das Zeichen, da es zwei Byte pro Zeichen sind, also (2 × Y × maxX + 2 × X), bzw. 2×(Y × maxX + X)

Aber egal wie du SCREEN_WIDTH gewählt hast, Anzahl der Zeichen (80) oder Anzahl der Bytes (160), bei einem passt es nicht.


Zitat
2. Ich weiß das ein Backslash kein Sonderzeichen ist. Es ist halt Standard es mit \\ zu schreiben.
Warum machst du dann eine Sonderbehandlung? Dafür gibt es keinen Grund.
68
Lowlevel-Coding / Re: kprintf - Problem
« am: 13. January 2013, 15:46 »
Es gibt da eine kleine Diskrepanz:
tmp = row * SCREEN_WIDTH + col;
vs.
video[(cursor_y * SCREEN_WIDTH) + cursor_x * 2] = c;
Ersteres geht von SCREEN_WIDTH == 80 letzteres von SCREEN_WIDTH==160 aus.

btw: ein Backslash ist kein Sonderzeichen. ('\\' == 0x5C)
69
Softwareentwicklung / Re: Batch - Dateiverwaltung
« am: 03. January 2013, 15:05 »
Ich habe doch mal hier im Thema irgendwo gelesen dass ein C compiler den C code in Assembler verwandelt, wenn ich es richtig verstanden habe.
C -> Assembler -> 101 ist es so richtig?
Der gcc macht das. Eine menschenlesbare Form des Maschinencodes(Assembler) zwischen zu schalten ist aber nicht zwingend notwendig, da im normal Fall ja kein Mensch mehr drüber schaut. Andere Compiler machen das also gegebenenfalls anders.
Zitat
wenn ja könnte man dann dazwischen den Assembler teil abzapfen? sozusagen dass man C in Asm umwandeln kann. Dass würde doch theoretisch gehen, und wäre praktisch :D Oder gibt es sowas schon als richtiges Programm?
Bei gcc ist das Abzapfen kein Problem. "gcc -S" und je nach dem wie sehr du deinen C-Code wieder erkennen willst noch die passenden Optimierungsflags. (siehe unten).
Aber da Assembler ja wie gesagt nur eine menschenlesbare Form von Maschinencode ist, kann man sich den generierten Code immer auch wieder von einem Disassembler zurück dolmetschen lassen. Mit ein paar Abstrichen bei der Lesbarkeit, da z. B. ein jz und ein je das selbe sind, und Lebles zum Großteil fehlen.

Beispielsweise generiert dir "gcc -S -O3" für ein
Code: (test.c) [Auswählen]
int div10(int a) { return a / 10; }
Code: (test.s) [Auswählen]
.file "test.c"
.text
.p2align 4,,15
.globl div10
.type div10, @function
div10:
.LFB0:
.cfi_startproc               ; [EDIT] nach Intel-Syntax übersetzt
movl %edi, %eax           ; mov eax, edi
movl $1717986919, %edx    ; mov edx, 1717986919
sarl $31, %edi            ; sar edi, 31
imull %edx                 ; imul edx
sarl $2, %edx             ; sar edx, 2
subl %edi, %edx           ; sub edx, edi
movl %edx, %eax           ; mov eax, edx
ret
.cfi_endproc
.LFE0:
.size div10, .-div10
.ident "GCC: (GNU) 4.7.2 20120921 (Red Hat 4.7.2-2)"
.section .note.GNU-stack,"",@progbits
Ab und zu guck ich mir mal den generierten Code an, aber sinnvoll damit arbeiten kann man IMO nicht wirklich.

Und wegen der Performance C vs. ASM: der Generierte Code ist mit Sicherheit besser als ein "div". Wärst du darauf gekommen?
70
Lowlevel-Coding / Re: Qemu stürtzt ab bei Multitasking
« am: 30. December 2012, 20:09 »
while (1); sollte auch gehen.
Nein das ist doch viel zu einfach  :-D

Ich glaube ich hatte zu erst ein „cli; hlt“ im Kopf und bin dann einfach bei asm geblieben.
71
Lowlevel-Coding / Re: Qemu stürtzt ab bei Multitasking
« am: 30. December 2012, 19:45 »
Abschließend wollte ich noch fragen was bringt der Sprung an 1b genau und was soll das 1: davor.
'1:' ist ein Label zu dem du springen kannst, und weil es von dem mehrere geben kann bzw. gibt steht das b im sprung für 'backward'
es ist also ein Sprung zum letzten label 1 vor dem jmp.

entsprechend würde jmp 1f (f für forward) zum nächsten Label '1' springen, also in dem fall von task_a zu dem dem in task_b und in task_b wurde es vermutlich einen fehler auslösen weil es danach kein weiteres Label '1' mehr gibt
72
Lowlevel-Coding / Re: Qemu stürtzt ab bei Multitasking
« am: 30. December 2012, 11:24 »
Ähm Ich habe jetzt alle Warnings gefixt und asm("1: jmp 1b"); aber es tut sich immer noch nichts.
MNemo hast du vllt sonst noch was gemacht?
Ich denke, ich habe einfach nur was Jidder auch bemängelt hat ordentlich gefixt ;) (Siehe angehängter patch)

Sollte irgend eine Änderung dir nicht sofort einleuchten, frag einfach!

noch ein TIPP: mach mehr commits, wenn man sich git diff anguckt und da sind nur ein haufen nicht zusammengehöriger änderungen zu sehen, dann macht das das leben unnötig schwer.
73
Lowlevel-Coding / Re: Qemu stürtzt ab bei Multitasking
« am: 29. December 2012, 00:19 »
Tipp: Nutze nicht nur -Wall sondern auch -Werror (also lass dich nicht nur mit Warnungen zu bombardieren, sondern behebe sie auch)

(beim Rest war Jidder schneller)

[Edit]
Bei mir läuft es jetzt.
In den Tasks fehlt noch etwas wie:
 asm("1: jmp 1b");
am ende, damit die nicht returnen
74
Lowlevel-Coding / Re: MyOS - CDROM Verzeichnis auslesen
« am: 30. November 2012, 14:21 »
Was genau passiert denn? Wird was falsches ausgegeben oder schmiert alles ab?

Du legst nämlich 'dr' als lokale variable auf dem Stack an.
Dabei ist nur 1 Byte für den Namen reserviert, weil identifier vom type char[1] ist.
Wenn du dann die Struktur überschreibst (mit einem ganzen Sektor, mehr als den reservierten Bytes),
dann garantiert dir keiner, dass du damit nicht die Rücksprungadresse von LBASectorRead(falls das nicht geInlined wird) überschreibst, oder dass dir später niemand die Daten verpfuscht (Parameter und Rücksprungadresse von printf)
75
Offtopic / Re: Screen of Death
« am: 30. November 2012, 13:53 »
Man kann immerhin deutlich eine Entwicklung deiner Programmierfähigkeiten feststellen.  :wink:
Man beachte die Zeilen 307-384 im Vergleich zu 669-672.
76
Lowlevel-Coding / Re: Undefined reference to XXX
« am: 29. November 2012, 18:18 »
lass dir mal die Symbole ausgeben die du in der main.o definiert hast:
$ nm obj/main.ovielleicht packt dein Compiler ja Underscores davor.
77
OS-Design / Re: Multiboot Information Structure
« am: 28. November 2012, 21:13 »
Ich habe das standard Package von Fedora 17

http://koji.fedoraproject.org/koji/buildinfo?buildID=358720
78
OS-Design / Re: Multiboot Information Structure
« am: 28. November 2012, 20:13 »
Was für eine Qemu-Version nutzt du?

Bei mir (QEMU emulator version 1.0.1) gibt es 0x4f für die Flags aus. (Und ich habe nur #include <stdio.h> auskommentiert damit es über Haupt Compiler, weil ich da keine 32-Bit Version von habe).
79
OS-Design / Re: Multiboot Information Structure
« am: 28. November 2012, 19:20 »
-Was passiert denn durch die cmdline?
Nichts, es ist nur ein weiteres Feld in der mb_info, das erstens nicht null sein sollte, und dessen wert du überprüfen kannst. (ein pointer auf den string, den du als cmdline übergeben hast)

Ich bin mit meinem Rumspekulieren hier jetzt auch schon am Ende. Für weiteres wäre wie Svenska schon sagt, ein Binarry oder Compilierender Code(mit Makefile, linkskript etc.) nützlich.
80
OS-Design / Re: Multiboot Information Structure
« am: 26. November 2012, 23:39 »
Ja, das mit den Flags hast du richtig verstanden.

Ich fange dann jetzt auch mal an zu Spekulieren:
- Paging, und GDT hast du noch nicht angefasst?
- Du löschst den Bildschirm mit 0x00, statt mit grauen Leerzeichen (0x20 0x07) ?, evtl. läuft da was schief und du überschreibst die struktur
- dann sind MB_Magic(eax), MB_Info(ebx), mb_info->flags interresant
- Interrupts sind aus ?
- sind wirklich alle Felder 0, oder hast du nur stichprobenartig überprüft?
- du könntest mal eine cmdline angeben: qeum -kernel foo -append "cmdline"
  und gucken ob die korrekt übergeben wird.
Seiten: 1 2 3 [4] 5 6 ... 28

Einloggen