Konfiguration der seriellen Schnittstelle

dagnu

Well-Known Member
Tachchen,

ich möchte an FBSD 5.4 eine serielles Gerät (1200 Baut, 2 Stopbits, Parität)
betreiben, nur leider werde ich aus den Manuals zu tip und stty nicht wirklich
schlau - zumindest ist es mir bisher nicht gelungen die benötigten Eigenschaften
für /dev/cuaa0 einzustellen. Weiterhin steht in den Manuals, dass die
Konfiguration in /etc/rc.serial geändert werden kann - auf meinem System
existiert diese Datei aber nicht (ist das bei euch anders?)

Meine bisherigen Versuche:
* cu Verbindung (erlaubt nur Geschwindigkeitseinstellung)
* tip mit /etc/remote Konfiguration (Stopbits lassen sich nicht hinterlegen)
* stty mit den entsprechenden Parametern und mit cu drauf (die Einstellungen
von stty werden nicht übernommen - anscheinend mache ich was falsch :()

Was mache ich falsch bzw. wie ist die Vorgehensweise um die serielle
Schnittstelle zu konfigurieren?

mfg dagnu
 
probier mal minicom aus.
ist zwar (in meinen augen) voellig ueberladen und braucht viel zu viele root-rechte. ausserdem spinnt ab und zu mal das lockfile. aber dafuer kannst du alle einstellungen machen, die du brauchst.
 
dagnu schrieb:
ich möchte an FBSD 5.4 eine serielles Gerät (1200 Baut, 2 Stopbits, Parität)
betreiben, nur leider werde ich aus den Manuals zu tip und stty nicht wirklich
schlau - zumindest ist es mir bisher nicht gelungen die benötigten Eigenschaften
für /dev/cuaa0 einzustellen. Weiterhin steht in den Manuals, dass die
Konfiguration in /etc/rc.serial geändert werden kann - auf meinem System
existiert diese Datei aber nicht (ist das bei euch anders?)
/etc/remote ist in der default-Installation nicht enthalten, kann allerdings jederzeit angelegt werden. In meiner steht unter anderem die Zeile
Code:
soekris:dv=/dev/cuaa0:br#9600:pa=none:
Mit dem Befehl
Code:
tip soekris
verbindet die Kiste problemlos zu meinem Gateway. Die Syntax ist wohl selbsterklärend, im Zweifel hilft in Blick in remote(5).
 
minicom hat soweit erstmal funktioniert, es setzt die Paramter für
cuaa0 entsprechend (702 wars) - Danke
 
Die Stopbits ergeben sich aus der Anzahl der Datenbits: bei sieben-Bit-Übertragung ist's eins mehr.
 
cheasy schrieb:
Die Stopbits ergeben sich aus der Anzahl der Datenbits: bei sieben-Bit-Übertragung ist's eins mehr.
das stimmt m.E. nicht, die Stopbits zählen nicht zur Wortlänge sondern werden hinten angefügt, vielmehr bewirkt die 7 eine entsprechende Wortlänge, der dann ein Startbit voran geht - zumindest ist das die vom Gerät spezifizierte Übertragung und so funktioniert sie jetzt zumindestens :)

ps: wie ich das Ganze ohne minicom hinbekomme würde mich ja trotzdem noch interessieren, wenn ich die Einstellungen mit dem Programm vornehme und dann mit stty -a -f /dev/cuaa0 auslese, dann sind das genau die, die ich gestern vergeblich mit stty gesetzt habe - wurden einfach nicht übernommen :confused:
 
minicom aendert nicht deine stty-sachen.
minicom ist einfach nur ein proggie, so wie cu oder tip. nur mit mehr oberflaeche.

und stopbits sind garantiert keine pad-bits, die uebertragung laeuft ja schliesslich seriell ab, auch 5 bit-worte sind moeglich.

um das mit tip und cu hinzukriegen faellt mir spontan auch nichts anderes ein ausser

