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

Seiten: 1 2 [3] 4 5 ... 81
41
Lowlevel-Coding / Re: Probleme mit Interrupts/Exceptions
« am: 05. November 2014, 19:34 »
Bist nicht der erste, dem das passiert. Das ist zwar im Artikel erwähnt, aber sowas überliest man ja schnell.
42
Lowlevel-Coding / Re: Probleme mit Interrupts/Exceptions
« am: 05. November 2014, 19:21 »
Wie viele Einträge hat deine GDT und hat sie wirklich so viele Einträge?
43
Lowlevel-Coding / Re: Probleme mit Interrupts/Exceptions
« am: 04. November 2014, 22:29 »
An dem Code, den du gepostet hast, liegts vermutlich nicht direkt. Zumindest kann ich da nichts entdecken. Ich halte es für am wahrscheinlichsten, dass anderer Code dazwischen funkt und die Interrupts sabotiert.

Hast du zum Beispiel diese Zeilen in entry.S aus dem Tutorial (ich nehme mal an dem folgst du) beachtet?
    // Falls wir jemals aus init zurueckkommen sollten, sperren wir die Interrupts und
    // halten einfach den Prozessor an. (man braucht ihn ja nicht unnötig heißlaufen lassen.)
_stop:
    cli
    hlt
44
Lowlevel-Coding / Re: Probleme mit Interrupts/Exceptions
« am: 03. November 2014, 22:01 »
Ja, wenn du IRQs am PIC und in der CPU (mit STI) aktiviert hast, solltest du zumindest Timer Interrupts bekommen. Für Keyboardinterrupts musst du eventuell den Puffer vorher leeren, und bei jedem Keyboard-Interrupt ebenfalls aus dem Puffer lesen.
45
Lowlevel-Coding / Re: GP bei Taskwechsel
« am: 03. November 2014, 20:34 »
Ich bin mir auch nicht mehr ganz sicher, wie das im Long Mode funktioniert. Gedanklich war ich mit meinen Antworten noch bei 32-Bit. Ich finde das mit RPL=3 auch gerade nicht.

Dass der DPL und RPL von SS mit dem CPL übereinstimmen muss, steht in Kapitel 5.7 von Volume 3. Aber ich glaube auch da greifen 64-Bit-Sonderregeln. Da müsste sich mal jemand äußern, der das nicht schon wieder alles vergessen hat.
46
Lowlevel-Coding / Re: Probleme mit Interrupts/Exceptions
« am: 03. November 2014, 20:21 »
Hi und willkommen an Board!

Zitat
#define IDT_ENTRIES 1
Das sollte wohl mindestens 49 sein.
47
Lowlevel-Coding / Re: GP bei Taskwechsel
« am: 02. November 2014, 22:42 »
Du musst den CPL (Current Privilege Level) 3 anfordern, wenn du in den User Mode willst. Das heißt du musst CS mit 0x18 + 3 = 0x1B laden.

