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