Vous avez s�rement plein d'id�es d'applications int�ressantes, mais envisager de contr�ler une jonction s�rie vous fait peur ? Voici quelques petites indications.
Sous Unix, donc sous Linux, les seuls objets manipul�s lors des entr�es/sorties sont les fichiers. (Tiens, au fait, on aurait peut-�tre d� commencer par l� ! Bon, vous le saviez d�j�, ce n'est pas un cours Unix). La jonction s�rie n'�chappe pas � cette r�gle et le pilote vous la pr�sente ainsi. Ici, il s'agit d'un (ou plut�t deux comme on le verra plus loin) fichier particulier, bien s�r, puisque se cache derri�re un pilote (driver) en mode caract�re, mais la fa�on de r�aliser les entr�es sorties est la m�me : open, read, write, ioctl, close. Il y a quand m�me quelques petites choses � savoir.
Le pilote s�rie s'est enregistr�, � l'initialisation du noyau, comme un tty. Il est donc g�r� comme un tty classique. Il apporte bien entendu quelques caract�ristiques suppl�mentaires que nous verrons rapidement dans la section concernant la commande ioctl. Toujours est-il que si vous savez g�rer un tty sous Unix (commande stty), vous saurez sans probl�me g�rer ce pilote.
La m�thode d'ouverture et de fermeture d'un port s�rie est classique. N�anmoins un m�canisme particulier se cache derri�re la primitive open qui est rapidement d�crit � la section Appels entrants (Dial-in) et appels sortants (Call-out) sous Linux.
Rien � signaler de particulier.
Le contr�le de tout syst�me d'entr�e/sortie se fait avec la commande syst�me ioctl. Elle est souvent masqu�e par des commandes de haut niveau (setserial, stty, modemstat, ...), mais elle est leur moteur.
Selon que vous souhaitez vous adresser aux fonctionnalit�s
classiques d'un tty ou aux fonctions sp�cialis�es du
pilote s�rie, vous utiliserez deux sous-ensembles de commandes
diff�rentes. Vous les retrouverez dans le fichier � inclure
linux/termios.h. D�crivons-les rapidement (on
d�borde un tout petit peu du sujet :-)
) :
et quelques d�riv�s avec WAIT, FLUSH... Elles permettent de r�cup�rer (resp. positionner) les attributs standard tty dans une structure termios (voir le fichier linux/termios.h)
permettent de d�finir (resp. annuler) une session d'utilisation du tty. Ceci est visible car, entre autres choses, une cons�quence est le changement des droits du fichier correspondant
Avant:
crw-rw-rw- 1 root tty 4, 64 Nov 26 20:47 ttyS0
Apres:
crw--w--w- 1 root root 4, 64 Nov 26 20:49 ttyS0
positionnement d'indicateurs (voir la commande stty)
permettent de r�cup�rer (resp. positionner) les informations g�n�rales dans une (resp. � partir d'une) structure serial_struct (voir le fichier linux/serial.h) : le type de port s�rie, la ligne, le port, l'irq le port utilis�... ni plus ni moins ce que fait setserial.
permettent de r�cup�rer (resp. positionner) les informations plus sp�cifiques � la jonction proprement dite (dans un entier, sous forme de bits positionn�s selon que l'indicateur correspondant est vrai ou faux) :
+-------------------------------------------------------------------------------------------+
| // DSR RNG CAR CTS // // RTS DTR //|
| // (Data Set (Ring) (Carrier) (Clear To // // (Request (Data Terminal // |
| // Ready) Send) // // To Send) Ready) // |
+------+----------+-------+----------+-----------+----+----+-----------+---------------+----+
31 9 8 7 6 5 4 3 2 1 0
Le pilote s�rie du noyau de Linux propose de g�rer un m�me port s�rie � la fois pour les appels entrants et pour les appels sortants exploitant ainsi pleinement leur caract�ristique bi-directionnelle. Il offre donc � l'utilisateur deux types de fichiers :
/dev/ttyS<n>
: sont g�n�ralement
utilis�s en entr�e ;
/dev/cua<n>
: sont g�n�ralement
utilis�s en sortie.
Chaque port s�rie est enregistr� deux fois aupr�s du g�rant tty : une fois en mode entr�e (ttyS, majeur 4) et une fois en mode sortie (cua, majeur 5). Voyons rapidement comment le pilote g�re ensuite les "deux" ports :
/dev/cua
sont g�r�s en mode
non-bloquant. Leur ouverture n'est possible que si la ligne
/dev/ttyS
correspondante n'est pas ouverte et active (sinon
errno
retourne EBUSY) ;
/dev/ttyS
sont g�r�s en mode
bloquant ou non-bloquant, c'est donc un peu plus compliqu�. Si
l'indicateur CLOCAL est positionn�, l'ouverture en mode
bloquant est effective si la ligne /dev/cua
est libre. Si
l'indicateur CLOCAL n'est pas positionn�, elle est effective si les
deux conditions suivantes sont r�unies :
/dev/cua
correspondant n'est pas
utilis�),
L'ouverture en mode non-bloquant, quant � elle, est effective si le
port n'est pas d�j� ouvert et actif (sinon errno
retourne EBUSY)
Les applications utilisent de plus le m�canisme des fichiers de verrouillage garantissant l'unicit� d'utilisation de la ressource..
C'est le mode qu'utilisent beaucoup d'applications comme getty qui souhaitent dans un premier temps initialiser la ligne (pour �viter des instabilit�s li�es aux connexions pr�c�dentes) voire ensuite pour initialiser l'�quipement (modem). Elles ne s'int�ressent qu'au fait que la ligne soit occup�e, en fermeture ou libre. Si celle-ci n'est pas libre, l'application se termine et le m�canisme du respawn se charge de les relancer.
Pour la gestion de la connexion proprement dite, l'application getty (pour prendre un exemple courant) ouvre la ligne, soit en mode bloquant si vous laissez le modem en r�ponse automatique, soit en mode non-bloquant si vous souhaitez qu'elle g�re activement la connexion. Elle est alors en attente bloquante en lecture (sur read).
Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:31