Wenn Wert 4 und 5 in deinem Stacktrace im Screenshot die Werte für ESP und SS für Ring 3 sind, sehen die außerdem verkehrt aus. ESP liegt auf dem aktuellen Stack (vgl. RSP), das heißt, dass du den Kernel Stack überschreiben würdest. Für SS muss außerdem ebenfalls ein Selektor mit DPL und CPL = 3 angegeben werden, da CPL von SS und CS übereinstimmen müssen.
48
Lowlevel-Coding / Re: GCC Fehler
« am: 28. October 2014, 18:13 »
Wie genau rufst du den Compiler auf? Woher kommt der Compiler (aus welcher Distribution? Oder selbstgebaut? etc.)? Für welches Target ist der Compiler? Mit welchen Flags kompilierst du? Damit könnte ich das Problem eventuell nachvollziehen.
49
Lowlevel-Coding / Re: GCC Fehler
« am: 28. October 2014, 00:36 »
Nein, das sollte so schon richtig sein.
50
Lowlevel-Coding / Re: GCC Fehler
« am: 27. October 2014, 18:51 »
Ich vermute -Wall sollte reichen. Wenn du Errors statt Warnings haben willst, dann noch -Werror dazu. Und -pedantic nehm ich auch gerne noch. Siehe auch https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
51
Lowlevel-Coding / Re: GCC Fehler
« am: 19. October 2014, 01:16 »
Leider weiss ich nicht mehr die Stelle, von der ich diesen Code habe. Aber er macht es auch, wenn nur ein Parameter übergeben wird.
Das solltest du klären. C ist eine ziemlich simpel aufgebaute Sprache. Du solltest auf jeden Fall rauskriegen können, wie "malloc" deklariert ist. Ansonsten weg mit dem Code, den du dir da besorgt hast. Das klingt nicht gut, wenn du nicht weißt, wie der zu verwenden ist. Vor allem wenn der so einen Standardnamen wie "malloc" hat, ist das ein schlechtes Zeichen, wenn der nicht einfach so funktioniert. Vielleicht war der Code nie dafür gedacht wie du ihn verwendest.

Meine Theorie ist sonst, dass du den dazugehörigen Header nicht eingebunden hast, in dem diese Funktion deklariert ist, oder diese Funktion nicht korrekt deklariert ist.

Was genau sind deine Compilerflags?
52
Lowlevel-Coding / Re: GCC Fehler
« am: 16. October 2014, 19:24 »
Und wie ist deine malloc-Funktion deklariert?
53
Lowlevel-Coding / Re: C-Kernel mit GRUB
« am: 15. October 2014, 18:01 »
# sudo cp kernel /mnt                                     => Muss diese Zeile nicht "sudo cp kernel.bin /mnt" heißen ?
Ja. Das ist einfach der Dateiname.

dann auf dem Image ausführen? Oder muss ich dazu extra ein Loop-Device erstellen?
Wenn ich das GRUB-Handbuch richtig verstehe, heißt der Befehl device (fd0) test.img, dass du GRUB verklickern willst, dass das BIOS das Image später beim Booten als erstes Diskettenlaufwerk bezeichnen wird. Du brauchst dafür also kein richtiges Diskettenlaufwerk. Wenn ich das Tutorial richtig verstehe, musst du einfach grub unter deinem Linux starten und anschließend die Befehle dort eingeben.
54
Offtopic / Re: Besonders kompartible Tablets?
« am: 26. August 2014, 02:51 »
Ich finde ein IBM-PC-Tablet sollte eher einen Anschluss für einen DIN-Stecker haben ;)

Ansonsten kommt es sicherlich auch drauf an, was du dir genau unter dieser Aussage vorstellst:
Ich denke es ist ganz praktisch für unterwegs und auch um einfach mal ne  Aufgabe woanders als am Computer weiter zu machen.
Was genau machst du denn am Computer? Und was genau willst du mit einem Tablet machen?
55
Softwareentwicklung / Re: [All In One]-Question lolxdfly
« 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.
56
Softwareentwicklung / Re: [All In One]-Question lolxdfly
« 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.
57
tyndur / Re: VFS und Ressourcen
« am: 29. July 2014, 17:07 »
In meiner Vorstellung sieht das so aus:

Das VFS sollte nur zweckgebunden Sachen laden. Wenn jemand alle Dateien in einem Verzeichnis auflistet, sollte das VFS nicht einfach so auch die Unterverzeichnisse laden, sondern erst, wenn das Programm danach fragt. Und die Schnittstellen zum User Space sehen in der Regel so aus, dass dem VFS die Option bleibt, beim rekursiven Auflisten von Verzeichnissen nicht genutzte Objekte wieder freizugeben. Das VFS funktioniert da ja nur als eine Art Cache. Die tatsächlichen Dateiinformationen können immer vom Dateisystemtreiber rekonstruiert werden. Die paar VFS-Objekte, die keine Repräsentation in einem anderen Treiber haben (Mountpoints evtl.), sollten so wenige sein, dass sie nicht ins Gewicht fallen.

