Newsgroup: it.comp.os.linux.iniziare
Titolo: Problema con terminale seriale e stty

Salve,
Ho necessitï¿œ di connettere un terminale seriale a un server in modo da 
avere accesso ad una semplice applicazione a riga di comando.
Il problema sotto Debian Lenny nasce con stty, che non vuole saperne di 
cambiare alcuni parametri preimpostati, come ad esempio la paritï¿œ dei 
bit e sopratutto il numero dei databit, che resta bloccato a 8 quando a 
me servirebbe a 7. Se provo a dare un "stty -F /dev/ttyS0 9600 cs7" mi 
da invalid argument, mentre con un "stty -F /dev/ttyS0 9600 cs8" ï¿œ tutto 
ok. Qualcuno ha esperienze in proposito ? Con altre distro il comando 
funziona, sul web e sui man non ho trovato niente di simile.
Grazie,
Marco.

 stty -F /dev/ttyS0 9600 cs7
     [-]parenb
                Genera  un bit di parità in output e si aspetta un bit 
di parità
                in input.
         [-]parodd
                Imposta la parità dispari (anche con ‘-’).
         cs5 cs6 cs7 cs8
                Imposta la dimensione dei caratteri a 5, 6, 7, o 8 bit.
---------------
Luca
http://www.linuxace.it/userdetail.aspx?userid=2

 cs5 cs6 cs7 cs8
Il problema e che se imposto cs7, mi da invalid argument, mentre con cs8 
è tutto ok, il parametro parodd viene accettato senza problemi.
Ciao e grazie,
Marco.

Marco XT ha scritto:

  Lascia fare al programma getty, che tanto riconfigurerebbe la porta
seriale lo stesso.  Ad esempio, dalla pagina man di agetty(8):
       o      Adapts  the tty settings to parity bits and to erase, kill,
              end-of-line and uppercase characters when it reads a  login
              name.   The  program can handle 7-bit characters with even,
              odd, none or space parity, and  8-bit  characters  with  no
              parity.  The following special characters are recognized: @
              and Control-U (kill); #, DEL and back space  (erase);  car-
              riage return and line feed (end of line).
  E ci sono diverse opzioni e parametri per specificare una gestione della
porta seriale diversa da quella che scegleirebbe lui, con.:
       baud_rate,...
              A comma-separated list of one or more baud rates. Each time
              agetty  receives  a BREAK character it advances through the
              list, which is treated as if it were circular.
              Baud rates should be specified in descending order, so that
              the  null character (Ctrl-@) can also be used for baud rate
              switching.
[...]
       -8     Assume that the tty is 8-bit clean,  hence  disable  parity
              detection.
       -h     Enable  hardware  (RTS/CTS)  flow control. It is left up to
              the application to disable software (XON/XOFF) flow  proto-
              col where appropriate.
[...]
       -L     Force the line to be a local line with no need for  carrier
              detect. This can be useful when you have a locally attached
              terminal where the serial line does  not  set  the  carrier
              detect signal.
  Prova.
  Ciao,
-- 
Alessandro Selli, 
http://alessandro.route-add.net
AVVERTENZA: i messaggi inviati a "trappola" non mi arriveranno.
WARNING: messages sent to "trappola" will never reach me.
Chiave PGP/GPG: EC885A8B

   Lascia fare al programma getty,
  Haemm, ovviamente se ï¿œ tramite getty che il server ti fa connettere!  :-)


Marco XT ha scritto:

Allora, tty0 come scrivi su icol.debian, o ttyS0 come scrivi qui?
Perché sono due cose ben diverse, e a me, con lenny, stty su ttyS0
funziona come dovrebbe, mentre mettere a 7 bit la console, ... ;-)
-- 
           |Save our planet!
    Ciao   |Save wildlife!
   roberto |For your E-MAIL use ONLY recycled Bytes  !!
           |roberto poggi   
rpo...@softhome.net


