2016-06-09 3 views
0

J'essaie de changer le pilote du clavier en minix, mon idée est de stocker dans un fichier tous les caractères utilisés dans le clavier.Je déclare un fichier global * fp et j'insère ce code dans /usr/src/drivers/tty/keyboard.cPilote clavier Minix

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

puis-je exécuter « make » dans le répertoire et le redémarrage, mais cela ne fonctionne pas. Je veux dire, le fichier n'est pas créé. Une idée?

+0

"... ne fonctionne pas" est un peu flou. S'il vous plaît modifier votre question et ajouter des informations supplémentaires sur ce qui "ne fonctionne pas". Est-ce trop lent? N'écrit pas les clés du fichier? Ouvre une passerelle entre les mondes à travers lesquels suintent les créatures pestilentielles du mal le plus vicieux? –

+0

Si vous modifiez vraiment le clavier _driver_ (c'est-à-dire dans le noyau minux), vous ne pourrez pas utiliser les flux de style 'stdio.h' [sauf si minux est différent de tous les autres noyaux Unix que j'ai jamais utilisés] . Vous devrez utiliser les fonctions minix internes pour les E/S. Et, faire 'ouvrir, écrire un caractère, fermer' est très peu efficace [et peut entraîner des complications]. Ouvrez le fichier journal _once_ –

+0

Mais je pense que les pilotes minix appartient à l'espace utilisateur, et dans ce tutoriel minix utilise les fonctions stdlib ... http://wiki.minix3.org/doku.php?id=developersguide:driverprogramming –

Répondre

0

Cela ne fonctionnera pas. Le pilote du clavier se trouve à l'intérieur du TTY "driver", un service qui est en charge de la console. FS/VFS transmettra les demandes d'E/S concernant cette console à TTY. fopen, fprint, et fclose dans votre code sont des moyens d'effectuer de telles demandes. Mais VFS ne peut traiter que les demandes des programmes "utilisateur" (et les transmettre aux pilotes); TTY n'est pas un programme "utilisateur" et, en tant que tel, n'est pas autorisé à effectuer des demandes d'E/S.

+1

Pourtant , OP exécute "make" et pense en quelque sorte construit. – Kaz

+0

@AntonieL Je suis désolé mais vous avez tort, le programme fonctionne bien, le problème était que je cours "make" dans un autre répertoire ... –

+0

OK, je me trompe car j'ai mal compris que le programme que vous avez écrit n'était pas 'TTY' (quelle source se trouve dans'/usr/src/drivers/tty/keyboard.c'), et votre programme non identifié est correct. Désolé pour le temps perdu. De même, il vaut mieux s'abstenir de reconstruire le noyau. – AntoineL