Unter Windows gibt es beispielsweise FindFirstFile/FindNextFile zum Auflisten von Dateien im Verzeichnis. Mit FindFirstFile wird nur ein Handle erzeugt, und zum User Space hin nur eine Datei/Verzeichnis präsentiert. Durch wiederholtes Aufrufen von FindNextFile wird über die weiteren Dateien/Verzeichnisse iteriert. Dem VFS steht es offen nachdem FindNextFile aufgerufen wurde, die Informationen über die Datei, die davor betrachtet wurde, schon wieder freizugeben, falls der Platz knapp wird.

Das heißt, wenn du deine API ähnlich wie FindNextFile oder opendir (POSIX) strukturierst, wirst du nie das Problem haben, dass du zu viele Informationen verwalten musst, weil du immer die Option hast, die wieder freizugeben.
58
Das Wiki / Re: Logo kriegt Balken
« am: 05. June 2014, 13:58 »
Scheinbar hängt es damit zusammen, dass jemand overflow: auto im div-Container um das Logo herum verwendet hat. Wenn du das auf deiner Seite nicht tust, dann solltest du damit auch keine Probleme bekommen. Ob die 1&1-Vorlage das tut, müsstest du im Quelltext schauen, aber eigentlich wäre das schon ungewöhnlich.
59
Lowlevel-Coding / Re: .data Section Problem
« am: 01. June 2014, 15:53 »
Hi,

ich habe ein Problem in meinem Stage 2 Bootloader.
Ich verstehe noch nicht ganz, was deine verschiedenen Bootloader genau machen sollen (d.h. was wird von wem wohin geladen). Insbesondere, weil du in dem geposteten Linkerskript den Entry-Point RealMode genannt hast, was nicht zum Code passt.

Zum Problem: Im Allgemeinen ist die Ursache, dass der Bootloader etwas nicht richtig lädt, oder der Linker die Dateien nicht korrekt erzeugt.

Schau bitte nochmal nach, ob du das richtige Linkerskript gepostet hast. Außerdem ist der Aufruf des Linkers interessant. Da du direkt eine Binärdatei erstellst, kann man daraus leider nicht mehr ablesen, was genau der Linker eigentlich macht. Übergib dem Linker zusätzlich mal den Parameter -Map stage2.map und poste den Inhalt der Datei stage2.map. (Möglicherweise aussagekräftiger wäre allerdings ELF als Ausgabeformat zu nehmen und mit objdump -x die Sektionen in der Datei ausgeben zu lassen.)

Kleinigkeit noch: Deine PutStr_32 funktioniert nur, weil clrscr_32 vorher den Wert 0x07 in ah lädt. Wäre der Wert beispielsweise 0, wären die Zeichen unsichtbar. PutStr_32 sollte selbst ah auf einen gültigen Wert setzen (oder stosw nicht nutzen).
60
Vorweg: Ich bin kein ARM-Experte und habe das Tutorial auch nur überflogen.

Allgemein ist es immer schwierig zwei Tutorials/Tutorialreihen zu kombinieren, weil die Autoren in der Regel Annahmen machen, die leicht zu überlesen sind, oder gar nicht erwähnt werden. Beispielsweise die Verwendung von C gegenüber Assembler, oder die Verwendung eines Raspberry PI gegenüber dem Integrator/CP-Board bzw. dem Emulator QEMU können weitreichende Implikationen haben.

Wenn du auf dem bestehenden Code weiter aufbauen willst, kannst du natürlich versuchen, das Multtasking-Tutorial aus unserem Wiki umzusetzen. Falls das nicht klappt, würde ich die Tutorialreihe aus unserem Wiki einmal im Emulator QEMU vom Anfang an durchspielen und anschließend die hoffentlich gesammelte Erfahrung freihändig im existierenden Code unterbringen.
Seiten: 1 2 [3] 4 5 ... 81

Einloggen