Si, mi vorrei connettere tramite getty, le sto provando tutte ma non 
riesco ad impostare la comunicazione seriale a 9600, 7E1.
Riesco a visualizzare la login, ma circa metï¿œ dei caratteri sul 
terminale appaiono incomprensibili perchï¿œ trasmessi a 8 bit, mentre il 
term ne gestisce al massimo 7 mi sono persino loggato, ho dato un ls ma 
ï¿œ impossibile lavorare con metï¿œ dei caratteri a cubetto.
Saluti, marco

Marco XT ha scritto:

  Non dovrebbe servire stty allora, anzi, di solito stty ï¿œ usato dall'utente
per cambiare le impostazioni del proprio terminale, ossia *dopo* che si ï¿œ
autenticato e ha avuto accesso al sistema tramite il terminale che vuole
configurare. Il programma getty, come agetty che io uso, dovrebbe fare tutto
lui.
Il sistema client qual'ï¿œ?
  A me tra due Fedora12 con agetty lato server e minicom lato client funziona.
  Lato server:
[root@server ~]# cat /etc/event.d/ttyS0
# ttyS0 - getty
#
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.
start on stopped rc2
start on stopped rc3
start on stopped rc4
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6
respawn
exec /sbin/agetty -8h ttyS0 115200
  Verifica di funzionamento:
[root@server ~]# initctl status ttyS0
ttyS0 (start) running, process 18575
[root@server ~]# fuser -va /dev/ttyS0 ; ps uww -C agetty
                     UTENTE      PID ACCESSO COMANDO
/dev/ttyS0:          root      18575 F.... agetty
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     18575  0.0  0.0   1872   440 ttyS0    Ss+  22:36   0:00
/sbin/agetty -8h ttyS0 115200
  Lato client (portatile con porta seriale via porta USB):
[alessandro@client ~]$ minicom /dev/ttyUSB0
Welcome to minicom 2.3
OPTIONS: I18n
Compiled on Mar 16 2010, 09:29:46.
Port /dev/ttyUSB0
                 Press CTRL-A Z for help on special keys
Fedora release 12 (Constantine)
Kernel 2.6.33.4 on an i686 (ttyS0)
server.localdomain login:
  Effettuato il login, provo a leggere lo status del terminale:
[alessandro@server ~]$ stty -a
speed 115200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon -iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
-echoctl echoke
  Provo a cambiarlo prima a otto bit (che giï¿œ lo ï¿œ), poi a sette bit (che
causa l'output di spazzatura sul terminale, essendo minicom rimasto
configurato a otto bit):
[alessandro@server ~]$ stty 115200 cs8
[alessandro@server ~]$ stty 115200 cs7
???G?????_????????????G?????_?????????-??????????[0malessandro@server ~ $
  Le impostazioni hardware della linea seriale sono queste:
[alessandro@server]$ tty
/dev/ttyS0
[alessandro@server]$ setserial -g $(tty)
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
[alessandro@server]$
  Se a te continua a non funzionare, controlla le impostazioni del client, o
se usi un altro clienti, prova ad usare minicom.



Gentilissimo Alessandro,
Ti ringrazio per la completissima risposta, penso di aver trovato il 
problema, dato dalla particolare architettura della macchina su cui gira 
debian, che non ï¿œ un pc ma una piccola scheda basata su un intel ARM. 
Tale scheda ha una seriale che non ï¿œ basata su un vero 16550, ma ï¿œ 
gestita da un UART interna alla CPU che evidentemente non ï¿œ molto 
configurabile a parte la velocitï¿œ.
Non ha VGA, normalmente si accede su eth con ssh, ma essendo sempre 
accesa, farebbe comodo un term dedicato per avere sott'occhio la situazione.
Chiaramente connettendo un pc con minicom, la porta con impostazioni di 
default funziona egregiamente, ma sul term a 7 bit si vedono bene solo i 
numeri e alcuni caratteri, perchï¿œ l'informazione dell'ottavo bit viene 
ignorata, generando caratteri errati.
Vorrï¿œ dire che butterï¿œ via quel cosino tipo videotel che ci ostinano a 
farci usare come term e passeremo a qualcosa di leggermente piï¿œ recente, 
un vecchio portatile p166 che nelle prove sta andando ottimamente a 
38400 bps :)
Saluti,
Marco