Frage

Ich arbeite an Tastatureingabe für eine sehr grundlegende Kernel, die ich entwickle und ich bin ganz fest. Ich kann nicht scheinen keine Informationen online zu finden, die mir die Informationen zeigen kann, was ich wissen muss.

Mein Kernel ist jetzt im geschützten Modus läuft, so kann ich nicht die Real-Modus-Tastatur-Routinen verwenden, ohne in real-Modus zu springen und zurück, was ich zu vermeiden bin versucht. Ich möchte in der Lage, meine Tastatur aus geschützten Modus zugreifen. Wer weiß, wie dies zu tun? Das einzige, was ich bisher gefunden habe ist, dass es direkt an den Controller beinhaltet Gespräche Ports in / out, aber darüber hinaus, dass ich bin ratlos. Dies ist, natürlich, ist nicht etwas, das sehr oft kommt. Normalerweise Assembly Tutorials annehmen, dass Sie ein Betriebssystem unter laufen.

Ich bin sehr neu in dem x86-Assembler, so dass ich bin nur für ein paar gute Ressourcen für die mit der Standard-Hardware von geschütztem Modus arbeiten. Ich bin Kompilieren der Quelle Assembler-Code mit NASM und Verknüpfung mit dem C-Quellcode mit DJGPP zusammengestellt. Irgendwelche Vorschläge?

War es hilfreich?

Lösung

Die MIT-Betriebssysteme Klasse hat viele gute Referenzen. Insbesondere Besuche Adam Chapweske Ressourcen auf Tastatur und Maus-Programmierung.

Kurz gesagt, ja, Sie werden die roh verwenden in Häfen / out, die entweder im Kernel-Modus ausgeführt wird, benötigt, oder mit den E / A-Berechtigungs-Bits (IOPL), die in der EFLAGS-Register. Siehe dieser Seite für weitere Details zu dem I / O-Berechtigungen .

Andere Tipps

Sie arbeiten mit Standard-Legacy-Hardware auf die gleiche Weise auf realen und geschützten Modus. In diesem Fall mögen Sie mit den 8042 an I / O-Ports 0x60 bis 0x6F, was wiederum reden an die Steuerung innerhalb der Tastatur am anderen Ende des Drahtes sprechen.

Eine schnelle Google-Suche gefunden mir eine interessante Ressource unter http: // heim.ifi.uio.no/~stanisls/helppc/8042.html (für 8042) und http://heim.ifi.uio.no/~stanisls/helppc/keyboard_commands.html (für die Tastatur).

Falls Sie sind es nicht gewohnt, sprechen Sie mit Komponenten an I / O-Ports über den IN (lesen) und OUT (Schreiben) Opcodes, die die I / O-Port-Nummer erhalten (ein 16-Bit-Wert) und der Wert (entweder 8, 16 oder 32 Bits) gelesen oder geschrieben werden. Beachten Sie, dass die Größe gelesen oder geschrieben ist wichtig! Schreiben von 16 Bits auf 8 Bits, die etwas erwartet (oder umgekehrt), ist ein Rezept für eine Katastrophe. Lassen Sie sich bei dieser OP-Codes verwendet, da man sie viel verwenden werden (es ist die einzige Möglichkeit, mit ihm zu reden einige Peripheriegeräte, darunter mehrere wesentliche diejenigen, andere Peripheriegeräte verwenden Memory-Mapped I / O (MMIO) oder Bus-Mastering DMA).

Die 8042 PS / 2-Controller sieht aus wie die einfachste Möglichkeit.

Das oszur11 O Tutorial enthält ein funktionsfähiges Beispiel unter https://sourceforge.net/p/oszur11/code/ci/master/tree/Chapter_06_Shell/04_Makepp/arch/i386/arch/devices/i8042.c

Just:

sudo apt-get install build-essential qemu
sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu
git clone git://git.code.sf.net/p/oszur11/code oszur11
cd oszur11/Chapter_06_Shell/04_Makepp
make qemu

Getestet auf Ubuntu 14.04 AMD64.

Mein GitHub Spiegel (Upstream inaktiv): https://github.com/cirosantilli/ oszur11-betriebssystem Beispiele

Wiedergabe von Nicht hier, weil der Code es zu lange, wird aktualisiert, wenn ich auf die Tastatur in einem minimalen Beispiel zu isolieren, zu verwalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top