2016-06-09 9 views
0

Ich versuche, den Tastaturtreiber in Minix zu ändern, meine Idee ist, in einer Datei alle Zeichen zu speichern, die die verwendeten in der Tastatur eingeführt. Ich deklariere eine globale Datei * fp und fügen Sie diesen Code ein /usr/src/drivers/tty/keyboard.cMinix Tastatur Treiber

while (icount > 0) { 
     scode = *itail++;  /* take one key scan code */ 
      if (itail == ibuf + KB_IN_BYTES) itail = ibuf; 
      icount--; 

      /* Function keys are being used for debug dumps. */ 
      if (func_key(scode)) continue; 

      /* Perform make/break processing. */ 
      ch = make_break(scode); 

      if (ch <= 0xFF) { 
        /* A normal character. */ 

        fp = fopen("log.txt","a+"); 
        fprint(fp,"%c",ch); 
        fclose(fp); 

        buf[0] = ch; 
        (void) in_process(tp, buf, 1); 
      } else ... 

dann laufe ich „make“ im Verzeichnis und starten Sie neu, aber das funktioniert nicht. Ich meine, die Datei wird nicht erstellt. Irgendeine Idee?

+0

"... funktioniert nicht" ist ein wenig verschwommen. Bitte bearbeiten Sie Ihre Frage und fügen Sie einige zusätzliche Informationen darüber hinzu, was "nicht funktioniert". Ist es zu langsam? Schreibt nicht die Schlüssel zu der Datei? Öffnet ein Tor zwischen den Welten, durch die Pestilenzgeschöpfe des schlimmsten Bösen austrinken? –

+0

Wenn Sie _truly_ modifizieren die Tastatur _driver_ (dh es ist im Minux-Kernel), können Sie nicht 'stdio.h' Stil Streams verwenden [es sei denn, minux unterscheidet sich von jedem anderen Unix-Kernel, den ich je benutzt habe] . Sie müssen die internen Minix-Funktionen für I/O verwenden. Und 'offen zu machen, einen Buchstaben zu schreiben, zu schließen' ist _ extremely ineffizient [und kann zu Komplikationen führen]. Öffnen Sie die Protokolldatei _once_ –

+0

Aber ich denke, dass Minix-Treiber zum Benutzerraum gehört, und in diesem Minix-Tutorial verwendet die Stdlib-Funktionen ... http://wiki.minix3.org/doku.php?id=developersguide:driverprogramming –

Antwort

0

Dies wird nicht funktionieren. Der Tastaturtreiber befindet sich innerhalb des TTY "Treibers", ein Dienst, der für die Konsole zuständig ist. FS/VFS überträgt die E/A-Anforderungen für diese Konsole an TTY. , fprint und fclose in Ihrem Code sind Möglichkeiten zum Ausführen solcher Anfragen. Aber VFS kann nur Anfragen von "Benutzer" -Programmen behandeln (und sie an Treiber übertragen); TTY ist kein "Benutzer" -Programm und darf daher keine E/A-Anfragen ausführen.

+1

Noch OP läuft "make" und irgendwie denkt es gebaut. – Kaz

+0

@AntonieL Es tut mir leid, aber du liegst falsch, das Programm funktioniert gut, das Problem war, dass ich "make" in anderen Verzeichnis ausgeführt ... –

+0

OK, ich bin falsch, da ich falsch verstanden, dass das Programm nicht geschrieben wurde 'TTY' (welche Quelle ist in'/usr/src/drivers/tty/keyboard.c'), und Ihr nicht identifiziertes Programm ist in Ordnung. Entschuldigung für die verlorene Zeit. Auch besser Sie verzichten auf den Kernel neu zu erstellen. – AntoineL