Données binarys sur terminal série

Mon seul moyen de communication avec mon appareil embarqué est un port série. Par défaut, Embedded Linux utilise ce port comme terminal. Comment désactiver ce terminal et utiliser la liaison série pour transférer des données binarys? J’ai entendu parler de commandes comme rx et tx mais je ne les trouve pas.

Je pense que je peux juste lire () à partir de et écrire () des choses dans / dev / tty mais je veux m’assurer qu’aucun message d’erreur ou que ce soit avec mon stream de données.

Vous pouvez utiliser une application comme xmodem pour transférer des fichiers sur n’importe quel terminal. Est-ce le port série que vous parlez d’un terminal, ou est-ce aussi la console du kernel?

Si vous n’êtes pas bruyant, vous pouvez utiliser votre connexion actuelle pour créer un transfert xmodem. Du côté de l’hôte, vous pouvez utiliser kermit, qui est sympa ET scriptable.

Si vous voulez que votre port série soit brut et que le descripteur de fichier ttyfd soit ouvert, voici une façon de le faire:

struct termios tty, orig_tty; ... if(tcgetattr(ttyfd, &tty) < 0) { // error checking } // backup tty, make it raw and apply changes orig_tty = tty; cfmakeraw(&tty); if(tcsetattr(ttyfd, TCSAFLUSH, &tty) < 0) { // error checking } ... //end of program or error path : tcsetattr(ttyfd, TCSAFLUSH, &orig_tty) 

N'oubliez pas de restaurer le réglage à la fin de votre programme si vous souhaitez toujours un bon terminal.

Ne pouvez-vous pas simplement définir le terminal sur raw?

Regardez ce tutoriel .

Pour désactiver la console Linux, vous devez modifier la ligne de commande Linux créée par le chargeur de démarrage à partir de: console = / dev / ttyS? à: console = null

Vous pouvez exécuter sur le terminal une commande qui transférera les données via un protocole au niveau de l’application. Les commandes rx et tx auxquelles vous faites référence implémentent le protocole de transfert de fichiers XMODEM . Cela pourrait être une solution, si les données binarys que vous souhaitez transférer sont constituées de fichiers, les demandes de débit sont faibles et vous ne vous souciez pas de la charge administrative liée à l’exécution des commandes. Vous pouvez également multiplexer le port série pour gérer à la fois le transfert de données et le terminal. Désactivez la commande du pilote de terminal série (getty) et exécutez le protocole PPP sur la ligne série pour établir une connexion IP avec votre appareil. Vous pouvez ensuite vous connecter à l’appareil via ssh ou telnet et transférer vos données via une prise IP.

Comme les autres notes l’indiquent, il y a plusieurs choses à vérifier, collectées ici:

  1. Assurez-vous que le kernel Linux n’utilise pas le port série. Assurez-vous qu’il n’y a pas d’option console = dans la commande bootload de votre fichier grub. Il n’est généralement pas là par défaut.
  2. Assurez-vous qu’il n’y a pas de getty en cours d’exécution sur le port série. Recherchez dans / etc / inittab une entrée pour / dev / ttyS0 (port série A) et mettez-la en commentaire si elle existe.
  3. Assurez-vous que / dev / ttyS0 est lisible et accessible en écriture par votre processus. Vous pouvez créer un utilisateur spécifique sous lequel le programme de contrôle est exécuté et qui possède le fichier / dev / ttyS0, puis chmod 700 / dev / ttyS0. Cela vous aidera à vous assurer que d’autres utilisateurs / programmes n’utilisent pas le port série.
  4. Utilisez open () sur ttyS0 pour obtenir une fd, puis utilisez la famille de routines tcsetattr pour définir la vitesse et la discipline de la ligne.

Les programmes de terminal ne vous seront probablement utiles que si vous pouvez exécuter le même programme sur le périphérique intégré pour gérer l’autre extrémité de la connexion.

Oui, tous vos ports série sont dans /dev/ttyxx . Notez que /dev/tty est un raccourci qui correspond à votre terminal actuel et non à un port série spécifique. Celles-ci appartiennent souvent à root et requièrent que vous ayez des privilèges ou que vous soyez dans le groupe adm pour accéder au périphérique directement à partir de votre application.

Vous voudrez peut-être chown le périphérique afin que vous puissiez y accéder. Je ne suis pas sûr de la conséquence de la modification de la propriété de l’appareil. IIRC, il est facile à faire et fonctionne bien. L’alternative consiste à utiliser setuid pour élever votre programme à un état privilégié.

Il existe un programme nommé getty qui permet aux utilisateurs de se connecter depuis un port série. Votre inittab lancera getty sur les ports série pour que les utilisateurs puissent se connecter.

Vous voulez désactiver getty . Dans certains cas, il existe un gestionnaire de port qui aide à faire cela.

Dans certains cas, vous pouvez modifier votre inittab pour utiliser mgetty , qui est une version plus intelligente et plus facile à contrôler de getty .