Code:
% echo "liebe liebe cu- und tip-coder. koennt ihr auch nochmal stopbit-unterstuetzung aufnehmen?" | mail irgendwen@freebsd.org
 
okay... ich weiss nicht wies bei freebsd aussieht, aber bei meinem openbsd war der quellcode zu tip dabei.... genauer lag der unter /usr/src/usr.bin/tip.

in tip.c hab ich dann diese funktion hier gefunden:
Code:
int
ttysetup(speed)
        int speed;
{
        struct termios  cntrl;

        if (tcgetattr(FD, &cntrl))
                return (-1);
        cfsetspeed(&cntrl, speed);
        cntrl.c_cflag &= ~(CSIZE|PARENB);
        cntrl.c_cflag |= CS8;
        if (boolean(value(DC)))
                cntrl.c_cflag |= CLOCAL;
        if (boolean(value(HARDWAREFLOW)))
                cntrl.c_cflag |= CRTSCTS;
        cntrl.c_iflag &= ~(ISTRIP|ICRNL);
        cntrl.c_oflag &= ~OPOST;
        cntrl.c_lflag &= ~(ICANON|ISIG|IEXTEN|ECHO);
        cntrl.c_cc[VMIN] = 1;
        cntrl.c_cc[VTIME] = 0;
        if (boolean(value(TAND)))
                cntrl.c_iflag |= IXOFF;
        return (tcsetattr(FD, TCSAFLUSH, &cntrl));
}

wie du siehst werden dorch alle uebertragungsparameter hart gesetzt. was doof ist.
die manpage zu termios enthuellt dann, welche parameter man noch einstellen kann:


Code:
   Control Modes
     Values of the c_cflag field describe the basic terminal hardware control,
     and are composed of the following masks.  Not all values specified are
     supported by all hardware.

           CSIZE       /* character size mask */
           CS5         /* 5 bits (pseudo) */
           CS6         /* 6 bits */
           CS7         /* 7 bits */
           CS8         /* 8 bits */
           CSTOPB      /* send 2 stop bits */
           CREAD       /* enable receiver */
           PARENB      /* parity enable */
           PARODD      /* odd parity, else even */
           HUPCL       /* hang up on last close */
           CLOCAL      /* ignore modem status lines */
           CCTS_OFLOW  /* CTS flow control of output */
           CRTSCTS     /* same as CCTS_OFLOW */
           CRTS_IFLOW  /* RTS flow control of input */
           MDMBUF      /* flow control output via Carrier */

     The CSIZE bits specify the byte size in bits for both transmission and

ich hab jetzt nicht gelesen ob die dinger high- oder lowaktiv sind. auf jeden fall, wenn du den quellcode so gepatcht hast, dass der auch config-dateien lesen kann UND stopbits frisst, ist das imho auch mal einen patch an die freebsdentwickler wert.
 
minicom aendert nicht deine stty-sachen.
mit stty kann ich die Parameter der Schnittstelle lesen und ändern.
Wenn ich mit minicom auf der Schnittstelle arbeite und während dessen mit
stty die Paramter auslese sind diese natürlich geändert, wie sollte das sonst
funktionieren? Also ist es prinzipiell möglich diese im laufenden Betrieb zu
ändern, nur weis ich leider nicht wie.
Die termios und sio Manpages hab ich mir vorher auch schon angesehen,
haben mir aber nicht wirklich weiter geholfen.

% echo "liebe liebe cu- und tip-coder. koennt ihr auch nochmal stopbit-unterstuetzung aufnehmen?" | mail irgendwen@freebsd.org
:confused: ist doch schon drin, bin doch nur zu dumm sie einzustellen!
 
ein zusaetzliches
Code:
cntrl.c_cflag |= CSTOPB;
im quellcode duerfte eine loesung sein... wenn der freebsd-tip aehnlich ist wie der openbsd-tip
 
Zurück
Oben