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.
10. December 2024, 06:51
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.
// 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
#define IDT_ENTRIES 1Das sollte wohl mindestens 49 sein.
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.
# 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.
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?
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.
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;
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.